7
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

EJERCICIOS CON ASSEMBLER

Embed Size (px)

Citation preview

Page 1: EJERCICIOS CON ASSEMBLER

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

Page 2: EJERCICIOS CON ASSEMBLER

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

Page 3: EJERCICIOS CON ASSEMBLER

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

Page 4: EJERCICIOS CON ASSEMBLER

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

Page 5: EJERCICIOS CON ASSEMBLER

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

Page 6: EJERCICIOS CON ASSEMBLER

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