[汇编语言]-第三章寄存器(内存访问)
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的指向.