匯編語(yǔ)言(第3版,王爽著):實(shí)驗(yàn)8 分析一個(gè)奇怪的程序

分析一個(gè)奇怪的程序

1. 分析下面的程序,在運(yùn)行前思考:這個(gè)程序可以正確返回嗎?

在程序運(yùn)行前,我個(gè)人的思考結(jié)果是不會(huì)返回,好像進(jìn)入了死循環(huán)(說(shuō)明我在看第九章的時(shí)候不仔細(xì)(─.─||))

2. 運(yùn)行后再思考:為什么是這種結(jié)果?

先說(shuō)結(jié)論:運(yùn)行后,程序可以正確返回

代碼講解:

mov di, offset s
mov si, offset s2
mov ax, cs:[si]
mov cs:[di], ax

  1. 以上代碼的作用就是將 “標(biāo)號(hào)s2” 處的數(shù)據(jù)(即機(jī)器指令) 復(fù)制到 “標(biāo)號(hào)s” 處
  2. 從下圖可以看出,“標(biāo)號(hào)s2” 處的機(jī)器指令為 EBF6,因此當(dāng)上面的那幾句代碼執(zhí)行完后,“標(biāo)號(hào)s” 處的機(jī)器指令為 EBF6
  3. 因?yàn)椤皹?biāo)號(hào)s2”處的匯編指令為 jmp short s,所以這是一個(gè) “依據(jù)位移進(jìn)行轉(zhuǎn)移的 jmp 指令”,所對(duì)應(yīng)的機(jī)器碼中包含的是轉(zhuǎn)移的位移,并不是轉(zhuǎn)移的目的地址
  4. 不要因?yàn)椤皹?biāo)號(hào)s2”處的匯編指令為 jmp short s,就想當(dāng)然的認(rèn)為將 jmp short s 復(fù)制到了 “標(biāo)號(hào)s” 處,這種想法是錯(cuò)誤的
  5. 可以看到下圖是在調(diào)試的時(shí)候用 debug 去調(diào)試的,展示“機(jī)器指令”和“匯編指令”是用 U 命令去轉(zhuǎn)換的,本質(zhì)上計(jì)算機(jī)只能存儲(chǔ)二進(jìn)制數(shù)據(jù),所以操作的也是二進(jìn)制數(shù)據(jù),即 CPU 操作的是二進(jìn)制數(shù)據(jù) EBF6
  6. CPU 在執(zhí)行 EBF6 的時(shí)候,根據(jù)什么修改的 IP寄存器?使其指向目標(biāo)指令呢?就是根據(jù)指令中的 F6 (提示:F6 是補(bǔ)碼),即 CPU 執(zhí)行 EBF6 時(shí),當(dāng)前的 (IP) 加上 F6,就得出了新的 (IP),也就完成了新的指向
  • 6.1 標(biāo)號(hào)s2 處匯編指令的講解


    實(shí)驗(yàn)8 標(biāo)號(hào)s2 處匯編指令的講解
  • 6.2 標(biāo)號(hào)s 處匯編指令的講解


    實(shí)驗(yàn)8 標(biāo)號(hào)s 處匯編指令的講解
  • 6.3 如果對(duì)于代碼還有疑問(wèn),請(qǐng)看 《匯編語(yǔ)言 (第3版)》王爽著,第 179 頁(yè),關(guān)于 CPU 執(zhí)行機(jī)器指令時(shí),是如何修改 IP 寄存器的。
實(shí)驗(yàn)8 調(diào)試過(guò)程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容