Diferencia entre revisiones de «Tablas en assembler (Codewarrior IDE)»
Línea 4: | Línea 4: | ||
[[Categoría:MC9S08QE128]] | [[Categoría:MC9S08QE128]] | ||
− | ¿Qué es una tabla? | + | ===¿Qué es una tabla?=== |
+ | |||
Una tabla en el lenguaje ensamblador, es un conjunto de datos colocados uno a uno en posiciones de memoria sucesivas para su posterior utilización en el programa. | Una tabla en el lenguaje ensamblador, es un conjunto de datos colocados uno a uno en posiciones de memoria sucesivas para su posterior utilización en el programa. | ||
− | ¿Cómo creamos una tabla? | + | |
+ | |||
+ | ===¿Cómo creamos una tabla?=== | ||
En primer lugar se debe localizar la dirección de memoria a partir de donde se iniciarán las definiciones de datos dentro de la tabla. Existe un gran número de direcciones que pueden ser utilizadas como referencia de inicio de la tabla, no obstante ciertas precauciones deben tomarse en cuenta para no dañar la estructura del programa o bien para que la tabla puede crearse satisfactoriamente. Se debe procurar no establecer el inicio de la tabla en direcciones de memoria de uso frecuente, como por ejemplo en la “Direct Page” ya que en esta zona suele trabajar la pila. | En primer lugar se debe localizar la dirección de memoria a partir de donde se iniciarán las definiciones de datos dentro de la tabla. Existe un gran número de direcciones que pueden ser utilizadas como referencia de inicio de la tabla, no obstante ciertas precauciones deben tomarse en cuenta para no dañar la estructura del programa o bien para que la tabla puede crearse satisfactoriamente. Se debe procurar no establecer el inicio de la tabla en direcciones de memoria de uso frecuente, como por ejemplo en la “Direct Page” ya que en esta zona suele trabajar la pila. | ||
Línea 48: | Línea 51: | ||
DC.B 'H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D',0 | DC.B 'H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D',0 | ||
− | |||
− | + | ||
+ | </syntaxhighlight> | ||
[[Archivo:memoria_look.png|400px|thumb|derecha|Vista en memoria de los datos en la tabla.]] | [[Archivo:memoria_look.png|400px|thumb|derecha|Vista en memoria de los datos en la tabla.]] | ||
− | Vale la pena resaltar que para ambos casos, el carácter ‘H’ ocupa la posición de memoria $3000, el carácter ‘E’ la posición $3001, y así sucesivamente. Esto es debido a que cada carácter ocupa un byte. | + | |
+ | Vale la pena resaltar que para ambos casos, el carácter ‘H’ ocupa la posición de memoria $3000, el carácter ‘E’ la posición $3001, y así sucesivamente. Esto es debido a que cada carácter ocupa un byte en memoria. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Otro ejemplo: Tabla de valores “aleatorios” (base decimal) | ||
+ | |||
+ | <syntaxhighlight lang="asm"> | ||
+ | ;************************************************************** | ||
+ | ;* TABLA * | ||
+ | ;************************************************************** | ||
+ | |||
+ | ORG ROMTabla | ||
+ | |||
+ | Tabla: | ||
+ | |||
+ | DC.B 2,4,6,1,6,3,5,2,4,3 | ||
+ | DC.B 1,4,6,1,5,3,4,2,5,1 | ||
+ | DC.B 1,5,6,4,2,3,1,5,2,3 | ||
+ | DC.B 6,3,2,5,6,3,2,5,4,1 | ||
+ | DC.B 4,5,1,2,3,6,5,2,3,6 | ||
+ | DC.B 1,3,6,4,2,5,6,3,2,5 | ||
+ | DC.B 1,2,3,4,1,2,5,2,4,3 | ||
+ | DC.B 1,2,5,4,6,3,2,4,5,1 | ||
+ | DC.B 4,5,2,1,3,6,5,4,1,2 | ||
+ | DC.B 1,2,3,4,5,2,1,2,5,3 | ||
+ | DC.B 6,3,6,3,4,1,2,4,5,4 | ||
+ | DC.B 4,4,4,2,5,4,6,2,1,6 | ||
+ | DC.B 1,2,3,4,5,6,4,5,2,1 | ||
+ | DC.B 1,2,4,5,2,2,1,2,2,5 | ||
+ | DC.B 4,1,5,2,6,3,5,2,6,3 | ||
+ | DC.B 1,4,2,5,3,5,2,5,2,4 | ||
+ | DC.B 4,1,2,5,2,4,1,3,6,4 | ||
+ | DC.B 1,4,2,5,4,1,2,5,4,1 | ||
+ | DC.B 4,5,2,3,6,5,4,1,2,5 | ||
+ | DC.B 1,2,4,5,2,3,6,5,2,1 | ||
+ | DC.B 1,2,4,5,3,6,2,5,4,1 | ||
+ | DC.B 4,2,5,2,3,6,2,2,4,1 | ||
+ | DC.B 1,4,2,3,6,4,1,2,5,2 | ||
+ | DC.B 2,1,4,2,5,6,3,6,5,1 | ||
+ | DC.B 1,2,3,4,5,2,1,4,5,2 | ||
+ | DC.B 6,5,4,3,2,1 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ===¿Cómo acceder al contenido de la tabla?=== | ||
+ | |||
+ | |||
+ | |||
+ | Véase el siguiente ejemplo: | ||
+ | |||
+ | <syntaxhighlight lang="asm"> | ||
+ | Inicio_Lectura: | ||
+ | ;Se usa la dirección de Tabla como una constante | ||
+ | LDHX #Tabla ;y se guarda en el registro H:X | ||
+ | |||
+ | Lectura: | ||
+ | MOV ,X+,Caracter ;Se mueve el contenido de la memoria indicada por H:X a la | ||
+ | LDA Caracter ;variable "Caracter". | ||
+ | CMP #0 ;Si Caracter vale 0, terminamos de recorrer la tabla y volvemos | ||
+ | BEQ Inicio_Lectura ;a empezar. | ||
+ | BRA Lectura | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | En este programa la variable "Caracter" irá adquiriendo por cada iteración el valor de cada letra, según lo indique el registro H:X. | ||
+ | |||
+ | |||
+ | |||
+ | Forma alternativa: | ||
+ | |||
+ | <syntaxhighlight lang="asm"> | ||
+ | Inicio_Lectura: | ||
+ | CLRH ;Se limpia el registro H:X | ||
+ | CLRX | ||
+ | |||
+ | Lectura: | ||
+ | LDA Tabla,X ;Se mueve el contenido de la memoria indicada por H:X a la | ||
+ | STA Caracter ;variable "Caracter"`, por medio del acumulador | ||
+ | INCX | ||
+ | CMP #0 ;Si Caracter vale 0, terminamos de recorrer la tabla y volvemos | ||
+ | BEQ Inicio_Lectura ;a empezar. | ||
+ | BRA Lectura | ||
+ | </syntaxhighlight> |
Revisión del 16:47 26 mar 2013
¿Qué es una tabla?
Una tabla en el lenguaje ensamblador, es un conjunto de datos colocados uno a uno en posiciones de memoria sucesivas para su posterior utilización en el programa.
¿Cómo creamos una tabla?
En primer lugar se debe localizar la dirección de memoria a partir de donde se iniciarán las definiciones de datos dentro de la tabla. Existe un gran número de direcciones que pueden ser utilizadas como referencia de inicio de la tabla, no obstante ciertas precauciones deben tomarse en cuenta para no dañar la estructura del programa o bien para que la tabla puede crearse satisfactoriamente. Se debe procurar no establecer el inicio de la tabla en direcciones de memoria de uso frecuente, como por ejemplo en la “Direct Page” ya que en esta zona suele trabajar la pila.
Véase el siguiente ejemplo:
;**************************************************************
;* TABLA *
;**************************************************************
ORG $3000
Tabla:
DC.B 'H'
DC.B 'E
DC.B 'L'
DC.B 'L'
DC.B 'O'
DC.B ' '
DC.B 'W'
DC.B 'O'
DC.B 'R'
DC.B 'L'
DC.B 'D'
DC.B 0
Otro formato:
;**************************************************************
;* TABLA *
;**************************************************************
ORG $3000
Tabla:
DC.B 'H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D',0
Vale la pena resaltar que para ambos casos, el carácter ‘H’ ocupa la posición de memoria $3000, el carácter ‘E’ la posición $3001, y así sucesivamente. Esto es debido a que cada carácter ocupa un byte en memoria.
Otro ejemplo: Tabla de valores “aleatorios” (base decimal)
;**************************************************************
;* TABLA *
;**************************************************************
ORG ROMTabla
Tabla:
DC.B 2,4,6,1,6,3,5,2,4,3
DC.B 1,4,6,1,5,3,4,2,5,1
DC.B 1,5,6,4,2,3,1,5,2,3
DC.B 6,3,2,5,6,3,2,5,4,1
DC.B 4,5,1,2,3,6,5,2,3,6
DC.B 1,3,6,4,2,5,6,3,2,5
DC.B 1,2,3,4,1,2,5,2,4,3
DC.B 1,2,5,4,6,3,2,4,5,1
DC.B 4,5,2,1,3,6,5,4,1,2
DC.B 1,2,3,4,5,2,1,2,5,3
DC.B 6,3,6,3,4,1,2,4,5,4
DC.B 4,4,4,2,5,4,6,2,1,6
DC.B 1,2,3,4,5,6,4,5,2,1
DC.B 1,2,4,5,2,2,1,2,2,5
DC.B 4,1,5,2,6,3,5,2,6,3
DC.B 1,4,2,5,3,5,2,5,2,4
DC.B 4,1,2,5,2,4,1,3,6,4
DC.B 1,4,2,5,4,1,2,5,4,1
DC.B 4,5,2,3,6,5,4,1,2,5
DC.B 1,2,4,5,2,3,6,5,2,1
DC.B 1,2,4,5,3,6,2,5,4,1
DC.B 4,2,5,2,3,6,2,2,4,1
DC.B 1,4,2,3,6,4,1,2,5,2
DC.B 2,1,4,2,5,6,3,6,5,1
DC.B 1,2,3,4,5,2,1,4,5,2
DC.B 6,5,4,3,2,1
¿Cómo acceder al contenido de la tabla?
Véase el siguiente ejemplo:
Inicio_Lectura:
;Se usa la dirección de Tabla como una constante
LDHX #Tabla ;y se guarda en el registro H:X
Lectura:
MOV ,X+,Caracter ;Se mueve el contenido de la memoria indicada por H:X a la
LDA Caracter ;variable "Caracter".
CMP #0 ;Si Caracter vale 0, terminamos de recorrer la tabla y volvemos
BEQ Inicio_Lectura ;a empezar.
BRA Lectura
En este programa la variable "Caracter" irá adquiriendo por cada iteración el valor de cada letra, según lo indique el registro H:X.
Forma alternativa:
Inicio_Lectura:
CLRH ;Se limpia el registro H:X
CLRX
Lectura:
LDA Tabla,X ;Se mueve el contenido de la memoria indicada por H:X a la
STA Caracter ;variable "Caracter"`, por medio del acumulador
INCX
CMP #0 ;Si Caracter vale 0, terminamos de recorrer la tabla y volvemos
BEQ Inicio_Lectura ;a empezar.
BRA Lectura