Upload
milkux10
View
1.428
Download
5
Embed Size (px)
Citation preview
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 $0080TABLA FCB $FF,$09,$08,$01,$04,$FB,$0B,$02LISTA db $04,$0A,$05,$07,$1F,$09,$0C,$0F
org $EE00INICIO 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 igualMAYOR lda LISTA-1,x sta TABLA-1,x
DECRE clr LISTA-1,x decx bra INICIOFIN 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 $0080NUM FCB $05BYTE FCB $FB,$03,$0A,$FF,$09CONT EQU $95AUX EQU $9A
org $EE00INICIO 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 ytermina con el caracter CR= $0D (Carriage Return, retorno de carro), reemplazar las letrasminusculas por mayusculas.
org $0090 DB $6D,$6F,$69,$73,$65,$73,$0DCR EQU $9A
org $EE00 ;inicio del programaINICIO 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 $0080NUM1 DB $4D,$28NUM2 DB $7F,$F3NUM3 DB $01,$5BNUM4 DB $00,$00 ;resultado de la suma de NUM1 + NUM2 = NUM4RTDO EQU $90 ;resultado total de sumar NUM1+NUM2+NUM3
org $EE00INICIO clra clrx ldx #02START 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 rtsSUMO 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 RSUMEXIT 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 $0080LONG EQU $80RTDO EQU $81 org $0082TABLA DB $09,$F2,$01,$FA,$F8,$10,$F3,$00
org $EE00INICIO clra clrx clrh ldx #08 stx $80PNEGA tst TABLA-1,x bmi CONT dbnzx PNEGAEXIT 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 $0080LONG EQU $80 org $0081 CADE DB '0ACDC2010' ;cadena de caracteresCERO EQU $90ESP EQU $96CONT EQU $94 org $EE00INICIO 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
6