10.14-汇编

Posted on Oct 14, 2020
high enough

今天主要看的是第一章和2.1-2.10,第一章是对硬件的一些介绍,总体上没什么可说的,第二章讲的是寄存器,比较值得记录的是物理地址=段地址*16+偏移地址和CS代码段寄存器,和IP指令指针寄存器。

物理地址=段地址*16+偏移地址

8086的地址总线宽度为20,本身却是16位处理器,曾经我不太理解这是怎么做到的,原来是通过段地址加偏移地址做到的,即

物理地址=段地址*16+偏移地址

这似乎是一种无奈之举,因为需要较大的内存,但是同时处理器的位数又不够,只好把原来一次寻址可以完成的操作变成两次。这种方法的本质是间接参照,书上的纸条例子讲的很清楚:即一张纸条如果只能写三位数,想表达一个四位数(比如是2599),那么一张写200,另一张写599,算法就是第一张*10+第二张,牺牲次数换取了大小。8086的寻址方式就是这样的一种无奈之举。

段地址*16很好实现,只要左移四位就行了。

需要注意的是,分段只是寻址时的分段,内存并没有被实际分段。

每一个段的大小为2^16字节,即64KB


CS IP

这是两种最重要的寄存器,可以说没有他们,CPU就没办法工作,因为指令码和数据是在他们的指导下读取的。

IP被称为指令指针寄存器是很形象的,每一次完成指令的读取,IP都会自加指令的数据数和指令数的和,以指向下一个指令(在内存中的位置)。而且,更重要的是,IP所指向的内存中的值,总是指令码,借此CPU可以分辨何为指令码,何为数据

CS被称为代码段寄存器,我的理解是CS所指向的内存段里面就是将要被执行的代码。

CS和IP要通过地址加法器来计算出物理地址。

每次CPU复位时,CS被初始化为FFFFH,IP被初始化为0000H,即计算机执行的第一条指令在FFFF0H中。