x86彙編學習筆記

2021-10-04 13:46:33 字數 3813 閱讀 6822

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:xvalue1value2value3

-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中的資料傳送...