彙編中的操作指令

2021-09-24 06:19:00 字數 2706 閱讀 4998

**不太會搞,,,將就著看吧。。。

說明:小括號裡是指令格式,後面是指令的功能,opd是目的運算元,ops是源運算元
1、加法指令

add加法(add opd,ops):       opd<—opd+ops

adc帶進製加法(adc opd,ops): opd<—opd+ops+cf

inc加1(inc opd):opd的內容加1,opd可以是reg或mem,不影響cf的值

(reg:暫存器 mem:記憶體單元 imm:立即數)

2、減法指令

sub減法指令(sub opd,ops):opd<—opd-ops

sbb帶借位減法指令(sbb opd,ops):opd<—opd-ops-cf

dec減1指令(dec opd):opd<—opd-1

neg求補指令【neg opd(opd可以是reg或mem)】:對運算元opd進行求補運算,即對運算元opd連同符號位求反加1,並將結果送回opd

對0求補時,cf=0,其他情況下cf=1

cmp比較指令(cmp opd,ops):cmp指令與sub指令類似,將兩個運算元相減,結果不送回opd。改變標誌位

3、乘法指令

mul 無符號數的(mul opd):運算元可以是reg或mem,不能是立即數

opd為8位時,ax<—(al)*opd  al是隱含運算元

opd為16位時,(dx)(ax)<—(ax)*opd 同理,ax是隱含運算元

imul 有符號數的:與無符號數的類似

4、除法指令

div 無符號除法(div opd)和無符號數的乘法指令類似

idiv 有符號數除法

and邏輯與(都為1時取1)

or邏輯或(其1為1則取1)

not邏輯非(本來值的反值)

xor邏輯異或(排斥相同,乙個為0乙個為1時結果為1)

test測試指令(進行邏輯與操作,結果不送回目的運算元,僅建立結果狀態標誌,可用來測試某位是否為0)

無符號數操作指令

指令                          轉移條件               

ja/jnbe cf=0andzf=0 a>b

jae/jnb cf=0 a>=b

jb/jane cf=1 a帶符號數轉移指令

指令 轉移條件

jg/jnle zf=0andsf=of a>b

jge/jnl sf=of a>=b

jl/jnge sf不等於of a其實意思就是

比如ja,當a>b時轉移,否則繼續執行下一條指令,

一般移位:

sal/sar:算數左移/右移

shl/shr:邏輯左移/右移

算數左移和邏輯左移一樣,運算元左移,最低位補0,最高位進cf

算數右移:運算元右移,最高位不變,最低位進cf

邏輯右移:運算元右移,最高位補0,最低位進cf

debug中用shr和shl

迴圈移位:

rol opd,ops:不帶進製迴圈左移

ror opd,ops:不帶進製迴圈右移

rcl opd,ops:帶進製迴圈左移

rcr opd,ops:帶進製迴圈右移

取串:把源串當中si指向的字或位元組送ax或al

lodsb         取源串乙個位元組 

lodsw 取源串乙個字

存串

stosb       送位元組到目的串

stosw 送字到目的串

串傳送

movsb   位元組傳送

movsw 字傳送

串比較

cmpsb  位元組比較

cmpsw  字比較

串搜尋

scasb   搜尋位元組

scasw 搜尋字

重複字首 rep

彙編中的指令

跳轉指令用於實現程式流程的跳轉,在 arm 程式中有兩種方法可以實現程式流程的跳 1 使用專門的跳轉指令。2 直接向程式計數器 pc 寫入跳轉位址值。通過向程式計數器 pc 寫入跳轉位址值,可以實現在 4gb 的位址空間中的任意跳轉,在跳轉之前結合使用 mov lr pc 等類似指令,可以儲存下一條...

彙編中的重複指令

duprep是字串操作指令movs,cmps等的字首,在cx不等於0的情況下,對字串執行重複操作。rep的重複次數也存在cx中,但是其實cx本身不具有讓cx 1的功能,一般是rep後面跟著的指令執行之後自動讓cx 1 還可以擴充套件出 repe 相等時重複 repne 不相等時重複 repz 為零時...

GNU ARM中的彙編指令 word

gnu arm中的彙編 指令.word 彙編中的標號通常情況下是用來標明程式段的起始位址的,如 start b reset ldr pc,undefined instruction ldr pc,software interrupt ldr pc,prefetch abort ldr pc,data...