X86匯編語言/基本指令集
< X86組合語言
首頁 > 電腦科學與技術書架 > X86匯編語言 > 基本指令集
數據搬移指令(Data transfer instructions)
編輯- MOV:在通用暫存器之間移動數據;在主記憶體和通用或區段暫存器之間移動數據;將立即數值移動到通用暫存器。(Move data between general-purpose registers; move data between memory and general purpose or segment registers; move immediates to general-purpose registers.)
- CMOVE/CMOVZ:Conditional move if equal/Conditional move if zero.
- CMOVNE/CMOVNZ:Conditional move if not equal/Conditional move if not zero.
- CMOVA/CMOVNBE:Conditional move if above/Conditional move if not below or equal.
- CMOVAE/CMOVNB:Conditional move if above or equal/Conditional move if not below.
- CMOVB/CMOVNAE:Conditional move if below/Conditional move if not above or equal.
- CMOVBE/CMOVNA:Conditional move if below or equal/Conditional move if not above.
- CMOVG/CMOVNLE:Conditional move if greater/Conditional move if not less or equal.
- CMOVGE/CMOVNL:Conditional move if greater or equal/Conditional move if not less.
- CMOVL/CMOVNGE:Conditional move if less/Conditional move if not greater or equal.
- CMOVLE/CMOVNG:Conditional move if less or equal/Conditional move if not greater.
- CMOVC:Conditional move if carry.
- CMOVNC:Conditional move if not carry.
- CMOVO:Conditional move if overflow.
- CMOVNO:Conditional move if not overflow.
- CMOVS:Conditional move if sign (negative).
- CMOVNS:Conditional move if not sign (non-negative).
- CMOVP/CMOVPE:Conditional move if parity/Conditional move if parity even.
- CMOVNP/CMOVPO:Conditional move if not parity/Conditional move if parity odd.
- XCHG:交換。(Exchange.)
- BSWAP:Byte swap.
- XADD:Exchange and add.
- CMPXCHG:Compare and exchange.
- CMPXCHG8B:Compare and exchange 8 bytes.
- PUSH:Push onto stack.
- POP:Pop off of stack.
- PUSHA/PUSHAD:Push general-purpose registers onto stack.
- POPA/POPAD:Pop general-purpose registers from stack.
- CWD/CDQ:Convert word to doubleword/Convert doubleword to quadword.
- CBW/CWDE:Convert byte to word/Convert word to doubleword in EAX register.
- MOVSX:Move and sign extend.
- MOVZX:Move and zero extend.
二進位算術指令(Binary Arithmetic Instructions)
編輯- ADCX:Unsigned integer add with carry.
- ADOX:Unsigned integer add with overflow.
- ADD:Integer add.
- ADC:含進位的加法。(Add with carry.)
- SUB:減法。(Subtract.)
- SBB:含借位的減法。Subtract with borrow.
- IMUL:有號數乘法。(Signed multiply.)
- MUL:無號數乘法。(Unsigned multiply.)
- IDIV:有號數除法。(Signed divide.)
- DIV:無號數除法。(Unsigned divide.)
- INC:加一。(Increment.)
- DEC:減一。(Decrement.)
- NEG:Negate.
- CMP:比較。(Compare.)
十進位算術指令(Decimal Arithmetic Instructions)
編輯- DAA:Decimal adjust after addition.
- DAS:Decimal adjust after subtraction.
- AAA:ASCII adjust after addition.
- AAS:ASCII adjust after subtraction.
- AAM:ASCII adjust after multiplication.
- AAD:ASCII adjust before division.
邏輯指令(Decimal Arithmetic Instructions)
編輯- AND:Perform bitwise logical AND.
- OR:Perform bitwise logical OR.
- XOR:Perform bitwise logical exclusive OR.
- NOT:Perform bitwise logical NOT
移位及輪轉指令(Shift and Rotate Instruction)
編輯- SAR:Shift arithmetic right.
- SHR:Shift logical right.
- SAL/SHL:Shift arithmetic left/Shift logical left.
- SHRD:Shift right double.
- SHLD:Shift left double.
- ROR:Rotate right.
- ROL:Rotate left.
- RCR:Rotate through carry right.
- RCL:Rotate through carry left
位元及位元組指令(Bit and Byte Instructions)
編輯- BT:Bit test.
- BTS:Bit test and set.
- BTR:Bit test and reset.
- BTC:Bit test and complement.
- BSF:Bit scan forward.
- BSR:Bit scan reverse.
- SETE/SETZ:Set byte if equal/Set byte if zero.
- SETNE/SETNZ:Set byte if not equal/Set byte if not zero.
- SETA/SETNBE:Set byte if above/Set byte if not below or equal.
- SETAE/SETNB/SETNC:Set byte if above or equal/Set byte if not below/Set byte if not carry.
- SETB/SETNAE/SETC:Set byte if below/Set byte if not above or equal/Set byte if carry.
- SETBE/SETNA:Set byte if below or equal/Set byte if not above.
- SETG/SETNLE:Set byte if greater/Set byte if not less or equal.
- SETGE/SETNL:Set byte if greater or equal/Set byte if not less.
- SETL/SETNGE:Set byte if less/Set byte if not greater or equal.
- SETLE/SETNG:Set byte if less or equal/Set byte if not greater.
- SETS:Set byte if sign (negative).
- SETNS:Set byte if not sign (non-negative).
- SETO:Set byte if overflow.
- SETNO:Set byte if not overflow.
- SETPE/SETP:Set byte if parity even/Set byte if parity.
- SETPO/SETNP:Set byte if parity odd/Set byte if not parity.
- TEST:Logical compare.
- CRC32:Provides hardware acceleration to calculate cyclic redundancy checks for fast and efficient implementation of data integrity protocols.
- POPCNT:This instruction calculates of number of bits set to 1 in the second operand (source) and returns the count in the first operand (a destination register)
控制轉移指令(Control Transfer Instruction)
編輯- JMP:無條件跳躍(Jump.)
- JE/JZ:Jump if equal/Jump if zero.
- JNE/JNZ:Jump if not equal/Jump if not zero.
- JA/JNBE:Jump if above/Jump if not below or equal.
- JAE/JNB:Jump if above or equal/Jump if not below.
- JB/JNAE:Jump if below/Jump if not above or equal.
- JBE/JNA:Jump if below or equal/Jump if not above.
- JG/JNLE:Jump if greater/Jump if not less or equal.
- JGE/JNL:Jump if greater or equal/Jump if not less.
- JL/JNGE:Jump if less/Jump if not greater or equal.
- JLE/JNG:Jump if less or equal/Jump if not greater.
- JC:Jump if carry.
- JNC:Jump if not carry.
- JO:Jump if overflow.
- JNO:Jump if not overflow.
- JS:Jump if sign (negative).
- JN:Jump if not sign (non-negative).
- JPO/JNP:Jump if parity odd/Jump if not parity.
- JPE/JP:Jump if parity even/Jump if parity.
- JCXZ/JECXZ:Jump register CX zero/Jump register ECX zero.
- LOOP:Loop with ECX counter.
- LOOPZ/LOOPE:Loop with ECX and zero/Loop with ECX and equal.
- LOOPNZ/LOOPNE:Loop with ECX and not zero/Loop with ECX and not equal.
- CALL:呼叫副程式或函數。(Call procedure.)
- RET:從副程式或函數返回。(Return.)
- IRET:從插斷返回。(Return from interrupt.)
- INT:軟件插斷。(Software interrupt.)
- INTO:Interrupt on overflow.
- BOUND:Detect value out of range.
- ENTER:High-level procedure entry.
- LEAVE:High-level procedure exit
字串指令(String Instruction)
編輯- MOVS/MOVSB:Move string/Move byte string.
- MOVS/MOVSW:Move string/Move word string.
- MOVS/MOVSD:Move string/Move doubleword string.
- CMPS/CMPSB:Compare string/Compare byte string.
- CMPS/CMPSW:Compare string/Compare word string.
- CMPS/CMPSD:Compare string/Compare doubleword string.
- SCAS/SCASB:Scan string/Scan byte string.
- SCAS/SCASW:Scan string/Scan word string.
- SCAS/SCASD:Scan string/Scan doubleword string.
- LODS/LODSB:Load string/Load byte string.
- LODS/LODSW:Load string/Load word string.
- LODS/LODSD:Load string/Load doubleword string.
- STOS/STOSB:Store string/Store byte string.
- STOS/STOSW:Store string/Store word string.
- STOS/STOSD:Store string/Store doubleword string.
- REP:Repeat while ECX not zero.
- REPE/REPZ:Repeat while equal/Repeat while zero.
- REPNE/REPNZ:Repeat while not equal/Repeat while not zero.
輸入及輸出指令(I/O Instruction)
編輯- IN:Read from a port.
- OUT:Write to a port.
- INS/INSB:Input string from port/Input byte string from port.
- INS/INSW:Input string from port/Input word string from port.
- INS/INSD:Input string from port/Input doubleword string from port.
- OUTS/OUTSB:Output string to port/Output byte string to port.
- OUTS/OUTSW:Output string to port/Output word string to port
進入及離開指令(Enter and Leave Instruction)
編輯- ENTER:High-level procedure entry.
- LEAVE:High-level procedure exit
旗標控制(EFLAG)指令(Flag Control (EFLAG) Instructions)
編輯- STC:設置進位旗標。(Set carry flag.)
- CLC:清除進位旗標。(Clear the carry flag.)
- CMC:Complement the carry flag.
- CLD:Clear the direction flag.
- STD:Set direction flag.
- LAHF:Load flags into AH register.
- SAHF:Store AH register into flags.
- PUSHF/PUSHFD:Push EFLAGS onto stack.
- POPF/POPFD:Pop EFLAGS from stack.
- STI:設置插斷旗標。(Set interrupt flag.)
- CLI:清除插斷旗標。(Clear the interrupt flag)
區段暫存器指令(Segment Register Instruction)
編輯- LDS:Load far pointer using DS.
- LES:Load far pointer using ES.
- LFS:Load far pointer using FS.
- LGS:Load far pointer using GS.
- LSS:Load far pointer using SS
雜項指令(Miscellaneous Instruction)
編輯- LEA:Load effective address.
- NOP:無運算。(No operation.)
- UD:Undefined instruction.
- XLAT/XLATB:Table lookup translation.
- CPUID:Processor identification.
- MOVBE: Move data after swapping data bytes.
- PREFETCHW: Prefetch data into cache in anticipation of write.
- PREFETCHWT: Prefetch hint T1 with intent to write.
- CLFLUSH:Flushes and invalidates a memory operand and its associated cache line from all levels of the processor’s cache hierarchy.
- CLFLUSHOPT:Flushes and invalidates a memory operand and its associated cache line from all levels of the processor’s cache hierarchy with optimized memory system throughput
使用者模式擴展狀態的儲存及還原指令(User Mode Extended Sate Save/Restore Instruction)
編輯- XSAVE:Save processor extended states to memory.
- XSAVEC:Save processor extended states with compaction to memory.
- XSAVEOPT:Save processor extended states to memory, optimized.
- XRSTOR:Restore processor extended states from memory.
- XGETBV:Reads the state of an extended control register
亂數產生指令(Random Number Generator Instructions)
編輯- RDRAND:Retrieves a random number generated from hardware.
- RDSEED:Retrieves a random number generated from hardwar
(BMI1, BMI2)
編輯- ANDN:Bitwise AND of first source with inverted 2nd source operands.
- BEXTR:Contiguous bitwise extract.
- BLSI:Extract lowest set bit.
- BLSMSK:Set all lower bits below first set bit to 1.
- BLSR:Reset lowest set bit.
- BZHI:Zero high bits starting from specified bit position.
- LZCNT:Count the number leading zero bits.
- MULX:Unsigned multiply without affecting arithmetic flags.
- PDEP:Parallel deposit of bits using a mask.
- PEXT:Parallel extraction of bits using a mask.
- RORX:Rotate right without affecting arithmetic flags.
- SARX:Shift arithmetic right.
- SHLX:Shift logic left.
- SHRX:Shift logic right.
- TZCNT:Count the number trailing zero bits
(Detection of VEX-encoded GPR Instructions, LZCNT and TZCNT, PREFETCH)
編輯以下內容待整理
編輯數據搬移指令 (Data transfer instructions)
編輯整數運算指令
編輯加法
編輯減法
編輯乘法
編輯除法
編輯邏輯運算指令
編輯位元位移指令
編輯程式流程控制
編輯跳越指令
編輯無條件跳越
編輯無號數運算(比較)後使用的條件跳越指令
編輯指令 | 意義 | 條件 | |
je | 若等於則跳越 | x = y | ZF=1 |
jne | 若不等於則跳越 | x≠y | ZF=0 |
ja jnbe |
若高於則跳越 若不低於則跳越 |
x > y | CF=0且ZF=0 |
jae jnb |
若高於或等於則跳越 若不低於或等於則跳越 |
x≧y | CF=0 |
jb jnae |
若低於則跳越 若不高於或等於則跳越 |
x < y | CF=1 |
jbe jna |
若低於或等於則跳越 若不高於則跳越 |
x≦y | CF=1或ZF=1 |
有號數運算(比較)後使用的條件跳越指令
編輯指令 | 意義 | 條件 | |
je | 若等於則跳越 | x = y | ZF=1 |
jne | 若不等於則跳越 | x≠y | ZF=0 |
jg jnle |
若大於則跳越 若不低於或等於則跳越 |
x > y | ZF=0且SF=OF |
jge jnl |
若高於於或等於則跳越 若不低於則跳越 |
x≧y | SF=OF |
jl jngl |
若低於則跳越 若不大於或等於則跳越 |
x < y | SF≠OF |
jle jng |
若低於或等於則跳越 若不大於則跳越 |
x≦y | ZF=1或SF≠OF |
依旗號狀態判斷的條件跳越指令
編輯指令 | 意義 | 條件 |
jc | 若進位則跳越 | CF=1 |
jnc | 若無進位則跳越 | CF=0 |
js | 若為負數則跳越 | SF=1 |
jns | 若為正數則跳越 | SF=0 |
jz | 若等於0則跳越 | ZF=1 |
jnz | 若不等於0則跳越 | ZF=0 |
jp | 若同位則跳越 | PF=1 |
jnp | 若沒有同位則跳越 | PF=0 |
jpe | 若偶同位則跳越 | PF=1 |
jpo | 若奇同位則跳越 | PF=0 |
jo | 若溢位則跳越 | OF=1 |
jno | 若沒有溢位則跳越 | OF=0 |
迴圈控制指令
編輯中斷指令(Interrupt Instruction)
編輯旗標控制相關指令
編輯中斷標誌位
編輯進位標誌位
編輯- 以下暫存
mov:這是組語裡面最常見的指令,將數值記入暫存器或是將A暫存器的內涵值移入B暫存器等等. 範例語法: mov 目的,來源 <==將來源值移入目的暫存器 mov DX,[zzz] <==將zzz變數內涵移入DX暫存器 mov EAX,14h <==移14h值移入EAX
int:呼叫中斷來處理之前暫存器內涵值所對應的工作.例如Linux是int 0x80. add:加 sub:減 mul:乘 div:除