答案:可以正常執行。
我們來逐步分析:
這是我們的程式對應的機器指令!
首先我們的 cs:ip 指向的是076a:005
,由此我們可以看出來076a:000~076a:004
這段位址儲存的彙編指令應該是:
mov ax,
4c00h
int21h
然後我們逐步執行,nop 是空指令,佔乙個位元組,做完實驗後我們就會發現它的作用,應該就是為我們湊乙個位址,最後讓指令能cs:ip能指向076a:000
這個位址。執行至076a:000a 後,di暫存器獲得 s 標號的偏移位址,之後si暫存器又獲得 s2 標號的偏移位址,然後我們獲取 s2標號處的指令,存入ax,暫存器,此時 ax=ebf6這條指令含義是個關鍵。
現在我們來分析下面這段**:
s1:
mov ax,
0int
21h mov ax,0
s2:jmp short s1
nop
jmp short s1 這個段**的指令 就是ebf6,在這裡的含義是跳到了s1標號處,但是jmp short s1並不包含s1的位址,它包含的是和當前位址的相對距離,所以這條指令的含義是ip向後移動 x 距離,那麼我們看一下x是多少?
x=0020h-0018h=8
此時我們知道了 x 是 8。
然後我們繼續從位址 076a:0016出分析,我們執行此處指令跳到了,076a:0008處,此處兩個位元組的nop指令被覆蓋為了ebf6指令,我們知道ebf6指令的含義是向後移動8的距離,那麼我們執行此條指令,到076a:000處,此時程式可以正常結束!
實驗8 分析乙個奇怪的程式
仔細閱讀9.3節依據位移進行轉移的jmp指令,然後理解下面的這個很奇怪的程式就容易多了,當然要看著機器碼去分析。assume cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s m...
實驗8 分析乙個奇怪的程式
分析 assume cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s mov si,offset s2 mov ax,cs si mov cs di ax s0 jmp shor...
彙編實驗八 分析乙個奇怪的程式
assueme cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s mov si,offset s2 mov ax,cs si mov cs di ax s0 jmp short ...