Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
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
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 !
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
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.
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.
.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
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
ACTIVIDAD: No. 4 Hacer un programa en LE que contenga las instrucciones INC, DEC, ADD, SUB y NEG
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
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
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