Parcial+1


 * UNIVERSIDAD DE LA SABANA**
 * INGENIERÍA INFORMÁTICA**
 * MICROCONTROLADORES**
 * PUNTO 1:**

Describa las acciones que realiza este código línea por línea:

INCLUDE 'MC68HC908GP32.inc'

FLASH EQU $8000 RAM EQU $40 COPD EQU 0

ORG RAM ; Insert your data definition here ExampleVar: DS.B 1

x1 ds 1 r1 ds 1 t1 ds 1 dos ds 1

ORG ROMStart
 * code section
 * code section

_Startup: LDHX #RAMEnd+1 ; initialize the stack pointer TXS CLI LDA #0 STA x1 LDA #1 STA t1 STA r1 LDA #9 STA t1;


 * enable interrupts

mainLoop: NOP
 * Insert your code here

LDA t1; CMP #0; BPL Start BRA resultado resultado LDA x1; BRA resultado Start LDA r1; ADD #2 STA r1;

LDA t1; SUB r1; STA t1; LDA x1; ADD #1; STA x1; JMP mainLoop

Realice un código en asembler que permita sumar los números del 1 al 100
 * PUNTO 2:**

code ORG   #$84     ; Posición de Inicio del Código CLRX           ; X = 0, Va a ser el contador CLRA           ; A = 0, Va a ser la suma LOOP   INC   , X      ; X = X+1 ADD  , X      ; A = A+X CPX   #100     ; x - 100 BNE   LOOP     ; SI Z = 0 ir a LOOP, si X no es igual a 100 ir a LOOP FIN    BRA    FIN      ; Fin del código el resultado va a quedar guardado en el registro A

code


 * Ing Ronald Gutiérrez**

=SOLUCION=


 * Punto 1**

en este caso la raiz cuadrada de 9**
 * - Este algoritmo se encarga de saca la raiz cuadrada del valor almacenado en T1.

INCLUDE 'MC68HC908GP32.inc' Incluye la librería FLASH EQU $8000 Se crea la constante FLASH con un valor de 8000 hexadecimal RAM EQU $40 Se crea la constante RAM con un valor de 40 hexadecimal COPD EQU 0 Se crea la constante COPD con un valor de 0

ORG RAM ; Insert your data definition here Se inicia la escritura en la dirección RAM ExampleVar: DS.B 1

x1 ds 1 Reserva x1 (1 byte) r1 ds 1 Reserva r1 (1 byte) t1 ds 1 Reserva t1 (1 byte) dos ds 1 Reserva dos (1 byte)

ORG ROMStart Inicia escritura en ROMStart
 * code section
 * code section

_Startup: Etiquta _Startup LDHX #RAMEnd+1 ; initialize the stack pointer Inicializa H:X en la posicion final de RaA + 1 TXS Transfiere el Registro de Índice al Stack Pointer CLI Borra mascara de interrupción i = 0 LDA #0 Carga en el registro A el valor 0 STA x1 El valor de A lo copia en x1 LDA #1 Carga en el registro A el valor 1 STA t1 Pone en t1 el valor de A STA r1 Pone en r1 el valor de A LDA #9 Carga en el registro A el valor 9 STA t1; Pone en t1 el valor de A


 * enable interrupts

mainLoop: Crea la etiqueta mainLoop NOP No hace nada
 * Insert your code here

LDA t1; Carga el valor de t1 en A CMP #0; Compara A con cero BPL Start Se hace la bifurcación si A=0, si es SI lo manda a Start, sino sigue BRA resultado Lo envía a la etiqueta resultado

resultado LDA x1; Carga el valor de x1 en A BRA resultado Se devuelve a resultado

Start LDA r1; Carga el valor de r1 en A ADD #2 Agrega 2 al valor que hay en A STA r1; El valor de A lo copia en r1

LDA t1; Carga en A el valor de t1 SUB r1; Resta A – r1 STA t1; El valor de A lo copia en t1

LDA x1; Carga el valor de x1 en A ADD #1; Agregar 1 al valor que hay en A STA x1; El valor de A lo copia en x1 JMP mainLoop Saltar hasta mainLoop