Formatos Binarios (80x86 ) 8 bits x7 x6 x5 x4 x3 x2 x1 x0 27 26 25 24 23 22 21 20 Alta orden ó más significativo significativo 16 bits baja orden ó menos x15 x14 x13 x12 x11 x10 x9 x8 x7 x6 x5 x4 x3 x2 x1 x0 alto orden menor orden Organización de los datos (80 x 86) 1 bit es la unidad de datos más pequeña. 4 bits (nibble) 8 bits (bytes) 16 bits (palabra) Nibble Sirve para representar números hexadecimales. ( 0-9 A F) Sirve para representar números BCD (0...9) Byte En un 80 x 86 es el dato más pequeño direccionable. Se usa para direcciones de memoria y E/S 28 –1 = 0 ... 255 (sin signo) 28 = 256 valores -128 ... 127 (con signo) En un byte existen 2 nibbles H.0 Nibble L.0 Nibble H.0 Nibble Nibble2 Nibble 1 L-0 Nibble Palabra =2 bytes H.0 byte Representa 216 =65, 536 valores L.0 byte 216-1= 0...65, 535 (sin signo) -32,768 ... + 32, 767 (con singo) Se utilizan para valores enteros, offset, valores de segmentos los cuales constituyen el paragraph addres de un segmento de código extra o stack en memoria. Doble palabra. Se utilizan para representar segmentos de direcciones 8 nibbles, 4 bytes , 2 palabras. Se utilizan para enteros de 32 bits, rango 0... 4,294,467, 295 (sin signo) –2,147483,648...+2,147,483,647 (con signo) y valores de punto flotante. Conversión decimal a binario Notación: 120d ó 120t 110b ó 1102 12 FH Decimal Binario Hexadecimal Xt 120t X2 Divisiones sucesivas hasta que el cociente sea 0 01111000 60 2 120 2 00 0 30 2 60 00 0 15 2 30 10 0 7 2 15 1 3 2 7 1 2 1 3 1 0 2 1 1 Conversión binario a decimal Xb xd Xb xd 27 26 25 24 23 22 21 20 0 1 1 1 1 0 0 0 = 26 + 25 + 24 +23 = 120 Conversión hexadecimal a binario / Binario a Hexadecimal Binario 0000 0001 0010 0011 0100 0101 0110 Hexadecimal 0 1 2 3 4 5 6 Binario 1101 1110 1111 Hexadecimal D E F Binario 0111 1000 1001 1010 1011 1100 Hexadecimal 7 8 9 A B C El sistema hexadecimal es compacto y facilita la conversión de binario a hexadecimal y viceversa. 1 2 7 fH 0001 0010 0111 1111b Operaciones aritméticas : Suma y Resta Suma Binaria 0 0 1 +0 +1 +0 0 1 1 Suma Hexadecimal 1 +1 10 5d +4d 9d 0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F 00000101 00000100 00001001 Decimal 89 d + 100 d Binario 01011001 +01100100 010111101 9h + 1h Ah Fh + 5h 14h Hexadecimal BD h 44 22 11 5 2 1 2 89 2 44 2 22 2 11 2 5 2 2 09 0 07 1 1 0 1 0 50 25 2 100 2 50 0 0 12 0 2 1 1 6 3 1 2 25 2 12 2 6 2 3 0 1 0 1 05 0 1 Decimal 120d + 149d Binario 0111 1000 10010101 Resta Binaria 0 +0 0 0 1 +1 +0 1 1 1 Hexa 78 + 95 10Dh Resta Hexadecimal 1 +1 0 0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F 2 5d - 4d 1d 00000101 00000100 00000001 Decimal 99d - 50d 49 Binario - 01100011 00110010 00110001 Hexa 63 h - 32 h 31h Decimal Hexa Binario 1024d - 820 d 400 h - 334 h 0CC h 11001100 Operaciones lógicas en bits And 00 01 10 11 or 0 0 0 1 00 01 10 11 xor 0 1 1 1 00 01 10 11 NOT 0 1 1 0 0 1 1 0 NOTA: El uso de AND Y OR nos per miten cambiar un bit a cero o a uno. El operador XOR nos permite invertir bits. El operador NOT niega Las Operaciones lógicas son utilizadas en el manejo de strings y para la generación de mascaras. Para realizar máscaras se utilizan operadores lógicos and, or, xor, not. Números negativos Bit mas alto es 1. Ejemplos 16-bits 8000h es negativo 1000 0000 0000 0000 100h es positivo 0000 0001 0000 0000 7FFFh es positivo 0 111 1111 1111 1111 0FFFFh es negativo 1111 1111 1111 1111 0FFFh es positivo 0000 1111 1111 1111 = - 32768d = +32767d = -1 Para convertir un número positivo a su correspondiente negativo se utiliza la operación complemento a 2. Algoritmo 1. Invertir todos los números con operador lógico NOT 2 .Agregar uno al resultado invertido Ejemplo 1:a 8 bits el número 5 a –5 P1. P2. 0000 1111 0000 1111 0101 1010 0001 1011 → → +5d -5b Convertir un negativo a un positivo utilizar complemento a 2 Ejemplo 1: Convertir -5 a +5 con 8 bits P1. P2. 1111 0000 0000 0000 → 1011 0100 0001 0101 -5 → +5 Esto es un error del tipo “signed arithmetic over flow” 8000h es negativo 1000 0000 0000 0000 Complemento a 2: 0111 1111 1111 1111 + 1 1000 0000 0000 0000 = - 32768d = +32768d No es posible que -32768=-(-32768). No se puede representar a 16 bits para números con signo. Conclusión: No se puede negar el valor negativo más pequeño si lo intenta el microprocesador demanda un error de “aritmética de signo overflow”. Signo y Extensión cero Extensión cero permite convertir un número pequeño con signo a un largo con signo Regla: Si es un número negativo en la parte H.0 byte contiene OFF H. Si es un número positivo en la parte H.O byte contiene 000H. Ejemplo: considere –64d a 8 bits número. Número con signo 64 = 0100 0000 -64 = 1100 0000 Convertir de 8 bits a 16 bits FFC0H C0 (-64) 64d 40H 0040H * Extensión con signo de un número de 8 bits a 16 bits: Copiar los 8 bits a los 8 bits en las posiciones más bajas de los 16 bits y aplicar una extensión cero. * Extensión con signo de un número de 16 bits a 32 bits: Copiar los 16 bits a la posición más bajas y aplicar extensión cero. Ejemplos: Números con signo 8 bits (-) (+) (-) (+) 80H 28H 9AH 7FH 16 bits 32 bits FF80H 0028H FF9AH 007FH FFFFFF80H 00000028H FFFFFF9AH 0000007FH 8 bits 16 bits Números sin signo 8 bits 80 H 28H 9AH 7FH 16 bits 0080H 0028H 009AH 007FH 32 bits 00000080H 00000028H 0000009AH 0000007FH ¿Se puede realizar una conversión de un número 16 bits a 8 bits o de 32 bits a 16 bits.? Resp:= No siempre es posible Ejemplos: BAC1H 16 bit -448d no se puede porque los bits más altos y más bajos están ocupados. 8 bit a 16 bits 0fE40h No se puede Regla: Para contraer signo de un valor solo hay que remover los bits más altos si contienen 0’s o 0ff o 0ffff, si no los contiene se produce un overflow Corrimientos y Rotaciones Es otro tipo de operaciones logicas la cual se aplica a cadenas de bits, existe hacia la : * Izquierda * Derecha *Corrimiento a la izquierda 7 6 5 4 3 2 1 0 Colocar un cero en el bit más bajo y el valor del bit más alto es un accareo Este tipo de corrimiento permite generar una multiplicación por 2 (radix base 2). En general si corres un valor ala izquierda n veces se multiplica por 2n . Ejemplo: Acarreo Resultado 00101010 =2Ah por 21 = 54h 1 Corrimiento 0 01010100 00101010 =2Ah por 22 = A8h 2 Corrimiento 0 10101000 00101010 =2Ah por 23 = 150h 3 Corrimiento 1 01010000 * Corrimiento a la derecha 7 6 5 4 3 2 1 0 bajo Coloco un cero en el bit más alto y el bit más es un accareo Este tipo de corrimiento permite generar una división por 2 (radix base 2). En general si corres un valor a la derecha n veces se divide por 2n .(Solo es válido para divisiones de números sin signo) Ejemplo: 11111110 =FEh entre 21 = 7Fh 1 Corrimiento Resultado Acarreo 01111111 0 Notese que para valores con signo este tipo de operación no resulta, por ejemplo: -2= 0FEh, al realizar un corrimiento, se obtiene 07Fh=127h, esto no es correcto. El problema se origino al insertar el 0 en el bit del signo, cambiándolo a positivo. Para este tipo de operaciones se define el Corrimiento aritmético a la derecha. * Corrimiento aritmético a la derecha No modifica el bit 7 durante el corrimiento Ejemplo: Resultado -2=11111110 =FEh entre 21 = FFh -100=10011100=9Ch entre 21=CEh 1 Corrimiento 1 Corrimiento 11111111 11001110 Esta operación redondea el número al entero más cercano, el cual es “menor o igual al actual resultado”. Por ejemplo: -1=11111111 =FFh entre 21 = FFh * Rotación por la izquierda 7 6 5 4 3 2 1 0 1 Corrimiento 11111111 = -1 < 0 El bit más alto es corrido al más bajo ejemplo: 01101011 11010110 * Rotación a la derecha El bit más bajo es corrido al más alto Tarea : 1. Convertir 32,768d xb 888d xb 1001b xd 2. Complementar a dos, los valores hexadecimal conviertelos a binario 1001 0111b xd 0ABCDH Xb 0FEBAH xb 3. Realizar las sig. Operaciones 1232H + 9876H 0FFH -0F34H 100b - 1b 0FFEH - 1H 4 Aplicar los operadores lógicos a todos los números hexadecimales de los ejercicios 1 y 2. El operador 1 se define, el operador 2 de acuerdo a los ejercicios. 5. Realizar la extensión de signo de 8-16 bits (Números con signo). FF BF 0E 8F 54 DE F7 DE DD AD 6. Realizar el complemento a dos de los números utilizados en el ejercicio 1 y 2. 7. Contraer el signo para los siguientes valores de 16 a 8 bits. Si no lo puede realizar explique por que. FF0CH 8080H 67H 7FH FF98H F98H 12H 98H 8.Aplicar dos rotaciones a la izquierda al ejercicio 6 y un corrimiento a la derecha al ejercicio 7, considere que son de 16 bits.