Sunteți pe pagina 1din 26

Instituto Tecnolgico de Villahermosa

ACADEMIA DE SISTEMAS Y COMPUTACIN INGENIERA EN SISTEMAS COMPUTACIONALES

MGTI. FIDELIO CASTILLO ROMERO.

COMPONENTES DEL LENGUAJE ENSAMBLADOR (UNIDAD No. 2)


Villahermosa, Tabasco, Mxico. Septiembre 2011.

Unidad No. 2. Elementos bsicos del lenguaje ensamblador


Constantes enteras y reales, expresiones enteras, palabras reservadas, identificadores, directivas e instrucciones Definicin de datos Constantes simblicas Transferencias de datos: Operandos, instruccines MOV, MOVSX, MOVZX, LAHF, SAHF, XCHG, operandos de desplazamiento directo, Aritmtica (suma y resta): Instrucciones INC, DEC, SUB, NEG Operadores y directivas relacionadas con los datos: Operadores OFFSET, PTR, TYPE, LENGTHOF, SIZEOF, directivas LABEL, ALIGN Instrucciones JMP y LOOP Direccionamiento indirecto: operandos indirectos, arreglos, operandos indexados, apuntadores

Constantes enteras
[{+|-}] dgitos [raz] La raz puede ser una de las siguientes (en maysculas o minsculas): h Hexadecimal r Real codificado d Decimal b Binario Si no se da una raz, se asume que la constante entera es decimal. q/o Octal

Ejemplos de constantes con distintas races: 26 26d 11010101b 42q 42o 2Ah 0Ah Las constantes hexadecimales que comiencen con una letra debe tener un cero a la izquierda para que no se interprete como identificador.

Expresiones enteras
La expresin se debe evaluar como un entero que se puede almacenar en 32 bits (0 al FFFFFFFFh)
Precedencia de operadores aritmticos
Operador Nombre Nivel de Precedencia

Ejemplos de expresiones vlidas:

Expresin 25/3

Valor 8

() +, *, /, MOD +, -

Parntesis Unario positivo, unario negativo Producto, divisin, Mdulo Suma, Resta

1 2 3 4

-(2+3)*(9-4)
13 mod 2

-25
1

Constantes reales
[{+|-}] entero.[entero] [exponente] Exponente E[{+,-}]entero Ejemplos de constantes reales: 5. +17.0 -30.5E+2 En las constantes reales es necesario por lo menos, un dgito y un punto decimal.

Constantes tipo carcter


Es un solo carcter encerrado entre comillas sencillas o dobles. MASM almacena el valor en memoria como el cdigo ASCII binario del carcter. Ejemplos: A o B

Constantes tipo cadena


Es una secuencia de caracteres encerrados entre comillas sencillas o dobles. 123 Rafael Mrquez Se pueden agregar comillas a la cadena, siempre y cuando se utilicen de la siguiente manera: Hola equipo de lenguaje ensamblador, suerte

Palabras reservadas
Tienen un significado especial en MASM y slo pueden usarse dentro de su contexto correcto. Tipos de palabras reservadas: Nemnicos de instrucciones: MOV, CALL, ADD, SUB Directivas que indican a MASM como ensamblar programas Atributos, que proporcionan informacin acerca del tamao y uso de las variables y operando: BYTE, DWORD Operadores, que se utilizan en expresiones constantes: MOD Smbolos predefinidos como @code (El nombre del segmento de cdigo macro-)

Identificadores
Un identificador es un nombre elegido por el programador. Identifica a una variable, una constante, un procedimiento o una etiqueta de cdigo. Pueden contener entre 1 y 247 caracteres No son sensibles a maysculas/minsculas El primer carcter debe ser una letra (A..Z, a..z), guin bajo (_), @, ? o $. Los caracteres subsiguientes tambin pueden ser dgitos

Directivas
Una directiva es un comando incrustado en el cdigo fuente, que el ensamblador reconoce y acta en base a sta. Pueden definir variables, macros y procedimientos, asignar nombres a los segmentos de memoria y realizar muchas otras tareas relacionadas con el ensamblador. No son sensibles a maysculas/minsculas. MASM reconoce a .DATA, .Data, .data como equivalentes. Cada ensamblador tiene un conjunto distinto de directivas. Por ejemplo, TASM y NASM comparten un subconjunto comn de directivas con MASM. El ensamblador GNU casi no tiene directivas en comn con MASM.

Instrucciones
Una instruccin es un enunciado que se vuelve ejecutable cuando se ensambla un programa. Contiene 4 partes bsicas: [etiqueta:] nemnico operando(s) [; comentario] Etiqueta. Identificador que acta como marcador de posicin para las instrucciones y los datos. Una etiqueta que se coloca justo antes de una instruccin, representa la direccin de esa instruccin; una etiqueta que se coloca antes de una variable, representa la direccin de esa variable (cuenta DWORD 100)

Instrucciones
En el ejemplo siguiente, la etiqueta arreglo define la ubicacin del primer nmero (1024). Los dems nmeros que le siguen van en la memoria de forma consecutiva.

Arreglo

DWORD 1024, 2048 DWORD 4096, 8192

Una etiqueta en el rea de cdigo de un programa debe terminar con un carcter de dos puntos (:). En este contexto las etiquetas se utilizan como destinos de las instrucciones de saltos y de ciclos. Ejemplo:

Destino: mov jmp ax, bx

Destino

Los nombres para las etiquetas se crean utilizando las mismas reglas de los identificadores. En una instruccin con dos operandos, al primero se le llama destino y al segundo origen. Nemnico de instruccin Es una palabra corta que identifica a una instruccin. mov Mueve (asigna) un valor a otro add Suma dos valores sub Resta un valor de otro mul Multiplica dos valores call Llama a un procedimiento

Instrucciones
Operandos Las instrucciones en lenguaje ensamblador pueden tener de cero a tres operandos, cada uno de los cuales puede ser un registro, un operando de memoria o una expresin constante. Ver tabla siguiente: Tipo de operando Constante (valor inmediato) Expresin constante Registro Y Ejemplo 100 3+8 eax Memoria

Comentarios: De una sola lnea (;) De un bloque, usar la directiva COMMENT y un smbolo (cualquier smbolo) especificado por el usuario. Ensamblador ignora todas las lneas subsiguientes de texto, hasta que aparezca el mismo smbolo especificado por el usuario.

COMMENT !

mov eax, miVar mov ebx, z mov ecx, cadena

ACTIVIDAD No. 1
INSTRUCCIONES. DE FORMA INDIVIDUAL, DAR RESPUESTA A LAS SIGUIENTES PREGUNTAS

Identifique las caractersticas de sufijo vlidos que se utilizan en constantes enteras F3h es una constante hexadecimal vlida?, explique El signo de multiplicacin (*) tiene mayor precedencia que el signo de divisin (/) en las expresiones enteras? Escriba una expresin constante que divida 10 entre 3 y devuelva el residuo entero? De un ejemplo de constante numrica real vlida con un exponente Las palabras reservadas pueden ser:________________________ Cul es la longitud mxima de un identificador? Un identificador puede comenzar con nmero? Los identificadores son de manera predeterminada insensibles al uso de maysculas/minsculas? Las directivas de ensamblador pueden escribirse en cualquier combinacin de letras maysculas y minsculas. De un ejemplo de comentario de bloque Elabore un programa para evaluar la expresin y= 2 * 5 + 7 y quede el resultado en memoria

Definicin de datos
Tipos de datos En MASM, la caracterstica esencial de cada tipo es su tamao en bits: 8, 16, 32, 48, 64 y 80 bits.
TIPO
BYTE SBYTE WORD SWORD DWORD SDWORD FWORD QWORD TBYTE REAL4 REAL8 REAL10 TIPOS DE DATOS USO Entero de 8 bits sin signo Entero de 8 bits con signo Entero de 16 bits sin signo Entero de 16 bits con signo Entero de 32 bits sin signo Entero de 32 bits con signo Entero de 48 bits Entero de 64 bits Entero de 80 bits Nmero real corto IEEE de 32 bits Nmero real largo IEEE de 64 bits Nmero real extendido IEEE de 80 bits

Instruccin de definicin de datos


Separa espacio de almacenamiento para una variable, con un nombre opcional. Estas instrucciones crean variables con base en los tipos de datos mostrados en la tabla anterior. La sintaxis de una definicin de datos est dada por: [nombre] Directiva Inicializador [Inicializador,] El nombre se escribe en base a las reglas para identificadores y la Directiva puede ser BYTE, DWORD, etc.

Definicin de datos
Inicializador. Se requiere por lo menos un inicializador, aunque sea cero. Si se desea dejar la variable sin inicializar, se puede usar el smbolo ? Val1 BYTE X Val2 BYTE 0 Val3 BYTE 255 Val4 SBYTE +127 Val5 SBYTE -128 Val6 BYTE ?

Mltiples inicializadores
Cuando se usan varios inicializadores, su etiqueta slo hace referencia al desplazamiento del primer inicializador. En el ejemplo siguiente, el valor 10 se encuentra en el desplazamiento 0000, el 20 en el desplazamiento 0001 y as sucesivamente.

Lista BYTE 10, 20,30 Desplazamiento 0000: 0001: 0002:

Valor 10 20 30

No todas las definiciones de datos requieren etiquetas: Lista BYTE 10, 20,30 BYTE 40, 50,60 BYTE 70, 80, 90

Definicin de datos
Definicin de cadenas
El tipo ms comn de cadena termina con un byte nulo (que contiene 0). Las cadenas de este tipo se les llama cadenas de terminacin nula y se utilizan en la programacin en C, C++ y Java: Cadena1 BYTE mucho frio,0 Cadena2 BYTE mucho calor,0 Cada carcter utiliza un byte de almacenamiento Tambin una cadena puede distribuirse en varias lneas: Cadena1 BYTE Bienvenido al aprendizaje del lenguaje ensamblador BYTE al terminar este curso, te convertirs ,0dh,0ah BYTE en un programador de lenguaje ensamblador con nivel intermedio ,0dh,0ah BYTE FELICIDADES, 0dh,0ah,0 Los cdigos 0dh y0ah corresponden al retorno de carro y avance de lnea (CR/LF) El smbolo de continuacin de lnea (\) concatena dos lneas de cdigo fuente en una sola instruccin. Debe ser el ltimo carcter en la lnea. Las instrucciones siguientes son equivalentes:

Cadena1 BYTE Bienvenido al aprendizaje del lenguaje ensamblador y Cadena1 \ BYTE Bienvenido al aprendizaje del lenguaje ensamblador

Constantes simblicas
Una constante simblica o definicin de smbolo se crea mediante la asociacin de un identificador (un smbolo) con una expresin entera, o con un texto. Los smbolos no reservan almacenamiento. Los utiliza el ensamblador al momento de explorar un programa, y no pueden cambiar en tiempo de ejecucin. Directiva de signo igual. Asocia el nombre de un smbolo con una expresin entera: nombre = expresin Cuando se ensambla un programa, todas las coincidencias de nombre se sustituye por expresin. Por ejemplo, si el ensamblador lee las lneas: Contador = 100 mov ax, Contador Genera y ensambla la instruccin: mov ax, 100 Directiva EQU. Asocia el nombre de un smbolo con una expresin entera o con un texto. Existen tres sintaxis: nombre EQU expresin expresin debe ser una expresin entera vlida nombre EQU smbolo smbolo es el nombre de un smbolo existente ya definido con = o EQU nombre EQU <texto> puede aparecer cualquier texto dentro delos signos < y > Ejemplo: Matriz EQU 2*3 .data M1 DWORD Matriz

Constantes simblicas
Directiva TEXTEQU. Es similar a EQU y crea un macro de texto. Existen tres sintaxis: nombre TEXTEQU <texto> ;asigna texto nombre TEXTEQU macrotexto ;asigna el contenido de una macro existente nombre TEXTEQU <texto> ;asigna una expresin entera constante
Ejemplos: Oprimatecla TEXTEQU <"Oprima cualquier tecla...",0> TFila = 5 Cuenta TEXTEQU %(TFila*2) mover TEXTEQU <mov> establecerAL TEXTEQU <mover al,Cuenta> .data Indicador BYTE Oprimatecla .code establecerAL

ACTIVIDAD No. 2
INSTRUCCIONES. DE FORMA INDIVIDUAL, DAR RESPUESTA A LAS SIGUIENTES PREGUNTAS

Declare una constante simblica, utilizando la directiva de signo igual que contenga el cdigo ASCII (08h) Declare una constante simblica llamada SegundosEnDia, usando la directiva de signo igual, y asgnele una expresin aritmtica que calcule el nmero de segundos en un periodo de 24 horas Utilice una expresin TEXTEQU para redefinir a PROC como PROCEDIMIENTO Utilice TEXTEQU para crear un smbolo llamado Ejemplo para una constante de cadena, y despus utilice el smbolo para definir a una variable de cadena llamada MiCadena.

Instrucciones de transferencia de datos


Tipos de operandos de instrucciones: inmediatos, de registro y de memoria Operandos directos de memoria. La siguiente declaracin indica que se ha asignado al segmento de datos un byte que contiene el nmero 10h: .data Var1 BYTE 10h .code mov al, var1 Instruccin mov. Copia datos de un operando de origen a un operando de destino. mov destino, origen Reglas: Ambos operandos deben ser del mismo tamao Ambos operandos no pueden ser operandos de memoria CS, EIP e IP no pueden ser operandos destinos Un valor inmediato no puede moverse a un registro de segmento Variantes para usar mov mov reg, reg mov mem, reg mov reg, mem mov reg, inm mov mem, inm

Instrucciones de transferencia de datos


Memoria a Memoria. Una sola instruccin mov no puede usarse para mover datos directamente de una ubicacin de memoria a otra. En vez de ello, puede mover el valor del operando de origen a un registro, antes de mover su valor a un operando de memoria.

.data Var1 WORD 100 Var2 WORD ? .code mov ax, var1 mov var2, ax
Es necesario considerar el nmero mnimo de bytes requeridos para una constante entera, al copiarla a una variable o registro.

Instruccin MOVZX (mover con extensin de ceros) copia el contenido de un operando de origen a un operando de destino, y extiende con ceros el valor hasta 16 o 32 bits. Se utiliza con enteros sin signo. Variantes: Ejemplo No. 1: Ejemplo No. 2 movzx r32, r/m8 movzx ax, 0001111b mov bx, 0A23Dh movzx r32, r/m16 movzx eax, bx movzx r16, r/m8

movzx movzx

edx, bl cx, bl

Instrucciones de transferencia de datos


Instruccin MOVSX

Actividad No. 3: Hacer un programa en LE por cada una de las instrucciones que se listan a continuacin: Esta actividad tiene la finalidad de comprender su utilidad. Instruccin MOVSX, LAHF, SAHF, XCHG

Las instrucciones LAHF y SAHF .


LAHF tienen como objetivo cargar las banderas de estado en AH. Copia el byte inferior del registro EFLAGS a AH.
Mediante esta instruccin se puede guardar una copia de las banderas en una variable por seguridad:

.data GuardarBanderas BYTE ? .code lahf mov GuardarBanderas, ah


SAHF almacena AH en las banderas de estado. Copia el contenido de AH en la parte inferior del registro EFLAGS. Puede obtener los valores que se hayan guardado en una variable :

mov ah, GuardarBanderas SAHF


La instruccin XCHG intercambia el contenido entre dos operandos en base a las variantes siguientes:

XCHG XCHG XCHG

registro, registro registro, memoria memoria, registro

Suma y Resta de enteros


Instrucciones: INC, DEC, ADD, SUB y NEG

ACTIVIDAD: No. 4 Hacer un programa en LE que contenga las instrucciones INC, DEC, ADD, SUB y NEG

Operadores y directivas relacionadas con los datos


MASM cuenta con directivas que permiten obtener informacin acerca de las direcciones y caractersticas de tamao de datos: Operador OFFSET. Devuelve el desplazamiento de una etiqueta de datos. El desplazamiento representa la distancia en bytes de la etiqueta, a partir del inicio del segmento de datos. La siguiente figura muestra una variable llamada valor1 dentro del segmento de datos. Ejemplo con tres tipos distintos de variables: .data Valor1 BYTE ? Valor2 WORD ? Valor3 DWORD ? Valor4 DWORD ? Arreglo DWORD 5, 7, 9, 10

Si Valor1 se encuentra en el desplazamiento 00202000 (hexadecimal), el operador OFFSET devolvera los siguientes valores: mov esi, OFFSET Valor1 ;ESI = 00202000 mov esi, OFFSET Valor2 ;ESI = 00202001 mov esi, OFFSET Valor3 ;ESI = 00202003 mov esi, OFFSET Valor4 ;ESI = 00202007

Operadores y directivas relacionadas con los datos


Directiva ALIGN. Esta directiva alinea una variable en un lmite definido por byte, palabra, doble palabra y prrafo. Su formato es: ALIGN lmite Donde lmite puede ser 1, 2, 4, o 16. Un valor de 1 alinea a la siguiente variable en un lmite de 1 byte (el valor predeterminado). Si el lmite es de 2, la siguiente variable se alinea en una direccin con numeracin par. Si el lmite es 4, la siguiente direccin es mltiplo de 4, y as sucesivamente. El CPU procesa ms rpido datos almacenados en direcciones pares. Por ejemplo, si la variable arreglo se encuentra en el desplazamiento 004050AF, al insertarse la directiva ALIGN 2 antes de Arreglo, se asigna un desplazamiento con numeracin par: .data ALIGN 2 Arreglo DWORD 10, 1,2,3,1 .code mov eax, OFFSET Arreglo ; 004050B0 mov eax, OFFSET [Arreglo+4] ; 004050B4 mov eax, OFFSET [Arreglo+8] ; 004050B8

Operadores y directivas relacionadas con los datos


Operador PTR. Se puede utilizar este operador para redefinir el tamao declarado de un operando. Esto slo es necesario cuando se trata de acceder a la variable mediante un atributo de tamao distinto al que utilizamos para declarar la variable. En el ejemplo siguiente se muestra un error al tratar de mover datos entre operandos de tamaos distintos: .data Cantidad1 DWORD 20114321h .code mov ax, Cantidad1 ; error El operando WORD PTR permite realizar el movimiento de la palabra de menor orden (4321h) a AX. mov al, WORD PTR Cantidad1 Intel utiliza el formato de almacenamiento little endian (el byte de menor orden se almacena en el byte inicial de la variable: La CPU puede acceder a la memoria en cualquiera de las tres formas: BYTE, WORD, DWORD .data Cantidad1 DWORD 20114321h .code mov al, BYTE PTR Cantidad1 mov al, BYTE PTR Cantidad1+1 mov al, BYTE PTR Cantidad1+2

Operadores y directivas relacionadas con los datos


Operador TYPE. Devuelve el tamao en bytes de un solo elemento de una variable. Por ejemplo, el tipo (TYPE) de un byte es 1, el tipo de una palabra es de 2. .data Valor1 BYTE ? Valor2 WORD ? Valor3 DWORD ? Valor4 QWORD ? Expresin TYPE TYPE TYPE TYPE Valor1 Valor2 Valor3 Valor4 Valor 1 2 4 8

Operador LENGTHOF. Cuenta el nmero de elementos en un arreglo, definido por los valores que aparecen en la misma lnea que su etiqueta. .data Expresin Valor Byte1 BYTE 5, 10, 15, 20 LENGTOF Byte1 4 Arreglo1 WORD 2, 3, 7, 9, 10 LENGTOF Arreglo1 5 Operador SIZEOF. Devuelve un valor que equivale a multiplicar LENTGOF por TYPE. Por ejemplo, si Arreglo1 tiene los valores TYPE=2 y LENGTHOF=32, entonces SIZEOF Arreglo1 es igual a 64: .data Arreglo1 WORD 32 DUP(0) .code mov eax, SIZEOF Arreglo1 ; EAX = 64

ACTIVIDAD No. 5: Hacer un programa en LE que muestre el uso de los operadores: OFFSET, PTR, TYPE, LENGTHOF, SIZEOF, as como de la directiva ALIGN

Instrucciones JMP y LOOP


Los programas en lenguaje ensamblador utilizan utilizan instrucciones condicionales para implementar instrucciones de alto nivel como IF y ciclos. Cada una de las instrucciones condicionales implica una posible transferencia de control o bifurcacin (salto) hacia una direccin de memoria distinta. Hay dos tipos de transferencia:

Transferencia incondicional

En todos los casos el programa bifurca hacia una nueva ubicacin; se carga una nueva direccin de memoria en el EIP La instruccin JMP es un ejemplo

Transferencia condicional

El programa se bifurca si se cumple cierta condicin. La CPU interpreta las condiciones de verdadero/falso de acuerdo con el contenido de los registros ECX y Flags. La instruccin LOOP es un ejemplo

Instruccin JMP. Esta instruccin es una transferencia incondicional hacia un destino que se identifica mediante una etiqueta de cdigo que el ensamblador traduce en un desplazamiento. La sintaxis es JMP destino Bajo condiciones normales, slo se puede saltar a una etiqueta dentro del procedimiento actual. La instruccin JMP proporciona una forma sencilla de crear un ciclo, saltando a una etiqueta en la parte superior del ciclo: Superior: . . jmp Superior ; repite el ciclo infinito

Instrucciones JMP y LOOP


La instruccin LOOP repite un bloque de instrucciones, un nmero especfico 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

Para la ejecucin de esta instruccin se requieren dos pasos:


1. Se resta 1 a ECX 2. ECX se compara con cero. Si no es igual a cero, se realiza un salto hacia la etiqueta identificada por destino. En caso contrario, si ECX es igual a cero, no se realiza ningn salto y el control pasa a la instruccin que sigue despus del ciclo. En el modo de direccionamiento real, CX es el contador de ciclo predeterminado para la instruccin LOOP. El siguiente ejemplo, suma 1 a AX cada vez que se repite el ciclo. Cuando termina el ciclo, AX=5 y ECX=0: mov ax, 0 mov ecx, 5 L1: inc ax loop L1

Instrucciones JMP y LOOP


Ciclos anidados. Al crear un ciclo dentro de otro, hay que tener cierta consideracin especial con el contenido del ciclo exterior en ECX. Se puede guardar en una variable: .data Cuenta DWORD ? .code Mov ecx, 100 L1: mov Cuenta, ecx mov ecx, 20 L2: .. loop L2 mov ecx, Cuenta Loop L1

Actividad No. 6: Construya un programa que determine la suma de un arreglo de enteros

S-ar putea să vă placă și