王爽彙編實驗(三)

  王爽彙編淺顯易懂,雖然前面兩個實驗都作完了,可是都是吊兒郎當作完的。debug

  看到第三次實驗比較好寫心得,就寫了。code

 

原碼以下,用提到的LINK.EXE和MASM.EXE進行編譯連接操做。blog

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,2000Hbug

這時候ax至FFFF,DS和CS差10H,IP偏移地址爲0。程序

輸入t執行,能夠看到ax已經變成2000H了,由於是寄存器和當即數,因此佔3個字節,IP變成0003,其餘未變。im

繼續t執行。db

ss變成了ax內存放的2000H。中間本來有一行指令 mov sp,0可是由於debug的對棧操做,直接在mov ss,ax後馬上執行,因此下一條語句是add sp,10img

 

 

 

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的說明。

實驗結束,開開心心

相關文章
相關標籤/搜索