CMP 16位寄存器的数值,16位寄存器

时间:2017-05-23 00:19:32

标签: assembly emu8086

我需要打开COM文件并找到" CMP AX,BX"从那个文件。我被困了,我想我需要比较CMP指令的机器码。所以我需要知道CMP的数值。

2 个答案:

答案 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