UNS LABORATORIO DE MICROPROCESADORES 2006 - PRÁCTICA DE PROBLEMAS N°3 LENGUAJE ENSAMBLADOR 1. Analizar los siguientes programas y determinar la función que ejecutan: b. a. SUMAR: ACA: 2. PONM1: LXI SP, 20C8 LXI H, 280A MVI C, 0A MVI A, FF MOV M, A INX H DEC C JNZ PONM1 CALL SUMAR BSQD: FN: NST: MVI A, FF STA 200B LXI H, 2000 LDA 200A SUB M INX H JNZ BSQD MOV A, L SUI 0B JZ NST LDA 200A RST 1 LDA 200B JMP FN Analizar los siguientes programas y modificarlos para que funcionen correctamente. MOVE: 3. LXI SP, 20C8 LXI H, 2800 LXI D, 000A MVI C, 0A PUSH H MOV A, M DAD D ADD M DAD D MOV M, A POP H INX H DEC C JNZ ACA RET c. LXI H, 1000 LXI D, 2000 LXI B, 0100 LDAX D MOV M, A INX H INX D DCX B JNZ MOVE MVI A, BB modificar por direc., variables ;y constantes simbólicas ZPW1: RETAR: RETA0: LXI SP, stkptr LXI H, 200F MOV A, M CPI A, 01 CZ RETAR JMP ZPW1 PUSH B MVI C, 0A DCR C JNZ RETA0 RET El siguiente programa posee subrutinas, macros y referencias externas. Analizarlo y determinar la función que ejecuta. Que diferencia existe entre una macro y una subrutina. Que significado tienen las directivas GLOBAL y EXTERNAL. ;PROGRAMA EJEMPLO - MICROPROCESADOR 8085 ;PRIMER MODULO DEL PROGRAMA ;======================= ;SUBRUTINA DE SUMA 2BYTE ;BC = BC + A GLOBAL DOSUM EXTERNAL CERO DOSUM: Página: 1/1 ADD C MOV C, A MVI A, CERO ADC B MOV B, A RET END ;SEGUNDO MODULO DEL PROGRAMA ;========================= CERO: UNO: DOS: DTOTAL1: DENTRADA1: DSALIDA1: DTOTAL2: DENTRADA2: DSALIDA2: TABLA_CUA: EQU EQU EQU EQU EQU EQU EQU EQU EQU DB 00H ;DEFINE CONSTANTES 01H 02H 8000H 2000H ;SE SUPONE DATOS ENTRE 0 Y 9 2300H 8002H 4000H 4300H 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ;====================== ;MACRO SUMA DE LOS ELEMENTOS DE UNA MATRIZ ;DTOTAL = DIRECCIÓN DONDE SE GUARDA EL TOTAL ;DENTRADA = DIRECCIÓN DE COMIENZO DE LA MATRIZ ;DSALIDA = DIRECCIÓN DE FINALIZACIÓN ( > DENTRADA) SUMA: LOOP#: E .MACRO DTOTAL, DENTRADA, DSALIDA LXI B, 0000H ;INI. BC = 0 LXI H, DENTRADA ;APUNTA AL PRIMER ELEMENTO LXI D, DSALIDA ;APUNTA AL ULTIMO ELEMENTO MOV A, M CALL DOSUM ;SUMA EN BC EL VALOR A INX H ;INCREMENTA PUNTERO MOV A, H CMP D ;COMPARA H CON D JNZ LOOP# MOV A, L ;SI H Y D SON IGUALES COMPARA ;L CON E JNZ LOOP# LXI H, DTOTAL ;APUNTA AL LUGAR DE GUARDAR TOTAL MOV M, B ;GUARDA DATO INX H MOV M, C .ENDM ;FIN DE MACRO ;====================== EXTERNAL DOSUM GLOBAL CERO ORG 0000H PRINCIPAL: CMP ;ENSAMBLA CÓDIGO A PARTIR DE LA DIRECCIÓN ; 0000H MVI A, UNO CALL CUADRADOS ;EJECUTA CUADRADOS DE MATRIZ1 SUMA DTOTAL1, DENTRADA1, DSALIDA1 ;INSERTA MACRO SUMA DE ; ELEMENTOS MATRIZ1 MVI A, DOS CALL CUADRADOS ;EJECUTA CUADRADOS DE MATRIZ2 SUMA DTOTAL2, DENTRADA2, DSALIDA2 ;INSERTA MACRO SUMA DE ;ELEMENTOS MATRIZ2 HLT ;====================== ;SUBRUTINA DE CUADRADOS ;DE 0, 1, 2, 3, ..., 9 Página 2/2 CUADRADOS:LXI H, DENTRADA1 LXI B, DSALIDA1 LXI D, TABLA_CUA CPI UNO JZ BIEN LXI H, DENTRADA2-1 BIEN: LXI B, DSALIDA2 LXI D, TABLA_CUA INX H MOV A, M PUSH H ADD E MOV L, A MOV A, H ACI CERO MOV H, A MOV A, M POP H MOV M, A MOV A, H CMP B JNZ BIEN MOV A, L CMP C JNZ BIEN RET END ;APUNTA AL PRIMER ELEMENTO MATRIZ1 ;APUNTA AL ULTIMO ELEMENTO MATRIZ1 ;OBTIENE DIRECCIÓN BASE DE TABLA ;APUNTA AL ANTERIOR AL PRIMER ELEMENTO ; MATRIZ2 ;APUNTA AL ULTIMO ELEMENTO MATRIZ2 ;OBTIENE DIRECCIÓN BASE DE TABLA ;INCREMENTA HL ;A = DATO ;HL A LA PILA ;A = DATO AL CUADRADO ;RECUPERO HL ;DEJA CUADRADO EN LA MATRIZ ;NO ES IGUAL AL ULTIMO Y SIGUE ;NO ES IGUAL AL ULTIMO Y SIGUE 4. Determinar la cantidad de números positivos, ceros y negativos existentes en una lista que comienza en la posición 0044H y cuya longitud se especifica en la posición 0043H. Ubicar la cantidad de negativos en la posición 0040H, la cantidad de ceros en 0041H y la de positivos en 0042H. 5. Realizar un programa que convierta un número hexadecimal de 8 bits en los dos números ASCII correspondientes. 6. Realizar un programa que compare dos listas de caracteres ASCII y verificar cuál es mayor (es decir verificar orden alfabético). La longitud de la listas se halla en el acumulador A. El principio de la lista L1 se halla en las posiciones de memoria 0044H y 0045H. Si la lista L1 es mayor o igual (alfabéticamente) que la lista L2, limpiar el lugar de memoria 0041H, de lo contrario cargar FFH en dicho lugar. Usar subrutinas. 7. Se cuenta con un sistema que, ante un comando debe realizar una determinada acción a través de una subrutina. En el lugar 2000H de memoria RAM se almacena el comando a ejecutar (codificado en ASCII). En una tabla grabada en ROM están almacenados todos los posibles comandos que se pueden presentar (también en ASCII) desde el lugar 4000H hasta el 401FH. Los comandos almacenados son los siguientes: LIST POKE PEEK READ RESET BYE En otra tabla, en ROM también, se encuentran las direcciones de salto a las subrutinas que ejecutarán los comandos. Esta tabla se encuentra en 4020H hasta 402CH. Realizar un programa que lea el comando, encuentre el orden correspondiente de éste en la tabla de comandos (TC) y salte a la subrutina correspondiente. Página 3/3 CON L I S T Cr El Cr (Carry Return) indica el final del comando. Los 00 de TC indican la separación entre comandos en la tabla. 8. Realizar un programa para el manejo inserción y eliminación) de un dato en: a) Una lista enlazada. b) Una matriz. c) Una pila. d) Una cola. TC 00 L I S T 00 P O K E 00 . . . SALTOS 0A 00 CA 01 CA 02 . . . (búsqueda, 9. Comparar dos listas de caracteres ASCII determinando cual es mayor (cual sigue en orden alfabetico).La longitud de las listas se halla en la posicion 2041 y estas comienzan:T1 en la posicion 2042 y T2 en la posicion 2062. Si T1 es mayor o igual que T2 poner 0 (00hex) en la posicion 2040, caso contrario poner todos unos (FFhex) Ej: (2041)=03 (2042)=43 "C" (2062)= 42 "B" Resultado: (2040)= 00 pues CAT es mayor (2043)=41 "A" (2063)= 41 "A" que BAT (2044)=54 "T" (2064)= 54 "T" 10. Convertir un numero decimal a entero.Se debe reemplazar en una lista de numeros decimales editada en codigo ASCII todos los numeros que se hallan a la derecha del punto por espacios en blanco "SP" (20hex).La lista comienza en la posicion 2041 y se asume que se halla compuesta en su totalidad por digitos decimales codificados en ASCII. La longitud de la lista se halla en la posicion 2040.Si el punto decimal no aparece en la lista se debera asumir que se halla a la derecha del ultimo digito Ej: DATOS RESULTADOS (2040)= 04 (2041)=37 "7" (2041)=37 "7" (2042)=2E "." (2041)="2E "." (2043)=38 "8" (2041)=20 "SP" (2044)=31 "1" (2041)=20 "SP" 11. Determinar bajo qué condiciones el programa ejecutará la instrucción apuntada por CONTINUE o la apuntada por EXIT. Página 4/4 ORG 0H LONG DB EXIT - INIT CHECK EQU 0BFH TABLA DB 00H, 0FEH, CHECK DB 0CAH, 0FFH DB 20H, 23H, 0E9H DATO DB 'C' HEX DB 0CH SAVE DW 0 PILA INIT: OTRO: LAZO: ORG $2000 DS $100 ORG $4000 NOP LXI SP, #PILA + 100H LXI D, #TABLA + 7 LDA DATO MVI B, 40H CMP B JM OTRO ADI 9 ANI 0FH STA HEX MVI B, LONG LXI H, INIT XRA A INX H XRA M MOV C, A MOV A, B CPI 4 MOV A, C JP CHK SHLD SAVE XCHG MOV D, M DCX H XCHG PUSH CHK: H LHLD SAVE DCR B JNZ LAZO LXI H, 0 DAD SP PUSH H LXI H, CONTINUE RET CONTINUE: EXIT: JNC EXIT RST RST 2 1] Página 5/5