2017-05-23 8 views
-2

Je dois ouvrir le fichier COM et trouver "CMP AX, BX" à partir de ce fichier. Je suis coincé, je suppose que j'ai besoin de comparer le code machine de l'instruction CMP. J'ai donc besoin de connaître la valeur numérique de CMP.Valeur numérique du registre CMP 16bit, registre 16 bits

+0

avez-vous essayé de l'assembler et de le démonter pour voir ce que vous avez? Ou avez-vous regardé la référence du jeu d'instructions? qu'avez-vous trouvé quand vous l'avez fait? –

Répondre

1

La valeur de CMP varie en fonction de l'opérande.

Il peut être, dans hexadécimaux:

mnémoniques

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 

voir cette pour plus de détails: http://www.mathemainzel.info/files/x86asmref.html#cmp

+0

C'est une réponse de lien seulement. Vous devriez développer cela. – Johan

+0

Merci Toby, vous avez raison - je vais le modifier maintenant. –

+0

Beaucoup mieux, mais je ne peux pas upvote parce que vous avez manqué '39' et' 83'. Voir: http://www.felixcloutier.com/x86/CMP.html – Johan

1

Utilisez un assembleur en ligne
Vous pouvez facilement trouver cela en utilisant un assembleur en ligne, comme: https://defuse.ca/online-x86-assembler.htm

Plus précisément
Sur l'original 8086 il est

39 D8 CMP AX,BX 

Sur le 80386 et au-dessus est

66 39 D8 CMP AX,BX + 16 bit operand size override. 

Instruction de décodage
L'instruction décode comme suit

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 

Voir: http://ref.x86asm.net/geek.html#x00
Au fond où il est dit: 32-bit ModR/M Byte x86 décode les registres sous forme octal dans l'ordre:

AX CX DX BX SP BP SI DI 
    0 1 2 3 4 5 6 7 
000 001 010 011 100 101 110 111 

Les deux premiers bits de l'octet ModRM sont:

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. 

L'opcode instruction spécifie si l'octet modrm suivant est source, dest ou dest,source.

+0

"Sur le 80386 et au-dessus c'est 66 39 D8" Pas nécessairement (seulement nécessaire en mode protégé), et dans le cas de l'OP où il cherche dans un fichier .COM, hautement improbable! – Fifoernik

+0

@Fifoernik, je réponds à la question générale. – Johan

+1

Même si. Avec n'importe quel processeur, vous pouvez trouver les deux formes dans un fichier. – Fifoernik