Diferencia entre revisiones de «Tablas en assembler (Codewarrior IDE)»

De Wikitronica
Saltar a: navegación, buscar
(Página blanqueada)
Línea 1: Línea 1:
¿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. Normalmente no existe una relación directa  entre cada uno de los datos que conforman la 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.
 
 
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
 
 
    Con la directiva ORG se establece que la dirección de inicio de la tabla es $3000 (elegida de forma arbitraria) Por otro lado con la directiva DC.B, se definen constantes de tamaño no mayor a 1 byte, en este caso caracteres.
 
 
Otro formato:
 
 
;**************************************************************
 
 
;*                          TABLA                            *
 
 
;**************************************************************
 
 
Tabla:
 
 
 
          DC.B  'H', 'E', 'L', 'L', 'O', ' ', 'W', 'O', 'R', 'L', 'D',0
 
 
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 carácter 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     
 
 
--[[Usuario:JRodríguez|JRodríguez]] ([[Usuario discusión:JRodríguez|discusión]]) 14:48 26 mar 2013 (VET)JRodríguez
 

Revisión del 15:47 26 mar 2013

Contributors

Aromero, JRodríguez