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

Numeric value of CMP 16bit register ,16bit register

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

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

使用在线汇编程序
您可以使用在线汇编程序轻松找到它,例如: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