汇编语言之第三章寄存器(内存访问)

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寄存器

原文地址:https://www.cnblogs.com/bowentianxia/p/9841700.html