You are on page 1of 18

Manual de Lenguaje Ensamblador 2011

INTEGRANTE:
 Roberto Cevallos Tobar
 Fabián Criollo Canacuan

TEMA:
 Lenguaje Ensamblador

ASIGNATURA:
 Organización de computadoras

CURSO:
 Tercero Sistemas Computacionales
(matutino)

FECHA:
 2011-03-05

1
Manual de Lenguaje Ensamblador 2011

INDICE
1) Introducción
2) Definiciones Básicas
3) Estructura de un programa
4) Instrucciones básicas en ensamblador
5) Ejercicios
5.1) Programa Suma
5.2) Programa Resta
5.3) Programa Multiplicación
5.4) Programa Dividir
6) Fuentes de Consulta

2
Manual de Lenguaje Ensamblador 2011

INTRODUCCION

El lenguaje Ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir


programas informáticos, y constituye la representación más directa del código
máquina específico para cada arquitectura de computadoras legible por un
programador.

El lenguaje ensamblador es el sistema alfanumérico para escribir código máquina


mediante expresiones abreviadas (mnemotécnicos).

La compilación es más complicada porque incluye la conversión de operaciones


matemáticas complejas, comandos de lenguaje natural o tipos de comandos
complejos.

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


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

Es usado principalmente porque hay aplicaciones o programas que deben tratar


directamente con los registros de la máquina, la memoria, dispositivos de E/S, etc.

Fue usado ampliamente en el pasado para el desarrollo de software, pero


actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se
requiere la manipulación directa del hardware o se pretenden rendimientos
inusuales de los equipos.

Un ensamblador crea código objeto traduciendo instrucciones mnemónicas a


códigos operativos, e interpretando los nombres simbólicos para direcciones de
memoria y otras entidades. El uso de referencias simbólicas es una característica
básica de los ensambladores, evitando tediosos cálculos y direccionamiento
manual después de cada modificación del programa. La mayoría de los
ensambladores también incluyen facilidades para crear macros, a fin de generar
series de instrucciones cortas que se ejecutan en tiempo real, en lugar de utilizar
subrutinas.

Los ensambladores son por lo general más fáciles de programar que los
compiladores de lenguajes de alto nivel, y han estado disponibles desde la década
de 1950. Los ensambladores modernos, especialmente para arquitecturas basadas
en RISC, como por ejemplo MIPS, SPARC y PA-RISC optimizan las instrucciones
para explotar al máximo la eficiencia de segmentación del CPU.

3
Manual de Lenguaje Ensamblador 2011

DEFINICIONES BASICAS

LENGUAJE MAQUINA

Lenguaje de máquina es el sistema de códigos directamente interpretable por un


circuito micro programable, como el microprocesador de una computadora o el
micro controlador de un autómata (un PLC). Este lenguaje está compuesto por un
conjunto de instrucciones que determinan acciones a ser tomadas por la máquina.
Un programa de computadora consiste en una cadena de estas instrucciones de
lenguaje de máquina (más los datos). Estas instrucciones son normalmente
ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio
programa o eventos externos. El lenguaje de máquina es específico de cada
máquina o arquitectura de la máquina, aunque el conjunto de instrucciones
disponibles pueda ser similar entre ellas.

Los circuitos micro programables son sistemas digitales, lo que significa que
trabajan con dos únicos niveles de tensión. Dichos niveles, por abstracción, se
simbolizan con el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo utiliza
dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del
sistema binario en el diseño de este tipo de circuitos y en su programación.

Claude Elwood Shannon, en su Analysis of Relay and Switching Circuits, y con sus
experiencias en redes de conmutación, sentó las bases para la aplicación del
álgebra de Boole a las redes de conmutación.

Una red de conmutación es un circuito de interruptores eléctricos que al cumplir


ciertas combinaciones booleanas con las variables de entrada, define el estado de
la salida. Este concepto es el núcleo de las puertas lógicas, las cuales son, por su
parte, los ladrillos con que se construyen sistemas lógicos cada vez más
complejos.

Shannon utilizaba el relé como dispositivo físico de conmutación en sus redes. El


relé, a igual que una lámpara eléctrica, posee dos estados: 1 ó 0, esto es, está
activado, encendida, o está desactivado, apagada.

El desarrollo tecnológico ha permitido evolucionar desde las redes de relés


electromagnéticos de Shannon a circuitos con tubos de vacío, luego a redes
transistorizadas, hasta llegar a los modernos circuitos integrados cuyas cúspide lo
forman los circuitos micro programados.

4
Manual de Lenguaje Ensamblador 2011

LENGUAJE ENSAMBLADOR

El lenguaje Ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir


programas informáticos, y constituye la representación más directa del código
máquina específico para cada arquitectura de computadoras legible por un
programador.

Fue usado principalmente en los inicios del desarrollo de software, cuando aun no
se contaba con los potentes lenguajes de alto nivel. Actualmente se utiliza con
frecuencia en ambientes académicos y de investigación, especialmente cuando se
requiere la manipulación directa de hardware, se pretenden altos rendimientos o
un uso de recursos controlado y reducido.

Muchos dispositivos programables (como los micro controladores) aun cuentan con
el Ensamblador como la única manera de ser manipulados.

ESTRUCTURA DE UN LENGUAJE ENSAMBLADOR

SINTAXIS DE UN LENGUAJE ENSAMBLADOR

- Estructura de una línea:

INSTRUCCIÓN EN ENSAMBLADOR

NEMOTÉCNIC
ETIQUETA OPERANDOS COMENTARIOS
O

INSTRUCCIÓN EN LENGUAJE MÁQUINA

DIRECCIÓ CÓDIGO DE
DIRECCIÓN DE LOS OPERANDOS
N OPERACIÓN

- Características de los ensambladores modernos:

 Formato libre.
 Delimitadores de campo.

5
Manual de Lenguaje Ensamblador 2011

- Tipos de líneas en un programa ensamblador

 Instrucciones.

∗Ejecutables por el computador.

 Pseudoinstrucciones

∗ Indicaciones o directivos para el traductor.

∗ No ejecutables por el computador.

CAMPOS DE UNA INSTRUCCIÓN EN ENSAMBLADOR

Etiqueta

- Identifica la línea en la cual se encuentra.

- Se asocia a la dirección en la cual se encuentra la instrucción o el dato, o a la


constante definida.

- Recomendaciones

 Utilizar sólo letras o números (comenzar por una letra).


 Colocar la primera letra de la etiqueta en el primer carácter de la línea.

Nemotécnico

- Identifica:

 Un código de operación del lenguaje


 Una pseudoinstrucción

Campo de operandos

- Identifica los operandos que intervienen en la instrucción o pseudoinstrucción.

- Tipos de operandos:

6
Manual de Lenguaje Ensamblador 2011

 Constantes

∗ Numéricas: decimales (D), binarias (%, B), octales (O,@,Q,C), hexadecimales


(H, $).

∗ Alfabéticas: entre comillas.

 Símbolos

∗ Predefinidos: registros, contador de dirección de ensamblado.

∗ Implícitos: etiquetas de dirección.

∗ Explícitos: mediante pseudoinstrucciones.

 Expresiones

Comentarios

- Indicaciones para una mejor comprensión del programa ensamblador.

- Pueden comenzar con el símbolo “;”.

PSEUDOINSTRUCCIONES

Manipulación del contador de dirección de ensamblado

 Indica la dirección a partir de la cual se localizan los datos o


instrucciones a continuación.
 Ej: ORG operando

Definición de símbolos

 Da un valor a un símbolo.
 Ej: ETIQ EQU expresión

Reserva de espacio en memoria (definición de variables)

 Con valor inicial: reserva espacio para los datos indicados en la lista de
expresiones, y les pone los valores iniciales indicados (tamaño de cada
dato:

7
Manual de Lenguaje Ensamblador 2011

S=B,W ó L).

∗ Ej: ETIQ DC.S expr1,expr2,…,exprN

 Sin valor inicial: reserva espacio para tantas variables como se indica en
la expresión (tamaño de cada dato: S=B,W ó L).

∗ Ej: ETIQ DS.S expresión

Control de traducción

 Marca el final del programa fuente


 Ej: END

Almacenamiento en posición par

 Hace que el siguiente objeto se almacene a partir de la próxima posición


de memoria con dirección par.
 Ej: EVEN

Enlace entre programas

 Indicación de símbolos externos: EXT, REF, XREF, EXTERNAL.


 Indicación de símbolos exportables: ENT, DEF, XDEF, PUBLIC.

Acciones de ensamblado condicional

 Incluyen en el ensamblado o no grupos de instrucciones del programa


fuente.
 Ej: IF … ELSE … ENDIF

Ejecución de listados e informes

 Título para las cabeceras: TITLE, NAME.


 Salto de página: PAGE, SPAGE.
 Impresión u omisión de parte del programa fuente: LIST, NOLIST.
 Inclusión de la tabla de símbolos: SYMBOL, TABLE.

8
Manual de Lenguaje Ensamblador 2011

Instrucciones para Lenguaje Ensamblador


"Estas son algunas instrucciones básicas de código ensamblador..."

a) Código para limpiar pantalla.

 mov ax, 0600h; ah 06(es un recorrido), al 00(pantalla completa).


 mov bh, 71h    ; fondo blanco (7), sobre azul (1).
 mov cx, 0000h; es la esquina superior izquierda reglón: columna.
 mov dx, 184Fh; es la esquina inferior derecha reglón: columna.
 Int 10h; interrupción que llama al BIOS.

Esta función limpia la pantalla haciendo un recorrido por toda la


pantalla, el fondo de la pantalla se define por bh los color 71h que es
fondo blanco(7), fuente azul(1); CX: son los renglón: columna iniciales;
DX: son los renglón: columna finales

b) código para desplegar un mensaje en pantalla


      
 mov ah, 09h; petición para desplegar.
 lea dx, msg; cargar la dirección  de la indicación
 int 21h ;llama al DOS

La función 09h despliega una cadena en el área de datos, utiliza lea para
cargar la dirección de cadena en DX; la operación despliega los
caracteres de izquierda a derecha.

c) Código para posicionar el cursor en cualquier parte de la pantalla


 cursor: 
 mov ah, 02h ; petición para colocar el cursor
 mov bh,00 ; número de pagina
 mov dh, 05 ;fila 05
 mov bl, 12 ;columna 12
 int 10h ;interrupción que llama al BIOS

La función 02h indica la operación que coloca al cursor, se carga el


número de página o pantalla, y la fila y columna en que se colocara

d) Código para leer carácter con eco


 mov ah,01h ;petición de leer carácter
 int 21h ;llama al DOS

La función 01h indica la operación para leer un caracter desde el


teclado, caracter con eco quiere decir: que cuando pulsas un caracter se
imprime en la pantalla enseguida

9
Manual de Lenguaje Ensamblador 2011

e) Código para leer caracter sin eco


 mov ah,07h ;petición de leer carácter
 int 21h ;llama al DOS

La función 07h o también 08h ambas indica la operación para leer un


caracter desde el teclado, caracter sin eco quiere decir: que cuando
pulsas un caracter no es impreso el carcater pulsado hasta que se manda
imprimir con otra función.

F) Código para desplegar un solo caracter

 mov  ah,0eh ;petición para desplegar


 int 10h ;llama al BIOS

La función 0eh utiliza al monitor como terminal para despliegue simple,


establece la función 0eh en ah, el carácter para desplegar, esta función
es utilizada para imprimir el carácter sin eco de las funciones 07h y 08h
que son funciones de control de retroceso

G) Instrucciones de pila

               push ax  ;empilar
               ;-----------------------------------
               pop ax  ;desempilar

La función push realiza la operación de empilar en el registro ax, es


decir: guarda datos temporalmente; también bx, cx, dx
La función pop su operación es desempilar es decir manda a llamar los
datos almacenados que se encuentran en la pila en el registro guardado al
igual al push solo ocupa los registros: ax, bx, cx, dx

H) Obtener  fecha del sistema

 mov ah, 2ah      

 int 21h

La función 2ah es utilizada para obtener la fecha actual del sistema se


muestra en los siguientes registros AL: día (donde 0=domingo); CX: año
(en formato hexadecimal); DH: Mes (01 a 12); DL; día del mes (01 a 31)

10
Manual de Lenguaje Ensamblador 2011
I) Obtener  hora del sistema

 mov ah, 2ch  
 int 21h  

La función 2ch es utilizada para obtener la hora del sistema actual se


guarda en los registros siguientes: en CH: hora; CL: minutos; DH:
segundos; CL: milisegundos (máximo 99)

J) IMPRIMIR EL CODIGO ASCII

stacksg segment para stack 'stack' ; el stack define el segmento de pila

db 64 dup (0) ; el tamaño de la pila es de 64 bytes


stacksg ends

datasg segment ; se define un segmento de datos no siempre se declaran en


un programa

col db 0 ; se declaran filas y columnas inicialisadas con 0


fil db 0
datasg ends
codesg segment ; se define un el codigo de segmento donde se programan la
intrucciones
assume cs:codesg,ds:datasg,ss:stacksg ;especifica el
segmento de registro

main proc far ;el procedimiento principal


push ds ;empila temporalmente el contenido de
segmento de datos
mov ax, datasg

mov ds, ax

limpiar_pantalla: ;estas son equitetas son las que identificas algunas


instrucciones
mov ax, 0600h
mov bh, 07h
mov bh,71h

movcx,0000h
mov dx,184Fh
int 10h

11
Manual de Lenguaje Ensamblador 2011

mov cx, 226 ;cx es utilizado como contador es las veces que
realizara el ciclo

mov ah,' '

ciclo:

mov ah, 02 ;coloca el cursor


mov dh, fil ; fil comienza con la posicion 0 igual que col ya
que son la fila y columna

mov dl, col ;conforme el ciclo aunmenta tambien la posicion de fil


y col

mov bh, 0
int 10h

inc fil ;incrementa fil (la fila)


cmp fil, 20 ;realiza una comparacion del valor que se encuentra en
fil si este es 20
jne mostrar ;si lo anterior no es igual salta a la etiqueta
mostrarsi es igual continua la

mov fil, 0 ;esta instruccion


add col, 2 ;suma add= suma es decir suma 2 a col (la columna)
mostrar:

mov ah,0eh
int 10h
inc al ;incrementa para el siguiente carcater "al" ya que hay
se encuentra guardado
loop ciclo
cursor:

mov ah, 02

mov dh, 22
mov dl, 0
mov bh, 0

12
Manual de Lenguaje Ensamblador 2011
int 10h
fin:

mov ax, 4ch ;esta funcion siempre se coloca al final ya que es


la

int 21h ;termina con toda la ejecucion del programa


main endp
codesg ends
end main
end

SUMA
SUMA.ASM

****** CÓDIGO DE INICIO **********************************

ideal

dosseg

model small

stack 256

****** VARIABLES DEL PROGRAMA ****************************

dataseg

codsal db 0

dato1 dw ?

dato2 dw ?

resul dw ?

****** CÓDIGO DEL PROGRAMA *******************************

codeseg

inicio:

mov ax, @data ; Inicializa el

13
Manual de Lenguaje Ensamblador 2011
mov ds, ax ; segmento de datos

mov ax, [dato1] ; resul = dato1 + dato2

add ax, [dato2]

mov [resul], ax

salir:

mov ah, 04Ch

mov al, [codsal]

int 21h

****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

RESTA
RESTA.ASM

****** CÓDIGO DE INICIO **********************************

ideal

dosseg

model small

stack 256

****** VARIABLES DEL PROGRAMA ****************************

dataseg

codsal db 0

dato1 dw ?

dato2 dw ?

resul dw ?

****** CÓDIGO DEL PROGRAMA *******************************

codeseg

14
Manual de Lenguaje Ensamblador 2011
inicio:

mov ax, @data ; Inicializa el

mov ds, ax ; segmento de datos

mov ax, [dato1] ; resul = dato1 - dato2

sub ax, [dato2]

mov [resul], ax

salir:

mov ah, 04Ch

mov al, [codsal]

int 21h

****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

MULTIPLICACION
MULTI.ASM

****** CÓDIGO DE INICIO **********************************

ideal

dosseg

model small

stack 256

****** VARIABLES DEL PROGRAMA ****************************

dataseg

codsal db 0

dato1 db ?

dato2 db ?

resul dw ?

15
Manual de Lenguaje Ensamblador 2011
****** CÓDIGO DEL PROGRAMA *******************************

codeseg

inicio:

mov ax, @data ; Inicializa el

mov ds, ax ; segmento de datos

mov al, [dato1] ; resul = dato1 * dato2

mul [dato2]

mov [resul], ax

salir:

mov ah, 04Ch

mov al, [codsal]

int 21h

****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

DIVISION
DIVI.ASM

****** CÓDIGO DE INICIO **********************************

ideal

dosseg

model small

stack 256

****** VARIABLES DEL PROGRAMA ****************************

dataseg

codsal db 0

dato1 db ?

16
Manual de Lenguaje Ensamblador 2011
dato2 db ?

resul dw ?

****** CÓDIGO DEL PROGRAMA *******************************

codeseg

inicio:

mov ax, @data ; Inicializa el

mov ds, ax ; segmento de datos

mov al, [dato1] ; resul = dato1 / dato2

mul [dato2]

mov [resul], ax

salir:

mov ah, 04Ch

mov al, [codsal]

int 21h

****** CÓDIGO DE TERMINACIÓN *****************************

end inicio

BIBLIOGRAFIA
 Internet
 Let's Build a Compiler. Tutorial de Jack W. Crenshaw sobre cómo hacer un compilador
 Java a tope: Traductores y Compiladores con Lex/Yacc, JFlex/Cup y JavaCC. Libro básico
sobre compiladores
 Compiladores: Principios, Técnicas y Herramientas. Libro completo sobre compiladores
 Procesamiento léxico, sintáctico, gestión T.S., declaraciones y ejecutables. Herramienta
interactiva para el estudio de los procesadores de lenguajes.

17
Manual de Lenguaje Ensamblador 2011

18

You might also like