2010-09-30 6 views
3
MOV DL,AL 

"MOV DL" = B2Valeurs Hex des registres? x86

Mais quelle est la valeur d'octet hexadécimal pour AL? Où sont-ils listés?

Je viens de réaliser qu'il doit être un autre opcode! Est-ce que quelqu'un peut-il me montrer la bonne direction?

+0

Donc, vous demandez quelque chose comme « comment vous prenez l'instruction' MOV DL, AL' et de travailler les octets de code machine qui correspondent à ce »? – Doug

+0

@Doug sorte de, je peux traduire quelques instructions, mais envisager MOV. il doit y avoir un code différent pour chaque combinaison différente de registre, registre immediatevalue, inscrivez-vous inscrire, MemoryAddress etc (arguements) –

+0

Cela peut vous aider à http://stackoverflow.com/questions/3917098/how-are-hex-sequence-translated -à-ensemble-sans-ambiguïté/3934002 # 3934002 – jyz

Répondre

15

À partir du Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual, Tableau 3-1. Inscrivez-vous codages associés à la + rb, + rw et + e nomenclature, page 3-3:

AL = 0 AX = 0 EAX = 0 
CL = 1 CX = 1 ECX = 1 
DL = 2 DX = 2 EDX = 2 
BL = 3 BX = 3 EBX = 3 
AH = 4 SP = 4 ESP = 4 
CH = 5 BP = 5 EBP = 5 
DH = 6 SI = 6 ESI = 6 
BH = 7 DI = 7 EDI = 7 

Pour répondre à votre question («aha grande que je vais avoir du mal à trouver l'un. liste d'instructions pour déplacer les registres dans Pouvez-vous nous éclairer »).?

tout d'abord voici quelques poissons: (pour regs 8 bits)

8a c0  mov  al, al 
8a c1  mov  al, cl 
8a c2  mov  al, dl 
8a c3  mov  al, bl 
8a c8  mov  cl, al 
8a c9  mov  cl, cl 
8a ca  mov  cl, dl 
8a cb  mov  cl, bl 
8a d0  mov  dl, al 
8a d1  mov  dl, cl 
8a d2  mov  dl, dl 
8a d3  mov  dl, bl 
8a d8  mov  bl, al 
8a d9  mov  bl, cl 
8a da  mov  bl, dl 
8a db  mov  bl, bl 

Et voici comment démarrer la pêche:

Dans le manuel du jeu d'instructions intel, rechercher l'instruction MOV, à la page 3-402. Vous trouverez un tableau répertoriant diverses saveurs de l'instruction MOV, en commençant par:

88 /r MOV r/m8,r8 Move r8 to r/m8 
89 /r MOV r/m16,r16 Move r16 to r/m16 
89 /r MOV r/m32,r32 Move r32 to r/m32 
8A /r MOV r8,r/m8 Move r/m8 to r8 
8B /r MOV r16,r/m16 Move r/m16 to r16 
8B /r MOV r32,r/m32 Move r/m32 to r32 

Notez comment nos poissons utilisent au-dessus du 8A opcode. Comme vous pouvez le deviner, r8 est un registre de 8 bits, et r/m8 peut être un registre de 8 bits ou un octet de la mémoire. Notez également comment différents opcodes MOV sont disponibles pour les registres et les valeurs 16 et 32 ​​bits (r16, r32). Les pages 3-2 à 3-5 expliquent les différents types d'arguments que vous pouvez spécifier dans une instruction MOV.

Mais, vous pouvez dire, cela ne vous dit pas assez sur la façon de construire les octets suivants dans l'instruction. Pour cela, consultez la section 2.1 - Format général des instructions, à partir de la page 2-1. Les instructions x86 peuvent être composées de séquences allant jusqu'à 6 octets: préfixes, opcode, ModR/M, SIB, déplacement et valeurs immédiates. Nos instructions de déplacement de registre sont simples et n'incluent qu'un code d'opération (8A) et un octet ModR/M.

La répartition de l'octet ModR/M est décrite dans la section 2.4, et englobant les tables de pages 2-5 à 2-6. Vous constaterez que l'octet ModR/M peut encoder à la fois le registre source et le registre de destination. Par exemple, pour passer de AL à DL, vous utiliserez la valeur D0 ModR/M, donnant l'instruction 8A D0.

+0

+1 Une réponse merveilleusement détaillée. – bcat

+0

Juste le lien est brisé ... – jyz

+0

fixé le lien brisé - merci de le signaler. –

2

Lire "Intel® 64 et IA-32 Architectures Software Manuel de développeur Volume 2A: du jeu d'instructions de référence, AM"

+0

Plus précisément, le chapitre 2. –