實驗二 用機器指令和彙編指令程式設計
實驗任務
(1)使用debug,將下面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運**況填空。
mov ax, ffffmov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0]
add ax,[2]
mov bx,[4]
add bx,[6]
push ax
push bx
pop ax
pop bx
push [4]
push [6]
**截圖:
實驗結果:
分析:此實驗使用棧實現了暫存器值的交換,語句mov ss,ax和語句mov sp,0100在使用t命令單步執行時,同時進行。
2.仔細觀察圖3.19中的實驗過程,然後分析,為什麼2000:0~2000~f中的內容會發生改變?
分析:經過對圖3.19的觀察和實踐,我們在2000h記憶體段建立了乙個棧,棧的最大空間是10h,ss:sp指向了棧頂2000:10h,表面棧空,給ax賦值後壓棧。 初始沒有執行這段**時,我們使用d命令觀察2000:00記憶體,都是00,怎麼建立棧結構指向這段記憶體時,我們發現有些資料改變了。這些資料是什麼?我們發現這裡面有cs值、ip值、ax值(這個容易看出來),還有bp值(00 00),還有flag的值。t命令實際是引發了單步中斷,執行中斷例程時,cpu會將一些中斷例程使用的的暫存器變數自動壓棧到棧中,此例中就包括了上述的暫存器變數的值。我們可以不必理會這些暫存器的變數,我們只關心sp就可以了。有它指示,我們就可以對棧進行操作了。而此時的sp是正確的, 注意:這個棧和我們建立的棧是同乙個棧結構(為什麼,ss=2000h了),由於t命令必須儲存暫存器變數的值(這個是中斷程式定義的。)它也占用一定的空間。可能我們定義的棧空間比較小;頻繁的使用push指令,為了避免棧頂超界,我們盡量使棧空間大些,就像此程式,設定棧空間是100h。
實驗2 用機器指令和彙編指令程式設計
1.預備知識 用t命令執行修改棧暫存器 ss的指令,如 mov ss,ax,mov ss,0 pop ss sp的指令也緊接著執行,一般情況下,用 t命令執行一條指令後,會停止繼續執行,顯示出當前 cpu2.實驗任務 1 使用 debug 將上面的程式段寫入記憶體,逐條執行,根據指令執行後的實際運 ...
實驗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...