彙編記錄 99 彙編指令

2021-07-05 05:31:02 字數 4518 閱讀 4123

mov(賦值) 指令:(mov a,b ,把 b 的資料傳送到 a 中)

有以下形式:

1、mov 暫存器,任意(資料、記憶體單元、暫存器、段暫存器、字元)(mov ax,9 | [1] | bx | ds | 『a』)

2、mov 記憶體單元,暫存器 | 段暫存器(mov [2],bx | ds)

3、mov 段暫存器,暫存器 | 記憶體單元(mov es,ax | [1])

add(加法) 指令:(add a,b ,把 a 的資料與 b 的資料相加的結果放到 a 中)

sub(減法) 指令:(sub a,b ,把 a 的資料減去 b 的資料所得結果放到 a 中)

有以下形式:

1、add | sub 暫存器,資料 | 暫存器 | 記憶體單元 (add | sub ax,8 | bx | [2])

2、add | sub 記憶體單元,暫存器(add | sub [0],ax)

div(除法)指令:(div  a ,a 是除數,被除數放在 ax 或 ax 和 dx 中)

1、除數:有 8 位 或 16 位 兩種,存放在 reg 或 記憶體單元中

2、被除數:如果除數是 8 位,被除數是 16 位(被除數是 16 位,除數是 8 位),被除數存放在 ax 中

如果除數是 16 位,被除數是 32 位(被除數是 32 位,除數是 16 位,被除數的高位放在 dx 中,低位放在 ax 中)

3、商和餘數的存放:如果除數是 8 位,al 存放商,ah 存放餘數。如果除數是 16 位,ax 存放商值,dx 存放餘數

div byte ptr ds:[a](a 是常量或暫存器中的數值)

商:al = ax / (ds * 10h + a)   餘數:ah = ax % (ds * 10h + a)

div word ptr ds:[a]

商:ax = (dx * 10h + ax) / (ds * 10h + a)   餘數:dx = (dx * 10h + ax) % (ds * 10h + a)

mul(乘法)指令:(mul a,a 是)

乘數:相乘的數要麼都是 8 位,乙個數存放在 al 中,另乙個存放在 8 位的 reg 或 記憶體單元中。要麼都是 16 位,乙個存放在 16 位的 reg 或 字型記憶體單元中

結果:如果乘數是 8 位,乘積儲存在 ax 中。如果乘數是 16 位,乘積的高位元組儲存在 dx 中,低位元組儲存在 ax 中

adc 指令(adc a,b,將 a 和 b 相加後再加上 cf 的「進值」,結果儲存到 a 中)

將 cf 標記位參加運算,可以將乙個高位數拆分,先進行低位元組的運算,進製記錄在 cf 中,呼叫 adc 根據進製對高位元組進行運算

如:將 1ef0001000h 和 2010001ef0h 相加,ax 放高位,bx 放次高,cx 放低位。

mov cx,1000h

adc cx,1ef0h // 1000h+ 1ef0h + cf 未產生進製,cf=0

mov bx,f000h

adc bx,1000h // f000h + 1000h + cf 產生進製,cf=1

mov ax,1eh

adc ax,20h // ax= 1eh + 20h + cf(1) = 3fh 

sbb 指令(sbb a,b,將 a 與 b 相減後,在減去 cf 的「借值」,結果儲存到 a 中)

and(「與」運算)指令:(and  a,b,把 a 與 b 進行「與」運算,結果放到 a 中)

or(「或」運算)指令:(or  a,b,把 a 與 b 進行「或」運算,結果放到 a 中)

shl(左位移)指令:

格式:shl 暫存器

shr(右位移)指令:(shr a,b,將 a 的二進位制數右移 b 個位數,將最後移出的一位寫入 cf 中,高位用 0 填補)

jmp**移) 指令:(更改 cpu 執行**的位置,詳細內容請看《關於 jmp 彙編指令的詳細》)

有以下格式:

1、轉移 ip 到指定位置

jmp 暫存器 (設定 ip = 暫存器存放的值)

2、在段內轉移 ip 的位置(「差值」 =  標記位址 - 該指令後的第乙個位元組的位址)

jmp short 標記(在機器碼中用 8 位資料儲存差值,設定 ip = ip + 差值)

jmp near ptr 標記(在機器碼中用 16 位資料儲存差值,設定 ip = ip + 差值)

jmp word ptr 記憶體單元(設定 ip = 記憶體字型單元內容)

3、在段間轉移 cs:ip 的位置

jmp far ptr 標記(設定 cs=標記的段位址,ip=標記到段位址的偏移量,目的位址被存放在機器碼中)

jmp dword ptr 記憶體單元(設定 cs=高位址字型單元內容,ip=低位址字型單元內容)

call 指令:

cpu 執行該指令,進行兩步操作

1、將當前的 ip 或 cs:ip 壓入棧  2、跳轉

有以下格式:

1、轉移 ip 到指定位置

call 暫存器(先將該指令後的第乙個位元組的 ip 壓棧,然後設定 ip = 暫存器存放的內容)

2、段內轉移(「差值」 =

標記位址 - 該指令後的第乙個位元組的位址)

call 標記(先將該指令後的第乙個位元組的 ip 壓棧,在機器碼中用 16 位儲存差值,然後設定ip = ip 差值)

call word ptr 記憶體單元(先將該指令後的第乙個位元組的 ip 壓棧,然後設定 ip = 記憶體字型單元內容)

3、段間轉移

call far ptr 標記(先將該指令後的第乙個位元組的 cs、ip 分別壓棧,然後設定 cs=標記的段位址,ip=標記到段位址的偏移量,目的位址被存放在機器碼中)

call dword ptr 記憶體單元(先將該指令後的第乙個位元組的 cs、ip 分別壓棧,然後設定 cs=高位址字型單元內容,ip=低位址字型單元內容)

ret 指令:(用棧中的資料,修改 ip 內容,從而實現近轉移)

cpu 執行該指令,進行兩步操作

1、ip = ss:[sp] 2個記憶體單元內容  2、sp = sp + 2(類似於 pop ip)

格式:ret

retf 指令:(用棧中的資料,修改 cs:ip 的內容,從而實現遠轉移)

cpu 執行該指令,進行四步操作

1、ip = ss:[sp] 2個記憶體單元內容  2、sp = sp + 2  3、cs= ss:[sp] 2個記憶體單元內容  4、sp = sp + 2(類似於 pop ip、pop cs)

格式:retf

push(入棧)指令:(push a 把資料 a 放入棧中)

pop(出棧)指令:(pop a 把資料 a 從棧中讀取)

有以下形式:

push | pop 暫存器 | 段暫存器 | 記憶體單元

loop(迴圈) 指令:

格式:標記號:彙編指令

loop 標記號

loop 返回到標記號,執行次數儲存在 cx 中,當 cx 的值為 0 時,退出迴圈,執行下面的指令

rep (重複)指令:

根據 cx 的值,重複執行 rep 後面的指令

inc(自加 1)指令:(inc a,把 a 中的資料加 1,儲存到 a 中)

有以下形式:

inc 暫存器

cmp(判斷)指令:

格式:cmp a,b(該指令會讓 cpu 進行 a - b,結果影響 flag 暫存器的位但結果不會儲存)

movsb 指令:

該指令會執行兩步操作:

1、使 es:[di] 的記憶體單元 = ds:[si] 的記憶體單元

2、根據 flag 暫存器中的 df 位,如果 df=0,di++,si++,如果 df=1,di--,si--。

movsw 指令:

基本與 movsb 相似,如果 df=0,di += 2,si += 2,如果 df=1,di -= 2,si -= 2。

cld 指令:把 df 設定為 0

std 指令:把 df 設定為 1

pushf 指令:把標記暫存器的值壓入棧中

popf 指令:把值出棧,送入標記暫存器中

sti 指令:設定 if = 1

cli 指令:設定 if = 0

int 指令:引發 cpu 中斷,將傳送中斷碼,引發中斷過程,把當前 cs:ip 入棧,讀取 中斷碼 * 4 和 中斷碼 * 4 + 2 的記憶體位址的內容,設定 cs = [中斷碼 * 4 + 2]、ip = [中斷碼 * 4](cs:ip 是指向中斷程式)

讀寫埠的彙編指令:(在使用 in、out 指令時,只能使用 al 或 ax 來讀取或寫入資料,當讀取或寫入 8 位資料時,用 al ,當讀取或寫入 16 位時,用 ax)

in 指令:(in al,20h 向埠號為 20 讀取資料,讀取的資料放在 al 中) 

out 指令:(out 20h,al 向埠為 20 寫入資料,寫入的資料放在 al 中)

格式:對於 0 ~ 255 的埠號進行讀寫

in al,20h

out 20h,al

對於 256 ~ 65535 的埠進行讀寫,埠號放在 dx 中

mov dx,3f0h

in ax,dx

out dx,ax

彙編常用指令記錄

指令的一般格式 其中 為不可省略,為可以省略。注意 opcode cond s之間沒有空格,s和rd之間使用空格隔開。lsl 左移指令 mov r1,r0,lsl 3 將暫存器r0中的值左移3位後傳送到暫存器r1中cmp 比較指令 cmp r1,r0 將暫存器r1的值與暫存器r2的值相減,並根據結果...

彙編 彙編指令大全

一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...

OD 彙編指令 記錄(1)

一.mov eax 0x12 1.mov 目標運算元 源運算元 作用把 源運算元拷貝到目標運算元 mov 語法 1.mov r m8 r8 r 代表通用暫存器 2.mov r m16 r16 m 代表記憶體 3.mov r m32 r32 imm 代表立即數 4.mov r8,r m8 r8代表8位...