汇编
汇编指令机器码对应列表
白嫖的,链接:
l reg8: 8位寄存器。
l reg16: 16位寄存器。
l mem8: 8位内存数值。
l mem16: 16位内存数值。
l immed8: 8位立即数值。
l immed16: 16位立即数值。
l immed32: 32位立即数值。
l segReg: 16位段寄存器。
| 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 | 机器码 | 指令 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | ADD reg8/mem8,reg8 | 10 | ADC reg8/mem8,reg8 | 20 | AND reg8/mem8,reg8 | 30 | XOR reg8/mem8,reg8 | 40 | INC ax | 50 | PUSH ax | 60 | PUSHA | 70 | JO immed8 | 80 | Table2 reg8 | 90 | NOP | A0 | MOV al,[mem8] | B0 | MOV al,immed8 | C0 | Table1 reg8 | D0 | Table1 reg8 | E0 | LOOPNE immed8 | F0 | LOCK |
| 1 | ADD reg16/mem16,reg16 | 11 | ADC reg16/mem16,reg16 | 21 | AND reg16/mem16,reg16 | 31 | XOR reg16/mem16,reg16 | 41 | INC cx | 51 | PUSH cx | 61 | POPA | 71 | JNO immed8 | 81 | Table2 reg16 | 91 | XCHG ax,cx | A1 | MOV ax,[mem16] | B1 | MOV cl,immed8 | C1 | Table1 reg8, reg16 | D1 | Table1 reg16 | E1 | LOOPE immed8 | F1 | Not used |
| 2 | ADD reg8,reg8/mem8 | 12 | ADC reg8,reg8/mem8 | 22 | AND reg8,reg8/mem8 | 32 | XOR reg8,reg8/mem8 | 42 | INC dx | 52 | PUSH dx | 62 | BOUND reg16/mem16,reg16 | 72 | JB immed8 | 82 | Table2 reg8 | 92 | XCHG ax,dx | A2 | MOV [mem8],al | B2 | MOV dl,immed8 | C2 | RET immed16 | D2 | Table1 reg8 | E2 | LOOP immed8 | F2 | REPNE |
| 3 | ADD reg16,reg16/mem16 | 13 | ADC reg16,reg16/mem16 | 23 | AND reg16,reg16/mem16 | 33 | XOR reg16,reg16/mem16 | 43 | INC bx | 53 | PUSH bx | 63 | Not used | 73 | JNB immed8 | 83 | Table2 reg8, reg16 | 93 | XCHG ax,bx | A3 | MOV [mem16],ax | B3 | MOV bl,immed8 | C3 | RET | D3 | Table1 reg16 | E3 | JCXZ immed8 | F3 | REP |
| 4 | ADD AL,immed8 | 14 | ADC al,immed8 | 24 | AND al,immed8 | 34 | XOR al,immed8 | 44 | INC sp | 54 | PUSH sp | 64 | Not used | 74 | JZ immed8 | 84 | TEST reg8/mem8,reg8 | 94 | XCHG ax,sp | A4 | MOVSB | B4 | MOV ah,immed8 | C4 | LES reg16/mem16,mem16 | D4 | AAM | E4 | IN al,immed8 | F4 | HLT |
| 5 | ADD AX,immed16 | 15 | ADC ax,immed16 | 25 | AND ax,immed16 | 35 | XOR ax,immed16 | 45 | INC bp | 55 | PUSH bp | 65 | Not used | 75 | JNZ immed8 | 85 | TEST reg16/mem16,reg16 | 95 | XCHG ax,bp | A5 | MOVSW | B5 | MOV ch,immed8 | C5 | LDS reg16/mem16,mem16 | D5 | AAD | E5 | IN ax,immed16 | F5 | CMC |
| 6 | PUSH es | 16 | PUSH ss | 26 | Segment override | 36 | Segment override | 46 | INC si | 56 | PUSH si | 66 | Not used | 76 | JBE immed8 | 86 | XCHG reg8,reg8 | 96 | XCHG ax,si | A6 | CMPSB | B6 | MOV dh,immed8 | C6 | MOV reg8/mem8,immed8 | D6 | Not used | E6 | OUT al,immed8 | F6 | Table3 reg8 |
| 7 | POP es | 17 | POP ss | 27 | DAA | 37 | AAA | 47 | INC di | 57 | PUSH di | 67 | Not used | 77 | JA immed8 | 87 | XCHG reg16,reg16 | 97 | XCHG ax,di | A7 | CMPSW | B7 | MOV bh,immed8 | C7 | MOV reg16/mem16,immed16 | D7 | XLAT [bx] | E7 | OUT ax,immed16 | F7 | Table3 reg16 |
| 8 | OR reg8/mem8,reg8 | 18 | SBB reg8/mem8,reg8 | 28 | SUB reg8/mem8,reg8 | 38 | CMP reg8/mem8,reg8 | 48 | DEC ax | 58 | POP ax | 68 | PUSH immed16 | 78 | JS immed8 | 88 | MOV reg8/mem8,reg8 | 98 | CBW 99CWD | A8 | TEST al,[mem8] | B8 | MOV ax,immed16 | C8 | ENTER immed16, immed8 | D8 | ESC immed8 | E8 | CALL immed16 | F8 | CLC |
| 9 | OR reg16/mem16,reg16 | 19 | SBB reg16/mem16,reg16 | 29 | SUB reg16/mem16,reg16 | 39 | CMP reg16/mem16,reg16 | 49 | DEC cx | 59 | POP cx | 69 | IMUL reg16/mem16,immed16 | 79 | JNS immed8 | 89 | MOV reg16/mem16,reg16 | 99 | A9 | TEST ax,[mem16] | B9 | MOV cx,immed16 | C9 | LEAVE | D9 | ESC immed8 | E9 | JMP immed16 | F9 | STC | |
| 0A | OR reg8,reg8/mem8 | 1A | SBB reg8,reg8/mem8 | 2A | SUB reg8,reg8/mem8 | 3A | CMP reg8,reg8/mem8 | 4A | DEC dx | 5A | POP dx | 6A | PUSH immed8 | 7A | JP immed8 | 8A | MOV reg8,reg8/mem8 | 9A | CALL immed32 | AA | STOSB | BA | MOV dx,immed16 | CA | RET immed16 | DA | ESC immed8 | EA | JMP immed32 | FA | CLI |
| 0B | OR reg16,reg16/mem16 | 1B | SBB reg16,reg16/mem16 | 2B | SUB reg16,reg16/mem16 | 3B | CMP reg16,reg16/mem16 | 4B | DEC bx | 5B | POP bx | 6B | IMUL reg8/mem8,immed8 | 7B | JNP immed8 | 8B | MOV reg16,reg16/mem16 | 9B | WAIT | AB | STOSW | BB | MOV bx,immed16 | CB | RET | DB | ESC immed8 | EB | JMP immed8 | FB | STI |
| 0C | OR al,immed8 | 1C | SBB al,immed8 | 2C | SUB al,immed8 | 3C | CMP al,immed8 | 4C | DEC sp | 5C | POP sp | 6C | INSB | 7C | JL immed8 | 8C | MOV reg16/mem16,segReg | 9C | PUSHF | AC | LODSB | BC | MOV sp,immed16 | CC | INT 3 | DC | ESC immed8 | EC | IN al,dx | FC | CLD |
| 0E | PUSH cs | 1E | PUSH ds | 2E | Segment override | 3E | Segment override | 4E | DEC si | 5E | POP si | 6E | OUTSB | 7E | JLE immed8 | 8E | MOV segReg,reg16/mem16 | 9E | SAHF | AE | SCASB | BE | MOV si,immed16 | CE | INTO | DE | ESC immed8 | EE | OUT al,dx | FE | Table4 reg8 |
| 0F | Not used | 1F | POP ds | 2F | DAS | 3F | AAS | 4F | DEC di | 5F | POP di | 6F | OUTSW | 7F | JG immed8 | 8F | POP reg16/mem16 | 9F | LAHF | AF | SCASW | BF | MOV di,immed16 | CF | IRET | DF | ESC immed8 | EF | OUT ax,dx | FF | Table4 reg16 |
.
.
.
以下内容转自博客:汇编语言和机器码对照表,汇编指令在汇编过程中都会产生与之相对应的机器码
汇编语言和机器码对照表,汇编指令在汇编过程中都会产生与之相对应的机器码
je或jz // 相等则跳(机器码是74或84)
jne或jnz // 不相等则跳(机器码是75或85)
jmp // 无条件跳(机器码是EB)
汇编指令对应机器码表
一、状态寄存器
PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
条件码:
①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。
②SF(Sign Flag)符号标志。结果为负时置1,否则置0.
③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
④CF(Carry Flag)进位标志,进位时置1,否则置0.
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个节)产生的进位置。
有进位时1,否则置0.
⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.
控制标志位:
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。
⑧IF(Interrupt Flag)中断标志。
⑨TF(Trap Flag)陷井标志。
二、 直接标志转移(8位寻址)
| 指令格式 | 机器码 | 测试条件 | 如...则转移 |
|---|---|---|---|
| JC | 72 | C=1 | 有进位 |
| JNC | 73 | C=0 | 无进位 |
| JZ/JE | 74 | Z=1 | 零/等于 |
| JNZ/JNE | 75 | Z=0 | 不为零/不等于 |
| JS | 78 | S=1 | 负号 |
| JNS | 79 | S=0 | 正号 |
| JO | 70 | O=1 | 有溢出 |
| JNO | 71 | O=0 | 无溢出 |
| JP/JPE | 7A | P=1 | 奇偶位为偶 |
| JNP/IPO | 7B | P=0 | 奇偶位为奇 |
三、间接标志转移(8位寻址)
| 指令格式 | 机器码 | 测试条件 | 如...则转移 |
|---|---|---|---|
| JA/JNBE(比较无符号数) | 77 | C或Z=0 > | 高于/不低于或等于 |
| JAE/JNB(比较无符号数) | 73 | C=0 >= | 高于或等于/不低于 |
| JB/JNAE(比较无符号数) | 72 | C=1 < | 低于/不高于或等于 |
| JBE/JNA(比较无符号数) | 76 | C或Z=1 <= | 低于或等于/不高于 |
| JG/JNLE(比较带符号数) | 7F | (S异或O)或Z=0 > | 大于/不小于或等于 |
| JGE/JNL(比较带符号数) | 7D | S异或O=0 >= | 大于或等于/不小于 |
| JL/JNGE(比较带符号数) | 7C | S异或O=1 < | 小于/不大于或等于 |
| JLE/JNG(比较带符号数) | 7E | (S异或O)或Z=1 <= | 小于或等于/不大于 |
四、无条件转移指令
| 操作码 | 伪码指令 | 含义 |
|---|---|---|
| EB cb | JMP rel8 | 相对短跳转(8位, 使rel8处的代码位下一条指令 |
| E9 cw | JMP rel16 | 相对跳转(16位, 使rel16处的代码位下一条指令 |
| FF /4 | JMP r/m16 | 绝对跳转(16位, 下一指令地址在r/m16中给出 FF /4 |
| EA cb | JMP ptr16:32 | 远距离绝对跳转, 下一指令地址在操作数中 |
| FF /5 | JMP m16:16 | 远距离绝对跳转, 下一指令地址在内存m16:16中 |
| FF /5 | JMP m16:32 | 远距离绝对跳转, 下一指令地址在内存m16:32中 |
五、16位/32位寻址方式
| 操作码 | 伪码指令 | 跳转含义 | 跳转类型 | 跳转的条件(标志位) |
|---|---|---|---|---|
| 0F 87 cw/cd | JA rel16/32 | 大于 | near | (CF=0 and ZF=0) 0F 83 cw/cd |
| 0F 82 cw/cd | JB rel16/32 | 小于 | near | (CF=1) |
| 0F 86 cw/cd | JBE rel16/32 | 小于等于 | near | (CF=1 or ZF=1) |
| 0F 82 cw/cd | JC rel16/32 | 进位 | near | (CF=1) |
| 0F 84 cw/cd | JE rel16/32 | 等于 | near | (ZF=1) |
| 0F 84 cw/cd | JZ rel16/32 | 为0 | near | (ZF=1) |
| 0F 8F cw/cd | JG rel16/32 | 大于 | near | (ZF=0 and SF=OF) |
| 0F 8D cw/cd | JGE rel16/32 | 大于等于 | near | (SF=OF) 0F 8C cw/cd |
| 0F 86 cw/cd | JNA rel16/32 | 不大于 | near | (CF=1 or ZF=1) |
| 0F 82 cw/cd | JNAE rel16/32 | 不大于等于 | near | (CF=1) |
| 0F 83 cw/cd | JNB rel16/32 | 不小于 | near | (CF=0) 0F 87 cw/cd |
| 0F 85 cw/cd | JNE rel16/32 | 不等于 | near | (ZF=0) 0F 8E cw/cd |
| 0F 8C cw/cd | JNGE rel16/32 | 不大于等于 | near | (SF<>OF) |
| 0F 8D cw/cd | JNL rel16/32 | 不小于 | near | (SF=OF) |
| 0F 8F cw/cd | JNLE rel16/32 | 不小于等于 | near | (ZF=0 and SF=OF) |
| 0F 81 cw/cd | JNO rel16/32 | 未溢出 | near | (OF=0) |
| 0F 8B cw/cd | JNP rel16/32 | 不是偶数 | near | (PF=0) 0F 89 cw/cd |
| 0F 85 cw/cd | JNZ rel16/32 | 非零(不等于) | near | (ZF=0) |
| 0F 80 cw/cd | JO rel16/32 | 溢出 | near | (OF=1) |
| 0F 8A cw/cd | JP rel16/32 | 偶数 | near | (PF=1) |
| 0F 8A cw/cd | JPE rel16/32 | 偶数 | near | (PF=1) 0F 8B cw/cd |
| 0F 88 cw/cd | JS rel16/32 | 负数 | near | (SF=1) |
| 0F 84 cw/cd | JZ rel16/32 | 为零(等于) | near | (ZF=1) |
注:一些指令操作数的含义说明:
rel8 表示 8 位相对地址
rel16 表示 16 位相对地址
rel16/32 表示 16或32 位相对地址
r/m16 表示16位寄存器
r/m32 表示32位寄存器
关于__emit
__asm _emit 0x0F 和 __asm _emit 0x31是什么意思?
在C语言中,允许直接插入汇编代码,甚至直接插入机器码。
插入汇编代zhuan码可以用asm关键字来表shu示,如:
asm {
mov eax, ebx ; 插入mov 指令
xor eax,edx ; 插入xor 指令
}
也可以直接插入机器码,用可用emit宏来表示,
如直接插入机器码0x50(机器指令为:PUSH EAX),可写为:
__emit__(0x50);
你给的例子就是直接插入0X0F和0X31,具体的指令要结合其它数据才能确定。
.
x86中
jmp相对跳转
EB (目标地址 - JMP地址 - 指令长度) 相对短跳转8位
E9 (目标地址 - JMP地址 - 指令长度) 相对跳转16位
E8也有call
.
x64中
绝对远跳转: FF 25 00 00 00 00 XX XX XX XX XX XX XX XX
FF 25: 是jmp
四个00: 不用管
八个XX: 是目标绝对地址

浙公网安备 33010602011771号