TASM compilador

11
INSTITUTO TECNOLOGICO SUPERIOR DE INFORMATICA “IBARRA” Integrantes: Xavier Quilca Jorge De Jesús Nivel: Tercero Diurno Sistemas Tema: Ensamblador Introducción El lenguaje simbólico que se utiliza para codificar los programas origen que se procesan por el ensamblador es llamado lenguaje ensamblador. Este lenguaje es una colección de símbolos mnemónicos que representan: operaciones (mnemónicos de instrucciones para la máquina o de directrices para el ensamblador), nombres simbólicos, operadores y símbolos especiales. El lenguaje ensamblador proporciona códigos de operación de los mnemónicos para todas las instrucciones de la máquina contenidas en la lista de instrucciones. Además, el lenguaje ensamblador contiene mnemónicos directrices, los cuales especifican acciones auxiliares que se llevan a cabo por el ensamblador. Estas directrices no siempre son traducidas a lenguaje maquina. Un programador escribe el programa origen en lenguaje ensamblador utilizando cualquier editor de textos o procesador de palabras que sea capaz de producir una salida de texto en ASCII.

description

Manual Básico de Ensamblador

Transcript of TASM compilador

Page 1: TASM compilador

INSTITUTO TECNOLOGICO SUPERIOR DE INFORMATICA “IBARRA”

Integrantes: Xavier Quilca

Jorge De Jesús

Nivel: Tercero Diurno Sistemas

Tema: Ensamblador

Introducción

El lenguaje simbólico que se utiliza para codificar los programas origen que se procesan por el

ensamblador es llamado lenguaje ensamblador.

Este lenguaje es una colección de símbolos mnemónicos que representan: operaciones

(mnemónicos de instrucciones para la máquina o de directrices para el ensamblador), nombres

simbólicos, operadores y símbolos especiales.

El lenguaje ensamblador proporciona códigos de operación de los mnemónicos para todas las

instrucciones de la máquina contenidas en la lista de instrucciones.

Además, el lenguaje ensamblador contiene mnemónicos directrices, los cuales especifican

acciones auxiliares que se llevan a cabo por el ensamblador.

Estas directrices no siempre son traducidas a lenguaje maquina.

Un programador escribe el programa origen en lenguaje ensamblador utilizando cualquier editor

de textos o procesador de palabras que sea capaz de producir una salida de texto en ASCII.

Una vez que el código origen ha sido escrito, el archivo origen es ensamblado mediante su

procesamiento a través de algún ensamblador.

En terminos de computación es todo aquel proceso o programa que útiliza los recursos de la

computadora para lograr el objetivo trazado por su dise–ador o programador.

Ventajas del lenguaje ensamblador:

La primera razón para trabajar con ensamblador es que proporciona la oportunidad de

conocer más a fondo la operación de su PC, lo que permite el desarrollo de software de

una manera más consistente.

Page 2: TASM compilador

La segunda razón es el control total de la PC que se tiene con el uso del mismo.

Otra razón es que los programas de ensamblador son más rápidos, más compactos y

tienen mayor capacidad que los creados en otros lenguajes.

Por último el ensamblador permite una optimización ideal en los programas tanto en su

tamaño como en su ejecución.

Definición y significado de Ensamblador

Cada ordenador tiene su propio lenguaje ensamblador, exclusivo de su CPU; un lenguaje de alto

nivel (LAN) puede ser compilado en distintas máquinas.

Lenguaje de programación que está a un paso del lenguaje de máquina. El ensamblador traduce

cada sentencia del lenguaje ensamblador a una instrucción de máquina. Los programadores deben

estar bien familiarizados con la arquitectura del computador, siendo los programas en lenguaje

ensamblador no documentados difíciles de mantener. El lenguaje ensamblador es dependiente del

hardware; hay un lenguaje ensamblador diferente para cada serie de CPU.

- MacroMacro: Su uso elimina la realización de tareas repetitivas, automatizándolas.

Básicamente, se trata de un grupo de comandos de una aplicación, organizados según un

determinado juego de instrucciones y cuya...

- Código Objeto Código generado por un compilador o un ensamblador traducido por un

código fuente de un programa. Casi siempre este término se refiere al código máquina que

puede ejecutarse...

- Macroensamblador.- Lenguaje ensamblador que utiliza macros para su utilización....

- CualitativoCualitativo Algoritmos: Son los que pueden ser descritos en una serie de pasos

o instrucciones representados por medio de palabras para mantener una respuesta o

solución de problemas....

Page 3: TASM compilador

- MacMac Macintosh: Serie de computadores personales de Apple. El Mac original con su

gabinete vertical se introdujo en 1984. El sistema operativo del Mac con su interfaz gráfica

de usuario.

Estructura de un programa.

Un programa en ensamblador está compuesto por líneas, conteniendo cada una

de ellas un comentario, una única instrucción o una directiva.

En lo que sigue se utilizan los símbolos <> para encerrar un identificador o un

número que el programador debe escribir; los símbolos [] encierran elementos

opcionales; los símbolos {} encierran elementos que se puede escribir

consecutivamente varias veces; el carácter | separa elementos opcionales.

Un programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cada

línea del código fuente.

La sintaxis de una proposición es la siguiente:

[etiqueta] [instrucción|directiva [operandos]] [;comentario]

donde etiqueta, instrucción|directiva, operandos, comentario son los campos de la proposición.

Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulación. Todos los

campos son opcionales, pero el campo operandos sólo pueden estar presente si existe el campo

instrucción|directiva.

Etiqueta es un nombre simbólico empleado para referirse a números, cadenas de caracteres o

localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las

variables, constantes y localidades de una instrucción particular.

Las etiquetas pueden contener los siguientes caracteres: A-Z a-z _ @ $ ? 0-9. Los dígitos 0-9 no

pueden usarse como el primer carácter de una etiqueta. Un sólo carácter $ o ? no puede usarse

como etiqueta ya que tienen un significado especial.

- Las etiquetas deben ser únicas. Con excepción de las definidas con la directiva =, y las

etiquetas locales de macros y subrutinas. Las etiquetas pueden usarse como operandos

tantas veces como se desee.

- Una etiqueta puede aparecer por sí sola en una línea. En este caso el valor asociado a la

etiqueta es la dirección de la operación en la siguiente línea en el programa.

- Las palabras reservadas no pueden usarse como etiquetas.

Page 4: TASM compilador

- Las etiquetas que aparecen solas en una línea y las que van seguidas de una instrucción

deben terminar en dos puntos (:). Las demás etiquetas por lo general no terminan en dos

puntos.

Instrucción es un mnemónico de una instrucción del procesador. Cada instrucción se traduce

directamente a una instrucción del lenguaje máquina del microprocesador.

Directiva es una instrucción para el ensamblador. No produce código ejecutable, sino que controla

varios de los aspectos de cómo opera el ensamblador: el tipo de código generado (8086, 80286,

80386, etc.), los segmentos a usar, etc.

Operandos consiste de cero, uno o más operandos. Un operando le especifica al ensamblador qué

valor, registro, localidad de memoria, etc., asociar con cada instrucción.

Hay varias clases de operandos: registros, constantes, etiquetas, variables y cadenas.

El tipo y número de operandos depende de la instrucción o directiva.

Si hay dos o más, van separados por comas (,) comentario es cualquier secuencia de

caracteres precedidos por un punto y coma (;) y que termina con el fin de la línea.

Los comentarios son ignorados por el ensamblador

Las líneas en blanco se tratan como comentarios.

Por ejemplo considere el programa de la siguiente página. Los números a la izquierda del recuadro

no forman parte del programa y sólo sirven para numerar las líneas:

Las líneas 1 a 7, 9, 16, 20, 28 y 45 son líneas con sólo comentarios.

Las líneas 8, 10, 15, 17, 19, 21, 27, 29, 34, 39, 44 y 46 son líneas en blanco y son tratadas

como comentarios. Se usan para separar las partes de un programa y darle mayor claridad.

Las líneas 31 y 40 son líneas con sólo una etiqueta

Las líneas 32, 33, 35 a 38 y 41 a 43 contienen instrucciones.

Las líneas 11 a 14, 18, 22 a 26, 30 y 47 contienen directivas.

Normalmente podemos considerar que un programa en ensamblador está formado de las

siguientes secciones:

Código de inicio

Declaración de constantes simbólicas

Variables del programa

Código del programa

Código de terminación

Page 5: TASM compilador

Instrucciones basicas.

Aquí lo mejor es ir viendo ejemplos:

xor eax, eax; hace un or exclusivo eax con eax y el resultado lo guarda en eax

xor ebx, eax; hace un or exclusivo de ebx con eax y el resultado lo mete en ebx

add eax, esi; suma a eax el valor de esi

sub, edi, ebp; resta de edi el valor de ebp

add eax, 0x712A119F; suma a eax la constante 0x712A119F

sub eax, 0x712A119F; resta de eax

inc eax; incrementa el valor de eax

dec eax; decrementa el valor de eax

mov eax, ebx: mueve ebx a eax

mov eax, eax: en realidad no hace nada ... mueve eax a eax

nop: una instrucción especial que sirve para gastar un ciclo de CPU sin hacer nada. Son los 0x90

que vemos en los shellcodes.

mov eax, [ecx]: mueve a eax el contenido de la dirección de memoria ecx

mov eax, [0x7438aaFF]: mueve a eax el contenido de la dirección de memoria 0x7438aaFF

mov eax, [ebx+ecx]: mueve a eax el contenido de la dirección de memoria ebx+ecx

push edi; envía el valor de edi al stack, y además el valor de esp baja en 4 para que apunte al

nuevo elemento.

pop edi; mete el contenido del stack en edi y aumenta esp en 4 para que apunte al valor anterior

almacenado en el stack.

Así pues, pop edi es lo mismo que:

mov edi, [esp]; los corchetes indican "contenido de"

add esp, 4

Push 0x712A119F; envía la constante 0x712A119F al stack, el valor de esp se actualiza.

jmp 0x712A119F: salta a la dirección 0x712A119F

jmp eax: salta a eax

jmp [eax+edx]: salta a la dirección apuntada por el valor de eax+edx

También tenemos saltos condicionales, como esto:

cmp eax, esp; comparamos eax con esp

je eax: salta a eax si eax es igual que esp

jne ebx: si no es igual salta a ebx

Page 6: TASM compilador

Y esta se usa mucha como método rápido de guardar el valor de algún registro:

xchg eax, ebx; intercambia los valores de eax y ebx

La instrucción call, que ya la vimos en el tutorial anterior, lo que hace es enviar al stack la dirección

de retorno, que es la siguiente al call, y saltar a la función. Es decir, estos dos bloques de

instrucciones son equivalentes:

; bloque 1

call eax

retorno:

; bloque 2

push addr retorno

jmp eax

retorno:

Como podéis imaginar, "retorno" es una etiqueta. El pre-compilador se encargará de meter allí el

offset (dirección) que corresponda.

Finalmente, la instrucción ret es la que se usa para volver de las llamadas a las funciones. Lo que

hace es leer la dirección a la que tiene que volver del stack y saltar allí. Es decir, es lo mismo que:

jmp [esp]

add esp, 4

Así mismo, no debemos olvidar que todas estas instrucciones también existen en sus versiones de

8 y 16 bits (bueno, todas todas no .. pero la mayoría sí). Por ejemplo:

xor al, ah

mov bl, cl

inc cl

mov al, 0x90

Page 7: TASM compilador

Ejercicios:

Sumar

Restar

Multiplicacion