-----------------------算數運算指令-----------------------
add 加法
adc 帶位加法
sbb 帶位減法
sub 減法.
inc 加法.
nec 求反(以0減之).
neg 求反然後加1,假如neg al相當於not al; inc al
cmp 比較.(兩運算元作減法,僅修改標誌位,不回送結果).
inc dptr 資料指標暫存器值加1 (說明:將16位的dptr加1,當dptr的低位元組(dpl)從ffh溢位至00h時,會使高字
節(dph)加1,不影響任何標誌位)
mul a b 將累加器的值與b暫存器的值相乘,乘積的低位位元組存回累加器,高位位元組存回b暫存器(說明:將累加
器a和暫存器b內的無符號整數相乘,產生16位的積,低位位元組存入a,高位位元組存入b暫存器.如果積大於ffh,則溢位
標誌位(ov)被設定為1,而進製標誌位為0)
imul 整數乘法. 以上兩條,結果回送ah和al(位元組運算),或dx和ax(字運算),
div a b 將累加器的值除以b暫存器的值,結果的商存回累加器,餘數存回b暫存器(說明:無符號的除法運算,
將累加器a除以b暫存器的值,商存入a,餘數存入b。執行本指令後,進製位(c)及溢位位(ov)被清除為0)
idiv 整數除法. 以上兩條,結果回送: 商回送al,餘數回送ah, (位元組運算); 或 商回送ax,餘數回送dx, (字運
算).
aaa 加法的ascii碼調整.
daa 加法的十進位制調整.
aas 減法的ascii碼調整.
das 減法的十進位制調整.
aam 乘法的ascii碼調整.
aad 除法的ascii碼調整.
cbw 位元組轉換為字. (把al中位元組的符號擴充套件到ah中去)
cwd 字轉換為雙字. (把ax中的字的符號擴充套件到dx中去)
cwde 字轉換為雙字. (把ax中的字符號擴充套件到eax中去)
cdq 雙字擴充套件. (把eax中的字的符號擴充套件到edx中去)
-----------------------邏輯運算指令---------------------------------
and 與運算.
or 或運算.
xor 異或運算.
not 取反.
test 測試.(兩運算元作與運算,僅修改標誌位,不回送結果).
shl 邏輯左移.
shr 邏輯右移.
sal 算術左移.(=shl)
sar 算術右移. (左移是一樣的,右移是不同的.邏輯右移補0,算術右移補最高位)
rol 迴圈左移. ( ((unsigned char)a) << 5 ) | ( ((unsigned char)a) >> 3 )
rol eax,cl ==> eax=(eax<>(32-cl));
ror 迴圈右移. ror eax,cl ==> eax=(eax>>cl)+(eax<<(32-cl));
rcl 通過進製的迴圈左移.
rcr 通過進製的迴圈右移.
以上八種移位指令,其移位次數可達255次.
移位一次時, 可直接用操作碼. 如 shl ax,1.
移位》1次時, 則由暫存器cl給出移位次數.
如 mov cl,04
shl ax,cl
-----------------------資料轉移指令---------------------------------
1. 通用資料傳送指令.
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 )
2. 輸入輸出埠傳送指令.
in i/o埠輸入. ( 語法: in 累加器, )
out i/o埠輸出. ( 語法: out ,累加器 )
輸入輸出埠由立即方式指定時, 其範圍是 0-255; 由暫存器 dx 指定時,
其範圍是 0-65535.
Win32彙編 MOVS,STOS,REP 指令
movs 指令用於將乙個記憶體運算元的值 複製 到另乙個記憶體運算元,使用 movs 前要把目標記憶體的位址移入 edi,源目標記憶體移入 esi。記憶方法 d表示destination,目標 s表示source,源 執行指令,注意 es edi 和 ds esi 的區別,兩個段不一樣。movs d...
Win32彙編基礎
常用指令 mov 目標運算元,源運算元 mov eax,0x0 進行資料傳遞 movzx mov zero x 以0填充高位,用法同上,push poppushad 所有暫存器壓棧 8個 popad 所有暫存器出棧 8個 lea 取位址指令,類似c語言中的 call 呼叫函式指令 add 加 sub...
Win32彙編 實數
386 選擇的處理器 model flat,stdcall option casemap none 指明識別符號大小寫敏感 include kernel32.inc 要引用的標頭檔案 includelib kernel32.lib 要引用的庫檔案 includelib msvcrt.lib 引用c庫...