You are on page 1of 5

Prctica No 3 de Computadoras Digitales (IET)

Modelo de Programacin y Modos de Direccionamiento


Introduccin
Usar C u otro lenguaje convencional presenta ventajas y desventajas cuando se compara al uso de Assembler. La
principal ventaja al usar un lenguaje convencional es su portabilidad, esto permite que el programador se
abstraiga de la plataforma en la cual est trabajando es decir el programador no requiere estar consciente del
microprocesador que finalmente ejecutar la aplicacin, ni de sus registros ni de su modelo de programacin. Un
programa realizado en C para ser corrido por la PC debe ejecutarse sin problemas en cualquier otra computadora
(Mac, Amiga, PLC, etc.) siempre y cuando esta tenga un compilador apropiado. Claro est esto solo es cierto hasta
el momento en que uno tiene que involucrarse con el hardware de la plataforma especfica, por ejemplo, si
deseamos enviar o recibir informacin por un puerto especifico necesitamos conocer las caractersticas del
puerto antes de poder usarlo. Assembler en el otro extremo es totalmente dependiente de la plataforma de
trabajo as para ejecutar una aplicacin realizada para una computadora especfica en otra mquina diferente, es
necesario reescribir el programa nuevamente esta es su principal desventaja. Un lenguaje convencional es ms
generalizado mientras que Assembler es nico para la mquina diseada.
Ahora bien un programa realizado en un lenguaje de alto nivel usualmente toma 2, 3, o mas, veces el tiempo que
toma en ejecutarse un programa realizado en Assembler, de igual manera utiliza ms recursos de la mquina, el
factor depende de que tan bien hecho est el compilador o el intrprete que traduce el programa de alto nivel a
Assembler, tambin depende de si la mquina ejecuta el programa como un compilador o como intrprete y del
tipo de lenguaje en si o sea si es C, C++, Forth, Java, etc.
Otra ventaja del Assembler con respecto a un lenguaje convencional est en el uso de los recursos disponibles en
el micro. Un programa escrito en cualquier lenguaje tiene que ser traducido a Assembler antes de ser procesado
por la mquina, esta traduccin usualmente genera una gran cantidad de cdigo redundante que ocupa memoria
y utiliza ms recursos para su ejecucin de aqu que toma ms tiempo pero no solo la cantidad de memoria es la
que se usa ineficientemente sino que tampoco se utilizan en forma eficiente los recursos con que cuenta el micro
controlador para la lectura o escritura de la informacin almacenada en la memoria esto es el modo de
direccionamiento el cual se ilustra a continuacin
Modo de Direccionamiento (MDD)
El MDD determina como se accede a la memoria en busca de la informacin que procesa la instruccin en su
ejecucin. Cuando se usa un lenguaje convencional se limita el uso de los modos de direccionamiento a directo
(uso de variables) e indirecto (uso de punteros) estos son solo dos modos de direccionamiento, no obstante el
HCS12 posee quince modos de direccionamiento que incluyen al directo al indirecto y otros trece que usualmente
no son aprovechados por un programa hecho en lenguaje convencional, esto obviamente cobra un costo en
cuanto al desempeo del programa. La desventaja con respecto a los modos de direccionamiento es que solo son
accesibles al programador a travs del Assembler esto implica mas conocimiento de la mquina es por esto que
en esta prctica el principal objetivo es el estudio de los modos de direccionamiento de el MCU en el cual se basa
el curso. Los MDD del HCS12 se listan a continuacin:
Inherente: si la instruccin usa datos esta reposa en uno de los registros, ej.
NOP ; No opera.
INX ; Incremente el registro X.

Ing. M. Logreira V. A.
Nota: Recuerde que la asistencia puntual a cada prctica vale 10% de la nota obtenida.
Prctica No 3 de Computadoras Digitales (IET)
Modelo de Programacin y Modos de Direccionamiento
Inmediato: el dato se especifica directamente con la instruccin, ej.
LDAA #$55 ; El dato corresponde al valor 55 en hex.
LDX #$1234 ; El dato es 1234 en hex.
Directo: el dato est en la direccin de memoria que se especifica en la instruccin.
LDAA $55 ; El dato est en la memoria en la direccin 55 en hex.
Extendido: cuando la direccin es completa
LDAA $F03B ; El dato puede estar en cualquier direccin dentro de los 64K direccionables.
Relativo: solo es usado por las instrucciones de salto relativo branch la direccin donde cae el salto se
especifica relativa a la posicin de la direccin donde reside la instruccin. Los branch cortos usan
direccionamiento relativo de 8 bits y se limitan a saltos de 127 bytes hacia adelante y 128 bytes en
retroceso. Los branch largos son de 16 bits y tienen un alcance de 32767 hacia adelante y 32768 bytes
en retroceso.
Indexado: la direccin del dato se calcula basndose en el registro ndice IX, IY, SP o PC y una constante
que se especifica con la instruccin. Existen siete variaciones de este modo de direccionamiento.
o Indexado con offset constante de 5 bits: la direccin es especifica en base a la suma del contenido
del registro y una constante con signo que puede variar desde -16 hasta 15, ej.
LDAA 0, X ; La direccin est en IX.
STAB -8, Y ; La direccin es -8 + IY.
o Indexado con offset constante de 9 bits: igual que el anterior pero con un offset que puede estar
entre -256 y +255.
o Indexado con offset constante de 16 bits: igual al anterior pero con un offset que puede ser desde
32767 hacia adelante o 32768 hacia atrs.
o Indexado indirecto con offset constante de 16 bits: la direccin del dato reside en la memoria. la
direccin de la memoria es la suma del contenido del registro al offset de 16 bits, ej.
LDAA [10, X] ; Asuma que IX contiene 30, la direccin del dato est almacenado en la
; memoria en la direccin IX + 10 = 40 si en la direccin 40 reside FF45,
; entonces esta es la direccin que contiene el futuro valor de A.
o Indexado con pre/post incremento/decremento automtico: la direccin se obtiene sumndole o
restndole al registro el offset el registro mantiene el nuevo valor modificado por el offset. Esta
operacin puede realizarse antes de obtener el dato con lo que sera pre
decremento/incremento o puede realizarse despus de obtener el dato con lo que sera post
decremento/incremento, ej.
STAA 1, - SP ; Primero la direccin se obtiene restndole 1 a SP. Segundo se almacena
A
; en la direccin resultante. SP es modificado.
LDX 2, SP+ ; Primero se carga X con el dato cuya direccin est en SP, posteriormente
;se modifica SP sumndole 2.
o Direccionamiento indexado con offset en acumulador: la direccin del dato se obtiene sumando
el contenido del registro ndice con el contenido de uno de los acumuladores A o B del HCS12, ej.
LDAA B, X ; la suma de B con X forman la direccin desde la cual se carga A.
o Direccionamiento indirecto indexado con offset en acumulador D: la direccin efectiva reside en
la memoria cuya direccin se obtiene sumando el contenido del acumulador de 16bits D al
Ing. M. Logreira V. A.
Nota: Recuerde que la asistencia puntual a cada prctica vale 10% de la nota obtenida.
Prctica No 3 de Computadoras Digitales (IET)
Modelo de Programacin y Modos de Direccionamiento
registro ndice utilizado, ej.
JMP [D, PC] ; la direccin destino del salto la tiene el vector que reside en la direccin
; que resulta de sumar D y PC.
Es comn que las instrucciones hagan uso de mltiples modos de direccionamiento, ej.
MOVB $2000, 2, PC ; Copia el byte de datos desde la direccin 2000 hex a la direccin
; ubicada en PC + 2.
En el ejemplo anterior la instruccin MOVB combina los MDD directo extendido y el indexado con offset
constante de 5bits.
Procedimiento
Para la prueba de los modos de direccionamientos usaremos la instruccin LDAA carga acumulador A con el
contenido de una memoria cuya direccin efectiva estar expresada en diferentes MDD
1. En el Code Warrior, cree un nuevo proyecto tipo Relocatable Assembler con full chip simulation
modifique main.c para incluir el siguiente programa:
; Constantes para modo inmediato.
KTE1 EQU $1250
KTE2 EQU $10
; variables para modo directo.
variable_t dc.w 0
variable_p dc.w 0
tabla: dc.b "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
datos: dc.w 1,2,3,$ABCD, $8000, $AF00
puntero: dc.w tabla

; code section
MyCode: SECTION
main:
_Startup:
Entry:
LDS #__SEG_END_SSTACK ; initialize the stack pointer
CLI ; enable interrupts

EndlessLoop:
LDAA #KTE2 ; MDD _______________________. Resultado: _____________________.
LDD #KTE1 ; MDD _______________________. Resultado: _____________________.
LDX #0 ; MDD _______________________. Resultado: _____________________.
EXG X,D ; MDD _______________________. Resultado: _____________________.

LDAA tabla ; MDD _______________________. Resultado: _____________________.

LDX #3 ; MDD _______________________. Resultado: _____________________.


LDAA tabla,X ; MDD _______________________. Resultado: _____________________.

LDY #12 ; MDD _______________________. Resultado: _____________________.


LDAB tabla,Y ; MDD _______________________. Resultado: _____________________.

LDD tabla,Y ; MDD _______________________. Resultado: _____________________.

Ing. M. Logreira V. A.
Nota: Recuerde que la asistencia puntual a cada prctica vale 10% de la nota obtenida.
Prctica No 3 de Computadoras Digitales (IET)
Modelo de Programacin y Modos de Direccionamiento
LDD dat_ext ; MDD _______________________. Resultado: _____________________.

LDD #dat_ext ; MDD _______________________. Resultado: _____________________.


LDX 0 ; MDD _______________________. Resultado: _____________________.
LDAA D,X ; MDD _______________________. Resultado: _____________________.
LDD #vect_ind ; MDD _______________________. Resultado: _____________________.
LDAB [D,X] ; MDD _______________________. Resultado: _____________________.

LDX #datos ; MDD _______________________. Resultado: _____________________.


LDD 2,+X ; MDD _______________________. Resultado: X = ____ y D = ______.

LDD 4,+X ; MDD _______________________. Resultado: X = ____ y D = ______.

LDD 2,X- ; MDD _______________________. Resultado: X = ____ y D = ______.

LDD 4,X- ; MDD _______________________. Resultado: X = ____ y D = ______.

LDX #0
LDD [puntero,X] ;Indirecto, usando puntero.

BRA EndlessLoop ; restart.

dat_ext dc.w $0987


vect_ind dc.w tabla

2. Con el programa main ya modificado complelo usando make y active la depuracin.


3. En la interfaz de depuracin debe poner atencin a los eventos en todas las ventanas en especial a
REGISTER y MEMORY
4. Para demostrar los modos de direccionamiento en esta prctica se usan dos arreglos y un puntero que se
presentan en la ventana DATA. Es necesario ubicar estos en la memoria, para saber donde quedaron
expanda tabla en la ventana DATA con un clic en el smbolo (+) luego resalte el primer elemento de tabla
y tome nota de su direccin (aparece en la barra superior de la ventana).
5. Ubquese en la ventana MEMORY y dele clic derecho seleccione la opcin Address en la ventana POP y
complete el espacio con la direccin del punto anterior
6. Esta parte debe hacerla con criterio. Ejecute el programa paso a paso para estudiar el MDD. Antes de
ejecutar cada instruccin revise el MDD usado y obtenga la direccin efectiva segn este, prediga as el
valor a leer, luego comprelo con el valor efectivo que se lee de la memoria.
7. Cuando haga el paso anterior ponga atencin a los ciclos que consume cada MDD, esta informacin
aparece en la ventana REGISTER del simulador de CW.
Preguntas: (Las respuestas a estas preguntas determinan el 50% de la nota de esta prctica)
1. Cul es el principal aspecto estudiado en esta prctica?
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
2. Cuntos modos de direccionamiento posee el MCU del curso?
___________________________
3. Mencione dos ventajas y dos desventajas del uso de los lenguajes convencionales con respecto al
Assembler.
Ing. M. Logreira V. A.
Nota: Recuerde que la asistencia puntual a cada prctica vale 10% de la nota obtenida.
Prctica No 3 de Computadoras Digitales (IET)
Modelo de Programacin y Modos de Direccionamiento
Ventajas:
______________________________________________________________________________________
______________________________________________________________________________________
Desventajas:
______________________________________________________________________________________
______________________________________________________________________________________
4. Cules son las direcciones iniciales de tabla, datos y puntero?
Tabla:_____________________; datos:_______________________; puntero:______________________
5. Cules de los MDD estudiados son los que menos ciclos consumen y los que ms ciclos consumen?
Menor cantidad de ciclos:
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
Mayor cantidad de ciclos:
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
6. Adems del IX y el IY Qu otros registros pueden ser usados en los MDD indexados?
______________________________________________________________________________________
7. Mencione dos razones por la que la mayora de los lenguajes convencionales (C, C++, ...) incluyen dentro
de sus caractersticas la posibilidad de escribir instrucciones directamente en Assembler.
______________________________________________________________________________________
______________________________________________________________________________________
______________________________________________________________________________________
Asignacin: (La realizacin correcta de estas asignaciones junto con sus apuntes y documentacin representan
25% de la nota de esta prctica)
1. Realice una tabla donde, a cuatro columnas, presente la direccin efectiva calculada, el dato calculado, el
dato real ledo y la cantidad de ciclos consumidos para cada uno de los MDD estudiados en esta prctica.

Ing. M. Logreira V. A.
Nota: Recuerde que la asistencia puntual a cada prctica vale 10% de la nota obtenida.

You might also like