BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN PRÁCTICA DE LABORATORIO No IV NOMBRE DE LA PRÁCTICA: CONVERSIONES OBJETIVO: APRENDER A CONVERTIR NÚMEROS HEXADECIMALES A BINARIO ASÍ COMO LA CONVERSIÓN DE DÍGITOS HEXADECIMALES A CÓDIGO ASCII DESARROLLO DE LA PRÁCTICA: Problema: hacer un programa que dado un número en hexadecimal, lo convierta e imprima en binario. Algoritmo Paso 1. Problema: Convertir 3A, a binario, o cualquier número hexadecimal. BL <- 3A 0 0 1 1 1 0 1 0 <= BL --------- ---------Conversión de los dígitos 0 y 1 a ASCII, (en ensamblador no hay tipos de datos, solo hay código ASCII), No. Código ASCII 0 30 1 31 Si tengo 0 o 1 sumar 30 se obtendrá su respectivo código ASCII. Paso 2. Se utilizará la bandera de acarreo, para determinar que número es el que corresponde a cada bit. Para depositar el carácter, se necesita que DL <- DL + 30 + CF DL debe tener 0 + 30 + CF, determinará el numero. Instrucción ADC (Suma con acarreo) La instrucción ADC hace lo mismo que ADD, excepto que ADC incluye en el indicador de acarreo (CF) en la suma. Simbólicamente destino = destino + fuente + acarreo NOTA : ADC es usada en la aritmética de alta precisión. Realiza una suma normal, incluyendo la bandera de acarreo Paso 3 Hacer un recorrido de bits, de la siguiente manera: Rota los bits a la bandera de acarreo por el lado izquierdo y a la bandera de CF. Instrucción RCL(Rota con acarreo a la izquierda) Con las instrucciones rotar a la izquierda hasta el acarreo (RCL), el valor de CF pasa al extremo opuesto del operando. Las instrucciones de rotación afectan sólo a los indicadores CF y OF. Ejemplo: RCL AL, 1 si sólo es una rotación Las instrucciones de desplazamiento y de rotación tienen dos operandos: un operando de destino y un número. El operando de destino puede ser un registro general de 8 o de 16 bits, o una posición de memoria. El número puede ser un valor comprendido entre 1 y 31, contenido bien en la instrucción o en el registro CL. Ejemplo: MOV CL, 4 RCL AL,CL Paso 4 INSTRUCCIONES DE BUCLE Las instrucciones de bucle pueden hacer que el 286 repita secciones completas de un programa. En estas instrucciones el registro CX sirve como contador de repetición. Cada instrucción de bucle reduce CX en 1; después de una decisión de salto/no salto basándose en el nuevo valor. La instrucción básica de este grupo, repetir hasta completar el contador (LOOP), reduce CX en 1 y transfiere el control a un operando de destino "etiqueta corta" si CX no es cero. por ejemplo, para repetir 100 veces un bloque de instrucciones, se podría usar la siguiente secuencia: MOV CX,100 ; Carga en CX el contador de repetición COMIENZO: .... ; Aquí van las instrucciones que se van a repetir .... ; LOOP COMIENZO ; si CX no es cero, salta a COMIENZO .... ; En caso contrario sigue aquí La instrucción LOOP sólo termina el bucle si CX ha sido reducido hasta llegar a cero. Sin embargo, muchas aplicaciones requieren bucles que además han de terminar si sucede algo antes de que CX llegue a ser cero. dir ______ ______ ______ ______ LOOP dir CX <- CX -1 Ejercicio No. 1: Hacer un programa que haga lo siguiente: Número hexadecimal a convertir: 3A El número convertido en binario es: 00111010 Conversiones Problema: Imprimir un sólo dígito hexadecimal del 0..9 y A..F Algortimo Conversión de un caracter a código ASCII: Para convertir un sólo dígito debemos sumar 30. Para caracteres se le suman 37. INSTRUCCIÓN CMP: COMPARAR EL DESTINO CON LA FUENTE (CMP ) Al igual que la instrucción SUB, CMP resta un valor fuente de un valor de destino, y activa o desactiva los indicadores según el resultado. Pero al contrario que la instrucción SUB, la instrucción CMP no guarda el resultado de la tarea; es decir, no altera el valor de destino. El único propósito de la instrucción CMP es asignar valores a los indicadores para que las instrucciones de salto condicional puedan tomar decisiones. Compara los valores de dos registros, un registro y dato inmediato o registro y memoria. Realiza una resta virtual. Ejemplo: -CMP AL, DL -AL = DL -AL > DL -AL < DL ejemplo -CMP AL, 3A INSTRUCCION JL.- Salta si es menor Ejemplo: -MOV AH, 02 -MOV BL, 0A -MOV DL, BL -ADD DL, 30 -CMP DL, 3A -JL (dirección) -ADD DL,7 (dirección) INT 21 INT 20 Ejercicio 2: Hacer un programa que dados 2 números de un solo digito, los sume e imprima el resultado en pantalla, de la siguiente manera: El primer número es: 7. El segundo número es: 4. El resultado de la suma es: B.