Bajar PDF

Anuncio
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
Descargar