技术0
经验11194
魅力12
人气145
分享528
原创1
注册时间2023-2-27
最后登录2026-2-19
阅读权限150
在线时间497 小时
主题130
回帖644

网站编辑
心如止水,笑对人生!
 
- 积分
- 11864
- 人气
- 145
- 分享
- 528
 
|
前言
很久没来发过教程了。。。
说实话我最近两年感觉论坛一篇正儿八经的技术文章都没有,毕竟那白嫖个存储桶都可以建议扔技术区了。。。于是我这个老登编辑回来发些文章吧。。。也是不想看到自己计算机起步的地方就这么凉下去了。。。
YFSafe、hjz713你们也都来多发点呀!
OK,先自我介绍一下。我,faryou,一个还没有脱离低级趣味(指汇编这种“低级语言”)的物竞生,来发一些非常基础的8086汇编教程。这个系列是我在看了王爽老师的《汇编语言》之后,根据自己的理解,用我觉得更适合有C语言基础但从没有接触过汇编的人的方式来讲解汇编语言。教程中有些地方需要专业术语的直接用了原书原文,不再一一说明~
本文是系列第一篇文章,介绍8086CPU的工作原理。下面开始~
CS、IP寄存器介绍
要理解CS、IP(段地址、偏移地址),可以通过我下面这个形象的比方:
假设A和B只有两张能容纳三个数字的纸条,而他们需要进行四位数的交流。正常情况下,三个数字的纸条无法容纳四位数,但此时因为有两张纸条,所以A可以预先和B商量好暗号,从而达到通信目的。比如说,A要告诉B8086这个四位数,那么A可以先在一张纸条上写上086,另一张纸条上写800。由于B与A有约定,所以B可以通过800(段地址)*10+086(偏移地址)得到8086(物理地址)这一数据。
CS、IP就是这样两张纸条。在8086CPU中,这一约定可表示为物理地址=段地址*16+偏移地址。
8086CPU工作原理
前面我们了解了CS、IP,下面我带领大家来学习一下8086CPU的工作原理——
(以下过程的前提:CS中的内容为2000H,IP中的内容为0000H)
首先,在CS、IP发生改变后,CPU将CS、IP送入地址加法器,地址加法器利用物理地址=段地址*16+偏移地址求出物理地址。完成计算后,得到的结果数(此处为20000H)送入输入输出控制电路。
输入输出控制电路将得到的数值送入地址总线。
内存在得到这个物理地址后,将从内存20000H单元开始存放的机器指令(此处假设为B8 23 01,转化为汇编指令即mov ax,0123H)通过数据总线送回输入输出控制电路。
输入输出控制电路将命令送入指令缓冲器。此时指令缓冲器会对IP的值进行改变(IP中的数=IP中的原数+指令字节数,例如此处命令B8 23 01长3个字节,因此IP加上3改为0003H)。
IP完成变更后,执行控制器开始执行命令(此处命令B2 23 01将寄存器ax中的值改为0123H)。
完成以上操作后,CPU开始根据现有的CS、IP开始执行下一条指令。
由此可见,CS、IP指示CPU工作的地址,因此,我们需要熟练运用这一点。
最后补一个小知识:在8086CPU刚开始工作时,CS:IP=FFFFH:0000H,FFFF0H是CPU开机后执行的第一条指令。
结语
本文一步步讲解了8086CPU的基本工作过程,真正的将这一原理投入应用,才是学习它的最终目的。我是faryou,再见!
|
评分
-
查看全部评分
|