汇编&栈基础
汇编&栈基础
说明
push寄存器:将一个寄存器中的数据入栈
pop寄存器:出栈用一个寄存器接收数据
sp:栈顶指针(段寄存器)
ax,bx,ss,sp 均为16位寄存器(2字节)
操作
assume cs:codesg ;cs寄存器指向该程序的首地址
codesg segment
mov ax,1000H ;将1000H送入寄存器ax,相当于ax=1000H
mov ss,ax
mov sp,0010H
mov ax,001AH ;将ax,bx赋值
mov bx,001BH
push ax
push bx ;将ax中的值,bx中的值入栈
sub ax,ax ;sub为减法指令,相当于ax=ax-ax
xor bx,bx ;xor自身,相当于清零,与上一条指令功能一样
pop ax ;将栈中保存的数据送入ax,pop也有mov指令类似的功能
pop bx
codesg ends
end
初始态
:
ax = 0000
bx = 0000
ss = 1CD3
sp = 0000
mov ax,1000H
:
ax = 1000
bx = 0000
ss = 1CD3
sp = 0000
mov ss,ax
:
ax = 1000
bx = 0000
ss = 1000
sp = 0000
mov sp,0010H
:
ax = 1000
bx = 0000
ss = 1000
sp = 0010
mov ax,001AH
:
ax = 001A
bx = 0000
ss = 1000
sp = 0010
mov bx,001BH
:
ax = 001A
bx = 001B
ss = 1000
sp = 0010
push ax
;
ax = 001A
bx = 001B
ss = 1000
sp = 000E
push bx
:
ax = 001A
bx = 001B
ss = 1000
sp = 000C
sub ax,ax
:
ax = 0000
bx = 001B
ss = 1000
sp = 000C
xor bx,bx
:
ax = 0000
bx = 0000
ss = 1000
sp = 000C
pop bx
:
ax = 0000
bx = 001B
ss = 1000
sp = 000E
pop ax
:
ax = 001A
bx = 001B
ss = 1000
sp = 0010
注意
最后pop的时候,之所以先pop bx ,再ax,是因为栈是先进后出的,如果先pop ax,再bx的话,会导致ax得到的是bx的数值,bx得到的是ax的数值
A lion doesn't concern himself with the opinions of a sheep.