彙編指令合集

2021-10-23 07:14:37 字數 3970 閱讀 4023

資料傳輸類指令主要包括資料傳送、資料交換、堆疊操作、查表轉換、位址傳送、標誌位傳送、i/o資料傳送指令。這類指令的主要特點是大部分指令操作完成後,對fr中的標誌位不產生影響。它們在儲存器和暫存器、暫存器和輸入輸出埠之間傳送資料。

資料傳送指令

mov:傳送字或位元組。

movsx:先符號擴充套件,再傳送。

movzx:先零擴充套件,再傳送。

push:把字壓入堆疊。

pop: 把字彈出堆疊。

pusha: 把ax,cx,dx,bx,sp,bp,si,di依次壓入堆疊。

popa: 把di,si,bp,sp,bx,dx,cx,ax依次彈出堆疊。

pushad: 把eax,ecx,edx,ebx,esp,ebp,esi,edi依次壓入堆疊。

popad: 把edi,esi,ebp,esp,ebx,edx,ecx,eax依次彈出堆疊。

bswap: 交換32位暫存器裡位元組的順序。

xchg: 交換字或位元組。( 至少有乙個運算元為暫存器,段暫存器不可作為運算元)

cmpxchg: 比較並交換運算元。(第二個運算元必須為累加器al/ax/eax)

xadd: 先交換再累加。( 結果在第乙個運算元裡 )

xlat: 位元組查表轉換── bx 指向一張 256 位元組的表的起點,al 為表的索引值(0-255,即0-ffh); 返回 al 為查表結果 ( [bx+al]->al)

輸入輸出埠傳送指令標誌傳送指令

lahf:標誌暫存器傳送,把標誌裝入ah。

sahf: 標誌暫存器傳送,把ah內容裝入標誌暫存器。

pushf: 標誌入棧。

popf: 標誌出棧。

pushd: 32位標誌入棧。

popd: 32位標誌出棧。

算數運算類指令包括加減乘除、比較與調整指令。它們可進行8位、16位和32位的運算。參加運算的運算元可以說二進位制數和十進位制數(bcd碼),這些數可以是無符號數,也可以是帶符號數。算術運算指令的主要特點是執行結果影響標誌暫存器的狀態標誌位of、sf、zf、af、pf、cf。

add: 加法。

adc: 帶進製加法。

inc: 加 1。

aaa: 加法的ascii碼調整。

daa: 加法的十進位制調整。

sub: 減法。

sbb: 帶借位減法。

dec: 減 1。

neg: 取補。

cmp: 比較。(兩運算元作減法,僅修改標誌位,不回送結果)

aas: 減法的ascii碼調整。

das: 減法的十進位制調整。

mul: 無符號乘法。結果回送ah和al(位元組運算),或dx和ax(字運算)

imul: 整數乘法。結果回送ah和al(位元組運算),或dx和ax(字運算)

aam: 乘法的ascii碼調整。

div: 無符號除法:商回送al,餘數回送ah,(位元組運算);或商回送ax,餘數回送dx(字運算)

idiv: 整數除法:商回送al,餘數回送ah,(位元組運算);或商回送ax,餘數回送dx(字運算)

aad: 除法的ascii碼調整。

cbw: 位元組轉換為字。(把al中位元組的符號擴充套件到ah中去)

cwd: 字轉換為雙字。(把ax中的字的符號擴充套件到dx中去)

cwde: 字轉換為雙字。 (把ax中的字符號擴充套件到eax中去)

cdq: 雙字擴充套件。(把eax中的字的符號擴充套件到edx中去)

邏輯運算類指令分為邏輯運算指令和移位指令兩大類。

邏輯運算指令

and: 與運算。

or: 或運算。

xor: 異或運算。

not: 取反。

test: 測試。(兩運算元作與運算,僅修改標誌位,不回送結果)

移位指令

shl: 邏輯左移。

sal: 算術左移。(=shl)

shr: 邏輯右移。(每位右移,低位進 cf,高位補 0)

sar: 算術右移。(每位右移, 低位進 cf,高位不變)

rol: 迴圈左移。

ror: 迴圈右移。

rcl: 通過進製的迴圈左移。

rcr: 通過進製的迴圈右移。

以上八種移位指令,其移位次數可達255次。

移位一次時,可直接用操作碼,如:shl ax,1;移位》1次時,則由暫存器cl給出移位次數,如:mov cl,04;shl ax,cl。

串操作指令用於處理存放在儲存器中的資料串,有串傳送、串比較、串掃瞄、串裝入、串儲存。其中,僅有串比較和串掃瞄指令對標誌位of、sf、zf、af、pf、cf有影響。

ds:si ——源串段暫存器:源串變址。

es:di ——目標串段暫存器:目標串變址。

cx: 重複次數計數器。

al/ax: 掃瞄值。

d標誌: 0表示重複操作中si和di應自動增量;1表示應自動減量。

z標誌: 用來控制掃瞄或比較操作的結束。

movs: 串傳送。(movsb 傳送字元, movsw 傳送字, movsd 傳送雙字)

cmps: 串比較。(cmpsb 比較字元, cmpsw 比較字)

scas: 串掃瞄。把al或ax的內容與目標串作比較,比較結果反映在標誌位。

lods: 裝入串。把源串中的元素(字或位元組)逐一裝入al或ax中。(lodsb 傳送字元, lodsw 傳送字,lodsd 傳送雙字)

stos: 儲存串。是lods的逆過程。

rep: 當cx/ecx<>0時重複。

repe/repz: 當zf=1或比較結果相等,且cx/ecx<>0時重複。

repne/repnz: 當zf=0或比較結果不相等,且cx/ecx<>0時重複。

repc: 當cf=1且cx/ecx<>0時重複。

repnc: 當cf=0且cx/ecx<>0時重複。

控制轉移類指令包括無條件轉移指令、條件轉移指令、迴圈控制指令、中斷指令、子程式呼叫和返回指令。

無條件轉移指令

(長轉移)

jmp: 無條件轉移指令。

call: 過程呼叫。

ret/retf: 過程返回。

條件轉移指令

(短轉移,-128到+127的距離內;當且僅當(sf、xor、of)=1時,op1迴圈控制指令

(短轉移)

loop: cx不為零時迴圈。

loope/loopz: cx不為零且標誌z=1時迴圈。

loopne/loopnz: cx不為零且標誌z=0時迴圈。

jcxz: cx為零時轉移。

jecxz: ecx為零時轉移。

中斷指令

int: 中斷指令。

into: 溢位中斷。

iret: 中斷返回。

偽指令

db: 定義位元組(1位元組)

dw: 定義字(2位元組)

dd: 定義雙字(4位元組)

proc: 定義過程。

endp: 過程結束。

segment: 定義段。

assume: 建立段暫存器定址。

ends: 段結束。

end: 程式結束。

處理機控制指令

即標誌處理指令,處理機控制指令完成簡單的控制功能。

clc: (進製位置0指令)

cmc: (進製位求反指令)

clc: (進製位置為0指令)

stc: (進製位置為1指令)

cld: (方向標誌位置0指令)

std: (方向標誌位置1指令)

cli: (中斷標誌置0指令)

sti: (中斷標誌置1指令)

nop: (無操作)

hlt: (停機)

wait: (等待)

esc: (換碼)

lock: (封鎖)

mo彙編指令 彙編指令大全

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

PBS常用指令合集

以下以任務名 job.pbs對應任務id 12341234為代表,提交者使用者名為user。1.基本指令 最常用 提交作業 qsub job.pbs 查詢全部作業 qstat 查詢個人作業 qstat u user 查詢單個作業 qstat 12341234 刪除執行中作業 qdel 1234123...

git操作指令合集

git,需要輸入使用者名稱和郵箱 git config global user.name your name git config global user.email email example.com 注意git config命令的 global 引數,用了這個引數,表示這台電腦上所有的 git倉...