Está en la página 1de 3

INICIO: LD HL,2056H

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

En esta ocasión se implementó un código diseñado para mover


hacia arriba con cada paso el Stack Pointer y por ende incrementar
la parte baja de los valores almacenados en los pares de registros
adyacentes entre sí, esto a pesar de ocupar unas líneas más de código
lo hace más eficiente
4.2 usar el codigo del punto 4.3 de la práctica 3 y modificarlo para usar solo el registro B para cargar
los valores de cada bucle y usar push y pop

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

START: CALL DELAY


DEC C
JR NZ, START
END: JR END

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.

También podría gustarte