Sei sulla pagina 1di 5

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
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


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
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
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:
<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]

Potrebbero piacerti anche