一个8086CPU寄存器均是16位,而数据类型有以下两种
1Byte = 8bite (字节型数据)
1word = 2Byte = 16bit (字型数据)
一、DS寄存器
DS数据段寄存器:存放要访问的数据段地址
mov bx,2000
mov ds,bx //设置DS段地址寄存器的值为2000
mov al,[0] //将2000:0000地址单元的字节型数据读取到al(8位)寄存器中
mov cx,[1] //将2000: 0001地址单元的字形数据读取到cx(16位)寄存器中
二、CS(代码段寄存器)与ip(指令指针寄存器)
cs(Code Segement)用于存放指令所在的段地址
ip(Instruction Pointer)寄存器是用于存放指令所在地址的偏移地址
注意:因为8086CPU是16位,但是物理地址是20位的,它的内存寄存器只能表现16位的地址,因此使用ip寄存器来存放偏移地址。
CPU执行指令的步骤:
(1) 将CS、IP的内容送入地址加法器(段地址*16 + 偏移地址)合成物理地址
(2) 地址加法器将物理地址送入输入输出控制电路
(3) 输入输出控制电路将物理地址送上地址总线
(4) 然后CPU从物理地址指向的内存单元读取机器指令,并将机器指令通过数据总线送入CPU的输入输出控制电路
(5) 输入输出控制电路将读取的指令送入指令缓冲器,同时IP的内容更新为原内容加指令长度。
(6) 然后,执行控制器执行机器指令,并将执行后的内容送入相应的寄存器。
三、ss(栈寄存器)与sp(栈指针寄存器)
ss(Stack Segment):用于存放栈顶的段地址
sp(Stack Pointer):用于栈顶的偏移地址
//把bx入栈到1000:0 – 1000:f这段内存
mov ax,1000
mov ss,ax //段地址
mov sp,0 //偏移地址
mov bx,1234
push bx //入栈
pop bx //出栈
参考链接: https://blog.youkuaiyun.com/Apollon_krj/article/details/70550667?fromshare=blogdetail