You are on page 1of 11

Programas de ejemplo 1

A5
Apndice A5
Programas de ejemplo
Se han escrito varios programas en ensamblador que muestran el funcionamiento de los
componentes que incorpora el simulador. Realizar el negativo de una imagen de niveles
de gris cargada en memoria o implementar el juego de la serpiente (snake en ingls) son
algunos ejemplos que pasamos a comentar en las secciones siguientes.
Demostracin:
Nombre: negativo.asm
Procesador: 8085
Dispositivos: Pantalla Grafica (256)
!neas: 28
Descripci"n:
Programa de muestra que invierte la imagen actual en pantalla.
.org 100H
mvi H, 10H
mvi L, 00H ; en HL la posicion de memoria
otro:
mvi a, FFh
SUB M
mov M, a
I! H
;compr"e#a parte alta
mvi a, $%H
cmp H
&' compr"e#a(L)
*mp otro
compr"e#a(L): ; compr"e#a parte #a*a
mvi a, +0h
cmp L
&' ,in
*mp otro
,in:
hlt
2 Simulador del microprocesador 8085
Demostracin:
Nombre: leds.asm
Procesador: 8085
Dispositivos: Panel de eds (# linea)
Generador de $nterr%pciones
!neas: &'
Descripci"n:
Programa que genera un movimiento ordenado y oscilante de una luz mediante
un vector de leds.
;LU' -)-H% F./.S/I-)
;
; re0"iere led en p"erto 0
; interr"pcion rst 1.2 cada 1 seg"ndo
.org 1000h
mvi c,13+
mov d,0
salto:
mov a,c
o"t 0h
*mp salto
.org 004ch
;S"#r"tina cada 1 seg"ndo
s"#:
mov a,d
cpi 0
*n5 m"#
Programas de ejemplo 3
mov a,c ;direccion 667
rar
mov c,a
mov a,c
cpi 0
*n5 r"#
mvi c,1
mvi d,1
m"#:
mov a,c ;direccion 866
ral
mov c,a
mov a,c
cpi 0
*n5 r"#
mvi c,13+
mvi d,0
r"#:
ei
ret
Ejemplo de una utilidad:
Nombre: pantalla.asm
Procesador: 8085
Dispositivos: Pantalla de (e)to
(eclado
Generador de $nterr%pciones por teclado
!neas: 5*
Descripci"n:
Simulacin de un terminal de te!to.
; %*emplo de programa
; Sim"lador de terminal
; .sociado a interr"pci9n /:.;
.de,ine
te<to %000h
tamte<to 32=$0
.org 1000h
; 6666666666666666666666666666666
; ;:)>:.M. ;:I-I;.L
4 Simulador del microprocesador 8085
; 6666666666666666666666666666666
mvi B, %0h
mvi -, 00h
call clear(all
#"cle:
*mp #"cle
.org 003$h ; ?ireccion de interr"pci9n /:.;
; 6666666666666666666666666666666
; :U/I. @U% L%% ?%L /%-L.?) A %S-:IB% % M%M):I.
; 6666666666666666666666666666666
in 00h
cpi 0
*5 no(tecla
sta< B
in< B
no(tecla:
ret
clear(all:
L!I H, te<to ;cargamos origen
L!I ?, te<toBtamte<to ;cargamos ,in
repite(c:
MCI .,43
M)C M,. ;#orrar p"nto de memoria
I! H ;incrementar direccion
call comparador
cpi 1
*5 ,in(clear
*mp repite(c
,in(clear:
ret
comparador: ;compara ?% con HL Den 1E #itsF. ?ev"elve
.G1 si ig"al
M)C .,%
-M; L
&' no(ig"al
M)C .,?
-M; H
&' no(ig"al
MCI ., 1
ret
no(ig"al:
MCI .,0
ret
Programas de ejemplo 5
Ejemplo de una utilidad:
Nombre: +elo,.asm
Procesador: 8085
Dispositivos: -is%ali.ador de ' segmentos
Generador de $nterr%pciones
!neas: 8/
Descripci"n:
Programa que convierte a un "#"$ en un reloj digital con segundero y minutero.
; %*emplo de programa
; :elo* digital
; .sociado a interr"pci9n /:.;
.data ??h
?B 11h, $$h, 4%h, E%h, $?h, EBh, 1Bh, $Eh, 1Fh, $Fh
;digitos sin p"nto
?B F1h, -$h, B%h, %%h, -?h, %Bh, FBh, -Eh, FFh, -Fh
;digitos con p"nto
.org 1000h
; 6666666666666666666666666666666
; ;:)>:.M. ;:I-I;.L
; 6666666666666666666666666666666
mvi B, 00h
mvi -, ??h
mvi ?, 00h
6 Simulador del microprocesador 8085
mvi %, ??h
mvi L, %1h
mvi H, ??h
mvi ., 11h
o"t Ed
o"t 1d
o"t $d
mvi ., F1h
o"t 2d
#"cle:
*mp #"cle
.org 003$h ; ?ireccion de interr"pci9n /:.;
; 6666666666666666666666666666666
; :U/I. @U% .UM%/. %L /I%M;)
; 6666666666666666666666666666666
lda< B
cpi $Fh
*5 s"ma(seg"ndo
in< B
lda< B
o"t 1d
ret
s"ma(seg"ndo:
mvi -,??h
lda< B
o"t 1d
lda< ?
cpi EBh
*5 s"ma(min"to1
in< ?
lda< ?
o"t Ed
ret
s"ma(min"to1:
mvi %, ??h
lda< ?
o"t Ed
mov ?, -
mov -, L
lda< B
cpi -Fh
*5 s"ma(min"to3
in< B
lda< B
o"t 2d
mov L, -
mov -, ?
mov ?, 00h
ret
s"ma(min"to3:
mvi L, %1h
mov ?, -
mov -, L
lda< B
o"t 2d
mov ?, -
mov -, H
in< B
Programas de ejemplo 7
lda< B
o"t $d
mov H, -
mov -, ?
mov ?, 00h
ret
Ejemplo de un uego !nteracti"o:
Nombre: 0na1e.asm
Procesador: 8085
Dispositivos: (eclado
Pantalla Grafica
Generador de $nterr%pciones
!neas: 2/6
D203+$P3$4N:
%onocido juego de la serpiente& consiste en comer los puntos de comida si
mordernos a nosotros mismos.
; %*emplo de ;rograma en ensam#lador para el sim"lador de +0+2
; S.H% +0+2
; -omer sin mordenos a nosotros mismos
.de,ine
memCideo .000h ;)rigen de la memoria de Cideo
si5eCideo 1E0=100 ;/amaIo de la memoria de Cideo
mitadCideo memCideoBsi5eCideoJ3 ;;osicion intermedia
teclado 0h ;;"erto del teclado
"p D61E0FKFFFFh
doLn 1E0
le,t 61
right 1
tecla("p 1%h
tecla(doLn 1Fh
tecla(le,t 11h
tecla(right 10h
comien5o mitadCideoB+0
.data 0#
c"anto: dB 10h
cola: dM comien5o
pos: dB 0
pos(pantalla: dM
memCideoB2+0H,memCideoB1000H,memCideoB3200H,memCideoB4000H
# Simulador del microprocesador 8085
.org 200H
; call clear(all
L!I H, comien5o
call pon(comida
repite:
I teclado
*mp repite
comparador: ;compara ?% con HL Den 1E #itsF. ?ev"elve
.G1 si ig"al
M)C .,%
-M; L
&' no(ig"al
M)C .,?
-M; H
&' no(ig"al
MCI ., 1
ret
no(ig"al:
MCI .,0
ret
compar(in,: ;compara ?% con HL Den 1E #itsF. ?ev"elve
.G1 si menor ?%
M)C .,?
-M; H
&M menor
&' comp(menor
MCI ., 0
ret
menor:
MCI .,1
ret
comp(menor:
M)C .,%
-M; L
&M menor
MCI ., 0
ret
compar(s"p: ;compara ?% con HL Den 1E #itsF. ?ev"elve
.G1 si maNor ?%
M)C .,H
-M; ?
&M menor
&' comp(menor3
MCI ., 0
ret
menor3:
MCI .,1
ret
comp(menor3:
M)C .,L
-M; %
&M menor3
MCI ., 0
ret
Programas de ejemplo $
clear(all:
L!I H, memCideo ;cargamos origen memoria video
L!I ?, memCideoBsi5eCideo ;cargamos ,in memoria video
repite(c:
MCI .,0
M)C M,. ;#orrar p"nto de memoria
I! H ;incrementar direccion
call comparador
cpi 1
*5 ,in(clear
*mp repite(c
,in(clear:
ret
moverse: ;en registro . el movimiento
-;I tecla("p
c5 ha5(arri#a
-;I tecla(doLn
c5 ha5(a#a*o
-;I tecla(le,t
c5 ha5(i50da
-;I tecla(right
c5 ha5(decha
ret
compro#ador: ;compr"e#a 0"e no se e<cede de la memoria
de video
L!I ?, memCideo
call compar(s"p
cpi 1 ;Si es 0 es 0 ?% no es maNor 0"e HL
*5 ,in
L!I ?, memCideoBsi5eCideo
call compar(in,
cpi 1 ;Si es 0 es 0"e ?% no es menor 0"e HL
*5 ,in
ret
ha5(arri#a: ;moverse arri#a
L!I ?, "p
call pon(p"nto
ret
ha5(a#a*o: ;moverse a#a*o
L!I ?, doLn
call pon(p"nto
ret
ha5(i50da: ;moverse i5da
L!I ?, le,t
call pon(p"nto
ret
ha5(decha: ;moverse decha
L!I ?, right
call pon(p"nto
ret
pon(p"nto:
1% Simulador del microprocesador 8085
?.? d
call compro#ador
mov .,M
cpi FFh
*5 ,in
cpi FFhJ3
-' pon(comida
MCI M, FFh ;pintar
call comp(#orra
ret
comp(#orra:
p"sh psL
L?. c"anto
cpi 0
*5 #orra(p"nto ; si el c"anto es 0 haN 0"e #orrar
?-: a
S/. c"anto ; decrementamos N almacenamos el c"anto
pop psL
ret
#orra(p"nto:
p"sh h
p"sh d
lhld cola
L!I d, "p ; mirar arri#a
?.? d
mov a,M
cpi FFh ;si haN p"nto haN 0"e #orrarlo
*5 elimina
lhld cola
L!I d, doLn ; mirar a#a*o
?.? d
mov a,M
cpi FFh ;si haN p"nto haN 0"e #orrarlo
*5 elimina
lhld cola
L!I d, le,t ; mirar i50"ierda
dad d
mov a,M
cpi FFh ;si haN p"nto haN 0"e #orrarlo
*5 elimina
lhld cola
L!I d, right ; mirar i50"ierda
?.? d
elimina:
MCI a, 00h
mov M,a
SHL? cola ;almacenamos la n"eva cola
pop d
pop h
pop psL
ret ;regresa al call de comp(#orra
pon(comida:
p"sh psL
p"sh d
L?. c"anto
adi 10h
S/. c"anto
Programas de ejemplo 11
L?. pos ;cargamos la posicion act"al
rlc
Mov e,a
rrc
Mvi d,0
I: a ;incrementamos el despla5amiento
.I 11# ;impedimos 0"e sea maNor 0"e $
S/. pos ;g"ardamos la posicion act"al
p"sh h
L!I h, pos(pantalla
?.? d
Mov %,M
I! h
Mov ?,M
!-H> ;Na tenemos la direccion en HL
mvi a, FFhJ3
mov M, a ;coloreamos el p"nto
pop h ;rec"peramos lo g"ardado
pop d
pop psL
ret
,in:
hlt
.org 4-h ;Interr"pcion del timer D:S/ 1.2F
call moverse
%I
:et

You might also like