push和pop
push和pop是用來操作棧的2個指令。
push寄存器:將一個寄存器中的數據入棧。
pop寄存器:出棧用一個寄存器接收數據。
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
sub bx,bx
pop ax //將棧頂的數據送入ax,pop也有mov指令類似的功能
pop bx
codesg ends
end
該段代碼將10000H~10000FH這段空間當棧,初始狀態棧是空的。設置寄存器ax,bx的值,將ax,bx中的數據入棧,然后將ax,bx清零,從棧中恢復ax,bx原來的內容。
ax,bx,sp,cs為寄存器,ss為段寄存器。任意時刻CPU從CS*16+IP(這里cs和ip表示該寄存器的值)單元開始執行指令,所以設置cs:codesg。
任意時刻,ss*16+sp(這里ss和sp表示對應寄存器的值)對應的地址單元指向棧頂元素,所以程序里面設置ss=1000H,而不是ss=10000H。
下面看一下單步調試的結果:
r命令時查看當前寄存器的內容,t是單步執行命令。每一步的執行結果中,上面是對應寄存器的值,下面對應的機器指令是下一條將要執行的機器指令。
每執行一條指令你都看到對應寄存器的變化。最后一條pop bx指令由于圖片大小原因,我沒有截出來,所以最后一行的結果只是執行pop ax,而沒有執行pop bx的結果。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120232 -
數據
+關注
關注
8文章
7002瀏覽量
88943 -
指令
+關注
關注
1文章
607瀏覽量
35694 -
匯編語言
+關注
關注
14文章
409瀏覽量
35793
發布評論請先 登錄
相關推薦
評論