Ensamblador - Registro eax, y ax

 
Vista:

Registro eax, y ax

Publicado por rosario (1 intervención) el 15/10/2009 04:40:40
tengo una duda si alguien la puede resolver se lo agradeceria:

donde esta ubicado el registro ax con respecto al registro eax, y con esto
dedusca porque no se muestra bien el dato almacenado en un tipo de datos dw
con una macro.
el primer programa es este

%include "macro.asm"
SEGMENT datos
linea1 DB "valor=%d", 10,13, 0
linea2 DB "valor=%s", 10,13, 0
valor1 DD 8000
valor2 DW 32000
valor3 DD 0
valor4 DB 223
valor5 DQ 7000000000
valor6 DB "rosario campos", 10,13, 0
SEGMENT code
extern _printf
global _main
_main:
MOV EAX, 0
MOV EAX, [valor1]
macprint1 linea1, EAX
MOV EAX, 0
MOV EAX, [valor2]
macprint1 linea1, EAX
MOV EAX, 0
MOV EAX, [valor3]
macprint1 linea1, EAX
MOV EAX, 0
MOV AL, [valor4]
macprint1 linea1, EAX
macprint valor6
ret


y el programa de la maco este


%macro macprint1 2
PUSHAD
PUSH Dword %2; valor
PUSH Dword %1; linea
CALL _printf
TIMES 2 ADD ESP, 4
POPAD
%endmacro
%macro macprint 1
PUSHAD
PUSH Dword %1; linea
CALL _printf
ADD ESP, 4
POPAD
%endmacro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Registro eax, y ax

Publicado por Insano (25 intervenciones) el 17/10/2009 01:57:54
el error esta en que eax es 32 bits, y valor2 es 16 bits y no puedes usar MOV, en vez de eso usa MOVZX (MOVZX EAX, [valor2])

otra cosa, no necesitas escribir MOV EAX, 0 cada vez, no es necesario, puedes removerlos.

fijate en las rayas para que sepas donde esta ax y al.
________ = eax
.........____ = ax
.............__ = al
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar