lenguaje ensamblador

7
Lenguaje ensamblador El lenguaje ensamblador es un lenguaje de programación que es una traducción directa del código de máquina (Éste código es interpretado por el microprocesador), para que pueda ser entendible por los seres humanos, por lo tanto es un lenguaje de bajo nivel. El lenguaje ensamblador permite una optimización que no se consigue con lenguajes de medio y alto nivel. Permite la creación de programas muy rápidos y muy pequeños, además se tiene un control que no se consigue con un lenguaje de alto nivel. Hay que tener en cuenta que éste libro está orientado a la arquitectura x86 (Es la arquitectura que utiliza la PC IBM y las compatibles) y no es compatible con otra arquitectura. Sintaxis del lenguaje ensamblador La sintaxis es la siguiente Nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, ... El nombre de la instrucción está formada por 2 o 3 letras, los operandos pueden ser registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de la instrucción. Por ejemplo: MOV AL, [1000] Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una dirección de memoria, ésta dirección se escribe entre corchetes, recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una constante dependerá del ensamblador, en el caso del debug (Un programa que sirve para crear y editar aplicaciones que viene con el DOS) se interpretarán como

Upload: marco-farina

Post on 29-Jun-2015

56 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Lenguaje ensamblador

Lenguaje ensambladorEl lenguaje ensamblador es un lenguaje de programación que es una traducción directa del código de máquina (Éste código es interpretado por el microprocesador), para que pueda ser entendible por los seres humanos, por lo tanto es un lenguaje de bajo nivel. El lenguaje ensamblador permite una optimización que no se consigue con lenguajes de medio y alto nivel. Permite la creación de programas muy rápidos y muy pequeños, además se tiene un control que no se consigue con un lenguaje de alto nivel. Hay que tener en cuenta que éste libro está orientado a la arquitectura x86 (Es la arquitectura que utiliza la PC IBM y las compatibles) y no es compatible con otra arquitectura.

Sintaxis del lenguaje ensambladorLa sintaxis es la siguiente

Nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, ...

El nombre de la instrucción está formada por 2 o 3 letras, los operandos pueden ser registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de la instrucción.

Por ejemplo:

MOV AL, [1000]

Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una dirección de memoria, ésta dirección se escribe entre corchetes, recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una constante dependerá del ensamblador, en el caso del debug (Un programa que sirve para crear y editar aplicaciones que viene con el DOS) se interpretarán como hexadecimales, en los siguientes ejemplos se interpretará que las constantes son números hexadecimales.

También se puede tomar un valor de la memoria apuntado por un registro, por ejemplo:

MOV AL, [DI]

DI está apuntado al valor que está en la memoria que será copiado al registro AL. El nombre MOV viene de la palabra move, que es una palabra del ingles que significa mover. Justamente la instrucción mencionada significa, mover el valor apuntado por DI a AL.

También se puede copiar el valor de un registro a otro

MOV AL, BL

En este caso se copia el valor de BL a AL

Page 2: Lenguaje ensamblador

Relación entre los lenguajes de alto nivel y el lenguaje ensamblador. Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática.

Intérpretes y compiladores

La traducción de una serie de instrucciones en lenguaje ensamblador (el código fuente) a un código máquina (o código objeto) no es un proceso muy complicado y se realiza normalmente por un programa especial llamado compilador. La traducción de un código fuente de alto nivel a un código máquina también se realiza con un compilador, en este caso más complejo, o mediante un intérprete. Un compilador crea una lista de instrucciones de código máquina, el código objeto, basándose en un código fuente. El código objeto resultante es un programa rápido y listo para funcionar, pero que puede hacer que falle el ordenador si no está bien diseñado. Los intérpretes, por otro lado, son más lentos que los compiladores ya que no producen un código objeto, sino que recorren el código fuente una línea cada vez. Cada línea se traduce a código máquina y se ejecuta. Cuando la línea se lee por segunda vez, como en el caso de los programas en que se reutilizan partes del código, debe compilarse de nuevo. Aunque este proceso es más lento, es menos susceptible de provocar fallos en la computadora.

Código fuente, en informática, las instrucciones de programa legibles por el programador y escritas en un lenguaje ensamblador o de más alto nivel. El concepto contrario es el código objeto, que se deriva del código fuente y está diseñado para ser legible sólo por la máquina. Véase también Lenguaje de programación.

Código objeto, en informática, código generado por un compilador o un ensamblador, traducido a partir del código fuente de un programa. Casi siempre este término se refiere al código máquina que puede ejecutarse directamente en la unidad central de proceso (CPU) del sistema, pero también puede ser código fuente de lenguaje ensamblador o una variante de código máquina.

Lenguaje máquina

El lenguaje propio del ordenador, basado en el sistema binario, o código máquina, resulta difícil de utilizar para las personas. El programador debe introducir todos y cada uno de los comandos y datos en forma binaria, y una operación sencilla como comparar el contenido de un registro con los datos situados en una ubicación del chip de memoria puede tener el siguiente

Page 3: Lenguaje ensamblador

formato: 11001010 00010111 11110101 00101011. La programación en lenguaje máquina es una tarea tan tediosa y consume tanto tiempo que muy raras veces lo que se ahorra en la ejecución del programa justifica los días o semanas que se han necesitado para escribir el mismo.

Lenguaje ensamblador

Uno de los métodos inventados por los programadores para reducir y simplificar el proceso es la denominada programación con lenguaje ensamblador. Al asignar un código mnemotécnico (por lo general de tres letras) a cada comando en lenguaje máquina, es posible escribir y depurar o eliminar los errores lógicos y de datos en los programas escritos en lenguaje ensamblador, empleando para ello sólo una fracción del tiempo necesario para programar en lenguaje máquina. En el lenguaje ensamblador, cada comando mnemotécnico y sus operadores simbólicos equivalen a una instrucción de máquina. Un programa ensamblador traduce el código fuente, una lista de códigos de operación mnemotécnicos y de operadores simbólicos, a código objeto (es decir, a lenguaje máquina) y, a continuación, ejecuta el programa.

Sin embargo, el lenguaje ensamblador puede utilizarse con un solo tipo de chip de CPU o microprocesador. Los programadores, que dedicaron tanto tiempo y esfuerzo al aprendizaje de la programación de un ordenador, se veían obligados a aprender un nuevo estilo de programación cada vez que trabajaban con otra máquina. Lo que se necesitaba era un método abreviado en el que un enunciado simbólico pudiera representar una secuencia de numerosas instrucciones en lenguaje máquina, y un método que permitiera que el mismo programa pudiera ejecutarse en varios tipos de máquinas. Estas necesidades llevaron al desarrollo de lenguajes de alto nivel.

MACROS

Macro: en aplicaciones de computadora, un conjunto de acciones o instrucciones grabadas y ejecutadas mediante una simple una instrucción. Así se evita la introducción repetitiva de instrucciones, se minimizan los errores tipográficos y se permite a los usuarios que no conozcan el programa reproducir conjuntos de instrucciones previamente grabados por alguien más experto en la aplicación. Si la aplicación incluye también un lenguaje de macros que responda a variables e instrucciones condicionales, el usuario puede también controlar el resultado de un procedimiento, haciendo que la macro responda de forma diferente bajo condiciones diversas.

“En el lenguaje de programación ensamblador”, una macro es un nombre que define un conjunto de instrucciones que serán sustituidas por la macro cuando el nombre de ésta aparezca en un programa (proceso denominado expansión de macros) en el momento de ensamblar el programa. Las instrucciones de macros se pueden guardar en el programa mismo o en un archivo separado que el programa pueda identificar.

MACRO INTERNO

Page 4: Lenguaje ensamblador

Una macro, es un conjunto de instrucciones que se pueden mandar a llamar desde cualquier parte del programa.

Para definir una macro, se utiliza la directiva MACRO. El formato de esta directiva es :

(nombre_de_macro) MACRO (lista_parámetros)

Una macro consta de tres partes esenciales:

a) CABECERA: Contiene el nombre de la macro, la pseudo-op MACRO y opcionalmente, variables ficticias que serán pasadas desde la macro.

b) CUERPO: Contiene el código real que será insertado en cualquier programa que llame al nombre de la macro.

c) FIN: Debe incluir la sentencia ENDM.

Ejemplo de una macro sencilla:

INICIO MACRO

; Define macro MOV AX, DATA ; cuerpo de MOV DS, AX ; la definición MOV ES, AX ; de la macro ENDM ; Fin de la macro

El nombre de esta macro es INICIO, aunque es aceptable cualquier otro nombre válido que sea único. La directiva MACRO en la primer línea indica al ensamblador que las instrucciones que siguen, hasta ENDM (“fin de la macro”), son parte de la definición de la macro.

La directiva ENDM termina la definición de la macro. Las instrucciones entre MACRO y ENDM comprenden el cuerpo de la definición de la macro. Si su programa realiza frecuentemente funciones de entrada/salida, las macros ofrecen la facilidad de codificar una sola vez un conjunto de instrucciones y reutilizar el código cuantas veces desee dentro de su programa.

Una macro es una pseudo-op que permite el establecimiento de operaciones únicas en ensamblador o la inclusión de frecuentes llamadas de código ensamblador. Una macro también se puede definir como un grupo de instrucciones repetitivas en un programa que se codifica sólo una vez y puede utilizarse cuantas veces sea necesario. [1]

Internas.

Una macro interna es aquella que se declara y se llaman dentro del mismo programa.

Una macro interna se declara de la siguiente manera:

Sintaxis:

Page 5: Lenguaje ensamblador

<Nombre> MACRO [parámetros]

ENDM

Ejemplo:

Duplica AL ? MACRO

SHL AL, 1

ENDM

Código que la usa:

MOV AL, 2

Duplica AL ; Esta es la “llamada” al macro

El ensamblador sustituye cada vez que aparezca la macro. No es como los procedimientos, que se “llaman” pero no repiten el código Ejemplo:

MOV AL, 2

Duplica AL ; CALL Duplica

Duplica AL ; CALL Duplica

Este código queda:

MOV AL, 2

SHL AL, 1 ; CALL Duplica

SHL AL, 1 ; CALL Duplica

Cuándo usarlas y cuándo no

1.- Cuando se quiere el código más rápido y no importa ser repetitivo (código grande)

2.-Cuando se van a generar diversas variantes de código similar

3.-No cuando se quiere código compacto, evitando repetir el mismo (en este caso, usar procedimientos). [2]