3.1 内存中字的存储
3.2 DS 和[address]
- 内存地址由段地址和偏移地址组成
- mov指令
- 可完成两种传送:(1)将数据直接送入寄存器; (2)将一个寄存器中的内容送入另一个寄存器。
mov al,[0]
解析
- […]”表示一个内存单元,”[…]”中的0表示内存单元的偏移地址,指令执行时,8086CPU自动取ds 中的数据为内存单元的段地址。
3.3 字的传送
- 高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应
3.4 mov 、add 、sub 指令
- MOV指令的各种形式
- 注:还包括
mov 寄存器,段寄存器
;mov 内存单元,寄存器
;mov 段寄存器,内存单元
- add和sub指令
3.5 数据段
- 对于8086PC机,在编程时可以将长度为N(N小于等于64KB)的一组代码存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放数据的,从而定义了一个数据段。
- 可以通过在DS中存放数据段的段地址,用相关的指令访问数据段中的具体单元来访问数据段中的数据。
- 定义某个内存地址单元为数据段
3.6 栈
- 基本的操作:入栈和出栈
- 原则:后进先出
3.7 CPU提供的栈机制
- 在基于8086CPU 编程的时候,可以将一段内存当作栈来使用。
- 指令
- push(入栈):
- pop(出栈):
- 8086CPU的入栈和出栈操作都是以字为单位进行的。
- 将10000H–1000FH 这段内存当作栈来使用。
- 8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS 中, 偏移地址存放在SP中,任意时刻, SS:SP指向栈顶元素
- 栈顶指针的变化
- 首先第一步SP指针为SP=SP-2;第二步为将寄存器中的内容送入SS:SP所指向的内存单元处,SS:SP此时指向新栈顶。
- 8086CPU 中,入栈时,栈顶从高地址向低地址方向增长。
- 问题:如果我们将10000H ~ 1000FH 这段空间当作栈,初始状态栈是空的,此时,SS=1000H,
SP=?
解答:
:任意时刻,SS:SP 指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2, 栈最底部字单元的地址为1000:000E, 所以栈空时,SP=0010H 。
- pop指令执行过程
3.8 栈顶超界的问题
3.9 push 、pop 指令