学习汇编语言的第二天

一.寄存器

上节已经简要说明了寄存器这一概念,本次就好好聊聊。

由于寄存器在CPU内部,依据CPU不同的指令完成不同的操作,有AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,DS,ES,PSW,SSl类型。本次就重点介绍CS,IP。

对于CS,IP的使用,就要谈到上节 所说的地址,CS,IP与地址的指向密切相关,就像c语言所学的指针一样(个人认为)。那么接下来就要谈到如何寻找地址,就像在茫茫人海中,一眼就能看到你。

二.物理地址

CPU通过地址总线向寄存器进行交换,第一步就是要找到该存储单元的物理地址。物理地址=段地址*16+偏移地址(很有学问)

以8086CPU为例,(1)CPU中相关部件(CS,IP)提供两个16位(一般用16进制表示)的地址,一个代表段地址,一个代表偏移地址。

(2)将段地址和偏移地址送到一个叫做地址加法器的部件,通过地址加法器将两个16位的地址转换为20位

(3)将转换后的地址通过内部总线传到输入输出的控制电路,该电路将地址打包到地址总线,后传送到存储器

那么什么是段地址,什么叫偏移地址。这里我打个比方,比如我想找到熊出没中的一个光头强砍树的情节,我首先要知道这是第几集,那么这就是段地址,在这一集的基础上滑动进度条,找到这一唯一情节,那么这滑动的进度条就是偏移地址了。这个解释清楚后,那么你们肯定还有疑惑,为什么段地址要*16,其实这与接下来将16位地址转换为20位有关。

段地址*16就表示左移动四位(就二进制而言)我们知道,8086CPU中所有寄存器都是16位,也就是16bit,(1b=8bit),也就是两个字节。类比于十进制一个数*10的n次方,就是该数向左移动n位。16是2的四次方,所以向左移动四位。那么这个时候就会疑惑,好端端的干嘛要移动?

书上给了个很好的例子,假如我要表示出2826这个数据,可是我只允许一次性输入三个数据,那么第一次我输入200,第二次我输入826,因为以十进制举例,我的段地址就要*10,那么2826=200*10+826,透过现象看本质,我们知道,8086CPU内存地址总线宽度为20位(以上用二进制表示位数冗余,我们接下来以16进制表示)通俗来说,8086CPU内存物理地址由五位16进制数表示,而CS,IP只能表示四位16进制数,所以要偏移一位保证位数相同。

三.CS,IP的使用

可以说,cs,ip这俩个工具与寻址直接相关,举个例子:

cs:2000,ip:0000,首先送入地址加法器,套用公式,就得到内存地址20000,接着到输入输出控制电路,送上地址总线,然后被指定的20000地址中的指令被送入指令缓冲器,读取一套指令后依据字节长度,IP自动增加,比如读取B8 23 01,三个字节,之后IP就变为0003,之后操作重复。

之后还有实验操作课,我先把把关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值