win32彙編指令彙總

2021-09-11 01:50:11 字數 2772 閱讀 9587

-----------------------算數運算指令-----------------------

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庫...