Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: ño_ño en 15 Julio 2010, 03:17 am



Título: Eso es bug del hypervisor o del NASM....
Publicado por: ño_ño en 15 Julio 2010, 03:17 am
Hola!

Hoy me he perdido todo el dia antes de intentar probar por bugs y si:

Lo que ocure es que cuando uso codigo de 64 bits en modo de la CPU de 64 bits, con NASM, no me van bien los registros DIL, SIL, no he probado con los AL.... o BPL SPL, porque no tengo tiempo. Por ahora voy a cambiar todo el codigo en donde uso por ejemplo mov AL, DIL, con mov AX, DI y para las demas instrucciones lo mismo voy a hacer para que funcione, si no, no va. No me reinicia ni nada, tampoco provoca interrupciones, simplemente el programa se vuelve impredecible.

Bueno, a ver si a alguien otro le ha ocurrido lo mismo.

Ciao, campeones.


Título: Re: Eso es bug del hypervisor o del NASM....
Publicado por: ño_ño en 15 Julio 2010, 03:58 am
11.1 Register Names in 64-bit Mode

NASM uses the following names for general-purpose registers in 64-bit mode, for 8-, 16-, 32- and 64-bit references, respecitively:

     AL/AH, CL/CH, DL/DH, BL/BH, SPL, BPL, SIL, DIL, R8B-R15B
     AX, CX, DX, BX, SP, BP, SI, DI, R8W-R15W
     EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D-R15D
     RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8-R15

This is consistent with the AMD documentation and most other assemblers. The Intel documentation, however, uses the names R8L-R15L for 8-bit references to the higher registers. It is possible to use those names by definiting them as macros; similarly, if one wants to use numeric names for the low 8 registers, define them as macros. The standard macro package altreg (see section 5.1) can be used for this purpose.

Eso explica supongo los problemas que tengo. En la documentacion de Intel no es mas claro que eso.

Total, puesto que para usar un registro R* de menos bits, casi siempre se me desusa el registro entero, pues simplemente voy a evitar esos low bits references.

Adios!