Sei sulla pagina 1di 7

Computadoras Digitales

Programación en Assembler del HC12

Diagramas de las estructuras de control mas usadas en la programación Assembler

Secuencia Secuencia
Principal Principal

if
else true if
rel_log1 true
rel_log2

endif
endif

instrucciones instrucciones
continuación de la instrucciones
ramal else Continuación de la ramal true
secuencia ramal true secuencia

DO DO
Secuencia Secuencia
Principal Principal

Instrucciones del Instrucciones del


ciclo ciclo parte1
Inicializa variable Inicializa variable

Afecta rel_log3 Afecta rel_log4

mientras mientras
rel_log3 = T rel_log4 = T

Continua Continua
Instrucciones del
ciclo parte 2

repite

El diseño del programa comprende el utilizar estas estructuras y combinarlas todas o algunas de
ellas de tal forma que se obtenga la funcionalidad deseada. El siguiente paso después de
optimizar el diseño viene la traducción de las mismas al código que entienda nuestro sistema.
A continuación la aplicación de este proceso al set de instrucciones del HC12, se aplica usando
principalmente las instrucciones de ramificación condicionada.
Computadoras Digitales
Programación en Assembler del HC12
Traducción de las estructuras a instrucciones del HC12.

ESTRUCTURA CONDICIONADA ESTRUCTURA CONDICIONADA PARCIAL


SECUENCIA
COMPLETA PRINCIPAL
inst1
SECUENCIA Inst2
PRINCIPAL .
inst1 .
Inst2 .
. BR /(rel_log2’) ENDIFx
. ; /rel_log2’ se refiere al complemento
. ; de la rel_log2.
BR /(rel_log1’) ELSEx INST_RAMAL_TRUE:
; /rel_log1’ se refiere al complemento inst3
; de la rel_log1. inst4
INST_RAMAL_TRUE: .
inst3 .
inst4 .
. ENDIFx:
. CONTINÚA LA
. SECUENCIA
BRA ENDIFx
ELSEx:
inst5
inst6
.
.
.
ENDIFx:
CONTINÚA LA
SECUENCIA
ESTRUCTURA CÍCLICA
DETECCIÓN TEMPRANA

SECUENCIA
PRINCIPAL
ESTRUCTURA CÍCLICA inst1 ;Inicia Variables del
DETECCIÓN AL FINAL ciclo
inst21
SECUENCIA DO:
PRINCIPAL Inst3 ;parte inicial del ciclo
inst1 ;Inicia Inst4
Variables del ciclo .
DOx: .
Inst3 Inst5 ; afecta rel_log3
Inst4 BR (/rel_log4) REPEAT
. Inst6 ;parte final del ciclo
. Inst7
Inst5 ; afecta rel_log3 .
BR (rel_log3) DOx .
CONTINÚA LA .
SECUENCIA BRA DO
REPEAT:
CONTINÚA LA
SECUENCIA
Computadoras Digitales
Programación en Assembler del HC12
Ejercicios de ejemplos y propuestos
#1
Se requiere medir el largo de una frase que termina en cero, tal como se ejemplifica a
continuación:
KDENA dc.b “Hola Mundo”,0
Realice una subrutina llamada LKDNA que reciba la dirección de la cadena en D realice lo
especificado y entregue el resultado en el acumulador B. Solo se permiten cadenas de menos de
255 letras, si la cadena contiene mas de 255 entonces el valor retornado debe ser 255 y la
variable de 8 bits ERR debe ser -1, si el resultado es válido entonces ERR = 0
Sol:
DO ;Programa en ASM del HC12.
LKDENA Variables: SECTION
ERR ds.b 1
CNTDR=0 LEE Byte según Constantes: SECTION
dirección en PNTRO
KDENA dc.b “Hola Mundo”,0
Prog: SECTION
FINAL = 0
; Aquí va el programa que
if ; requiere la aplicación
ERR = 0 Byte != 0
;
PNTRO + 1
Subrutinas: SECTION
PNTRO <= D
FINAL = 1 LKDENA: ; Devuelve en B el tamaño
CNTDR + 1
; de la KDENA en D.
mientras
NOFINAL PSHX
CLRB ; CNTDR = 0
CNTDR >255
Retorna CLC ; Carry => FINAL
ERR = -1 CLR ERR ; ERR = 0
TFR D,X ; D => PNTRO
FINAL = 1
DO_1:
LDAA 1,X+ ; Lee byte según PNTRO
BEQ ELSE_1 ; if Byte != 0
CNTDR = 255
INCB ; CNTDR+1 no afecta carry
BNE ENDIF_2
MOVE #-1,ERR ; ERR = -1
SEC ; FINAL = 1
LDAB #255 ; CNTDR = 255
ENDIF_2:
BRA ENDIF_1
ELSE_1:
SEC
ENDIF_1:
BCC DO_1 ; Mientras NOFINAL
PULX
RTC

#2
Se requiere copiar de una cadena de una posición de ORGEN hasta otra posición DESTNO
Constantes: SECTION
ORGEN dc.b “Hola Mundo OTRA VEZ”,0

Variables: SECTION
DESTNO ds.b 256
Computadoras Digitales
Programación en Assembler del HC12

Asuma que las direcciones donde residen las cadenas se entregan en el registro ‘X’ la de ORGN
y en el registro ‘Y’ la de DESTNO. Realice una subrutina CPY$ que cumpla con lo solicitado
además devuelve la cantidad de bytes copiados en el registro B, si la cadena ORGN sobrepasa
los 256 bytes retorna 0.

#3
La figura presenta el esquema de conexión de un grupo de 8 LEDs conectados al puerto A del
HC12:
Realice las subrutinas LEDVA y LVAYVEN que encienden
los LEDs de acuerdo a las siguientes secuencias. PTA7

a. LEDVA los LEDs se iluminan secuencialmente PTA6

iniciando por PTA7 hasta PTA0 y repite. PTA5

b. LVAYVEN los LEDs se iluminan secuencialmente PTA4

iniciando por PTA7 hasta PTA0 y luego la PTA3

secuencia se invierte y se iluminan desde PTA0 PTA2

hasta PTA7 y repite.. PTA1

El intervalo entre dos LEDs debe ser de 100ms, esta última PTA0
especificación implica que debe realizar una subrutina
auxiliar para controlar los 100ms. Asuma que el puerto A se
puede direccionar usando su nombre simbólico PORTA.
Asuma que PORTA
ya está configurado como puerto de salida genérico.
Sol:
DO b.
DO

Traslada a la
derecha Byte
if
Der = 1

LVAYVEN Traslada a la Traslada a la


PORTA = Byte izquierda Byte derecha Byte

FINAL = 0 T100MS
LEDVA
if
Byte= #$80 if
Byte = $80
Byte = #$1
PORTA = Byte
FINAL = 0 if
Byte != 0 Der = 0
Der = 1
PORTA = Byte
T100MS
Byte = $80
Der = 1
FINAL = 1

mientras
CNTDR = 14
NOFINAL
CNTDR - 1

mientras
Retorna
a. CNTDR != 0

Retorna
Computadoras Digitales
Programación en Assembler del HC12
#4
Se requiere realizar una rutina para transmisión en serie llamado TXMITC, realice la interfaz
según las siguientes especificaciones:
a. El dato a transmitir reside en el registro A.
b. La salida serie es el terminal 7 del PORTA, este terminal debe cambiar a cero al iniciar una
nueva transmisión y permanecer en cero durante un periodo de Bdrte, paso seguido debe
reflejar el estado del resto de los bits del dato en el registro A empezando por el bit menos
significativo (lsb) luego el resto.
c. Entre bit y bit debe ejecutarse Bdrte para controlar la rapidez de transmisión
d. Durante la transmisión serie TXMITC debe poner el bit 7 del TxSCR en 0 para indicar que el
transmisor no está listo para enviar nuevos datos.
e. Asuma que la subrutina Bdrte ya está disponible.
f. Cuando finalice la transmisión del dato en el registro A, el terminal 7 de PORTA debe quedar
en uno y permanecer así hasta que se inicie una nueva transmisión.

La figura a continuación muestra el perfil deseado en el bit 7 de PORTA durante la transmisión de


un dato:

bit de bit de estado de


inicio b0 b1 b2 b3 b4 b5 b6 b7 reposo
paro

TxSCR ds.b 1 ;Hace las funciones de control.


Solución parcial:
Computadoras Digitales
Programación en Assembler del HC12
DO

TXMITC Byte = A&1

Bit 7 de TXCSR = 0 if
Byte = 1
Bit 7 de PORTA = 0
Bit 7 de PORTA = 0 Bit 7 de PORTA = 1

Bdrte
Bdrte

CNTDR = 14
Traslacion derecha de A

mientras
A != 0

Bit 7 de TXCSR = 1

Bit 7 de PORTA = 1

Retorna

#5
Se requiere realizar un convertidor de serie a paralelo para recepción en serie llamado RXDC,
realice la interfaz según las siguientes especificaciones:
a. La iniciación de la recepción de un nuevo dato es indicado por un 0 en el bit 7 del puerto A el
cual de lo contrario es 1. Este bit de inicio ‘0’ solo señala el inicio de la transmisión por lo que
no es un bit de dato válido
b. El primer bit válido debe detectarse pasado 1.5 veces el tiempo de baudrate asuma que se
dispone de un rutina Bdrte y otra BdrteYmedio los siete bits restantes se espacian un Bdrate
entre uno y otro.
c. Cuando se tienen detectado los 8 bits la rutina debe indicarlo poniendo un 1 en el bit6 de
TxSCR el resto del tiempo este bit debe estar en 0 para indicar que aún no se ha recibido un
nuevo dato.

#6
Se requiere realizar la subrutina SUM32b para sumar dos números de 32 bits que están
almacenados en cuatro posiciones de memoria consecutivas según “big endian” como se
muestra en el siguiente pseudo código
NUM2 ds.w 2 ; Número 2 de 32b
NUM1 ds.w 2 ; Número 1 de 32b.
TOTL ds.w 2 ; Total de 32b.
Presente la subrutina.
Computadoras Digitales
Programación en Assembler del HC12
#7
Se requiere una subrutina que compare dos valores enteros de 16 bits y retorne el mayor de los
dos. Esta subrutina se diseña para que se ejecute en un entorno ‘C’ por lo tanto los dos números
se pasan así, VAR1 en la pila y VAR2 en el registro D dado que corresponde a una subrutina la
pila contendrá además de VAR1 la dirección de retorno y el registro PPAGE tal como se ilustra a
continuación:

SP PPAGE

DIR. RETORNO (H)

Direccion Aumenta
DIR. RETORNO (L)

SP + 3 VAR2(H)

VAR2(L)

D = VAR1

Realice y presente la subrutina int MAX( int, int) que produce el resultado deseado asumiendo
que:
a. VAR1 y VAR2 son dos enteros sin signo.
b. VAR1 y VAR2 son dos enteros con signo.
En estos casos el retorno de las subrutina debe ser con un RTC en vez de RTS

#8
Se requiere la subrutina MIN que contrario a MAX retorne el menor valor de las dos variables
entregadas. MIN al igual que MAX se ejecuta en un entorno C por lo que el resto de sus
especificaciones se mantienen igual. Realice MIN asumiendo que:
a. VAR1 y VAR2 son dos enteros sin signo.
b. VAR1 y VAR2 son dos enteros con signo.

#9
Realice una subrutina MULT16B que mutliplique dos enteros sin signo de 16bits cada uno
depositados en la memoria del HC12 según las siguientes directivas del ASM:

FCTR1 ds.w 1
FCTR2 ds.w 1
PRDCTds.w 2

#10
Realice el algoritmo para MULT32B que multiplica 2 números enteros sin signo de 32bits,
produciendo un resultado de 64bits. Las directivas muestran el mapa de memoria inicial:
FCT1 ds.w 2 ; Primer factor
FCT2 ds.w 2 ; Segundo factor
PRD ds.w 4 ; Producto.

Los valores en la memoria siguen la norma “big-endian”.

Potrebbero piacerti anche