星期六, 7月 28, 2012

組合語言

參考來源==> http://masm1215.myweb.hinet.net/menu.htm

組合語言指令介紹
MOV 目的,來源
動作:將來源資料複製到目的

XCHG 參數1,參數2
動作:將參數1與參數2的內含值對調

PUSH 來源
動作:將來源資料放入堆疊記憶體,即將來源放入SS:[SP-2]然後SP減2

POP 目的
動作:從堆疊取出資料放入目的,即SP加2後取出SS:[SP-2]的資料放到目的


LEA 暫存器,記憶體
動作:讓暫存器指向指定的記憶體位址,此時暫存器的內容為該記憶體的位址,而非記憶體的內含值

MOVSB,MOVSW,MOVSD
動作:複製DS:[SI]至ES:[DI]單位為1/2/4 bytes,複製後SI及DI的值加1/2/4


STOSB,STOSW,STOSD
動作:複製DS:[SI]至AL/AX/EAX,複製後SI加1/2/4


ADD 目的,來源
動作:目的=目的+來源
ACD 目的,來源
動作:目的=目的+來源+C旗標

INC 運算元
動作:運算元=運算元+1

SUB 目的,來源
動作:目的=目的-來源

SBB
動作:目的=目的-來源-C旗標

DEC
動作:運算元=運算元-1

CMP 目的,來源
動作:兩者比較,相當於目的減來源,但只回應至旗標

MUL 目的
動作:AL/AX/EAX乘以目的,結果放至AX/DX:AX/EDX:EAX

IMUL 目的
動作:有號的AL/AX/EAX乘以有號的目的,結果放至AX/DX:AX/EDX:EAX

IMUL 目的,來源
動作:有號的來源乘以有號的目的,結果放至X/DX:AX/EDX:EAX
IMUL 目的,來源,立即值
動作:有號的來源乘以立即值,結果放至目的

DIV 來源
動作:AX/DX:AX/EDX:EAX除以來源,商放入AL/AX/EAX,餘數放入AH/DX/EDX

IDIV
動作:有號的AX/DX:AX/EDX:EAX除以來源,商放入AL/AX/EAX,餘數放入AH/DX/EDX

AND 目的,來源
動作:目的=目的 and 來源

OR 目的,來源
動作:目的=目的 or 來源

XOR 目的,來源
動作:目的=目的 xor 來源

TEST 目的,來源
動作:會做與 and 相同的動作,但只回應至旗標

NOT 運算元
動作:運算元=not 運算元

SHR 目的,CL
動作:將目的所有bit右移CL格,bit7補0,bit0放入C旗標

SHL 目的,CL
動作:將目的所有bit左移CL格,bit0補0,bit7放入C旗標

SAR 目的,CL
動作:將目的所有bit除了bit7不變,其餘右移CL格,bit0放入C旗標

SAL 目的,CL
動作:將目的所有bit左移CL格,bit0補0,bit7放入C旗標

ROR 目的,CL
動作:將目的所有bit右旋CL格,即bit7會因右移到bit0及C旗標

ROL 目的,CL
動作:將目的所有bit左旋CL格,即bit0會因左移到bit7及C旗標

RCR 目的,CL
動作:將目的所有bit包含C旗標,全部右旋CL格

RCL 目的,CL
動作:將目的所有bit包含C旗標,全部左旋CL格

JMP 位址
動作:跳躍至指定位址

AAD
動作:將除法完後的AL換算成十進制,十位數從AH減,個位數放入AL

CALL 位址
動作:呼叫指定位址的副程式

RET 返回
動作:副程式結束,返回,即 pop ip

INT 中斷號碼
動作:呼叫中斷副程式

IRET
動作:中斷副程式結束,返回

LOOP,LOOPZ,LOOPNZ 位址
動作:假如 CX>1,Z=1,Z=0 時,跳躍至指定位址,且CX值減1

IN 目的(AL/AX),來源(DX)
動作:從來源port,輸入資料至 AL/AX

OUT 目的(DX),來源(AL/AX)
動作:將一資料,輸出至目的port

沒有留言:

張貼留言