掌握DEBUG 基本命令及其功能


windows下調試debug步驟

  1. 打開dosbox

上篇

查看CPU和內存 用機器指令和彙編指令編程

實驗任務

(1)


默認爲十六進制數,所以不用加H,指令之間只能有一個空格。

(2)

JMP 2000:0003後,CS:IP變爲2000:0003,指向語句爲ADD AX,AX 共執行十六次後AX變爲100H即256

(3)

可以看到生產日期爲01/01/92,因爲DEBUG是在虛擬環境下運行的,所以日期顯示不正確。8086pc機C000~FFFFF的內存單元是隻讀存儲器的,所以這裏生產日期無法改變。

下篇

用機器指令和彙編指令編程

實驗任務

(1)

mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ;ax=C0EAH
add ax,[2] ;ax=C0FCH
mov bx,[4] ;bx=30F0H
add bx,[6] ;bx=6021H
push ax ;sp=00FEH ;修改的內存單元的地址是2200:0100 內容爲C0FCH
push bx ;sp=00FCH ;修改的內存單元的地址是2200:00FE 內容爲6021H
pop ax ;sp=00FEH ;ax=6021H
pop bx ;sp=0100H ;bx=C0FCH
push [4] ;sp=00FEH ;修改的內存單元的地址是2200:0100 內容爲30F0H
push [6] ;sp=00FCH ;修改的內存單元的地址是2200:00FE 內容爲2F31H

這裏寫圖片描述
首先寫入程序
這裏寫圖片描述
查看DS指向的數據
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
逐條運行
這裏寫圖片描述
可以看到棧中數據的變化

(2)

這裏寫圖片描述
如圖可知,ADD命令不可以對段寄存器進行操作,所以將ADD DS,AX
修改爲

MOV BX,DS
ADD AX,BX
MOV DS,AX

這裏寫圖片描述
這裏寫圖片描述

MOV AX,1000H ;AX=1000H
MOV DS,AX ;DS=FFFFH
MOV DS,[0] ;DS=0000H
MOV BX,DS ;BX=0000H
ADD AX,BX ;AX=1000H
MOV DS,AX ;DS=1000H

(3)

因爲Debug的T命令在執行修改寄存器SS的指令時,下一條指令也緊接着被執行。
所以MOV SS,AX之後,SS=2000H SP=0010H
根據彙編語言12.11單步中斷在MOV SS,AX MOV SP,10後,執行單步中斷的中斷處理程序

  1. 取得中斷類型碼1;
  2. 標誌寄存器入棧,TF,IF設置爲0;
  3. CS,IP入棧;
  4. (IP)=(1*4),(CS)=(1*4+2).

所以2000:0 F中內容發生了變化。

實驗心得

這次實驗需要用-A命令寫彙編指令,在這方面犯了不少錯誤,總是在不經意間多打了空格,導致出現錯誤。。
Debug的T命令在執行修改寄存器SS的指令時,下一條指令也緊接着被執行。

8086PC 機內存地址空間分配基本情況爲:

00000 ~ 9FFFF 內存儲器地址空間(RAM)
A0000 ~ BFFFF 顯存地址空間
C0000 ~ FFFFF 各類ROM地址空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章