3.1 内存中字的存储
在0地址处开始存放20000(4E20H):
注意:0号单元是低地址单元,1号单元是高地址单元。
任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2 DS和[address]
在8086PC中,内存地址由段地址和偏移地址组成,8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。
执行指令时,8086CPU自动取DS中的数据为内存单元的段地址。
3.3 字的传送
3.4 mov、add、sub指令
已学mov指令的几种形式:
1.mov 寄存器,数据
2.mov 寄存器,寄存器
3.mov 寄存器,内存单元
4.mov 内存单元,寄存器
5.mov 段寄存器,寄存器
mov 寄存器,段寄存器 与 mov 内存单元,段寄存器 是正确的指令。
3.5 数据段
我们可以将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而定义了一个数据段。
3.6 栈
栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。
栈的操作规则:LIFO(Last In First Out,后进先出)。
任意时刻,SS:SP指向栈顶元素。
3.7 CPU提供的栈机制
我们在基于8086CPU编程的时候,可以将一段内存当作栈来使用。
8086CPU的入栈和出栈操作都是以字为单位进行的。
push ax
1.SP=SP–2;
2.将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。
pop ax
1.将SS:SP指向的内存单元处的数据送入ax中;
2.SP = SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。
3.8 栈顶超界的问题
8086CPU不保证对栈的操作不会超界。
3.9 push、pop指令
push和pop指令是可以在寄存器和内存之间传送数据的。
栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。
3.10 栈段
对于8086PC机,在编程时,我们可以根据需要 ,将一组内存单元定义为一个段。
一个栈段的容量最大为64KB。
参考资料:《小甲鱼汇编零基础入门》
《汇编语言》第三版