[汇编语言]-第三章寄存器(内存访问)

1- 字单元:即存放一个字符数据(16位)的内存单元,由两个地址连续的内存单元组成,高地址单元中存放字型数据的高位字节,低地址单元中存放字型数据的低位字节.我们将起始地址为N的字单元,简称N地址字单元.比如一个字单元由2,3两个内存单元组成,则这个字单元的起始地址为2,我们可以说这是2地址字单元.

2- 地址单元中存放的字节型数据 地址单元占1字节

  地址字单元中存放的字型数据 地址字单元占2字节

3- DS寄存器,通常来存放访问数据的段地址

 mov bx,1000H

 mov bs, bx

 mov al,[0] //[...]内存单元的偏移地址,1000H段地址

 将10000H(1000:0)中得数据,读入al中.

4- 8086CPU 不支持将数据直接送入到段寄存器中(属于8086CPU硬件设计问题).如 mov ds,1000H (错) 需要转 mov bx,1000H mov ds,bx

5- 将al中得数据送入到内存单元10000H中

 mov bx,1000H

 mov ds,bx

 mov [0],al

6- 内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器,低地址单元和低8位寄存器相对应.

7- 栈:后进入先出 Last in First out

8- SS:SP指向栈顶元素

9- push ax (1) SP = SP -2 (2) ax中得内容,送入ss:sp指向的内存单元 (栈顶从高地址像低地址增长)

    pop ax (1) ss:sp指向的内存单元的数据放入ax (2) SP = SP +2

10- 如果(10000H-10000FH)为空栈, ss:sp指向10010H 为最底部字单元的地址(E)+2,或者为最底部内存单元(F)+1 

11- CPU没有设置栈顶越界的问题,要自己处理

12- 在10000H写入字型数据2266H

  方法一:

  mov ax,1000H

  mov ds,ax

  mov ax,2266H

  mov [0],ax

  方法二:

  mov ax,1000H

  mov ss,ax

  mov sp,2

  mov ax,2266H

  push ax

  push,pop等栈操作指令,修改的只是SP,也就是说,栈顶的变化范围最大为:0~FFFFH 

13- 任何时候SS:SP都指向栈顶元素

14- 内存单元存放数据,定义为"数据段" 

  内存单元存放代码,定义为"代码段" 

  内存单元存放栈,定义为"栈段" 

15- 一段内存既可以是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么都不是.关键在于CPU中寄存器的设置,即:CP,IP,SS,SP,DS的指向.

原文地址:https://www.cnblogs.com/galoishelley/p/3528065.html