汇编语言之第三章寄存器(内存访问)
3.1 内存中字的存储
cpu中用16位寄存器储存一个字,高八位储存高位字节,低八位储存低位字节。字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。我们将起始地址为N的字单元简称N地址字单元。
3.2DS和address
地址由段地址和偏移地址构成。DS寄存器,存放要访问数据的段地址。【....】表示内存单元的偏移地址。8086CPU将自动取出DS的数据作为内存单元的段地址。
注意,因为DS是一个短寄存器,所以不能把数据直接送入DS中,可以通过一个一般的寄存器进行中转一下。
3.3字的传送
一个字为16位数据,在mov指令中给出16位储存器就可以进行16位数据的传送。用mov要注意,两个操作数长度要一致,内存单元间不能传送,不能使用mov修改cs,ip的值。
3.4mov,add,sub指令
mov,sub,add指令都有两个操作对象,
指令 寄存器 数据
指令 寄存器 寄存器
指令 寄存器 内存单元
指令 内存单元 寄存器
指令 段寄存器 寄存器
jmp是具有一个操作对象的指令
3.5数据段
将一组长度为N<=64kb,地址连续,起始地址为16的倍数的内存单元当做专门存储数据的内存空间,从而定义一个数据段。
3.6栈
栈:进栈,出栈。后进先出
3.7CPU提供的栈机制
8086CPU的入栈出栈已字为单位。段寄存器SS,寄存器SP,任意时刻SS:SP指向栈顶元素。push 进栈指令,pop出栈指令
3.8栈顶超界的问题
8086CPU不保证对栈的操作不会超栈。当栈满时使用push 指令入栈,当栈空时使用pop指令出栈,都会栈顶出栈。
出栈是危险的,会修改其他数据,发生意外
3.9push,pop指令
后可跟段寄存器,寄存器,内存单元
3.10栈段
将一组长度为N<=64kb,地址连续,起始地址为16的倍数的内存单元当做专门存储数据的内存空间,当做一个栈空间,从而定义一个栈段,最大容量为64kB。
数据段,将段地址放在DS寄存器
代码段,将段地址放在CS寄存器
栈段,将段地址放在SS寄存器