You are on page 1of 26

Lenguaje ensamblador

Que es?
El ensamblador es una variante legible para el ser humano del
lenguaje de maquina que usan las computadoras. Este lenguaje
le da la facilidad y las herramientas necesarias para tomar el
control de todo el PC.
El lenguaje ensamblador, o assembler (assembly language en
ingls) es un lenguaje de programacin de bajo nivel para los
computadores, y otros circuitos integrados programables.

El trmino ensamblador (del ingls assembler) se refiere a un


tipo de programa informtico que se encarga de traducir un
fichero fuente escrito en un lenguaje ensamblador, a un fichero
objeto que contiene cdigo mquina,

Que es?
Se dice que existe una relacin 1:1 entre el lenguaje de maquina y el
lenguaje ensamblador. Por tanto, El Lenguaje Ensamblador es directamente
traducible al Lenguaje de Mquina, y viceversa.

Por otro lado, la computadora no entiende directamente al Lenguaje


Ensamblador; es necesario traducirle a Lenguaje de Mquina.
Cuando creamos un programa en assembler, la extensin del programa lo
guardamos como ASM. Este archivo no lo entiende la Pc, por tanto se hace
necesario traducir el programa para obtener un OBJ, este ltimo archivo
obj contiene lenguaje de maquina que si puede interpretar el ordenador.
Cabe resaltar que el lenguaje assembler va a depender del hardware. Es
decir, para la arquitectura de la familia Intel, el lenguaje ensamblador
cambiar con respecto a la arquitectura de la familia motorola.

Ventajas del lenguaje ensamblador?


Proporciona un control absoluto sobre la PC. Permite
implementar software o hardware de una manera ms
consciente. Sabemos el porque y el para que.

Se conserva el control total de lo que debe hacer el PC, siempre


y cuando sea fsicamente capaz de hacer o ejecutar la tarea.
Los programas creados en lenguaje ensamblador son ms
compactos y sobre todo ms rpidos en comparacin con otros
lenguajes de alto nivel.

Para un programa que muestre la cadena Hola, mundo !!!!


Lenguaje

Fuente

Objeto

Ejecutable
(.exe)

Basic

27 bytes

651 bytes

12814 bytes

Ensamblador

162 bytes

169 bytes

543 bytes

Estructura De Un Programa En Ensamblador


Un programa en el lenguaje ensamblador consiste de una secuencia de
proposiciones, una en cada lnea del cdigo fuente.
La sintaxis de una proposicin es la siguiente:
[etiqueta] [instruccin|directiva [operandos]] [;comentario]
donde etiqueta, instruccin|directiva, operandos, comentario son los
campos de la proposicin.
Los campos se separan por caracteres blancos: caracteres de espacio y/o
de tabulacin. Todos los campos son opcionales, pero el campo operandos
slo pueden estar presente si existe el campo instruccin|directiva.
etiqueta es un nombre simblico empleado para referirse a nmeros,
cadenas de caracteres o localidades de memoria dentro de un programa.
Las etiquetas permiten darle nombre a las variables, constantes y
localidades de una instruccin particular.
Inicio:
mov ds,ax ; comentario

Estructura De Un Programa En Ensamblador


Un programa en el lenguaje ensamblador consiste de una secuencia de proposiciones, una en cada
lnea del cdigo fuente.
La sintaxis de una proposicin es la siguiente:
[etiqueta] [instruccin|directiva [operandos]] [;comentario]
donde etiqueta, instruccin|directiva, operandos, comentario son los campos de la proposicin.
Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulacin. Todos los
campos son opcionales, pero el campo operandos slo pueden estar presente si existe el campo
instruccin|directiva.
etiqueta es un nombre simblico empleado para referirse a nmeros, cadenas de caracteres o
localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las variables,
constantes y localidades de una instruccin particular.

instruccin es un mnemnico de una instruccin del procesador. Cada instruccin se traduce


directamente a una instruccin del lenguaje mquina del microprocesador.
Operandos consiste de cero, uno o ms operandos. Un operando le especifica al ensamblador qu
valor, registro, localidad de memoria, etc., asociar con cada instruccin.
operandos consiste de cero, uno o ms operandos. Un operando le especifica al ensamblador qu
valor, registro, localidad de memoria, etc., asociar con cada instruccin.
Inicio:
mov ds,ax ; comentario

Palabras Reservadas
Las palabras reservadas son para uso estricto del ensamblador. stas incluyen a
los operadores, directivas y smbolos predefinidos. Estas palabras no pueden
usarse como identificadores.

Algunas de ellas son

Inicio de un programa en ensamblador para el 8086


model : Esta es una directiva, que selecciona uno de los 6 modos diferentes
que tiene Turbo Assenbler de generar el cdigo de un programa dependiendo
del tamao que tiene el cdigo y los datos. Los seis modelos son Pequeito
(tiny), pequeo (small), medio (medium), compacto (compact),
grande (large) y extenso (huge).

stack
Esta directiva reserva espacio de memoria para la pila del programa, un rea
de memoria que almacena valores temporales empleados por las subrutinas
y las direcciones de regreso de las subrutinas.

Inicio de un programa en ensamblador para el 8086


Variables del programa
Las variables de un programa se declaran en el segmento de datos, por lo que
la seccin de declaracin de variables empieza con la directiva dataseg. Esta
directiva le indica a Turbo Assembler que almacene las variables en el
segmento de datos del programa. Las variables pueden estar inicializadas o
no. Los valores de las variables inicializadas se almacenan en el cdigo del
programa y se cargan en las variables al ejecutar el programa.
Para declarar variables podemos utilizar las directivas db, dw, dd o dq. La
directiva db define una variable de un byte, la directiva dw define una
variable de tipo palabra (dos bytes), la directiva dd define una variable de
tipo palabra doble (cuatro bytes) y la directiva dq define una variable de tipo
palabra cudruple (ocho bytes). La sintaxis de estas directivas son:
nomVar db exp
nomVar dw exp
nomVar dd exp
nomVar dq exp

Ejemplo de Codigo assembler


.model small
.data
mens db 'hola que tal!.$'
.stack
.code
EMP:
mov ax,@data
mov ds,ax
mov dx,offset mens
mov ah,9
int 21h
mov ah,4ch
int 21h
end EMP

Registros del Micro-8086


En total maneja 14 registros distribuidos de la siguiente manera:
Registro de propsito general
AX (16 bits): El registro AX es el registro acumulador, es utilizado para operaciones que implican AL (8 bits)
entrada/salida y la mayor parte de la aritmtica.
AH (8 bits)
BX (16 bits): El registro BX es el registro base, y es el nico registro de propsito general que
puede ser un ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos.

CX (16 bits): El registro CX es conocido como el registro contador. Puede contener un valor para
controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits.

DX (16 bits): El registro DX es el registro de datos. Algunas operaciones de entrada/salida


requieren su pulso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y AX
trabajando juntos.

BL (8 bits)
BH (8 bits)

CL (8 bits)
CH (8 bits)
DL (8 bits)
DH (8 bits)

Registros del Micro-8086 Continuacin


En total maneja 14 registros distribuidos de la siguiente manera:
Registro de ndice

SI:

El registro ndice fuente u origen de 16 bits es requerido por algunas

operaciones con cadenas de caracteres. El SI est asociado con el registro DS.

DI:

El registro ndice destino tambin es requerido por algunas operaciones con

cadenas de caracteres. El DI est asociado con el registro ES.

BP: El apuntador base de 16 bits facilita la referencia de parmetros, los cuales


son datos y direcciones transmitidos va la pila.

SP: El apuntador de pila de 16 bits est asociado con el registro SS y proporciona


un valor de desplazamiento que se refiere a la palabra actual que est siendo
procesada en la pila. El sistema maneja de manera automtica este registro.

ndice
origen
ndice
destino
Puntero a
base

Puntero de
pila

Registros del Micro-8086 Continuacin


En total maneja 14 registros distribuidos de la siguiente manera:
Registro de Segmento
CS: El DOS almacena la direccin inicial del segmento de cdigo de un programa en el

Segmento de cdigo

registro CS.

DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro Segmento de dato
DS.

ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento

Segmento Extra

para manejar el direccionamiento de memoria.

SS: El registro SS permite la colocacin en memoria de una pila, para almacenamiento


temporal de direcciones y datos.

Segmento de pila

Registros del Micro-8086 Continuacin


En total maneja 14 registros distribuidos de la siguiente manera:
Registro apuntador de instrucciones
IP

Apuntador de instrucciones

IP: El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta

Registros del Micro-8086


En total maneja 14 registros distribuidos de la siguiente manera:

Registro de Bandera

- - - - O D I T S Z - A - P - C
OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros
signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera
DF (direccin): Controla la seleccin de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres
(1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.
IF (interrupcin): Indica que una interrupcin externa sea procesada o ignorada (1=habilita la interrupcin; 0=deshabilita la
interrupcin). El estado de la bandera IF se controla con las instrucciones STI y CLI.
TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso)
SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo).
ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).
ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).
PF (paridad): Indica paridad par o impar en una operacin de datos de ocho bits (0=paridad impar; 1=paridad par).
CF (acarreo): Contiene el acarreo de los bits de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del
ltimo bit en una operacin de corrimiento o de rotacin.

Modos de Direccionamiento de Datos


Direccionamiento por Registro : Transfiere el contenido de un registro a otro del mismo tamao.
MOV AX,BX

Direccionamiento Inmediato : Transfiere el dato que sigue al cdigo de operacin al registro


especificado.
MOV AX,3456H

Direccionamiento Directo: Se suma el desplazamiento dado al segmento de datos


MOV AX,1234H ; Ac 1234H es una direccin de memoria,

Direccionamiento indirecto por registro:

Transfiere un dato entre un registro y una direccin

de memoria direccionada por un registro.


MOV AL,[SI]

Calculo de direcciones de memoria


El 8086 tiene un bus de direcciones de 20bita. Por tanto un solo registro no tiene
la capacidad de representar 20bits ya que los registros son de 16 bits.
Cada direccin de memoria se divide en 2 partes. El segmento y el
desplazamiento. La notacin en Hex sera algo as SSSS:DDDD
La manera de calcular una direccin real de memoria es correr el registro de
segmento 4bits a la izquierda y luego sumarle el desplazamiento.

EJ: 2A54:0022
Al desplazar el segmento 4 bit a la izquierda, nos quedara
2A540
Luego
2A540
+0022
______
2A562 Hex
De esta manera obtendremos la direccion absoluta de memoria.
Note que el resultado es de 20 bits

Interrupciones
Es un mecanismo de transferencia de control, bsicamente ocasiona que la CPU
detenga su ejecucin del programa actual y transfiera el control a una rutina de
servicio.
Al terminar de ejecutar la interrupcin, el CPU continua con los procesos que se
estaban ejecutando antes de la interrupcin.

Bsicamente existen 2 tipos de interrupciones:


De hardware
De software

Las interrupciones de hardware son asincronas, es decir, pueden ocurrir en


cualquier momento y no estn bajo el control del programa.
Las interrupciones de Software, pueden invocarse a voluntad y son controladas
por el programa en forma sincronica (es decir, se conoce todo lo relacionado con
su ejecucion ya que el programa controla el momento y la manera en que son
invocadas)

Interrupciones
Int 21h
Verifica si existe una tecla a ser procesada
Ejemplo:
Funcion 09H
Enva una cadena de caracteres al dispositivo de salida estndar STDOUT.
AH = 09H
DS:DX = Apuntador a una cadena de caracteres terminada con el simbolo
$

Interrupciones
Int 16h
Lee un carcter del teclado

Ejemplo:
Funcion 00H
Enva una cadena de caracteres al dispositivo de salida estndar STDOUT.
llamada AH = 00H
Retorno AH= Cdigo de escaneo del teclado
AL= Valor ASCII del carcter
Ejemplo de llamada
Mov AH,0
Int 16h

Variantes permisibles de la instruccin mov


1. Mov
2. Mov
3. Mov
4. Mov
5. Mov
6. Mov
7. Mov
8. Mov
9. Mov
10. Mov
11. Mov

registro, registro
registro, memoria
memoria, registro
memoria, valor inmediato
registro, valor inmediato
memoria, acumulador
acumulador, memoria
Registro de segmento, memoria
registro, registro de segmento
registro de segmento, memoria
memoria, registro de segmento

Instruccin Xlat
Xlat es una instruccin que se utiliza para trabajar con tablas (o
arreglos). Se utilizan los registros AL y BX.
La instruccin xlat reemplaza el valor de AL por un nuevo valor
tomado de la tabla y el registro BX contiene la direccin del
primer elemento de la tabla.
Ejemplo:
Tabla DB ABCEDEFGHIJK
.
Mov Bx, Offset Tabla
Mov AL, 3
Mov DL,AL ; Prepara dato para mostrar por pantalla
Mov AH,2 ; Funcin 2 de la int 21h. Donde DL debe tener
carcter a desplegar.
Int 21h
; Se muestra por pantalla el tercer carcter de la tabla

Instruccin Loop
Loop es una instruccin cuya funcin es realizar un bucle.
trabaja en conjunto con el registro CX, donde cx
contiene el numero de repeticiones que se debe realizar.
Mov CX,5
Mov Ax,1
Programa:
add ax,1
loop Programa

Rutinas, saltos
Las rutinas son secuencias o bloques de cdigo que pueden
reutilizarse. Estas rutinas son invocadas por la instruccin
CALL.
Existen dos tipos de instrucciones de salto o alteracin del flujo
de ejecucin.
La instruccin jmp altera el flujo de ejecucin enviando el
control en forma incondicional a la direccin indicada.
Las instrucciones de salto condicional basan su bifurcacin en el
estatus que tengan ciertas banderas del registro
correspondiente. Ejemplo.. Jnz (salta si el resultado es <> 0)
y jz (salta si el resultado es cero)

Ejemplo de Rutinas
. .model small
.data
.stack

.code
Inicio:
mov cx,5
call ciclo

mov ah,0
int 16h

ciclo:
add al,1
loop ciclo

ret
End inici

Ejemplo de Saltos
.model small
.data
.stack

.code
Inicio:
mov cx,5
cmp cx,5

;Compara Operando 1 y operando 2, si son iguales retorna 0

jz ciclo

;Si la bandera es Cero salta a la rutina indicada

ciclo:
add al,1

loop ciclo
mov ah,0

int 16h
End inicio

You might also like