Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Realizado por:
(Espacio Reservado)
Fecha de entrega: 2018 / 12 / 05 f. ______________________
Año mes día Recibido por:
Sanción: ________________________________________________
2. Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la
memoria de programa.
Directivas de la Memoria Programa
.db: "Byte de Datos"; esta directiva coloca valores de las constantes en la memoria de programa
en una dirección conocida. Cada directiva .db se coloca al inicio de una nueva palabra en la
memoria de programa. Así, dos directivas .db de un solo byte como argumento usaran dos
palabras, mientras que una directiva .db con dos bytes como argumentos usaran solamente una
palabra. Ejemplo:
Sintaxis:
.db expresión1, expresión2, expresión3, ..
Las cadenas pueden ser colocadas en la memoria de programa con solo la directiva .db,
rellenando 6 palabras de datos o 12 bytes. Si se desea que a la cadena se le añada un 0 al final
de la misma deberás colocarla así:
.db "Hello World!", 0
.dw: "Palabra de Datos"; la directiva .dw trabaja como la directiva .db, pero se usará una palabra
para cada valor.
3. Realizar un pequeño programa que realice la comparación entre dos registros, y
determine qué valor toman las banderas Z y C dependiendo si los registros son
iguales, o si el uno es mayor o menor que el otro. Anotar sus conclusiones.
.include "m164pdef.inc"
.def A=r16
.def B=r17
ldi A,10
ldi B,10
cp A,B
breq nada
fin:
rjmp fin
nada:
rjmp fin
Nota: la función cp realiza la resta entre
registros sin tomar en cuenta el carry.
Cuando los registros son iguales:
El resultado de la comparación cp es cero
y la bandera Z toma el valor de 1, por lo
tanto la bandera C del carry esta con el
valor de 0.
contarp:
ldi conp,0
ldi zh, high (NOMBRE_PADRE<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (NOMBRE_PADRE<<1) ; que está en la FLASH, El puntero es de 16 bits
lazo4:
lpm tempo,z+
cpi tempo,' '
breq contarm
inc conp
rjmp lazo4
contarm:
ldi conm,0
ldi zh, high (NOMBRE_MADRE<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (NOMBRE_MADRE<<1) ; que está en la FLASH, El puntero es de 16 bits
lazo5:
lpm tempo,z+
cpi tempo,' '
breq comparacion
inc conm
rjmp lazo5
comparacion:
cp conp,conm
breq igual
brsh pmayorm
brlo mmayorp
pmayorm:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (PmayM<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (PmayM<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo1: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo1 ;si no llega a cero todavía saltar a lazo1
rjmp fin
mmayorp:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (MmayP<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (MmayP<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo2: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo2 ;si no llega a cero todavía saltar a lazo1
rjmp fin
igual:
ldi conta,42 ;cargo el conta (r18) para 10 repeticiones
ldi zh, high (PiguM<<1) ;el puntero Z apunta al inicio de la tabla est1
ldi zl, low (PiguM<<1) ; que está en la FLASH, El puntero es de 16 bits
ldi xh,high(RESULTADO) ;el puntero x apunta al inicio de la zona
ldi xl, low (RESULTADO) ;reservada para nom1 en la SRAM. Los punteros
lazo3: ;PARA PMAYM
lpm tempo,z+ ;cargo un caracter (el primero en la primera pasada)
st x+,tempo ;guardo este caracter en la zona nom1 en la SRAM (en la
dec conta ;decremento el contador conta (r18)
brne lazo3 ;si no llega a cero todavía saltar a lazo1
rjmp fin
fin:
rjmp fin
;y volver a repetir el procedimiento anterior hasta
;completar 10 pasadas
;***********************************
;repetir aquí para pasar la otra tabla actualizando correctamente los punteros
;la etiqueta lazo1 no puede repetirse, se debe cambiar por ejemplo a lazo2
...........
;***********************************
; Aquí va el resto del programa
...................
...................
;***********************************
; DEFINICIÓN DE LAS TABLAS EN LA MEMORIA DE PROGRAMA
NOMBRE_PADRE: .db "ANTONIOJOSEALVAREZDELGADO ";25
NOMBRE_MADRE: .db "MIRIANJANETHBURBANONUÑEZ ";24
PmayM: .db "El nombre del padre tiene mas caracteres "
MmayP: .db "El nombre de la madre tiene mas caracteres"
PiguM: .db "Los dos tienen igual numero de caracteres "
Compilación:
Código en ejecución:
Bibliografía
- Chico, P. “Apuntes en clase Sistemas Microprocesados”.2018B