内存中字的存储
字单元,即存放一个字形数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节,取低地址内存单元地址作为字数据地址。我们将起始地址为N的字单元简称为N地址字单元。
DS和[address]
“[...]”表示一个内存单元,“[...]”中的0表示内存单元的偏移地址。8086CPU自动取ds中的数据为内存单元的段地址。8086CPU不支持将数据直接送入段寄存器的操作,只能用一个寄存器来进行中转,即先将1000H送入一个一般的寄存器,如bx,再将bx中的内容送入ds。
mov、add、sub指令
mov指令可以有以下几种形式:
add指令可以有以下几种形式:
add、sub指令的操作数不能是段寄存器
sub指令可以有以下几种形式:
常数作第二个操作数时,如果是最高位是16进制的a~f前面要加0,如mov ax,0a400h
在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应
CPU提供的栈机制
后进先出的操作规则
push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是以字为单位进行的。
8086CPU中,有两寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。
出栈后,SS:SP指向新的栈顶,但pop操作前的栈顶元素依然存在,但是它以不在栈中,当再次执行push等入栈指令后,它将被新的数据覆盖。
Push、Pop指令
执行push时,CPU的两步操作是:先改变SP,后向SS:SP处传送。执行pop时,CPU的两步操作是:先读取SS:SP处的数据,后改变SP。
操作对象不能是常数
栈顶的变化范围最大为0~FFFFH
在D、E、U、A命令中可使用段寄存器,如-d cs:0(查看当前代码段中的指令代码)-d ss:0(查看当前栈段中的内容)
debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行