Vous êtes sur la page 1sur 6

Trabajo Practico 10 - Introduccion a la programacion en Z-80

Introduccion a la Informatica
1. El siguiente programa intenta pasar a min
usculas un cartel que comienza en la direccion 1000h y termina en la direcci
on 1020h inclusive.

ciclo:

ld HL, 1000h
ld C, 1020h - 1000h
ld A, (HL)
add A, f-F
ld (HL), A
inc HL
dec C
JR NZ, ciclo
rst 38h

a) Indicar las instrucciones que tengan direccionamiento directo en uno de sus operandos.
b) Encontrar ejemplos de carteles en los cuales el programa funcione correctamente.
c) Encontrar al menos un ejemplo de cadena de caracteres que demuestre que el programa no funciona
correctamente.
d ) Realizar los cambios necesarios para que el programa funcione correctamente.
2. Se tiene un vector de n
umeros enteros almacenados a partir de la posicion 1001h, y la cantidad de
elementos del mismo en la direcci
on 1000h. El vector puede tener entre 0 y 255 elementos enteros con
valores entre -128 y 127 inclusive. El siguiente programa suma todos los elementos del vector y deja su
resultado en la direcci
on 0FFFh
ld A, (1000h)
ld B, A
inc B
ld A,0
ld HL, 1001h

ciclo:

calculo:

jp calculo
ld C, (HL)
add A, C
inc HL
djnz ciclo
ld (0FFFh), A
rst 38h

;
;
;
;
;

incrementar B para
comenzar"
el ciclo en la instrucci
on djnz
A = 0
HL apunta al comienzo del
vector

; Tomo valor apuntado por HL


; Acumular sobre A
; Pr
oximo elemento
; Almacenar el resultado
; Fin

a) Podran reemplazarse la segunda y tercera instruccion por ld B, A + 1?


b) Hay casos en los cuales el resultado no sea matematicamente correcto?
c) Indicar que direcciones de memoria cambiaran de contenido luego de ejecutar el programa.
d ) Indicar el contenido de los registros antes de ejecutar por primera vez la instruccion djnz ciclo.
e) Modificar el c
odigo para que solamente sume los elementos positivos de la tabla.
1

Introducci
on a la Inform
atica - TP 10

f ) Modificar el c
odigo original para que almacene la cantidad de n
umeros negativos del vector
3. Se tiene almacenado a partir de la direcci
on 2000h un string NULL terminated, esto es, una cadena de
caracteres cuyo indicador de fin es el n
umero cero, que no forma parte de la cadena, solo indica el final
de la misma. No confundir n
umero cero con el caracter ASCII 0. Escribir los siguientes programas:
a) Calcular la longitud del string y almacenar el resultado en el registro B
b) Contar cuantos espacios hay en el string y almacenar el resultado en el registro C
c) Asumiendo que hay otro string NULL terminated en la direccion 2100h, si ambos son iguales dejar
encendido el flag de carry, caso contrario dejarlo apagado.
d ) Con las mismas consideraciones que el punto anterior, dejar encendido el carry si uno es prefijo
del otro.
4. Dado el siguiente programa:

aseg
org
ld
add
rst
end

start:

2000h
A, 0FFh
A, 3h
38h
start

; carga registro A con un valor


; incremento en 3
; Termina el programa

a) Cu
al es el valor del registro A al finalizar la ejecucion?
b) Que instrucciones tienen direccionamiento inmediato en uno de sus operandos?
c) Que instrucciones tienen direccionamiento implcito en uno de sus operandos?
d ) Por que hay que colocar un cero antes del valor FFh?
e) Realice el vuelco de memoria del programa utilizando la cartilla de Z80. Luego, compruebe que
su trabajo sea correcto ensamblando y cargando el programa ejecutable en el simulador.
0

5. Dado el siguiente programa:

aseg
org
ld
add
rst
equ
end

start:

incremento:

1000h
A, 70h
A, incremento
38h
50h
start

; carga registro A con un valor


; Termina el programa

a) Cu
al es el valor del registro A al finalizar la ejecucion?
b) Realice el vuelco de memoria del programa utilizando la cartilla de Z80:
0

6. Indique si el siguiente programa ensambla sin errores, sin necesidad de escribirlo.

Introducci
on a la Inform
atica - TP 10

aseg
org
ld
add
rst
equ
end

start:

incremento:

100h
A, 70h
A, Incremento
38h
50h
start

7. Dado el siguiente programa:

aseg
org
ld
add
ld
rst
db
end

comienzo:

valor:

3000h
A, (valor)
A, A
(valor), A
38h
10h
comienzo

;
;
;
;

carga registro A con un valor


multiplica por 2
lo vuelve a dejar en memoria
Termina el programa

a) Que instrucciones tienen direccionamiento directo en uno de sus operandos?


b) Cu
al es el valor asociado a valor? Es un rotulo o una constante simbolica ?
c) Realice el vuelco de memoria del programa utilizando la cartilla de Z80:
0

d ) Indique el vuelco de memoria del programa al finalizar la ejecucion:


0

8. Dado el siguiente programa:

comienzo:

valor:

aseg
org
ld
add
ld
rst
dw

3000h
A, (valor)
A, A
(valor), A
38h
1500

end

comienzo

;
;
;
;
;
;

carga registro A con un valor


multiplica por 2
lo vuelve a dejar en memoria
Termina el programa
valor rotula una direcci
on que
almacena una constante

a) Que direcci
on tiene valor?
b) Indique el vuelco de memoria del programa al ser cargado:
0

Introducci
on a la Inform
atica - TP 10

c) Indique el vuelco de memoria del programa al finalizar la ejecucion:


0

9. Considerando el programa anterior, se puede cambiar valor de la siguiente forma?


valor db 1500
Justifique la respuesta.
10. Cu
al es la diferencia entre las siguientes definiciones del rotulo valor ? Justifique.
valor db 0h, 10h
valor dw 10h
11. Dado el siguiente programa:

aseg
org
ld
ld
ld
add
ld
inc
djnz
rst
defm
equ
end

start:
ciclo:

fin:
mensaje:
longitud

2000h
HL, mensaje
B, longitud
A, (HL)
A, a-A
(HL), A
HL
ciclo
38h
BIENVENIDOS
$ - mensaje
start

;
;
;
;
;
;

direcci
on del mensaje en HL
en B la longitud del mensaje
tomar una letra
pasarla a min
uscula
dejarla donde estaba
moverse a la siguiente letra

; mensaje
; longitud del mensaje

a) Explique por que en la constante simbolica longitud se tiene la longitud real del mensaje
b) Indique el vuelco de memoria del programa al ser cargado:
0

c) Indique el vuelco de memoria del programa al finalizar la ejecucion:


0

12. Dado el siguiente programa:

Introducci
on a la Inform
atica - TP 10

;----------------------------------------------------------------------; Tenemos un vector de M elementos


; Queremos duplicar sus elementos en otro vector
;----------------------------------------------------------------------aseg
org
3000h
start:
ld
IX, vecFuente
; Carga dir. inicial de vecFuente
ld
IY, vecDestino
; Carga dir. inicial de vecDestino
ld
B, cantElemen
; B tiene la dimensi
on
ciclo:
ld
A, (IX )
; Carga un elemento de vecFuente
ld
(IY), A
; Lo deja en vecDestino
inc
IX
; Avanza hacia el pr
oximo
; elemento en vecFuente
inc
IY
; Avanza hacia el pr
oximo
; elemento en vecDestino
djnz ciclo
; Si hay valores, sigue
rst
38h
; Fin del programa
vecFuente:
cantElemen:
vecDestino:

db
equ
ds

10, -2, 8, -5, 6


$ - vecFuente
cantElemen

end

start

; dim. de vecFuente
; Reserva para vecDestino la misma
; cant. de bytes que para vecFuente

a) Que direccionamiento tiene el operando de la instruccion inc IX ?


b) Que direcciones de memoria cambiaran de contenido luego de ejecutar el programa?
c) Indique el contenido de los registros antes de ejecutar por primera vez la instruccion djnz ciclo.
d ) Indique el contenido de los registros al finalizar la ejecucion del programa.
e) Modifique el programa de forma tal que el vector de destino quede invertido (seg
un el ejemplo,
deberan quedar en vecDestino los elementos 6, -5, 8, -2, 10)
f ) Modifique el programa para que copie en las primeras posiciones del vector de destino los elementos
que se encuentran en posiciones impares y luego los elementos que se encuentran en posiciones
pares, considerando que se comienza a numerar desde uno (en el ejemplo deberan quedar en
vecDestino los elementos 10, 8, 6, -2, -5).

Introducci
on a la Inform
atica - TP 10

13. Dado el siguiente programa

;----------------------------------------------------------------------; Calcula la sumatoria de los elementos de un vector y deja el resultado


; en sumatoria. Si el vector no tiene elementos, la suma es cero.
;----------------------------------------------------------------------aseg
org
3000h
start:
ld
B, dimension
; Cargar tama~
no del vector
xor
A
; Blanquear el acumulador A
ld
HL, vector
; Cargar la direcci
on de
; comienzo del vector
jp
calculo
; Comenzar a procesar n
umeros
ciclo:
ld
C, (HL)
; Tomar valor apuntado por HL
add
A, C
; Acumularlo sobre A
inc
HL
; Ir al pr
oximo elemento
calculo:
djnz ciclo
; Si se lleg
o a cero, seguir
ld
(sumatoria), A
; Almacenar el resultado
fin:
rst
38h
; Fin
vector:
db
...
; Vector de bytes inicializado
dimension:
equ
$ - vector
; Cantidad de elementos
sumatoria:
ds
1
; Aqu
queda el resultado
end
start
a) Detecte que error se cometi
o en este programa y corrjalo. Pista: La correcci
on requiere modificar
una sola lnea de c
odigo.
b) Indique que direcciones de memoria cambiaran de contenido luego de ejecutar el programa.
c) Modifique el c
odigo para que solamente sume los elementos positivos del vector.
d ) Modifique el c
odigo para que en caso de producirse overflow durante la suma parcial, no siga
sumando el resto de los elementos.

Vous aimerez peut-être aussi