UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS
FACULTAD DE INGENIERIA
PROYECTO CURRICULAR DE INGENIERÌA ELECTRÓNICA
DIGITALES II
EJEMPLOS DE PROGRAMACION EN ASSEMBLER CISC2
1. Desarrolle un programa que permita sumar una lista de 256 números ubicados
en memoria a partir de la posición F000.
Solución:
Primero se desarrolla un algoritmo luego se sigue con su codificación. Un posible
algoritmo en este caso sería:
Inicio: Suma = 0
Índice = 0100
Bucle: Si índice = 0 vaya a guardar, sino haga
Val=mem[ EFFF + índice]
Suma = suma + val
Índice = índice -1
Vaya a bucle
Guardar: resultado = suma
Fin
Una vez desarrollado el algoritmo se asignan registros y posiciones de memoria. En este
caso una posible asignación sería:
1. Suma quedará en el registro R0
2. Índice quedará en el registro R1
3. Val quedará en el registro R2
4. Resultado quedará en la posición FFFF
Luego de haber asignado registros se identifican las operaciones del algoritmo y sus
correspondientes instrucciones:
1. Suma = 0 , carga inmediata
2. Índice = 0100, carga inmediata
3. Si índice = 0, Bifurcación con cero
4. Val=mem[ EFFF + índice] carga relativa
5. Suma = suma + val, adición
6. Indice = índice -1 , decremento
7. Vaya a bucle, salto incondicional
8. Resultado = suma, almacenamiento directo
Así las cosas el correspondiente programa queda listado como:
Inicio: LDinm R0, 0000
LDinm R1,0100
Bucle: BZ Guardar
LDrel R2,R1,EFFF
ADD R0,R0,R2
DEC R1,R1
Jump bucle
Guardar: STdir R0,FFFF
Fin: Jump Fin
2. Desarrolle un programa que implemente el algoritmo clásico de multiplicación,
considere que la longitud de los operandos es de 8 bits.
El algoritmo clásico de multiplicación se enuncia de la siguiente forma:
Inicio: x = multiplicador
Y= multiplicando
Prod = 0
Bucle: Si x(0) = 0 vaya a Desp, sino haga
Prod = prod + y
Desp: y = y << 0
x = 0 >> x
Si x= 0 vaya a guardar, sino vaya a bucle
Guardar: resultado = producto
Fin
Programa:
Se supone que el multiplicador y el multiplicando están almacenados en las posiciones
de
memoria FFFD y FFFE respectivamente. Al final el producto quedará almacenado en la
posición FFFF
Inicio: LDdir r0,FFFD
LDfir r1,FFFE
LDinm r2,000
SR r0,r0
Bucle: BNCy desp
ADD r2,r2,r1
Desp: SL r1,r1
SR r0,r0
BNZ bucle
Guardar: STdir r2, FFFF
Fin: Jump Fin
3. Desarrolle un programa que permita calcular el mínimo y el máximo de dos
números almacenados en memoria. Los números están almacenados en las
posiciones 8000 y 8001. El mínimo deberá quedar almacenado en la posición FFFE
y el máximo en la posición FFFF.
Algoritmo:
Leer A
Leer B
Resta = A-B
Si resta > 0 {Máximo = A
Mínimo = B}
Si no
{Maximo = B
Mínimo = A}
Guardar máximo
Guardar mínimo
Fin
Programa:
Inicio: LDdir R0,8000
LDdir R1,8001
Test R0,R1
Bmsb op1
Move R3,R0
Move R4,R1
Jump Guardar
Op1: Move R3,R1
Move R4,R0
Guardar: STdir R4,FFFE
STdir R3,FFFF
Fin: Jump Fin