1. 預備知識:
用t命令執行修改棧暫存器
ss的指令,如
mov ss,ax,mov ss,[0],pop ss
sp的指令也緊接著執行,一般情況下,用
t命令執行一條指令後,會停止繼續執行,顯示出當前
cpu2. 實驗任務
(1)使用
debug
,將上面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運**況填空。
mov ax, 0021
mov ds, ax
mov ax, 2200
mov ss, ax
mov sp, 0100
mov ax, [0] ;ax=
3130
hadd ax, [2] ;ax=
6462
hmov bx, [4] ;bx=3534
hadd bx, [6] ;bx=6c6a
h
push ax ;sp=00feh ,修改的記憶體單元位址是
2200:00fe
內容為6462
hpush bx ;sp=00fch ,修改的記憶體單元位址是
2200:00fc
內容為6c6a
hpop ax ;sp=00f
eh ,ax=
6c6a
hpop bx ;sp=0
100h ,bx=
6462
h
push [4] ;sp=
00fe
h ,修改的記憶體單元位址是
2200:00fe
內容為3534h
push [6] ;sp=00fc
h ,修改的記憶體單元位址是
2200:00fc 內容為
3736
h以e命令改寫,
a命令寫入:
單步執行結果:
(2)仔細觀察圖3.19中的實驗過程,然後分析:為什麼2000:0~2000:f中的內容會發生改變?
圖3.19 用debug進行實驗的示例
答:在debug使用t等指令引發了中斷造成的,中斷過程使用當前棧空間存放cpu關鍵資料,所以,棧中就有些不是我們操作的資料了。
如果是在中斷過程中壓棧是棧越界的話,在windows下的命令視窗會強制關閉。
實驗總結:
debug使用時,不同形式的命令指令,可能對應不同的暫存器位址分配,指令位址為cs,資料段位址為ds,棧段位址為ss;對於段暫存器不可直接賦值,可間接通過其他暫存器賦值。初始化棧頂由ss:sp位址指向所決定,在使用棧的時候,由於cpu無法自動識別棧的大小,存在棧溢位的危險問題。
實驗2 用機器指令和彙編指令程式設計
實驗二 用機器指令和彙編指令程式設計 實驗任務 1 使用debug,將下面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運 況填空。mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,0 add ax,2 mov bx,4...
實驗2 用機器指令和彙編指令程式設計
四 實驗結論 任務一 1 使用e命令將記憶體單元0021 0 0021 7連續8個位元組資料改為30h,31h,32h,33h,34h,35h,36h,37h。2 將從0021 0開始修改8個記憶體單元後利用d命令檢視修改後記憶體中的值,檢視記憶體中是否已經修改完成 3 利用debug,將以下程式段...
實驗 用機器指令和彙編指令程式設計
1 教材實驗一結論 1 通過以下兩種方式將以下程式段寫入記憶體 e命令和a命令。b8 20 4e mov ax,4e20h 0516 14add ax,1416h bb 00 20mov bx,2000h 01d8 add ax,bx 89c3 mov bx,ax 01d8 add ax,bx b8...