Indice de temas que encontraras en esta pagina: extensión del signo, reduciendoy aumentando el tamaño de los datos.
EXTENSIÓN DEL SIGNO
En ensamblador, todos los datos tienen un tamaño determinado. No es raro necesitar cambiar el tamaño del dato para usarlo con otro dato.REDUCIENDO EL TAMAÑO DE LOS DATOS
Para reducir el tamaño del dato simplemente quite los bits m´as significativos del dato. Un ejemplo:
mov ax, 0034h;
ax = 52 (almacenado en16 bits)
mov cl, al;
cl = los 8-bits inferiores de ax
Claro está, si el número no se puede representar correctamente en el tamaño más pequeño, la reducción de tamaño no funcionaría.
Por ejemplo si AX
era 0134h
o 308
en decimal entonces el código anterior almacenaría en CL 34h
. Este método trabaja con números con o sin signo.
Considere números con signo, si AX
era FFFFh
-1
como palabra, entonces CL
sería FFh
−1 como byte.
Sin embargo, observe que ¡esto no es correcto si el valor en AX
era sin signo!. La regla para números sin signo es que todos los bits al ser quitados deben ser 0
para que la conversión sea correcta.
La regla para los números con signo es que los bits que sean quitados deben ser o todos 1 o todos 0. Además el primer bit no se debe quitar pero debe tener el mismo valor que los bits quitados. Este bit sería el nuevo bit de signo del valor más pequeño.
AUMENTANDO EL TAMAÑO DE LOS DATOS
Considere el byte hex FF
. Si se extiende a una palabra, ¿Qué valor debería tener la palabra? Depende de cómo se interprete la palabra. Si FF
es un byte sin signo 255
en decimal, entonces la palabra deber´ıa ser 00FF
sin embargo, si es un byte con signo (−1 en decimal), entonces la palabra debería ser FFFF
.
En general, para extender un número sin signo, uno hace cero todos los bits nuevos del número extendido. Así FF
se convierte en 00FF
. Sin embargo, para extender un número con signo uno debe extender el bit de signo. Esto significa que los nuevos bits se convierten en copias del bit de signo. Ya que el bit de signo de FF
es 1
, los nuevos bits deben ser todos unos, para producir FFFF
.
Si el número con signo 5A
90
en decimal fue extendido, el resultado sería 005A
. Existen varias instrucciones que suministra el 80386
para la extensión de los números.
Recuerde que el computador no conoce si un número está con o sin signo. Es responsabilidad del programador usar la instrucción adecuada. Para números sin signo, uno puede simplemente colocar ceros en los bits superiores usando una instrucción MOV
.
Por ejemplo, para extender el byte en AL
a una palabra sin signo en AX
: mov ah, 0;
cero los 8-bits superiores
Sin embargo, no es posible usar la instrucción MOV
para convertir la palabra sin signo en AX
a una palabra doble en EAX
. ¿Por qu´e no? No hay manera de referirse a los 16 bits superiores de EAX con una instrucción MOV.