Documente Academic
Documente Profesional
Documente Cultură
LENGUAJE ENSAMBLADOR
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
CONSTANTES
Constantes Enteras
Base: b = binario, d = decimal, h = hexadecimal, y o = octal Si no se indica la base, la constante se toma como representada en el sistema decimal Cuando un numero en hexadecimal comienza con una letra, se debe colocar un 0 al inicio: A03h 0A03h
Comillas internas: Comilla simple ' interna", Comillas dobles interna Cada carcter ASCII ocupa un slo byte
SENTENCIAS
Tres tipos de sentencias en lenguaje ensamblador
Tpicamente, una sentencia debe aparecer en una lnea
Instrucciones Ejecutables
Generan cdigo de maquina a ejecutar por el procesador Indican al procesador que hacer Ejecutan una accin
Directivas al Ensamblador
Proveen informacin al ensamblador mientras traduce el programa Usadas para definir datos, seleccionar el modelo de memoria, etc. No se ejecutan: las directivas no son parte de las instrucciones Abreviacin para un grupo de sentencias Secuencia de instrucciones, directivas o de otros macros
Macros
INSTRUCCIONES
Marca la direccin de una instruccin, debe terminar en dos puntos : Usada para indicar un sitio del programa a donde puede bifurcar (saltar) el control del programa
Mnemnico
Palabra clave que Identifica la operacin (MOV, ADD, SUB, JMP, CALL, )
Operandos
Especifican los datos requeridos por la operacin Las instrucciones ejecutables pueden tener de cero a tres operandos Pueden ser registros, variables de memoria o constantes
EJEMPLOS DE INSTRUCCIONES
Sin operandos stc ; set carry flag Un operando inc eax ; incrementar registro eax call Clrscr ; llamar procedimiento Clrscr jmp L1 ; saltar a instruccin con etiqueta L1
Dos operandos add ebx, ecx ; registro ebx = ebx + ecx sub var1, 25 ; variable de memoria var1 = var1 25 Tres operandos imul eax,ebx,5 ; registro eax = ebx * 5
Comentarios
Explican el propsito del programa Cuando fue escrito, revisado y por quien Explican los datos usados en el programa Explican las secuencias de instrucciones y los algoritmos utilizados Dan explicaciones especficas a la aplicacin
Comienzan con un punto y coma ; y terminan al final de la lnea El carcter para identificar el comentario, puede variar para diferentes compiladores, algunos caracteres usuales son: (; # %). Se debe revisar las especificaciones del compilador usado.
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
Compilador MASM
En esta plantilla, se incluye una librera (Irvine32.inc) que no pertenece al estndar del lenguaje, pero que nos es til para realizar los procesos de entrada y salida (I/O) de la informacin.
TITLE (opcional)
.MODEL
STDCALL le indica al ensamblador que utilice convenciones estndares para nombres y llamadas a procedimientos
Utilizada antes de la directiva .MODEL Programa puede usar instrucciones de la arquitectura Pentium P6 Con el modelo FLAT por lo menos se debera usar la directiva .386
Directiva .STACK
Define una pila de ejecucin para el programa Se puede especificar el tamao de la pila (opcional) La pila de ejecucin es requerida para las llamadas a procedimientos
Directiva .DATA
Define un rea de memoria para los datos del programa Las variables del programa se deben definir bajo esta directiva El ensamblador asignar e inicializar el almacenamiento de variables
Directiva .CODE
Define la seccin de cdigo del programa conteniendo instrucciones El ensamblador colocar las instrucciones en el rea de cdigo de la memoria
INCLUDE
Le indica al ensamblador que incluya cdigo de otro archivo Incluiremos Irvine32.inc provedo por el autor Kip Irvine
Declara procedimientos implementados en la librera Irvine32.lib Para usar Irvine32.lib, hay que enlazarla a nuestro programa
PROC y ENDP
Usadas para definir procedimientos Por convencin, definiremos main como el primer procedimiento Ms procedimientos se pueden definir despus de main
Directiva END
Marca el final de un programa Identifica el nombre (main) del procedimiento de arranque del programa
Generada automticamente por EMU8086. Muestra el mensaje press any key... en pantalla y espera a que se pulse una tecla.
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4 EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0
No usar maysculas Colocar todo en maysculas Colocar en maysculas las palabras reservadas, mnemnicos y nombres de registros Colocar en maysculas solo las directivas y los operandos MASM no diferencia entre minsculas o maysculas Usar nombres que tengan sentido para los identificadores Usar lneas en blanco entre los procedimientos Usar sangra y espaciado para alinear instrucciones y comentarios
Otras sugerencias
Usar sangra para las instrucciones, pero no para las etiquetas Alinear los comentarios que aparecen al despus de las instrucciones
Definido en Irvine32.inc Expandido a una llamada a ExitProcess que termina el programa La funcin ExitProcess esta definida en la librera kernel32 Podemos reemplazar exit con lo siguiente:
Tambin puede reemplazar exit con: INVOKE ExitProcess, 0 Declara un procedimiento usado en un programa y definido en otra parte
Programa Modificado
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
Ciclo Ensamblar-Enlazar-Corregir
Editor
Traduce archivos (.asm) a archivos objeto (.obj) en lenguaje de mquina Puede producir un archivo listado (.lst) que muestra el trabajo del ensamblador
Combina archivos objeto (.obj) con archivos de la librera de enlace (.lib) Produce archivos ejecutables (.exe) Puede producir archivos (.map) opcionalmente
Archivo Listado
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
BYTE, SBYTE
REAL4
Entero sin signo 8-bit Entero con signo 8-bit Entero sin signo 16-bit Entero con signo 16-bit Entero sin signo 32-bit Entero con signo 32-bit Entero 64-bit Entero 80-bit
WORD, SWORD
Punto flotante precisin sencilla IEEE Ocupa 4 bytes Punto flotante precisin doble IEEE Ocupa 8 bytes Punto flotante precisin extendida IEEE Ocupa 10 bytes
REAL8
DWORD, SDWORD
REAL10
QWORD, TBYTE
Reservan espacio en memoria para una variable Pueden opcionalmente asignar un nombre (etiqueta) a los datos Sintaxis:
value1 BYTE 'A' ; constante carcter value2 BYTE 0 ; byte mnimo valor sin signo value3 BYTE 255 ; byte mximo valor sin signo value4 SBYTE -128 ; byte mnimo valor con signo value5 SBYTE +127 ; byte mximo valor con signo value6 BYTE ? ; byte no inicializado
MASM no impide la inicializacin de un BYTE con un valor negativo, pero se considera un estilo pobre Si se declara una variable SBYTE, el Microsoft debugger automticamente despliega su valor en decimal con signo
Por conveniencia, se encierra entre comillas Usualmente se termina con un carcter NULL (byte valor= 0)
Ejemplos:
str1 BYTE "Enter your name", 0 str2 BYTE 'Error: halting program', 0 str3 BYTE 'A','E','I','O','U' greeting BYTE "Welcome to the Encryption " BYTE "Demo Program", 0
Para continuar una cadena a travs de varias lneas, finalice cada lnea con una coma
menu BYTE "Cuenta Corriente",0dh,0ah,0dh,0ah, "1. Crear una nueva cuenta",0dh,0ah, "2. Abrir una cuenta existente",0dh,0ah, "3. Acreditar la cuenta",0dh,0ah, "4. Debitar la cuenta",0dh,0ah, "5. Salir",0ah,0ah, "Seleccin> ",0
Secuencia de caracteres para fin de lnea: 0Dh = 13 = carriage return 0Ah = 10 = line feed
Es recomendable Definir todas las cadenas de su programa en la misma rea del segmento de datos
Ventajas: ms compacto que usar una lista de inicializadores contador DUP ( argumento ) Contador y argumento deben ser expresiones constantes
Sintaxis:
var1 BYTE 20 DUP(0) ; 20 bytes, todos igual a cero var2 BYTE 20 DUP(?) ; 20 bytes, todos sin inicializar var3 BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK" var4 BYTE 10,3 DUP(0),20 ; 5 bytes: 10, 0, 0, 0, 20 var5 BYTE 2 DUP(5 DUP('*'), 5 DUP('!')) ; '*****!!!!!*****!!!!!'
word1 WORD 65535 ; mximo valor de 16-bit sin signo word2 SWORD 32768 ; mnimo valor de 16-bit con signo word3 WORD "AB" ; dos caracteres caben en una WORD array1 WORD 1,2,3,4,5 ; arreglo de 5 palabras sin signo array2 SWORD 5 DUP(?) ; arreglo de 5 palabras con signo dword1 DWORD 0ffffffffh ; mximo valor de 32-bit sin signo dword2 SDWORD 2147483648 ; mnimo valor de 32-bit con signo array3 DWORD 20 DUP(?) ; 20 doble palabras sin signo array4 SDWORD 3,2,1,0,1 ; 5 doble palabras con signo
QWORD y TBYTE
Definen almacenamiento para enteros de 64-bit y 80-bit Con signo y sin signo
quad1 QWORD 1234567812345678h val1 TBYTE 1000000000123456789Ah rVal1 REAL4 -2.1 rVal2 REAL8 3.2E-260 rVal3 REAL10 4.6E+4096 array REAL4 20 DUP(0.0)
Tabla de Smbolos
As podemos referirnos al espacio asignado de almacenamiento por nombre Ensamblador mantiene su nombre y su desplazamiento Desplazamiento de una variables es relativo a la direccin de la primera variable
Ejemplo
DATA value WORD 0 sum DWORD 0 marks WORD 10 DUP (?) msg BYTE 'The grade is:',0 char1 BYTE ?
Tabla de Smbolos
Nombre
value sum marks msg char1
Desplazamiento
0 2 6 26 40
Los procesadores pueden ordenar los bytes dentro de una palabra de dos formas Ordenamiento de Bytes Little Endian
Direccin de memoria = Direccin del byte menos significativo Ejemplo: Intel 80x86
Direccin de memoria = Direccin del byte menos significativo Ejemplos: MIPS, Motorola 68k, SPARC
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
Constantes Simblicas
No mas que un nombre usado en un programa en lenguaje ensamblador Procesado por el ensamblador pura substitucin de texto Ensamblador no asigna memoria a las constantes simblicas Directiva = Directiva EQU Directiva TEXTEQU Mejora la legibilidad del programa Ayuda en el mantenimiento del software: cambios se hacen en un solo lugar
Nombre = Expresin
Nombre es llamado una constante simblica Expresin es una expresin constante entera
COUNT = 500
... mov eax, COUNT ... COUNT = 600 ... mov ebx, COUNT
Directiva EQU
Tres Formatos:
Nombre EQU Expresin Expresin constante entera Nombre EQU Smbolo Nombre de smbolo existente Nombre EQU <texto> Cualquier texto que aparezca entre < >
EQU 10*10 ; Integer constant expression EQU <3.1416> ; Real symbolic constant EQU <"Press any key to continue...",0> BYTE PressKey
Directiva TEXTEQU
Nombre TEXTEQU <text> asigna cualquier texto al nombre Nombre TEXTEQU textmacro asigna un macro de texto existente Nombre TEXTEQU %constExpr expresin constante entera
AGENDA
Elementos Bsicos del Lenguaje Ensamblador Plantilla para Programa de Memoria Plana Ejemplo: Sumar y Restar Enteros Ensamblar, Encadenar, y Corregir Programas Definicin de Datos Definicin de Constantes Simblicas Operadores y Directivas Relacionadas a los Datos
Operador OFFSET
En memoria FLAT, un espacio de memoria es utilizado para cdigo y datos OFFSET = direccin lineal de una variable (nmero de 32-bit) BYTE ? WORD ? DWORD ? DWORD ? ; Assume bVal is at 00404000h
.CODE mov esi, OFFSET bVal mov esi, OFFSET wVal mov esi, OFFSET dVal mov esi, OFFSET dVal2
Directiva ALIGN
Direccin de una variable debe ser un mltiplo de bound Ensamblador insertas bytes vacos para asegurar la alineacin
? ; Assume that ; Address of b1 = 00404000h ; Skip one byte ; Address of w1 = 00404002h ; Address of w2 = 00404004h ; Skip two bytes ; Address of d1 = 00404008h ; Address of d2 = 0040400Ch
? ?
? ?
Operador TYPE
Operador TYPE
Operador LENGTHOF
Operador LENGTHOF
Operador SIZEOF
Operador SIZEOF
Cuenta el nmero de bytes en una declaracin de datos Equivalente a multiplicar LENGTHOF por TYPE .DATA array1 WORD 30 DUP(?),0,0 array2 WORD 5 DUP(3 DUP(?)) array3 DWORD 1,2,3,4 digitStr BYTE "12345678",0 .code mov ecx, LENGTHOF array1 ; ecx = 64 mov ecx, LENGTHOF array2 ; ecx = 30 mov ecx, LENGTHOF array3 ; ecx = 16 mov ecx, LENGTHOF digitStr ; ecx = 9
Una declaracin de datos abarca mltiples lneas si cada lnea (excepto la ltima) finaliza con una coma Los operadores LENGTHOF y SIZEOF incluyen todas las lneas que pertenecen a la declaracin
En el siguiente ejemplo, array identifica solo la primera lnea de la declaracin WORD Compare los valores retornados por LENGTHOF y SIZEOF aqu con los de la izquierda
.DATA array WORD 10,20, 30,40, 50,60 .CODE mov eax, LENGTHOF array mov ebx, SIZEOF array
;6 ; 12
.DATA array WORD 10,20 WORD 30,40 WORD 50,60 .CODE mov eax, LENGTHOF array mov ebx, SIZEOF array
;2 ;4
Operador PTR
PTR Provee la flexibilidad de acceder a parte de una variable Puede ser usado para combinar elementos de un tipo ms pequeo Sintaxis: Type PTR (cambia el tipo por defecto de la variable)
.DATA dval DWORD 12345678h array BYTE 00h,10h,20h,30h .CODE mov al, dval mov al, BYTE PTR dval mov ax, dval mov ax, WORD PTR dval mov eax, array mov eax, DWORD PTR array
; error porqu? ; al = 78h ; error porqu? ; ax = 5678h ; error porqu? ; eax = 30201000h
LABEL Directive
Asigna un nombre y tipo alternativo a una ubicacin de memoria LABEL no asigna espacio por ella misma Elimina la necesidad del operador PTR Formato: Nombre LABEL Tipo .DATA dval LABEL DWORD wval LABEL WORD blist BYTE 00h,10h,00h,20h .CODE mov eax, dval ; eax = 20001000h mov cx, wval ; cx = 1000h mov dl, blist ; dl = 00h
Resumen
Instruccin ejecutada en tiempo de corrida Directiva interpretada por el ensamblador STACK, .DATA, y .CODE
BYTE, WORD, DWORD, QWORD, etc. Operador DUP Directivas =, EQU, y TEXTEQU OFFSET, ALIGN, TYPE, LENGTHOF, SIZEOF, PTR, y LABEL
Constantes Simblicas