debug 是dos, windows都提供的實模式(8086 方式)程式的除錯工具.
windows下使用dosbox模擬dos環境, 掛載所在目錄後開啟debug.exe
r
指令
顯示r
ax=0000 bx=0000 cx=0000 dx=0000 sp=00fd bp=0000 si=0000 di=0000
ds=073f es=073f ss=073f cs=073f ip=0100 nv up ei pl nz na po nc
073f:0100 0000 add [bx+si],al
修改r
+reg
-r ip
ip 0100
:0000
-rax=0000 bx=0000 cx=0000 dx=0000 sp=00fd bp=0000 si=0000 di=0000
ds=073f es=073f ss=073f cs=073f ip=0000 nv up ei pl nz na po nc
073f:0000 0000 add [bx+si],al
d
指令
顯示d
+***x
:***x
0000:0000 00 00 00 00-00 00 00 00
0000:0010 00 00 00 00-00 00 00 00
0000:0020 00 00 00 00-00 00 00 00
0000:0030 00 00 00 00-00 00 00 00
0000:0040 00 00 00 00-00 00 00 00
0000:0050 00 00 00 00-00 00 00 00
0000:0060 00 00 00 00-00 00 00 00
0000:0070 00 00 00 00-00 00 00 00
e
指令
連續修改
e
+***x
:x
value1
value2
value3
-e 1000:0 0 1 2 3 4 5 6 7
-d 1000:0 7
1000:0000 00 01 02 03 04 05 06 07
單步修改記憶體
e
+***x
:x
-e 1000:0
1000:0000 00.00 00.01 00.02 00.03 00.04 00.05 00.06 00.07
u
指令
顯示彙編**
u
+***x
:x
-u 1000:0
1000:0000 b80100 mov ax,0001
1000:0003 b80200 mov bx,0002
1000:0006 01d8 add ax,bx
t
指令
單步執行cs:ip處的**
t
-r
ax=0000 bx=0000 cx=0000 dx=0000 sp=00fd bp=0000 si=0000 di=0000
ds=073f es=073f ss=073f cs=1000 ip=0000 nv up ei pl nz na po nc
1000:0000 b80100 add ax,0001
-u 1000:0
1000:0000 b80100 mov ax,0001
-t ax=0001 bx=0000 cx=0000 dx=0000 sp=00fd bp=0000 si=0000 di=0000
ds=073f es=073f ss=073f cs=1000 ip=0000 nv up ei pl nz na po nc
1000:0003 b80200 add bx,0002
多步執行cs:ip處的**
t
+num
a
指令
以彙編指令形式寫入到記憶體的機器**
a
+***x
:x
-a 1000:0
1000:0000 mov ax,1
1000:0003 mov cx,2
1000:0006 add ax,cx
8086cpu 共有14個暫存器.
暫存器名稱
用途ax
通用暫存器
bx通用暫存器
cx通用暫存器
dx通用暫存器
cs**段暫存器
ds資料段暫存器
ss棧頂段暫存器
es暫存器
si暫存器
di暫存器
sp棧偏移位址暫存器
bp暫存器
ip指令位址暫存器
di暫存器
psw程式狀態字
匯程式設計序由彙編指令和偽指令組成. 彙編指令是有對應機器碼的指令,而偽指令由編譯器執行,用來指示編譯工作.
執行過程:
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
mov cx,loopnum
tag:
loop codes
...loop tag
在組合語言中,資料不能以字母開頭,所以要加上0作字首
dos環境下呼叫程式將可執行檔案載入至記憶體:
找到一段起始位址sa:0000
的容量足夠的記憶體空閒區
在這段記憶體區的前256位元組中建立乙個稱為程式段字首(psp)的資料區, dos利用psp來和被載入的程式進行通訊.
從這段記憶體的256位元組處開始裝入程式(sa+10h:0000
),並設定程式位址.
《組合語言》(第三版) 王爽著, 清華大學出版社. ↩︎
組合語言 基於X86 學習筆記
1.機器語言 machine language 是一種數字語言,專門設計成唄計算機處理器 cpu 理解。所有x86處理器都理解的共同機器語言。2.組合語言 assembly language 包含助記符書寫的語言。3.組合語言與機器語言是一一對應 one to one 的關係。4.彙編器 assem...
170824 彙編 x86基礎
a.1625 5 王子昂 總結 2017年8月24日 連續第325天總結 b.逆向知識 資料移動分為5種方式 立即數到暫存器 立即數到記憶體 暫存器到暫存器 暫存器到記憶體或記憶體到暫存器 記憶體到記憶體 前4種是所有現代體系都支援的,第五種是x86獨有的,可以通過inc add來直接操作記憶體 另...
X86彙編指令詳解
x86彙編基本分為七大體系 分別是 1 資料傳送指令 2 算術運算指令 3 邏輯運算指令 4 串操作指令 5 控制轉移指令 6 處理器控制指令 7 保護方式指令 先介紹資料傳送指令集 1 資料傳送指令 1.mov 格式 mov destination,source 功能 將s ource中的資料傳送...