組合語言基本指令

2021-08-20 19:15:17 字數 3757 閱讀 2097

常用命令

執行操作

cmp a,b

比較a與b

mov a,b

把b的值送給a

ret返回主程式

nop無作用

call

呼叫子程式

je 或jz

若相等則跳(機器碼74 或0f84)

jne或jnz

若不相等則跳(機器碼75或0f85)

jmp無條件跳(機器碼eb)

jb若小於則跳

ja若大於則跳

jg若大於則跳

jge若大於等於則跳

jl若小於則跳

jle若小於等於則跳

pop出棧

push

壓棧shl

邏輯左移.

sal算術左移.(=shl)

shr邏輯右移.

sar算術右移.(=shr)

rol迴圈左移.

ror迴圈右移.

rcl通過進製的迴圈左移.

rcr通過進製的迴圈右移.

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

位元組查表轉換.

ini/o埠輸入. ( 語法: in 累加器, )

outi/o埠輸出. ( 語法: out ,累加器 )

lea裝入有效位址.例: lea dx,string ;把偏移位址存到dx.

ldsles

lfslgs

lsslahf

標誌暫存器傳送,把標誌裝入ah.

sahf

標誌暫存器傳送,把ah內容裝入標誌暫存器.

pushf

標誌入棧.

popf

標誌出棧.

pushd

32位標誌入棧.

popd

32位標誌出棧.

add加法.

adc帶進製加法.

inc加 1.

aaa加法的ascii碼調整.

daa加法的十進位制調整.

sub減法.

sbb帶借位減法.

dec減 1.

nec求反(以 0 減之).

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

aas減法的ascii碼調整.

das減法的十進位制調整.

mul無符號乘法.

imul

整數乘法.

aam乘法的ascii碼調整.

div無符號除法.

idiv

整數除法.

aad除法的ascii碼調整.

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

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

cwde

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

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

and與運算.

or或運算.

xor異或運算.

not取反.

test

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

shl邏輯左移.

sal算術左移.(=shl)

shr邏輯右移.

sar算術右移.(=shr)

rol迴圈左移.

ror迴圈右移.

rcl通過進製的迴圈左移.

rcr通過進製的迴圈右移.

移位一次時, 可直接用操作碼. 如 shl ax,1.

移位》1次時, 則由暫存器cl給出移位次數.

如 mov cl,04

shl ax,cl

ds:si

源串段暫存器 :源串變址.

esi目標串段暫存器:目標串變址.

cx重複次數計數器.

al/ax

掃瞄值.

movs

串傳送.( movsb 傳送字元. movsw 傳送字. movsd 傳送雙字. )

cmps

串比較.( cmpsb 比較字元. cmpsw 比較字. )

scas

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

lods

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

stos

儲存串.是lods的逆過程.

rep當cx/ecx0時重複.

repe/repz

當zf=1或比較結果相等,且cx/ecx0時重複.

repne/repnz

當zf=0或比較結果不相等,且cx/ecx0時重複.

repc

當cf=1且cx/ecx0時重複.

repnc

當cf=0且cx/ecx0時重複.

無條件轉移指令 (長轉移)

.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

中斷返回

處理器控制指令

hlt處理器暫停, 直到出現中斷或復位訊號才繼續.

wait

當晶元引線test為高電平時使cpu進入等待狀態.

esc轉換到外處理器.

lock

封鎖匯流排.

nop空操作.

stc置進製標誌位.

clc清進製標誌位.

cmc進製標誌取反.

std置方向標誌位.

cld清方向標誌位.

sti置中斷允許位.

cli清中斷允許位.

dw定義字(2位元組).

proc

定義過程.

endp

過程結束.

segment

定義段.

assume

建立段暫存器定址.

ends

段結束.

end程式結束.

組合語言 彙編指令

功能 用來進行資料傳輸。以 mov a,b 為例,相當於a b。具有以下形式 mov 暫存器,資料 mov 暫存器,暫存器 mov 暫存器,記憶體單元 mov 記憶體單元,暫存器 mov 段暫存器,暫存器 功能 用來做加法。以 add a,b 為例,相當於a a b。具有的形式,和 mov 一樣。功...

組合語言 傳送指令

一.傳送指令 1.通用傳送指令mov mov dst,src 將src傳送到dst中 dstsrc操作位數 mem reg imm8 16 mem reg seg reg8 16 reg seg mem 8 16 mem reg seg 8 16 imm是立即數,reg是暫存器,seg是段暫存器,m...

組合語言常用指令

上次說到組合語言十分重要,所以又為了避免忘記,貼上一些常用彙編指令 mov 指令範例 mov r1,8 mov r2,r1 mov r3,10 mvn 傳送取反賦值 mvn r1,0b10 mvn r2,5 mvn r3,r1 sub 減法 目的暫存器 被減數 不能是立即數 減數 mov r2,4 ...