第三章 寄存器(内存访问)
1 内存中字的存储
1个字=2个字节,如从0开始存放20000(4E20H),20、4E分别表示1个字节,内存中字的存储如下图所示:
任何两个地址连续的内存单元(0、1、2......),N号单元和N+1号单元,可以看成两个内存单元。比如说上图中的0内存单元(字节单元),存放的是字节型数据,就是20H(十进制的32);0地址字单元,存放字型数据,就是4E20H。
任何两个地址连续的内存单元,N号单元和N+1号单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。比如上图中1字单元中,所代表的字是124EH,高位字节单元是2内存单元——12H,低位字节单元是1内存单元——4EH。
2 DS和[address]
CPU读取内存单元时,必须先读取到这个内存单元的地址。8086CPU中,内存地址是由段地址和偏移地址组成,8086CPU中有一个DS寄存器,用来存放要访问的数据的段地址。
例子:读取10000H单元的内容,可以用这样的一段代码来实现:
mov bx,1000H
mov ds,bx
mov al,[0]
使用mov指令,可以完成两种传送:将数据直接送入寄存器;将一个寄存器中的内容送入另一个寄存器。mov指令还能够将一个内存单元中的内容送入一个寄存器。那么mov al,[0] ,就是将内存单元中,偏移地址为0的内存单元中的内容放入到ax通用寄存器中的低八位al(8位)中。一个段地址对应一个偏移地址,上面的代码中,段地址为1000,对应的偏移地址为0。
3 字的传送
8086CPU是16位结构,有16根数据线,所以一次性可以传送16位的数据,也就是一次性传送1个字(1个字=2个字节=16位)。
如下代码:
mov bx,1000H
mov ds,bx
mov ax,[0] ---->这里是将1000:0处的字型数据(1个字,16位)送入到ax(16位)当中
mov [0],cx ---->这里是将cx(16位)中的数据放入到1000:0(16位)内存单元中。
4 mov,add,sub指令
mov指令的几种形式
mov 寄存器,数据 如mov ax,2C3B
mov 寄存器,寄存器 如mov bx,ax
mov 寄存器,内存单元 如mov ax,[0]
mov 内存单元,寄存器 如mov [0],bx
mov 段寄存器,寄存器 如mov ds,ax
add 和 sub 指令同 mov 一样,都有两个操作对象。
add 寄存器, 数据 如:add ax, 8
add 寄存器, 寄存器 如:add bx, ax
add 寄存器, 内存单元 如:add ax, [0]
add 内存单元, 寄存器 如:add [0], ax
sub 寄存器, 数据 如:sub ax, 8
sub 寄存器, 寄存器 如:sub bx, ax
sub 寄存器, 内存单元 如:sub ax, [0]
sub 内存单元, 寄存器 如:sub [0], ax
5 数据
8086PC机,我们可以根据需要将一组内存单元定义为一个段。我们可以将一组长度为N(N<=64K)、地址连续、起始地址为16的倍数的内存单元,当作专门存储数据的内存空间,从而定义了一个数据段。
如何访问数据段中的数据呢?将一段内存当作数据段,是我们在编程时的一种安排,我们可以在具体操作的时候,用 ds 存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。
6 栈
栈顶的元素总是最后入栈,需要出栈时,又最先从栈中取出。
7 CPU提供的栈机制
现今的CPU中都有栈的设计。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。
段寄存器SS 存放栈顶的段地址,寄存器SP 存放栈顶的偏移地址。任意时刻,SS:SP 指向栈顶元素。
8 栈顶超界的问题
栈顶越界是危险的:因为我们既然将一段空间安排为栈,那么在栈空间之外的空间里很可能存放了具有其它用途的数据、代码等,这些数据、代码可能是我们自己的程序中的,也可能是别的程序中的。但是由于我们在入栈出栈时的不小心,而将这些数据、代码意外地改写,将会引发一连串的错误。
我们在编程的时候要自己操心栈顶越界问题,要根据可能用到的最大栈空间来安排栈的大小,防止入栈的数据太多而导致的越界。执行出栈操作的时候也要注意,以防止栈空的时候继续出栈而导致的越界。
9 push,pop指令
push和pop指令是可以在寄存器和内存之间传送数据的。
push和pop指令的格式(1)
push 寄存器 将一个寄存器中的数据入栈
pop 寄存器 出栈,用一个寄存器接收出栈的数据
push和pop指令的格式(2)
push 段寄存器 将一个段寄存器中的数据入栈
pop 段寄存器 出栈,用一个段寄存器接收出栈的数据
原文地址:https://www.cnblogs.com/sqy1999/p/9813631.html