Son las diferentes maneras de especificar en informtica un operando dentro de una
instruccin en lenguaje ensamblador. Un modo de direccionamiento especifica la forma de calcular la direccin de memoria efectiva de un operando mediante el uso de la informacin contenida en registros y/o constantes, contenida dentro de una instruccin de la maquina o en otra parte.
Inmediato En este modo el operando es especificado en la instruccin misma. Una instruccin de modo inmediato tiene un campo de operando en vez de un campo de direccin. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operacin especificada en la instruccin. Las instrucciones de modo inmediato son tiles para inicializar los registros en un valor constante. Cuando el campo de direccin especifica un registro del procesador, la instruccin se dice que est en el modo de registro.
Directo El campo de operando en la instruccin contiene la direccin en memoria donde se encuentra el operando. En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en la memoria y su direccin es dada directamente por el campo de direccin de la instruccin. En una instruccin de tipo ramificacin el campo de direccin especifica la direccin de la rama actual.
Indirecto El campo de operando contiene una direccin de memoria, en la que se encuentra la direccin efectiva del operando.
Indexado Consiste en direccin una posicin de memoria usando como registro base al contador de programa (PC), el funcionamiento es anlogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser tambin negativo. Permite un incremento o decremento de la direccin final o el registro ndice segn los siguientes casos: ->Indexado con autopreincremento: Incrementa el registro ndice primero (se incrementa un valor, segn el tamao del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado. -> Indexado con autoposincremento: Calcula la direccin efectiva y despus incrementa esta. -> Indexado con autopredecremento: Decrementa el registro ndice y despus calcula la direccin efectiva. -> Indexado con autoposdecremento: Calcula la direccin efectiva y despus decrementa esta
Memoria Cache En informtica, el cach de CPU, es un bfer especial de memoria que poseen los ordenadores. Funciona de una manera similar a como lo hace la memoria principal (RAM), pero es de menor tamao y de acceso ms rpido. Es usado por la unidad central de procesamiento para reducir el tiempo de acceso a datos ubicados en la memoria principal que se utilizan con ms frecuencia. Cuando se accede por primera vez a un dato, se hace una copia en el cach; los accesos siguientes se realizan a dicha copia, haciendo que el tiempo de acceso medio al dato sea menor. Cuando el procesador necesita leer o escribir en una ubicacin en memoria principal, primero verifica si una copia de los datos est en el cach. Si es as, el procesador de inmediato lee o escribe en la memoria cach, que es mucho ms rpido que de la lectura o la escritura a la memoria principal. Diseo En el diseo de la memoria cach se deben considerar varios factores que influyen directamente en el rendimiento de la memoria y por lo tanto en su objetivo de aumentar la velocidad de respuesta de la jerarqua de memoria. Estos factores son las polticas de ubicacin, extraccin, reemplazo, escritura y el tamao de la cach y de sus bloques. Ubicacin Decide dnde debe colocarse un bloque de memoria principal que entra en la memoria cach. Las ms utilizadas son: Directa: Al bloque i-simo de memoria principal le corresponde la posicin i mdulo n, donde n es el nmero de bloques de la memoria cach. Asociativa: Cualquier bloque de memoria principal puede ir en cualquiera de los n bloques de la memoria cach. Asociativa por conjuntos: La memoria cach se divide en k conjuntos de bloques, as al bloque i-simo de memoria principal le corresponde el conjunto i mdulo k. Dicho bloque de memoria podr ubicarse en cualquier posicin de ese conjunto. Extraccin La poltica de extraccin determina cundo y qu bloque de memoria principal hay que traer a memoria cach. Existen dos polticas muy extendidas: Por demanda: Un bloque slo se trae a memoria cach cuando ha sido referenciado y no se encuentre en memoria cach. Con pre bsqueda: Cuando se referencia el bloque i-simo de memoria principal, se trae adems el bloque (i+1)-simo. Esta poltica se basa en la propiedad de localidad espacial de los programas. Reemplazo Determina qu bloque de memoria cach debe abandonarla cuando no existe espacio disponible para un bloque entrante. Bsicamente hay cuatro polticas que son: Aleatoria: El bloque es reemplazado de forma aleatoria. FIFO: Se usa un algoritmo First In First Out FIFO (primero en entrar es el primero en salir) para determinar qu bloque debe abandonar la cach. Este algoritmo generalmente es poco eficiente. Menos recientemente usado (LRU): Se sustituye el bloque que hace ms tiempo que no se ha usado en la cach, traeremos a cach el bloque en cuestin y lo modificaremos ah. Menos frecuencias usadas (LFU): Se sustituye el bloque que ha experimentado menos referencias.
3.4.3 Definiciones de datos BYTE y SBYTE
Definicin de cadenas Para definir una cadena de caracteres, hay que encerrarlos entre comillas sencillas o dobles. El tipo ms comn de cadena termina con byte nulo (que contiene 0). Las cadenas de este tipo, conocidas como cadenas con terminacin nula se utilizan en los programas en C, C++ y JAVA.
Saludo1 byte buenas tardes,0 Saludo2 byte buenas noches,0 Cada carcter utiliza un byte de almacenamiento. Las cadenas son una excepcin a la regla que establece que los valores de bytes deben separarse por coma ejem: Saludo1 byte B, U, E,N, A, S. Etc. Una lnea puede distribuirse a travs de varias lneas sin tener que suministrar una etiqueta para cada lnea:
Las directivas BYTE y SBYTE asignan espacio de almacenamiento para uno o ms valores con o sin signo. Cada inicializado debe caber en bits de almacenamiento por ejemplo:
Valor1 byte A : constante tipo carcter Valor2 byte 0 : el byte sin signo ms pequeo Valor3 byte 255 : el byte sin signo ms grande Valor4 sbyte -128 : el byte con signo ms pequeo Valor5 sbyte +127 : el byte con signo ms grande 3.4.5 Definicin de datos DWORD y SDWORD Las directivas DWORD (definir doble palabra) y SDWORD (definir doble palabra con signo) asignan almacenamiento para uno o mas enteros de 32 bits: Val1 DWORD 12345678h ; sin signo Val2 SDWORD -2147483648 ; con signo Val3 DWORD 20 DUP(?) ; arreglo sin signo
Arreglo de dobles palabras: para crear un arreglo de dobles palabras, se inicializa cada elemento en forma explcita, o se usa el operador DUP. He aqu un arreglo que contiene valores sin signo especficos: miLista DWORD 1 ,2, 3, 4, 5
3.4.8 Definicin de datos de nmeros reales REAL4 define a una variable real de 4 bytes y precisin simple. REAL8 define a un real de 8 bytes y precisin doble. REAL10 define a un real de 10 bytes y doble precisin extendida cada uno requiere ms inicializadores de constantes reales: rVal1 REAL4 -1.2 rVal2 REAL8 3.2E-260 rVal3 REAL10 4.6E+4096 rArreglo REAL4 20 DUP (0.0)
3.2 suma y resta de enteros
TITLE Suma y resta ;este programa suma y resta enteros de 32 bits Include Irvine32.inc .cod Main PROC mov eax, 10000h ;EAX= 10000h Add eax, 40000h ;EAX=50000h Sub eax, 20000h ;EAX=30000h Call DumpRegs ; muestra los registros Analizacin del programa TITLE el ensamblador ignora todo el texto que est a la derecha de un signo de punto y coma, as que lo usamos para los comentarios INCLUDE Irvine32.in: copia las definiciones necesarias y la informacin de configuracin de un archivo de texto .code: marca el inicio del segmento del cdigo Main PROC: PROC identifica el comienzo de un procedimiento y main es el nombre que elegimos para el nico procedimiento del programa Mov eax, 10000h: La instruccin MOV mueve el numero entero 10000h al registro EAX. Add eax, 40000h: La instruccin ADD suma 40000h al registro EAX Sub eax, 20000h: La instruccin SUB resta 20000h del registro EAX Call DumpRegs: CALL llama a un procedimiento que muestra los valores actuales de la CPU. Exit y main ENDP: Exit detiene la ejecucin del programa END: Marca la ltima linea del programa que se va a ensamblar.
3.3.1 El ciclo de ensamblado, enlazado, ejecucin Paso 1: Un programador utiliza un editor de texto para crear un archivo de texto ASCII, conocido como archivo de cdigo fuente. Paso 2: El ensamblador lee el archivo de cdigo fuente y produce un archivo de cdigo objeto, una traduccin del programa a lenguaje mquina. Paso 3: El enlazador lee el archivo de cdigo objeto y verifica si el programa contiene alguna llamada a los procedimientos en una biblioteca de enlace. Paso 4: La herramienta cargador (loader) del sistema operativo lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la direccin inicial del programa. Para que este empiece a ejecutarse.
4.5.3 suma de un arreglo de enteros En el lenguaje ensamblador, deben seguirse estos pasos:
4.5.4 copia de una cadena A menudo, los programas tienen que copiar bloques extensos de datos, de una ubicacin a otra. Los datos pueden ser arreglos o cadenas, pero pueden contener cualquier tipo de objetos. Vamos a ver cmo hacer esto en el lenguaje ensamblador, mediante un ciclo con copia a una cadena. El direccionamiento indexado funciona bien para este tipo de operacin, ya que el mismo registro ndice hace referencia a ambas cadenas. La cadena de destino debe tener suficiente espacio disponible para recibir los caracteres copiados, incluyendo el byte nulo al final:
1) Asignar la direccin del arreglo a un registro que sirva como operando indexado. 2) Establecer ECX con el nmero de los elementos en el arreglo (en modo de 16 bits se utiliza CX). 3) Asignar cero al registro que acumula la suma. 4) Crear una etiqueta para marcar el inicio del ciclo. 5) En el cuerpo del ciclo como usar direccionamiento indirecto para sumar un elemento individual del arreglo con el registro que almacena la suma. 6) Establecer el registro ndice para que apunte al siguiente elemento del arreglo. 7) Usar una instruccin LOOP para repetir el ciclo desde la etiqueta inicial. Los pasos del 1 al 3 puede realizarse en cualquier orden.
Lenguaje ensamblador El nico lenguaje que entienden los microcontroladores es el cdigo mquina formado por ceros y unos del sistema binario. El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre a la vez es muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en cdigo mquina. El lenguaje ensamblador trabaja con nemnicos, que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar. La traduccin de los nemnicos a cdigo mquina entendible por el Microcontrolador la lleva a cabo un programa ensamblador. TITLE Copia de una cadena ; Este programa copia una cadena ; ltima actualizacin: 60/01/2006 INCLUDE Irvine32.inc .data Origen BYTE esta es la cadena de origen, 0 Destino BYTE SIZEOF origen DUP (0) .code Main PROC mov esi, 0 ; registro ndice mov ecx, SIZEOF origen ; contador del ciclo L1: mov al ,origen*esi+ ; obtiene un carcter del origen mov destino*esi+ , al ;lo almacena en el destino Inc esi ; se mueve al siguiente carcter Loop L1 ; repite el proceso para toda la cadena Exit main ENDP END main El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente cdigo mquina, que suele tener la extensin *.hex.
El cdigo fuente Est compuesto por una sucesin de lneas de texto. Cada lnea puede estructurarse en hasta cuatro campos o columnas separados por uno o ms espacios o tabulaciones entre s. Campo de etiquetas. Expresiones alfanumricas escogidas por el usuario para identificar una determinada lnea. Todas las etiquetas: tienen asignado el valor de la posicin de memoria en la que se encuentra el cdigo al que acompaan. Campo de cdigo. Corresponde al nemnico de una instruccin, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el Nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn Operando. Campo de comentarios. Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario.
Direccionamiento indirecto El direccionamiento indirecto no es prctico para el procesamiento de arreglos. Muy raras veces es necesario proporcionar una etiqueta nica para cada tipo de arreglo. La nica forma prctica de manejar un arreglo es utilizar un registro como apuntador y manipular el valor de ese registro. Arreglos Los operandos indirectos son tiles al manejar arreglos, ya que el valor de un operando indirecto puede modificarse en tiempo de ejecucin. De manera similar al subndice de un arreglo, los operandos indirectos pueden apuntar a distintos elementos del arreglo.
Instruccin JMP y LOOP De manera predeterminada, la CPU carga y ejecuta los programas en forma secuencial. Los programas de lenguaje ensamblador utilizan instrucciones condicionales para implementar instrucciones de alto nivel, tales como los IF y los ciclos. Instruccin JMP: es una transferencia incondicional hacia un destino, la cual se identifica mediante una etiqueta de cdigo que el ensamblador traduce en un desplazamiento la sintaxis es: JMP destino. Instruccin LOOP Esta instruccin permite un bloque de instrucciones, un numero especifico de veces.ECX se utiliza de manera automtica como contador, y se decrementa cada vez que se repite el ciclo. Su sintaxis es: LOOP destino