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位...