我需要打开COM文件并找到" CMP AX,BX"从那个文件。我被困了,我想我需要比较CMP指令的机器码。所以我需要知道CMP的数值。
答案 0 :(得分:1)
CMP的值将根据操作数而变化。
可能是十六进制:
助记符
39 - CMP Reg, Reg
3A - CMP Regb,Memory
3B - CMP Reg,Memory
3C - CMP AL,Byte
3D - CMP (E)AX,Immediate
80 - CMP RegByte,Immediate Byte = 80
81 - CMP Memory,Reg = 81
83 - CMP Reg/Mem,Immediate (sign extended) byte
有关详细信息,请参阅此处: http://www.mathemainzel.info/files/x86asmref.html#cmp
答案 1 :(得分:1)
使用在线汇编程序
您可以使用在线汇编程序轻松找到它,例如:https://defuse.ca/online-x86-assembler.htm
<强>具体地强>
在原来的8086上它是
39 D8 CMP AX,BX
在80386及以上
66 39 D8 CMP AX,BX + 16 bit operand size override.
指令解码
该指令解码如下
66 -> 16 bit operand size override
39 -> CMP R16, R16
D8 -> = binary 11 011 000
|| || ++--- AX = reg0
|| ++ BX = reg3
++--ModRM code for pure register operands, no memory
请参阅:http://ref.x86asm.net/geek.html#x00
在底部显示:32-bit ModR/M Byte
x86按以下顺序解码八进制格式的寄存器:
AX CX DX BX SP BP SI DI
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
ModRM字节的前两位是:
00: [reg] : memory addressed by reg with no offset
01: [reg+8-bit offset]: memory addressed by reg with 8-bit offset
10: [reg+32-bit offset] memory addressed by reg with 32-bit offset
11: reg: just the register.
指令操作码指定后面的modrm字节是source, dest
还是dest,source
。