王爽匯編淺顯易懂,雖然前面兩個實驗都做完了,但是都是吊兒郎當做完的,
看到第三次實驗比較好寫心得,就寫了,
原碼如下,用提到的LINK.EXE和MASM.EXE進行編譯鏈接操作,
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21H
codesg ends
end
首先是用debug 跟蹤t1.exe執行程序,寫出每一步執行后,相關暫存器中的內容和堆疊頂的內容,

程式即將開始運行,這時候給出了下一條指令 mov ax,2000H
這時候ax至FFFF,DS和CS差10H,IP偏移地址為0,

輸入t執行,可以看到ax已經變成2000H了,因為是暫存器和立即數,所以占3個位元組,IP變成0003,其他未變,
繼續t執行,

ss變成了ax記憶體放的2000H,中間原本有一行指令 mov sp,0但是因為debug的對堆疊操作,直接在mov ss,ax后立刻執行,所以下一條陳述句是add sp,10

sp變成了000AH

因為pop的緣故,堆疊向上增長,sp增加了2位元組,變成000CH

同理sp=000EH,這時候發現了AX從2000H變成了0000H,因為堆疊本來就是空的,又無故出堆疊,pop把SS:SP當時的字單元給到了AX,于是AX置0,如果BX有值的話也為0,

SP變了回去,因為POP和PUSH都用一個位元組,IP每次增長1H,

后面其實也可以看到,SP又反彈了=-=,

最后兩個是回傳陳述句,AX變成4C00H,IP+3,指令地址又變成CS:IP=F000:14A0,
至此第二問結束,
(3)PSP的頭兩個位元組是CD 20,用DEBUG加載t1.exe,查看PSP的內容,
PSP就是DS和CS之間的0010H*16=256位元組

下面就不必要看了,就是這256位元組就是t1.exe的說明,
實驗結束,開開心心
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3780.html
標籤:其他
下一篇:資料分析(4)——閑話抽樣
