教材:《汇编语言-第四版》王爽老师
第三章
1、CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。
2、字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。如,2、3两个内存单元,被称为2地址字单元。
3、8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。
mov bx,1000H
mov ds,bx
mov al,[0] ;[...] 表示内存单元的偏移地址
上述指令是将 10000H 中的数据读到 al中
8086CPU 自动取ds中的数据位内存单元的段地址
8086CPU 并不支持将数据直接送入段寄存器的操作
4、字的传送
- mov bx,2000H
mov ds,bx
mov al,[0] ; 传送一字节的数据,将20000H处的数据传送到 al
- mov bx,2000H
mov ds,bx
mov ax,[0] ; 传送一字的数据,将20001H 和 20000H 处的数据传送到 ax
5、mov、add、sub
-mov- <数据只能和寄存器进行交互,且不能与段寄存器进行交互>
mov 寄存器, 数据
mov 寄存器, 寄存器
mov 寄存器, 内存单元
mov 内存单元,寄存器
mov 段寄存器, 寄存器
mov 寄存器, 段寄存器
mov 内存单元, 段寄存器
mov 段寄存器, 内存单元
-add- <段寄存器不参加 add 和 sub 运算,内存单元不能和内存单元进行 add 和 sub 运算>
add 寄存器, 数据
add 寄存器, 寄存器
add 寄存器, 内存单元
add 内存单元, 寄存器
-sub-
sub 寄存器, 数据
sub 寄存器, 寄存器
sub 寄存器, 内存单元
sub 内存单元, 寄存器
6、8086CPU提供的栈机制
-1- 8086CPU的入栈和出栈操作都是以字位单位进行的
-2- push ax 将ax寄存器的值压入栈中
> SP = SP-2,SS:SP 指向当前栈顶前面的单元,以当前栈顶前面的单元位新的栈顶
> 将 ax中的内容送入 SS:SP指向的内存单元处,SS:SP此时指向新栈顶
-3- pop ax 将栈顶的值弹出到ax寄存器
> 将 SS:SP 指向的内存单元处的数据送入ax中
> SP = SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
-4- 若将 10000H ~ 1000FH 这段空间当作栈,初始状态栈时空的,此时,SS=1000H,SP=?
> 此时的栈顶应该为 0010H,即此时的 SS=1000H,而 SP= 000FH+0001H =0010H
-5- 当pop操作后,SS:(SP+2)处的值还存在,只是不在栈中了。当再次执行push时,会将里面的数据覆盖。
7、8086CPU不保证我们对栈的操作不会越界。8086CPU只记录栈顶,栈空间的大小需要我们自己管理。
9、push、pop
-1-
push 寄存器 ;将一个寄存器中的数据入栈
pop 寄存器 ;出栈,用一个寄存器接收出栈的数据
-2-
push 段寄存器 ;将一个段寄存器中的数据入栈
pop 段寄存器 ;出栈,用一个段寄存器接收出栈的数据
-3-
push 内存单元 ;将一个内存单元中的数据入栈
pop 内存单元 ;出栈,用一个内存单元接收出栈的数据