汇编

汇编指令机器码对应列表

白嫖的,链接:

汇编指令机器码对应列表

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: 是目标绝对地址

posted @ 2022-10-27 16:52  Jmp·Cliff  阅读(584)  评论(0)    收藏  举报