2.汇编语言寄存器和内存访问
一:什么是寄存器
在CPU中运算器进行信息处理,寄存器进行信息存储,控制器控制各种器件进行工作,内部总线连接各种器件,在它们之间进行数据的传送。
寄存器是CPU内部的信息存储单元。寄存器是我们可以用指令读写的部件,我们可以通过改变各种寄存器的内容来实现对CPU的控制。
二:通用寄存器
1.示例CPU为16位CPU,每一位可以保存一个二进制的值即存储一个16位的数据。该数据最大值为全部取1的情况=2^16-1,也就是FFFFH。上图演示了寄存器存储数据的形式,18D和20000D(十进制)转为二进制存在寄存器中。
2.关于字的内容见上图
三:mov和add指令
1.十六进制的加法,逢十六进一
举个例子,4E20H+1406H,E在16进制中表示十进制的14,14+4为18超过16,所以首位进1(4+1+1=6),第二位十进制的18转为十六进制的12取个位数2(或者用十进制的18/16取余数获得),三四位没有超过正常计算(像上图中6226H+2000H没有哪个数超过16所以按数学上相加即可结果为8226H)
注意像上图中8226H+8226H为1044CH,超过四位时将首位去掉为044CH
2.上图中有高低位之分,AH分为AH AL,BH分为BH BL,在进行运算时将对应的进行运算。如第三条将BL加到AL上,BL和AL都是低八位,所以add al bl为BX的低位26加上AX的低位1A然后结果放在al中为0040H(高位没变)。第四条add ah bl(26)将BL第八位加到AH高八位上(00),结果为2640H。注意最后溢出的也要消掉首项(如最后的值为00158H,要将1消掉为0058H)
四:物理地址
1.物理地址:每一个内存单元在这个空间中都有唯一的地址,我们称这个唯一的地址为物理地址
如上图所示,8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力。8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB。那如何解决这一问题呢。
2.8086CPU给出物理地址的方法
物理地址=段地址*16+偏移地址
3.解释 16位通过左移四位即可得到20位,乘16就相当于二进制左移四位。如上图所示,上图只左移了一位因为是该数为十六进制(十六进制左移一位相当于二进制左移四位),1230 和00C8错开一位相加即可得到其物理地址123C8
五:用分段的方式管理内存
1.内存本身并没有分段,段的划分来源于CPU
如上图,基础地址就是起始的地址,段地址取其前四位即可,而大小通过相减+1转为十六进制后所得。如第一个1000FF-10000=FF,FF+1(15*16+15后加1)就是十进制的256,256转为十六进制为100H,所以大小为100H。第二个7F+1为十进制128转为十六进制为80H,所以大小为80H。
注意:一个段的起始地址一定是16的倍数;偏移地址为16位,变化范围为0-FFFFH,所以一个段的长度最大为64KB。
2.同一物理地址可以由不同的段地址和偏移地址形成,所以我们通常采用类似2000:1F60的说法来表明指定某单元
3.用专门的寄存器存放段地址,如上图。