第2章 寄存器
CPU由运算器、控制器、寄存器等器件构成,器件靠内部总线连,与之前总线(外)不同
寄存器程序员可以用指令读写
8086CPU的14个寄存器
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
通用寄存器:
用来存放一般性数据 AX BX CX DX
16位寄存器可以拆成两个8位寄存器使用 AH AL,高8位和低8位

两字节byte构成一个字word,一个字节8bit放在8位寄存器
汇编指令
mov ax,18
mov ah,78
add ax,8
mov ax,bx
add ax,bx
...
16位寄存器只能存放4位十六进制数据,1044CH最高位的1就不能保存再ax中004CH
独立使用AL这个寄存器如果进位是不会储存在AH中
数据传送和运算时 指令的两个操作对象的位数应当一致
物理地址
所有内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址
CPU向地址总线发出物理地址前,要在内部形成这个物理地址
16位的CPU能够一次性处理、传输、暂时存储16位地址
8086CPU有20位地址总线,内部用两个16位地址合成一个20位 的物理地址

物理地址 = 段地址 x 16(基础地址) + 偏移地址
段地址 x 16 常用说法左移4位(二进制位)相当于16进制左移1位
几进制左移1位相当于乘几

因为内部结构是这样,为了达到20位寻址能力,利用两个16位地址可以达到目的
这个比喻十分形象

接着段地址,内存没有分段,段的划分来自cpu
段地址 x 16是16的倍数,所以一个段的起始地址也是16的倍数;偏移地址位16位,16位地址的寻址能力位64kb,所以一个段的长度最大为64kb
CPU可以用不同的段地址和偏移地址形成同一个物理地址
8086的4个段寄存器
CS、DS、SS、ES。当访问内存由这四个段寄存器提供内存单元段地址
CS为代码段寄存器 IP为指令指针寄存器
任意时刻,设CS内容为M,IP中内容为N,8086CPU从内存M x 16 + N单元开始,读取指令并执行
读取一条指令后,IP中的值自动增加(指令长度),以使CPU可以读取下一条指令
CPU将CS:IP指向的内存地址单元内容看作指令
同时修改CS、IP的内容可以用 jmp 段地址 :偏移地址
仅修改IP可用 jmp 某一合法寄存器(用寄存器中的值修改IP)
8086机编程时,可以根据需要,将一组内存单元定义为一个段。
将长度为N<=64的代码,存在一组地址连续、起始地址为16的倍数的内存单元作代码段
用CS:IP指向的内容就能让代码段的内容执行

浙公网安备 33010602011771号