第三章 -寄存器

3.6栈
栈是一种具有特殊的访问方式的存储空间,是一种LIFO
3.7CPU提供的栈机制
指令:PUSH ax–入栈
POP ax –出栈
以字为单位
段寄存器SS和寄存器SP
任意时刻SS:SP指向栈顶元素
8086CPU中,入栈时,栈顶从高地址向低地址方向增长。
如果是一个空栈,SS:SP将指向栈空间最高地址单元的下一个单元
注意:出栈后,SS:SP将指向新的栈顶地址,POP操作前的栈顶元素依然存在,只不过是出栈了。再次写入PUSH命令,将会覆盖
3.8栈顶超界的问题
栈顶超出栈空间,此后如果在执行入栈命令,会将后面的数据覆盖
但是CPU并不提供这样的机制,需要我们自己去考虑这个问题
3.9 PUSH,POP指令:
eg;将10000H:1000FH作为栈:

mov ax 1000
mov ss ax

mov bx 0010
mov sp bx

push ax
push bx
push ds

1.

mov ax 1000
mov ss ax

mov bx 0010
mov sp bx

mov ax 001A
mov bx 001B

push ax
push bx

mov ax 0//sub ax ax
mov bx 0//sub bx bx

pop bx
pop ax//入栈顺序和出栈顺序要相反

//如果交换ax,bx的值的话,
pop ax
pop bx

执行mov指令只需一步
执行PUSH和POP要两步:1.先改变SP得值,后向SS:SP进行操作
栈操作的最大范围是0 – ffff
3.10栈 段
将一段内存当做栈段,仅仅是我们在编程时的一种安排
当栈空的时候为SP = 0
一个栈段的最大容量为64KB

你可能感兴趣的:(第三章 -寄存器)