push和pop
push和pop是用來(lái)操作棧的2個(gè)指令。
push寄存器:將一個(gè)寄存器中的數(shù)據(jù)入棧。
pop寄存器:出棧用一個(gè)寄存器接收數(shù)據(jù)。
assume cs:codesg ;cs寄存器指向該程序的首地址
codesg segment
mov ax,1000H ;將1000H送入寄存器ax,相當(dāng)于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為減法指令,相當(dāng)于ax=ax-ax
sub bx,bx
pop ax //將棧頂?shù)臄?shù)據(jù)送入ax,pop也有mov指令類似的功能
pop bx
codesg ends
end
該段代碼將10000H~10000FH這段空間當(dāng)棧,初始狀態(tài)棧是空的。設(shè)置寄存器ax,bx的值,將ax,bx中的數(shù)據(jù)入棧,然后將ax,bx清零,從棧中恢復(fù)ax,bx原來(lái)的內(nèi)容。
ax,bx,sp,cs為寄存器,ss為段寄存器。任意時(shí)刻CPU從CS*16+IP(這里cs和ip表示該寄存器的值)單元開始執(zhí)行指令,所以設(shè)置cs:codesg。
任意時(shí)刻,ss*16+sp(這里ss和sp表示對(duì)應(yīng)寄存器的值)對(duì)應(yīng)的地址單元指向棧頂元素,所以程序里面設(shè)置ss=1000H,而不是ss=10000H。
下面看一下單步調(diào)試的結(jié)果:
r命令時(shí)查看當(dāng)前寄存器的內(nèi)容,t是單步執(zhí)行命令。每一步的執(zhí)行結(jié)果中,上面是對(duì)應(yīng)寄存器的值,下面對(duì)應(yīng)的機(jī)器指令是下一條將要執(zhí)行的機(jī)器指令。
每執(zhí)行一條指令你都看到對(duì)應(yīng)寄存器的變化。最后一條pop bx指令由于圖片大小原因,我沒(méi)有截出來(lái),所以最后一行的結(jié)果只是執(zhí)行pop ax,而沒(méi)有執(zhí)行pop bx的結(jié)果。
-
寄存器
+關(guān)注
關(guān)注
31文章
5435瀏覽量
124601 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7257瀏覽量
91936 -
指令
+關(guān)注
關(guān)注
1文章
616瀏覽量
36501 -
匯編語(yǔ)言
+關(guān)注
關(guān)注
14文章
412瀏覽量
36888
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)arm的匯編語(yǔ)言中有沒(méi)有什么指令可以達(dá)到上述效果的?
什么是匯編語(yǔ)言
MCS-51單片機(jī)匯編語(yǔ)言中的偽指令
匯編語(yǔ)言詳解
Assemble匯編語(yǔ)言設(shè)計(jì)技術(shù)
匯編語(yǔ)言學(xué)習(xí)課件_匯編語(yǔ)言程序組織
C語(yǔ)言和匯編語(yǔ)言混合編程方法和C語(yǔ)言中斷處理方法
匯編語(yǔ)言中常用的偽指令

評(píng)論