add
add 目的,源 ; 加法指令,結果放入目運算元,運算元的長度必須相同
adc
adc 目的,源 ; 帶進位加法,目的=目的+源+CF
and
and 目的,源 ; 邏輯按位與 指令,結果放到目的運算元,
; 影響標志位OF、SF、ZF、PF和CF,
call
call s
; 使call s下一條指令的 CS:IP 入堆疊(段內轉移只有 IP 入堆疊),跳轉到標號處
cmp
cmp des, sou ; des - sou 不改變 源/目的 的值
注:如果比較的是兩個無符號數,則零標志位和進位標志位表示的兩個運算元之間的關系如右表所示:
| CMP結果 | ZF | CF |
|---|---|---|
| 目的運算元 < 源運算元 | 0 | 1 |
| 目的運算元 > 源運算元 | 0 | 0 |
| 目的運算元 = 源運算元 | 1 | 0 |
注:如果比較的是兩個有符號數,則符號標志位、零標志位和溢位標志位表示的兩個運算元之間的關系如右表所示:
| CMP結果 | 標志位 |
|---|---|
| 目的運算元 < 源運算元 | SF ≠ OF |
| 目的運算元 > 源運算元 | SF=OF |
| 目的運算元 = 源運算元 | ZF=1 |
cmov
| 指令 | 同義名 | 條件 | 描述 |
|---|---|---|---|
| cmovne | cmovnz | -ZF | ZF不為0時,進行傳送 |
dec
dec 目的 ; 減一(自減)指令,
inc
inc 目的 ; 加一(自增)指令,和add 目的,1效果相同,inc的機器碼更短,,執行快
jmp
無條件跳轉
jmp 標號
jmp short 標號 ; 段內短轉移,位移范圍(-128~127)
jmp near ptr 標號 ; 段內近轉移,位移范圍(-32768~32767)
jmp far ptr 標號 ; 段間轉移
jmp word ptr 記憶體單元地址 ; 段內轉移
jmp dword ptr 記憶體單元地址 ; 段間轉移
jne、jnz
jne s ; 條件轉移指令,當ZF = 0,轉至標號處執行,
jnz s ; 條件轉移指令,當ZF != 0,轉至標號處執行,
lea
lea 目的,源
; 取有效地址指令,獲取的是源的記憶體單元的地址(偏移地址)不是資料
; 源運算元必須是存盤器運算元(ds:[0123H])或者標號
loop
s:
add ax, ax
loop s ; cx暫存器不為0,則跳轉到s;s標號
; 執行時,先(cx)=(cx)-1,再判斷cx是否為0
mov
mov ax, 0 ; 把 0 復制到 ax
mov byte ptr xx:[x], 0 ; 8 位數傳送 ptr – pointer (指標)縮寫,
mov word ptr xx:[x], 0 ; 16 位數傳送
movzx
movzx 16位暫存器, 8位暫存器
; 把8位暫存器的值復制給16位暫存器,前面用0填充
; 只適用于無符號整數
mul
乘法指令
mul 暫存器或記憶體單元
; 兩個相乘的數,位數必須是相同的,如果是8為其中一個默認在AL,結果存放在AX
; 如果是16位其中一個默認在AX,結果高位存放在DX,低位存放在AX
not
not 目的 ; 邏輯非 指令;結果放到目的運算元,
; 不影響標志位,
offset
mov ax,offset 標號 ; 取標號的偏移地址
; offset是運算子不是匯編指令,由編譯器執行,
or
or 目的,源 ; 邏輯按位或 指令;結果放到目的運算元,
; 影響標志位OF、SF、ZF、PF和CF,
push
push ax
; 將ax暫存器的資料壓入堆疊中
; 執行時,先SP - 2,隨后寫入資料,高位對高位,低位對低位.
pop
pop ax
; 從堆疊中取出資料存入ax
; 執行時,先取出資料寫入ax暫存器,隨后SP + 2
注:如果暫存器是32位的則SP ± 4,(push/pop 8位暫存器 報錯)
ret/retf
ret 相當于 pop ip
retf 相當于 pop ip pop cs
sub
sub 目的,源 ; 減法指令,結果放入目運算元,
sbb
sbb 目的,源 ; 帶借位減法,目的=目的-源-CF
test
test ax, bx
; 將兩個運算元進行 邏輯與 運算,并根據運算結果設定相關的標志位,
; 但是兩個運算元不會被改變,運算結果在設定過相關標記位后會被丟棄,
; TEST AX,BX 與AND AX,BX命令有相同效果,只是Test指令不改變AX和BX的內容,
; 而AND指令會把結果保存到AX中,
; 影響標志:C,O,P,Z,S(其中C與O兩個標志會被設為0)
Intel的技術手冊
TEMP ← SRC1 AND SRC2; // 邏輯與的結果賦值給TEMP
SF ← MSB(TEMP); // 最高位賦值給 SF 標志位
IF TEMP = 0
THEN ZF ← 1; // TEMP == 0 ZF 標志位設定1
ELSE ZF ← 0; // TEMP != 0 ZF 標志位設定0
FI:
PF ← BitwiseXNOR(TEMP[0:7]); // PE = 將TEMP的低8位,從第0位開始,逐位取同或,也就是第0位與第1位的同或結果,去和第2位同或,結果再去和第3位同或....直到和第7位同或,
CF ← 0; // CF 和 OF 標志位設定0
OF ← 0;
(* AF is undefined *) // AF 不確定
xchg
xchg ax,bx ; 交換兩個暫存器的資料,兩個運算元的型別要相同,記憶體和記憶體之間不能使用
xor
xor 目的,源 ; 邏輯按位異或 指令;結果放到目的運算元,
; 影響標志位OF、SF、ZF、PF和CF,
標志暫存器
ZF(零標志位)
用于記錄相關指令執行后的結果是否為0
為0: ZF = 1 不為0: ZF = 0
影響ZF的指令:add、sub、mul、div、inc、or、and等(大多數是運算指令)
PF(奇偶標志位)
用于記錄相關指令執行后的結果所有bit位中1的數量是否為偶數
偶數: PF = 1 奇數: PF = 0
SF(符號標志位)
用于記錄相關指令執行后的結果是否為負
負: SF = 1 非負 :SF = 0
CF(進位標志位)
一般情況下,在進行無符號運算時,記錄運算結果的最高有效位向更高位的進位值(或借位值)
發生進位(借位):CF = 1 未發生進位(借位): SF = 0
OF(溢位標志位)
一般情況下,在進行有符號運算時,記錄運算結果是否發生溢位
發生溢位:OF = 1 未發生溢位: OF = 0
未完待續,持續更新中...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539609.html
標籤:其他
上一篇:PHP Firebase HTTP v1 API 新版推送
下一篇:python基礎-模塊和包
