Está en la página 1de 6

EJERCICIOS CON ASSEMBLER

Programación y Depuración en ASSEMBLER

Contenido: Ejercicios 1 a 7. Práctica de programación en Assembler.

Objetivo: Capacitación y entrenamiento en el uso de la información contenida en el material


escrito adjunto.
Desarrollar en lenguaje Assembler para un MC68HC908QY4 y simular en la IDE, la solución de
los problemas planteados en este trabajo práctico.

NOTA: En todos los ejercicios realizar el diagrama de flujo, comentar el código y definir los
parámetros necesarios para su funcionamiento y simulación.

Ejercicio 1:

Sintetice dos tablas de igual cantidad de elementos positivos de 1 byte en sólo una que
reemplace a la primera de ellas, conteniendo en cada posición el menor valor correspondiente
de las tablas originales.
Aclaración: Tomar valores positivos de 0 a 255 en decimal o de $00 a $FF en Hexa

org $0080
TABLA FCB $FF,$09,$08,$01,$04,$FB,$0B,$02
LISTA db $04,$0A,$05,$07,$1F,$09,$0C,$0F

org $EE00
INICIO clra
clrx
ldx #08 ;cantidad de elementos de cada tabla

beq FIN
lda TABLA-1,x
cmp LISTA-1,x
bls DECRE ;Bifurca si es menor o igual
bhs MAYOR ;salta si es mayor o igual
MAYOR lda LISTA-1,x
sta TABLA-1,x

DECRE clr LISTA-1,x


decx
bra INICIO
FIN swi

org $FFFA
dw INICIO ;vector IRQ
dw INICIO ;vector SWI
dw INICIO ; reset = vector Reset

1
Ejercicio 2:

Invierta el orden de una tabla que comienza en la dirección $0081 y cuya cantidad de
elementos consecutivos de 1 byte cada uno, se indica en el contenido de la dirección $0080.

org $0080
NUM FCB $05
BYTE FCB $FB,$03,$0A,$FF,$09
CONT EQU $95
AUX EQU $9A

org $EE00
INICIO clra
clrx
clrh
ldhx #$0081
mov #05,AUX

ALGOR mov AUX,CONT


jsr LOOP
dec AUX
bne ALGOR
bra FIN

LOOP dec CONT ;subrutina para invertir el orden de una tabla


beq DONE
mov x+,$90
lda ,x
decx
sta ,x
incx
mov $90,x+
decx
bra LOOP

DONE ldhx #$0081


rts

FIN swi

org $FFFA
dw INICIO
dw INICIO
dw INICIO

2
Ejercicio 3:

En una cadena de caracteres codificados en ASCII, que comienza en la direccion $0090 y


termina con el caracter CR= $0D (Carriage Return, retorno de carro), reemplazar las letras
minusculas por mayusculas.

org $0090
DB $6D,$6F,$69,$73,$65,$73,$0D
CR EQU $9A

org $EE00 ;inicio del programa


INICIO clra
clrx
clrh

ldhx #$0090 ;inicio de la cadena


mov #$0D,CR

CONVER lda ,x
cbeq CR,EXIT ;cbeq hace los mismo que hacer cmp CR y despues beq EXIT. Comparo el
; contenido de ACC con (M)=0D= Carriage Return.
sub #20 ;le resto al codigo ASCII de cada minuscula $20 para convertirla en mayuscula
sta ,x
incx
bra CONVER

EXIT swi

org $FFFA
dw INICIO
dw INICIO
dw INICIO

3
Ejercicio 4:

Realice la suma algebraica de tres números de 16 bits ubicados entre las posiciones de
memoria $0080 y $0085. Pruebe las operaciones utilizando números positivos y negativos y
almacene el resultado en las direcciones de memoria $0090 y $0091.

org $0080
NUM1 DB $4D,$28
NUM2 DB $7F,$F3
NUM3 DB $01,$5B
NUM4 DB $00,$00 ;resultado de la suma de NUM1 + NUM2 = NUM4
RTDO EQU $90 ;resultado total de sumar NUM1+NUM2+NUM3

org $EE00
INICIO clra
clrx
ldx #02
START beq SUMO
jsr SINC
lda NUM1-1,x
adc NUM2-1,x ;sumo la parte alta con carry de NUM1 y de NUM2
sta NUM4-1,x
decx
bra START

SINC lda NUM1-1,x


add NUM2-1,x ;suma la parte baja sin carry de NUM1 y de NUM2
sta NUM4-1,x
decx
rts
SUMO ldx #02
RSUM beq EXIT
jsr SINC2
lda NUM3-1,x
adc NUM4-1,x ;sumo la parte alta con carry de NUM3 y NUM4
sta RTDO-1,x
decx
bra RSUM
EXIT swi

SINC2 lda NUM3-1,x


add NUM4-1,x ;sumo la parte baja sin carry de NUM3 y NUM4
sta RTDO-1,x
decx
rts

org $FFFA
;dw INICIO
dw INICIO
;dw reset

Ejercicio 5:

En dos direcciones consecutivas de memoria se encuentra contenido un BCD menor a 10000.


Indique en cuatro unidades de memoria consecutivas las cantidades de unidades de mil,
centenas, decenas y unidades que contiene dicho número.

4
Ejercicio 6:

Determine la cantidad de números negativos en un bloque de datos determinado. La longitud


del bloque se encuentra almacenada en la dirección de memoria $0080 y el bloque comienza
en la dirección $0082. Coloque el resultado en la dirección $0081.

org $0080
LONG EQU $80
RTDO EQU $81
org $0082
TABLA DB $09,$F2,$01,$FA,$F8,$10,$F3,$00

org $EE00
INICIO clra
clrx
clrh
ldx #08
stx $80
PNEGA tst TABLA-1,x
bmi CONT
dbnzx PNEGA
EXIT swi

CONT inca
sta $81 ;almaceno la cantidad de num negativos
decx
beq EXIT
bra PNEGA

org $FFFA
;dw INICIO
dw INICIO
;dw Reset

5
Ejercicio 7:

Reemplace en una cadena de caracteres ASCII almacenada en memoria a partir de la


dirección $81, los caracteres 0 por caracteres Espacio (SP=$20). La dirección $80 contiene la
longitud de la cadena.

org $0080
LONG EQU $80
org $0081
CADE DB '0ACDC2010' ;cadena de caracteres
CERO EQU $90
ESP EQU $96
CONT EQU $94
org $EE00
INICIO clra
clrx
clrh
ldhx #$0081
mov #09,LONG
mov #$30,CERO ;almaceno en CERO=$30
mov #$20,ESP ;cargo $20 = SP
mov #0A,CONT

CONVER dec CONT


beq EXIT
lda ,x
cbeq CERO,REEMP
incx
bra CONVER
REEMP mov ESP,x+
bra CONVER

EXIT swi

org $FFFA
;dw INICIO
dw INICIO
;dw Reset

También podría gustarte