内存中字的存储

 

字单元,即存放一个字型数据(16)的内存单元.

一个字在内存中存放的时候占用2个地址连续的内存单元,字的低位字节存放在低地址单元,高位字节存放在高地址单元。

字所存放的低地址内存单元的地址作为字的起始地址,我们将起始地址为N 的字单元简称为N地址字单元.

 

任何两个地址连续的内存单元,N号单元和N1号单元,可以将他们看成两个内存单元,也可以看成一个地址为N的字单元.

 

DS[address]

 

从内存单元到寄存器的格式是: “mov 寄存器名,内存单元地址”;

从寄存器到内存单元则是: “mov 内存单元地址,寄存器名”.

mov指令的形式还有:

mov 寄存器,数据mov 寄存器,寄存器

mov 段寄存器,寄存器mov 寄存器,段寄存器

mov 内存单元,段寄存器mov 段寄存器,内存单元

add,sub指令基本和mov相同

CPU提供的栈机制

 

8086CPU,有两个寄存器,段寄存器ss和寄存器sp,栈顶的段地址放在ss,偏移地址存放在sp.

任意时刻,ss:sp指向栈顶元素.

 

入栈时,栈顶从高地址向低地址方向增长.

栈空,ss:sp指向栈空间最高地址单元的下一个单元.

 

 

push操作——单操作数指令

格式:push 源操作数

功能:将源操作数内容压栈

操作过程:

sp=sp-2ss:sp指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶;

将源操作数内容送入ss:sp指向的内存单元处,ss:sp此时指向新栈顶.

 

 

 

 

 

pop操作——单操作数指令

格式:pop 目的操作数

功能:将栈顶内容出栈,送入目的操作数

 

操作过程:

ss:sp指向的内存单元的数据送入目的操作;

sp=sp+2ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元作为新的栈顶.

 

 

弹栈后,数据依然存在,但已不在栈中,可写入新的数据进行覆盖.

 

栈段继承了段的属性:

长度小于等于64K

地址连续,起始地址为16的倍数

 

栈满的时候使用push,栈空的时候使用pop,都将发生栈顶超界的问题

CPU对于栈顶超界不会检查

打赏