亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個SP和PC是怎么算的,這個RET指令看不懂,求解答?

這個SP和PC是怎么算的,這個RET指令看不懂,求解答?

九州編程 2022-09-16 15:11:43
SP=25HPC=2345H(24H)=12H(25H)=34H(26H)=56H此時執行RET指令后,SP=______,PC=________
查看完整描述

3 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

在這里RET指令的內部操作是:棧頂字單元出棧,其值賦給IP寄存器。即實現了一個程序的轉移,將棧頂字單元保存的偏移地址作為下一條指令的偏移地址。

看這段代碼不難發現,程序從start后面的語句開始,用mov ax,0指令,讓(ax)=0,然后push ax,即讓棧頂字單元的值為0。所以ret執行后,(IP)=0,但是CS值不變,即CS一直指向code segment這個段(這個功能是通過assume cs:code實現的),程序轉移到code segment段的開頭的第一條語句,即mov ax,4c00h,然后調用int 21h結束程序。

mov bx,0這一步嘛,可以理解為這段代碼的具體功能就是讓bx清零。

補充說明一下:返回指令分為兩種,近返回和遠返回。
近返回的指令就是ret,內部操作為只出棧一個字單元,只改變IP的值。
遠返回的指令是retf,內部操作為連續出棧兩個字單元,分別改變IP和CS的值。
這段代碼用的是近返回,只改變了IP的值。

查看完整回答
反對 回復 2022-09-21
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

我看你的題目應該是x86下的16位匯編吧,那我就說說我的想法:

PC是程序計數器,存放下一個指令的地址值,它的體現也就是匯編代碼中的IP,IP寄存器是指令指針寄存器,注意不是指令寄存器IR?。?!初學者總容易搞混他們?。?!
首先計算機執行指令,要先根據PC中存放的指令地址,將指令由內存取到指令寄存器中,同時,PC中的地址要么自動加1(這個加1不是真正的數值加1,而是根據剛才執行的具體指令換算成實際的16進制長度,不同的指令對應機器碼長度不同),要么由轉移指針給出下一條指令的地址。

RET指令則是將棧頂(sp寄存器中的值就是棧頂)的返回地址彈出到IP,然后按照IP此時指示的指令地址繼續執行程序。

查看完整回答
反對 回復 2022-09-21
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

匯編中,RET是子程序或函數返回指令。以上數據執行后,SP=23H,PC=3412H
執行RET時,先彈出高位地址,再彈出低位地址送給PC。

查看完整回答
反對 回復 2022-09-21
  • 3 回答
  • 0 關注
  • 257 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號