Taller+Codigo+Ensamblador

code Código1: Este programa consiste en la interrupción asíncrona del puerto de transmisión SCI.

SIZE    EQU 16          ; Se asigna el tamaño del buffer TX. SCSR1   EQU $16         ; Apuntador de memoria el cual almacena 16h. SCDR    EQU $18         ; Apuntador de dirección del registro de datos. ORG $50        ; Toma la posición 50 para escritura de datos. PTR_OUT RMB 2           ; Toma PTR como buffer de salida con un espacio en memoria de 2. TX_B    RMB SIZE        ;  Asigna a la etiqueta TX_B un espacio en memoria del tamaño de SIZE. ORG TX_IRQ     ; Desocupa la transmisión del SCI. TX_INT  LDHX PTR_OUT    ; Carga el puntero. LDA SCSR1      ; Carga la lectura inicial del registro SCTE de SCI. MOV X+, SCDR   ; Mueve el nuevo byte e incrementa H:X. CPHX #TX_B+SIZE ; ¿Se ha sobrepasado del final del buffer? BLS NOLOOP     ; Si lo reconoce, sigue. LDHX #TX_B     ; Restablece todo lo anterior y así comenzar de nuevo en el buffer. NOLOOP  STHX PTR_OUT    ; Guarda en el puntero el valor nuevo. RTI            ; Retornar. code

code Codigo 2: Programa que almacena los caracteres de la palabra 'Hola' en memoria, ubicando cada caracter en un espacio diferente.

ORG $140      ; se inicia la escritura de código en la posición de memoria ROM 140 en hexadecimal SOURCE FCC 'Hola! ; se crea una variable tipo cadena de caracteres llamada SOURCE e inicializada con el valor 'Hola' FCB 0         ; almacena un valor 0 después de la cadena 'Hola' DEST   EQU $50        ; se define a DEST como una constante, cuyo valor es 50 h        ORG $6E00      ; se inicia la escritura de código en la posición 6E00 en hexadecimal CLRX          ; borra el Registro del índice X LOOP    LDA SOURCE,X   ; carga en A la suma de lo que hay en SOURCE y lo que hay en H:X. esta línea se nombra con la etiqueta LOOP STA DEST,X    ; lo que esta en el registro A pasa a almacenarse en el espacio en memoria DEST + HX        BEQ DONE       ; si Z=1 se dirige hacia la etiqueta DONE (la ultima) INCX          ; incrementa a X en 1 BRA LOOP      ; siempre re-direcciona hacia la línea con la etiqueta LOOP DONE   BRA DONE       ; siempre envía hacia la línea etiquetada como DONE. Es decir, esta misma. Significa que este es el final del código code

Interpretaciones alternativas:

Puede leerse de la siguiente manera: START AT $140 SOURCE = 'HOLA' SOURCE += 0; DEST = $50 START AT $6E00 X = 0 LOOP: A = SOURCE + HX DEST + HX = A IF Z == 1 GO TO DONE X = X+1 GO TO LOOP DONE: GO TO DONE

que seria algo asi como: funcion { final char[] SOURCE = "Hola0"; final byte DEST = $50; X = 0; do { A = SOURCE + H:X; ó A = SOURCE[x]; DEST + H:X = A; ó DEST + H:X = A; X++; } while (Z != 1); }

code Ejercicio 3: Programa consiste en una variable que inicializa en 10, y termina cuando esta es igual a 1.

ORG   $130             ;Referencia la posición 130 como inicio de escritura. DATA   FCB    $C0, $40, %8B    ;Se reserva el espacio de memoria para un byte en las ;posiciones: C0 hexa, 40 hexa y 8B   binario. FCB   $75, $A0, $60    ;Se reserva el espacio de memoria para un byte en las ;posiciones: 75 hexa, a0 hexa y 60   hexa. FCB   $DB, $25, $B0    ;Se reserva el espacio de memoria para un byte en las ;posiciones: DB hexa, 25 hexa y BU hexa. FCB   $50              ;Se reserva el espacio de memoria para un byte en la posición 50 hexa.

ORG   $6E00            ;Referencia la posición 6E00 como inicio de  escritura LDX   #10              ;Carga en el registro X el valor 10. GETBYTE LDA   DATA – 1, X      ;Carga en el A, el valor de DATA-1 más el valor de HX. DECCNT DECX                    ;Decrementa en uno el valor de X        BEQ    DONE             ;Si Z=1 se dirige hacia la etiqueta DONE. CMP   DATA-1 X         ;Se le resta al acumulador el valor de x y el DATA.1, se compara este con valor este en la memoria.

BHS   DECCNT           ;Si Z esta por encima o es igual a O salta a la etiqueta DECCNT

BRA   GETBYTE          ;Salta al GETBYTE DONE   BRA    DONE             ;Salta a DONE code

code Codigo 4: Un loop donde un contador empieza en 0 hasta 28160(6EH00) incrementando de a 1

ORG   $6E00    ;Referencia la posición 6E00H como inicio de escritura LDHX   #$0050  ;Carga en el registro H:X el valor 0050H

LOOP   CLR   , X      ;Pone el registro H:X en 0 AIX   #1       ;Incrementa en 1 el registro H:X, H:X = H:X+1 CPHX  #$0500   ;Compara el registro H:X con el valor 0500H, H:X-0500H BNE   LOOP     ;Se devuelve a LOOP si Z = 0 (si la resta anterior no dio 0) DONE   BRA    DONE     ;Se devuelve a DONE

code