Intentaré explicar lo mismo que apuromafo pero de otra forma, a ver si queda más claro teniendo dos respuestas en vez de una
.
MOV EAX, 1530h
ADD EAX, 1000h
SUB EAX, 500h
MOV EBX, 100h
SUB EAX, EBX
Los registros de propósito generales de 32 bits son:
EAX
ECX
EDX
EBX
ESI
EDI
ESP
EIP
Cómo su nombre los dice son de 32 bits, pero estos también se subdividen por así decirlo, tomaré el caso de EAX
(aclarar que la h minúscula significa que el valor está expresado en hexadecimal, la d minúscula significa que está expresado en decimal, la b minúscula significa que está expresado en binario, cabe descatar que es una forma de representar un dato, por lo cual 2d es lo mismo que 10b y 2h).
EAX = registro de propósito general de 32 bits
AX = registro de propósito general de 16 bits
AH/AL = registro de propósito general de 16 bits
Le daremos un valor a EAX:
(4 bytes o 32 bits)
si consultas en commandbar
? EAX (barra inferior de OllyDbg), deberías ver
(que son los valores que muestra OllyDbg del registro EAX).
Si consultamos por el valor de AX, este sería:
Si te das cuenta obtienes los dos bytes inferiores de EAX, (2 bytes equivalen 16 bits).
Ahora si tomas el valor de AH (h = high byte, un byte equivale a 8 bits):
Si tomas el valor de AL (l = low byte, un byte equivale a 8 bits):
A lo que quiero llegar es que te des cuenta que se pueden tomar distintos valores de un registro, ahora entendiendo esto (y asumiendo que conoces las instrucciones MOV, ADD y SUB entenderás lo que viene a continuación):
Ejemplo 1
MOV EAX, 1530h ; mueve a EAX el valor 1530h (valor hexadecimal)
ADD EAX, 1000h ; a EAX que es igual a 1530h o 5424d o 1010100110000b se le 1000h
SUB EAX, 500h ; luego se le resta 500h
MOV EBX, 100h ; EBX valdrá 100h
SUB EAX, EBX ; el resultado total de todas las operaciones se le resta EBX que posee un valor de 100h
Ejemplo 2
MOV EAX, 00004932h ; EAX tendrá el valor de 00004932h
ADD AX, 45h ; a AX (4932h) se le suma 45h
SUB AL, 0Ah ; a 77h (valor que tendrá AL, se le resta 0Ah)
Saludos