TUTORIAL ENSAMBLADOR BASICO

Indice de temas que encontraras en esta pagina: Representación de enteros, magnitud y signo, complemento a uno y complementoa dos

REPRESENTACIÓN DE ENTEROS

Hay dos tipos de enteros: sin signo y con signo. Los enteros sin signo (que son no negativos) están representados de una manera muy directa en binario natural. El número 200 como un byte entero sin signo sería representado como 11001000 o C8 en hex.

Los enteros con signo (que pueden ser positivos o negativos) se representan de maneras m´as complejas. Por ejemplo considere −56 +56 como byte ser´ıa representado por 00111000. En el papel uno podría representar −56 como −111000.

Hay 3 técnicas que se han usado para representar números enteros en la memoria del computador. Todos estos métodos usan el bit m´as significativo como un bit de signo. Este bit es 0 si el número es positivo y 1 si es negativo.

MAGNITUD Y SIGNO

El primer método es el más elemental y es llamado magnitud y signo. Representa los enteros como dos partes. La primera es el bit de signo y la segunda es la magnitud del entero. Así 56 sería representado como el byte 00111000 (el bit de signo está subrayado) y −56 sería 10111000. El mayor valor de un byte sería 01111111 o +127 y el menor valor sería 11111111 o −127. Para negar un valor, se cambia el bit del signo.

Este método es directo, pero tiene sus inconvenientes. Primero hay dos valores posibles de cero +0 (00000000) y −0 (10000000). Ya que cero no es ni positivo ni negativo, las dos representaciones podrían servir igual. Esto complica la lógica de la aritmética para la CPU. Segundo, la aritmética general también es complicada.

COMPLEMENTO A UNO

El segundo método es conocido como complemento a uno. El complemento a uno de un número se encuentra invirtiendo cada bit en el número. Por ejemplo el complemento a uno de 00111000 (+56) es 11000111. En la notación de complemento a uno calcular el complemento a uno es equivalente a la negación. Así 11000111 es la representación de −56.

Observe que el bit de signo fue cambiado automáticamente por el complemento a uno y que como se esperaría al aplicar el complemento a 1 dos veces produce el número original. Como el primer método, hay dos representaciones del cero 00000000 (+0) y 11111111 (−0).

Hay un truco útil para encontrar el complemento a 1 de un número en hexadecimal sin convertirlo a binario. El truco es restar el dígito hexadecimal de F (o 15 en decimal). Este método supone que el número de dígitos binarios en el número es un múltiplo de 4.

Un ejemplo: +56 se representa por 38 en hex. Para encontrar el complemento a uno reste F de cada dígito para obtener C7 en hexadecimal.

COMPLEMENTO A DOS

Los dos primeros métodos descritos fueron usados en los primeros computadores. Los computadores modernos usan un tercer método llamado la representación en complemento a dos. El complemento a dos de un número se halla con los dos pasos siguientes:

1. Hallar el complemento a uno del número.

2. Sumar uno al resultado del paso 1.

Acá está un ejemplo usando 00111000 (56). Primero se calcula el complemento a uno: 11000111. Entonces se añade uno: 11000111 + 1 = 11001000

En la notación de complemento a dos, calcular el complemento a dos es equivalente a negar el número. Así 11001000 es la representación en complemento a dos de −56. Dos negaciones deberían reproducir el número original.

CURIOSIDADES DEL COMPLEMENTO A DOS

Cuando realizamos la suma en una operación en complemento a dos, la suma del bit del extremo izquierdo puede producir un carry. Este carry no se usa. Recuerde que todos los datos en el computador son de un tamaño fijo (en términos de núumeros de bits).

Sumar dos bytes siempre produce como resultado un byte (tal como sumar dos palabras produce otra palabra, etc.). Por ejemplo, considere el cero como un número en complemento a dos de un byte (00000000). Calcular el complemento a 2 produce la suma: 11111111 + 1 c 00000000 donde c representa un carry.

Así en la notación de complemento a dos existe solo un cero. Esto hace la aritmética de complemento a dos más simple que los métodos anteriores. Usando la notación en complemento a dos, un byte con signo se puede usar para representar los números desde −128 hasta +127.

Si se usan 16 bits, se pueden representar los números con signo desde −32,768 hasta 32,767 que está representado por 7FFF, −32,768 por 8000, −128 como FF80 y -1 como FFFF. Los números de 32 bits en complemento a dos están en el rango de −2 mil millones a +2 mil millones aproximadamente.

La CPU no tiene ni idea que supuesta representación tiene un byte en particular (palabra, o palabra doble). El ensamblador no tiene ni idea de los tipos de datos que tienen los lenguajes de alto nivel. Cómo se interpretan los datos depende de qué instrucción se usa con el dato.

Si el valor FF representa −1 o +255 depende del programador. El lenguaje C define tipos de entero con y sin signo (signed, unisigned). Esto le permite al compilador determinar las instrucciones correctas a usar con el dato.

SIGUIENTE PAGINA PARTE I:

Fecha actualización el 2016-3-30. Fecha publicación el . Categoría: Programación, Ensamblador. Autor: Mapa del sitio
programacion