W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面的例子可以使用這些新的指令來(lái)重寫。把25行到34行改成:
call get_int
mov ebx, input2
call get_int
CALL和RET指令有幾個(gè)優(yōu)點(diǎn):
1、它們很簡(jiǎn)單!
2、它們使子程序嵌套變得簡(jiǎn)單。注意:子程序get_int調(diào)用了read_int。這個(gè)調(diào)用將另一個(gè)地址壓入到堆棧中了。在read_int代碼的末尾是一條彈出返回地址的RET指令,通過(guò)執(zhí)行指令重新回到get int代碼中去執(zhí)行。然后,當(dāng)get int的RET指令被執(zhí)行時(shí),它彈出跳回到asm main的返回地址。這個(gè)之所以能正確運(yùn)行,是因此堆棧的LIFO特性。
記住彈出壓入到堆棧的所有數(shù)據(jù)是非常重要的。例如,考慮下面的代碼:
1 get_int:
2 call read_int
3 mov [ebx], eax
4 ret ; 彈出EAX的值,沒(méi)有返回地址??!
這個(gè)代碼將不會(huì)正確返回!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: