匯編語言(王爽)實驗三 編程、編譯、連接、跟蹤


(1)將下面程序保存為t1.asm,生成可執行文件t1.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

(2)用debug跟蹤t1.exe的執行過程,寫出每一步執行后,相關寄存器中的內容和棧頂內容。
 step 0:通過debug t1.exe加載程序后:

ax=0000H;bx=0000H;

cx=0016H(表示程序長度,為22個字節);

ds=13D5H(表示操作系統給t1.exe分配的空閑區域的段地址);

cs=13e5H(=ds+10H,與之前描述一致);

ss=13e5H,sp=0000H;通過d 13e5:0 1命令查看棧頂內容,為00b8H;

step1:單步執行第一條指令后:

ax=2000H;bx=0000H;

其余cx,ds,cs,ss,sp均不變;

此時棧頂內容理應不變,查看依舊為00b8H;

step2:單步執行第二條指令后,自動連帶執行第三條指令:

ax=2000H;bx=0000H;

其余cx,ds,cs均不變;ss和sp被重置,棧頂指向:2000:0,查看棧頂內容,為:0ff1H;

step3:單步執行第四條指令后:

ax=2000H;bx=0000H;

其余cx,ds,cs,ss均不變;sp被重置,棧頂指向:2000:0a,查看棧頂內容,為:615fH;

step4:單步執行第五條指令后:

ax=615fH(與上一步所得一致);bx=0000H;

其余cx,ds,cs,ss均不變;sp=sp+2,棧頂指向:2000:0c,查看棧頂內容,為:0DF0H;

----------因重新debug,導致前后ax不一致-----------

step5:單步執行第六條指令后:

ax=13e5H;bx=0DF0H(與上一步所得一致);

其余cx,ds,cs,ss均不變;sp=sp+2,棧頂指向:2000:0E,查看棧頂內容,為:0B16H;

step6:單步執行第七條指令后:

ax=13e5H;bx=0DF0H;

其余cx,ds,cs,ss均不變;sp=sp-2,棧頂指向:2000:0C,查看棧頂內容,為:13E5H(與AX一致);

step7:單步執行第八條指令后:

ax,bx,cx,ds,cs,ss均不變;sp=sp-2,棧頂指向:2000:0A,查看棧頂內容,為:0DF0H(與BX一致);

step8:單步執行第九條指令后:

ax=0DF0H(與上步查看一致);

bx,cx,ds,cs,ss均不變;sp=sp+2,棧頂指向:2000:0C,查看棧頂內容,為:13E5H;

step9:單步執行第十條指令后:

bx=13E5H(與上步查看一致);

ax,cx,ds,cs,ss均不變;sp=sp+2,棧頂指向:2000:0E,查看棧頂內容,為:0B16H;

(3)PSP頭兩個字節為CD 20,用debug加載t1.exe.查看PSP內容:

PSP區域地址范圍為:ds:0~ds:ff.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM