實驗二 用機器指令和匯編指令編程


1、使用Debug,將下面的程序段寫入內存,逐條執行,根據指令執行后的實際運行情況填空。

實驗截圖:

 

 

mov ax,0021     將0021賦值給ax

mov ds,ax     通過ax將0021賦給ds寄存器

mov ax,2200     將2200賦值給ax

mov ss,ax      通過ax將2200賦值給ss

mov sp,0100   將0100賦值給sp,則棧段為2200:0100

mov ax,[0]       ax=3130    此刻我們將0021:0000處的數據賦值給ax

add ax,[2]       ax=6462     即ax+0021:0002

mov bx,[4]      bx=3534      將0021:0004處的數據賦值給bx

add bx,[6]       bx=6C6A      即bx+0021:0006

push ax           sp=00FE ;修改的內存單元地址是 2200:0100內容為6462;入棧

push bx           sp=00FC;修改的內存單元地址是2200:00FC內容為6C6A;入棧

pop ax             sp=00FE;ax=6C6A;將棧頂的數據出棧賦值給ax

pop bx             sp=0100;bx=6462;將棧頂的數據出棧賦值給bx

push [4]          sp=00FE;修改的內存單元地址是 2200:0100內容為3534  ;入棧

push [6]          sp=00FC;修改的內存單元地址是2200:00FC內容為3736;入棧

 

2、觀察截圖的實驗過程,分析為什么2000:0~2000:f中的內容會發生改變

 

mov ax,2000

mov ss,ax   //相當於將2000賦值給ss,即棧的段地址

mov sp,10   //相當於將0010賦值給sp,即棧的偏移地址

那么初始的棧頂為2000:0010,而棧底則為2000:000E

截圖上看,我們在執行指令已經將2000:0 f內的數據全都賦值為零,而在進行棧的初始化后,其中的字節發生了改變,這是為什么呢?

t命令實際是引發了單步中斷,執行中斷例程時,CPU會將一些中斷例程使用的的寄存器變量自動壓棧到棧中,此例中就包括了上述的寄存器變量的值。

以上是我在網上搜索的結果,按照這種說法,CPU在執行初始化指令是將寄存器變量自動壓棧,那么其中的數據也就改變了。

 


免責聲明!

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



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