一、内存中字的存储:
字在内存中存储时,需要用两个连续地址的内存单元来存放,字的低位字节存放在低地址单元,字的高位字节存放在高地址单元中
在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器对应,低地址单元和低8位寄存器对应
二、DS和[address]:
mov指令的三种传送功能:
①、将数据直接送入寄存器
mov ax,f3
②、将一个寄存器的内容送入另一个寄存器中
mov ax,bx
③、将一个内存单元中的内容送入一个寄存器
mov ax,[0]
注:8086CPU不支持将数据直接送入段寄存器的操作,只能将数据送入通用寄存器,再将通用寄存器的数据送入段寄存器。但通用寄存器可以
三、mov、add、sub、jmp指令:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
add 寄存器,数据
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器
sub 寄存器,数据
sub 寄存器,寄存器
sub 寄存器,内存单元
sub 内存单元,寄存器
mov、add、sub是具有两个操作对象的指令,jmp具有一个操作对象的指令
四、数据段:
在8086CPU中,根据需求将一组内存单元用来存放数据,此组内存单元就是数据段,同理,还有代码段
五、栈:
1、说明:
①、栈是一种具有特殊的访问方式的寄存空间,特殊之处:后进入这个空间的数据,先出去
②、栈的两种基本操作:入栈和出栈
入栈:将一个新的元素放到栈顶
出栈:从栈顶取出一个元素
2、8086CPU中,入栈、出栈指令:
PUSH(入栈)
POP(出栈)
例:push ax:将寄存器ax中的数据送入栈
pop ax:从栈顶取出数据送入ax
注:8086CPU的入栈和出栈操作都是以字为单位进行的
3、8086CPU判断栈顶单元:
在CPU的内部,段寄存器SS,用于存放栈顶的段地址,寄存器SP,用于存放栈顶的偏移地址,任意时刻,SS、SP指向栈顶元素
4、执行push和pop时的详细过程:
①、执行push时的过程:push ax
a、SP = SP - 2
b、将ax中的内容送入SS、SP指向的内存单元处,SS、SP此时指向新栈顶
②、执行pop时的过程:pop ax
a、将SS、SP指向的内存单元处的数据送入ax中
b、SP = SP + 2,SS、SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
5、栈顶越界问题:
说明:
当栈满的时候再使用push指令入栈,当栈空的时候再使用pop指令,都将发生栈顶越界问题。我们知道将一段空间安排为栈,那么在栈空间之外的空间很可能存放别的数据代码,那么这些数据代码将可能被覆盖/送出。因此,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的越界。
六、push、pop指令:
push和pop指令时可以在寄存器和内存之间传送数据的
1、push指令:
push 寄存器:将一个寄存器中的数据入栈
2、pop指令:
pop 寄存器:出栈,将一个寄存器接手出栈的数据
注:数据的段地址从ds中获得,代码的段地址从cs中获得,栈的段地址从ss中获得
七、栈段:
我们可以将长度为N(N≤64K)的一组连续起始地址为16的倍数的内存单元,当作栈来用,从而定义了一个栈段