第12章 用到棧的跳轉(zhuǎn)(X86匯編教程)
用過高級語言的同學(xué)都知道.高級語言有函數(shù)概念.可以跳轉(zhuǎn)到某地方執(zhí)行代碼計(jì)算一些東西,計(jì)算完成后可以返回原處繼續(xù)執(zhí)行代碼.現(xiàn)在我們要用匯編實(shí)現(xiàn)這個了...嘛
本文引用地址:http://m.butianyuan.cn/article/201612/324284.htm方法是這樣的:在跳轉(zhuǎn)前,先把IP寄存器的值壓入堆棧,然后跳轉(zhuǎn),計(jì)算后要返回再出棧到IP即可.是不是覺得稍微麻煩了點(diǎn)?其實(shí)8086提供了相關(guān)指令,幫我們輕松完成:
指令名 :CALL
指令說明 :和JMP相同,只是在跳轉(zhuǎn)前會把當(dāng)前地址壓棧,方便返回
指令名 :RET
指令說明 :沒有操作數(shù),指令執(zhí)行效果相當(dāng)于POP IP,也就是返回
實(shí)例代碼:
JMP START;跳轉(zhuǎn)到代碼開始處
AXQingLing:;這里是"AX清零函數(shù)"的起點(diǎn)(其實(shí)就是個標(biāo)號)
MOV AX,0000H;AX清零
RET;返回
START:;代碼開始
MOV AX,1234H;往AX隨便寫個數(shù)字
CALL AXQingLing;調(diào)用"AX清零函數(shù)"(其實(shí)就是個跳轉(zhuǎn))
;代碼到此結(jié)束
請把我的實(shí)例編譯后放進(jìn)Debug試試吧.
作業(yè):在我的實(shí)例中增加個"BX和CX一起清零函數(shù)",并在我的實(shí)例中"調(diào)用AX清零"之后"調(diào)用"一次,(記得用RET返回啊...)
評論