Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PUSHA: PUSH HL
POP BC Cargamos los pares de registros
INC BC
PUSHB: PUSH BC hacemos los push y pop correspondientes
POP DE
INC DE incrementamos para mover el SP
PUSH DE
FIN: POP HL
in: LD B, 20H
PUSH BC
B1: LD B,00H
PUSH BC
B2: LD B, 00H
PUSH BC
B3: DEC B
JR NZ, B3
POP BC
DEC B
JR NZ, B2
DJNZ B1
FIN: JR FIN
En este punto tuve el problema del corrimiento a la izquierda, dado que al guardar el dato se corre
cada vez hacia la izquierda de la memoria y para devolver un valor se debe de tener en cuenta el orden
en el que se subió, esto tiende a causar dificultades.
A esto tenemos que añadirle el efecto causado por el stack pointer , en este caso los valores son (09h,
00h y 00h) los cuales son separados por el valor FF debido a que el stack pointer solo funciona con
pares de registros, por lo que se emplea el valor por defecto del registro. para alivianar esto tuve que
tener en cuenta el orden en el que se realizan los PUSH del registro B, ya que estos reemplazan los
valores de los registros C y D de modo que al hacer los POP necesarios se puedan extraer los valores
de estos registros.
4.3) Realizar el programa para generar un delav de 3 segundos. basado en el programa que generaba
el retardo de 200ms del punto 4.2 de la practica 3. El programa de delav de 200ms será una subrutina
de un programa principal. Usar instrucciones CALI. y RET)
.ORG 0
LD C,0FH Cargamos D con 15 para que la subrutina se ejecute 15 veces
JP START
DELAY: LD E,00H
LD D,0C3H
BUCLE: DEC E
JR NZ,BUCLE
DEC D
JR NZ, BUCLE
RET
HLT
Para este inciso use el código pasado, pero esta vez para alcanzar el retardo primero hice la prueba
cargando 01H en D para hallar el valor que se debe cargar en ese mismo registro con la regla de tres:
con este valor que demora la subrutina cargamos D, e implementamos el resto del código para
resolver el ejercicio.