Está en la página 1de 37

LENGUAJE ENSAMBLADOR

Arquitectura de Computadoras

Lenguajes de Bajo Nivel


Lenguaje de Mquina
Se denomina a la serie de datos que la parte
fsica de la computadora o hardware, es capaz
de interpretar
La informacin que hace que el hardware de la
computadora realice una determinada actividad
de llama: Instruccin
Por consiguiente una instruccin es un conjunto
de unos y ceros

El conjunto de instrucciones que son


interpretadas directamente por la mquina se
denomina: Lenguaje de Mquina
Una instruccin en lenguaje de mquina puede
representarse de la siguiente forma:
011011001010010011110110
Esta secuencia es fcilmente ejecutada por la
computadora, pero es de difcil interpretacin
para el programador

Lenguaje Ensamblador
Se puede utilizar la propia mquina para la
traduccin de los programas escritos con ciertos
caracteres alfabticos comprensibles para el
programador, en una secuencia de unos y ceros
Al grupo alfabtico se le denomina mnemotcnico
La anterior instruccin se podra escribir de la
siguiente forma: TRASLADAR POS-A, POS-B
que nos resulta de ms fcil comprensin

A los programas que permiten pasar del


programa escrito de esta manera (programa
fuente, en ensamblador) al
lenguaje de
mquina,
tambin
se
les
denomina
normalmente: Programa Ensamblador
LENGUAJE ENSAMBLADOR: VENTAJAS
El Lenguaje Ensamblador es un Lenguaje de
Bajo Nivel, es decir, ligado con la estructura
interna concreta de una determinada mquina

En los lenguajes de alto nivel, como el Pascal,


C, etc., el programador no tiene porque
reconocer la estructura interna de la mquina
Trabajan
con
variables,
constantes
e
instrucciones simblicas, y es el traductor quien
las transforma en las direcciones apropiadas
Se codifican en comandos poderosos, cada
uno de los cuales pueden generar muchas
instrucciones en lenguaje de mquina

Un

programa escrito en el lenguaje


ensamblador requiere menos memoria y
tiempo de ejecucin que un programa escrito
en un lenguaje de alto nivel

El

lenguaje
ensamblador
permite
al
programador realizar tareas muy tcnicas que
seran difciles de realizar en un lenguaje de
alto nivel

El

conocimiento del lenguaje ensamblador


permite una comprensin de la arquitectura
interna de la mquina

Aunque

la mayora de los especialistas en


Software desarrolla aplicaciones en lenguajes
de alto nivel, que son ms fciles de escribir y
de dar mantenimiento, una prctica comn es
codificar en lenguaje ensamblador aquellas
rutinas que han causado cuellos de botella en
el procesamiento

Los

programas residentes y rutinas de servicio


de interrupcin casi siempre son desarrollados
en el lenguaje ensamblador

Los lenguajes de alto nivel fueron diseados


para eliminar las particularidades de un
microprocesador especifico, mientras que un
lenguaje ensamblador esta diseado para una
familia especifica de microprocesadores
Para realizar un programa en Lenguaje
Ensamblador se requiere: Sistema Operativo
MS-DOS o PC-DOS y estar familiarizados con
su uso
Programa Ensamblador. Las versiones de
Microsoft son: MASM y QuickAssembler; TASM
es de Borland y OPTASM es de System

MODOS DE DIRECCIONAMIENTO
El modo de direccionamiento indica la forma
en que el procesador calcula la direccin
donde ir a buscar el dato origen o grabar el
resultado en el operando destino
MODO IMPLICITO
En este modo se especifican los operandos en
forma implcita en la definicin de la
instruccin. Ejemplo: CLC, borrar sealizador
de arrastre

MODO INMEDIATO
En este modo se especifica el operando en la
instruccin misma. Son tiles para inicializar
registros en un valor constante:
Ejemplo: MOV AX,5
MODO DE REGISTRO
En este modo, solamente se realiza una copia
del registro fuente al registro destino, dejando
intacto el primero: Ejemplo: MOV AX, BX

MODO INDIRECTO DE REGISTROS


En este caso, el valor del operando es
sealado por una direccin de desplazamiento
almacenado en uno de los registros siguientes:
SI, DI, BX y bajo ciertas circunstancias BP. El
designador del operando fuente es reconocido
por los corchetes [ ]
Ejemplo: MOV AX, [BX]

MODO DE DIRECCIONAMIENTO DIRECTO


En este modo la direccin efectiva es igual a la
parte de direccin de la instruccin. El
operando reside en memoria y su direccin la
proporciona en forma directa el campo de
direccin de la instruccin. El operando en este
modo de direccionamiento puede ser una
etiqueta
Ejemplo: MOV AX, MISDATOS
MOV AX, [200H]

MODO DE DIRECCIONAMIENTO INDEXADO


En este modo el contenido de un registro
ndice se suma a la parte de direccin de la
instruccin para obtener la direccin efectiva
El registro ndice puede incrementarse para
facilitar el acceso a operandos consecutivos
Ejemplo: MOV DH, [SI + 0100H]

EJECUCIN DE INSTRUCCIONES
Se utilizar un programa del DOS llamado
DEBUG que me permite:
Probar y depurar programas ejecutables
Visualizar el contenido de la memoria
Ingresar programas en la memoria
Rastrear su ejecucin
El rastreo de cmo se ejecutan las instrucciones
da una idea de la operacin de una
computadora y la funcin de los registros

COMANDOS DEL DEBUG


A: ensamblar instrucciones simblicas y pasarlas
a cdigo de mquina
D: mostrar el contenido de un rea de memoria
E: introducir datos en memoria, iniciando en una
localidad especfica
G: correr el programa ejecutable que se
encuentra en memoria
N: nombrar un programa
P: ejecutar
relacionadas

un

conjunto

de

instrucciones

Q: salir de la sesin del DEBUG


R: mostrar el contenido de uno o ms registros
T: rastrear la ejecucin de una instruccin
U: desensamblar cdigo de mquina y pasarlo
a cdigo simblico
W: escribir o grabar un programa en disco
Ejemplo: D DS:200

Reglas de los comandos del DEBUG


No distingue entre letras minsculas y
maysculas
Se introduce un espacio solo donde sea
necesario separar parmetros en un comando
Se especifca segmentos y desplazamientos
con dos puntos (:)
DEBUG supone que todos los nmeros estn
en formato hexadecimal
Ejemplo: D DS:200
DDS : 200
dds : 200

El despliegue de DEBUG
Consiste de tres partes:
-Direccin del primer byte de la izquierda que se
despliega
en
forma
SEGMENTO:DESPLAZAMIENTO
La representacin
desplegada

hexadecimal

del

rea

La representacin en ASCII de los bytes que


contienen caracteres desplegables

-D DS:200
149D:0200
149D:0210
149D:0220
149D:0230
149D:0240
149D:0250
149D:0260
149D:0270

8F 17 68 00 80 6A 02 1E-68 7E 60 1E 68 71 60 6A ..h..j..h~`.hq`j
00 6A 03 1E 68 B8 BE 6A-00 6A 04 6A 00 9A 06 45 .j..h..j.j.j...E
8F 19 6A 00 6A 43 6A 00-9A 12 16 4F 17 8E 46 FA ..j.jCj....O..F.
26 C7 05 01 00 EB 41 8E-46 FA 26 C7 05 00 00 EB &.....A.F.&.....
37 C7 06 36 36 00 00 FF-76 FA 57 56 9A E8 9F DF 7..66...v.WV....
3DE9 46 FF 8B 76 0E 56-6A 08 66 FF 76 06 9A 28 =.F..v.Vj.f.v..(
0D AF 17 C6 06 FC C9 00-1E 68 35 60 1E 68 46 60 .........h5`.hF`
56 0E E8 C9 F7 83 C4 0A-B8 01 00 EB 02 33 C0 1F V............3..

Lenguaje de Mquina: Datos Inmediatos


DEBUG se utiliza tambin para ingresar
programas en memoria en LENGUAJE DE
MQUINA y rastrear su ejecucin
Ejemplo:
Instruccin
Cdigo
Explicacin
Mquina
Simblico
B82301
MOV AX, 0123
Mover 0123H a AX
052500
ADD AX, 0025
Sumar 0025H a AX
8BD8
MOV BX, AX
Mover AX a BX
03D8
ADD BX, AX
Sumar AX a BX
8BCB
MOV CX, BX
Sumar BX a CX
2BC8
SUB CX, AX
Restar AX de CX
2BC0
SUB AX, AX
Restar AX de AX
90
NOP
No operacin

Las instrucciones de mquina pueden tener 1,


2 o 3 bytes. El primer byte es la operacin real,
y los otros, si los hay son operandos
INTRODUCIR
PROGRAMA

INSTRUCCIONES

DE

Solo teclee la parte del lenguaje de mquina:


El comando E hace que debug almacene cada
par de dgitos hexadecimales en memoria:
DEBUG
-E CS: 100 B8 23 01 05 25 00
-E CS: 106 8B D8 03 D8 8B CB
-E CS: 10C 2B C8 2B C0 90

Si teclea un comando de manera incorrecta,


solo reptalo con los valores correctos
Por las diferentes versiones del DOS, el
contenido de algunos registros pueden diferir
del de otros
Para rastrear la ejecucin de cada una de las
instrucciones teclee el comando T del DEBUG
En el caso de cdigo de mquina, la
representacin ASCII de la derecha carece de
significado

INTRODUCIR
UN
ENSAMBLADOR

PROGRAMA

EN

El comando A (Assemble, Ensamblar) le dice


al DEBUG que acepte instrucciones simblicas
en ensamblador y las convierta a lenguaje de
mquina
Si se digita: A 100

(Enter)

DEBUG muestra el valor del segmento de


cdigo y el desplazamiento como XXXX:0100

Ejemplo:
Ingresando lo siguiente:
C:\debug
-A 100
Me mostrar:
XXXX:0100

Entonces se puede ingresar el programa en


instrucciones simblicas, ejemplo:
mov al, 25
mov bl, 32
add al, bl
nop

El comando U (Unassemble, Desensamblar)


me permite examinar el lenguaje de mquina
generado
Ejemplo: U 100, 106
XXXX:0100 B025 MOV AL,25
XXXX:0102 B332 MOV BL,32
XXXX:0104 00D8 ADD AL,BL
XXXX:0106 90 NOP

USO DE LA INSTRUCCIN INT


Me permite ingresar al DOS o al BIOS para enviar
informacin acerca del sistema
Para lo cual sale de su programa, ingresa a una
rutina del DOS o BIOS, realiza la funcin
solicitada y regresa a su programa
Ejemplo: Obtener el nmero de la versin del DOS
mov ah, 30h
int 21h
nop

Se usa el comando P (Proceed) de DEBUG para


ejecutar toda la rutina de interrupcin en lugar
de usar el comando T para avanzar un solo paso
En AL se mostrar el nmero principal de la
versin del DOS, como X en DOS X .Y, y en AH
el numero secundario de la versin (Y)
Al ejecutar el programa mostrar algo semejante
a:

C:\>debug
-a100
0CAA:0100 MOV AH,30
0CAA:0102 INT 21H
0CAA:0104 NOP
0CAA:0105
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0100 NV UP EI PL NZ NA PO NC
0CAA:0100 B430
MOV AH,30
-T
AX=3000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0102 NV UP EI PL NZ NA PO NC
0CAA:0102 CD21
INT 21
-P
AX=0005 BX=FF00 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0CAA ES=0CAA SS=0CAA CS=0CAA IP=0104 NV UP EI PL NZ NA PO NC
0CAA:0104 90
NOP
-

Como guardar y cargar un programa desde


el DEBUG
Para guardar:
Hallar la longitud del programa
expresarse en hexadecimal)

(debe

Crear el nombre para el programa


Poner a cero el contenido del registro BX
Poner la longitud del programa en CX
Dar la orden de escritura

Ejemplo: Ingresar el siguiente programa:


XXXX:0100
XXXX:0103
XXXX:0106
XXXX:0108
XXXX:010A

MOV AX, 4
MOV BX, 2
ADD AX, BX
INT 20

-H 10A 100
020A 000A
-N C:ejemplo1.com
-R BX
BX ????
: 0000

-RCX
CX 0000
: 000A

-W
Escribiendo 000A bytes

Para cargar un Programa:


Digitar el nombre del programa
Cargarlo mediante el comando L (Load)
Desensamblar
-N C:ejemplo1.com
-L
-U 100 L 0A

Ejemplos de programas:
Ejemplo 1:
Verificacin de fecha del ROM BIOS:
Digite: D FFFF:5 y Enter

Ejemplo 2: como obtener la fecha actual


MOV AH, 2A
INT 21
NOP

Donde:
AL: Da de la semana( 0 = domingo)
CX: Ao en hexadecimal
DH: Mes(01 a 12)
DL: Da del mes(01 al 31)

Ejemplo 3: Realizar un programa que cambie


la forma del cursor
mov ah,1
; funcin para cambiar el cursor
mov cx,7
; forma del cursor
int 10
; invoca al BIOS
int 20
; termina el programa

Ejemplo 4: Realizar un programa que lea el teclado y


escriba en pantalla el carcter digitado:
mov ah,1 ; funcin 1 (lee el teclado)
Int 21
; invoca al DOS
cmp al, 0d ; compara si lo ledo es un retorno de carro
jne 100 ; si no lo es, lee otro caracter
mov ah,2 ; funcin 2 (escribe en pantalla)
mov dl,al ; carcter a escribir en al a dl
int 21
; invoca al DOS
int 20
; regresa el control al DEBUG

Ejemplo 5: Realizar un programa que lea me


permita exhibir en pantalla una cadena de caracteres
varias veces
cs:0100
Cs:0102
-e 102
-a125
cs:0125
cs:0128
cs:012b
cs:012d
cs:012f
cs:0131

jmp 125
ENTER
Este es un ejemplo usando debug 0d 0a $
mov cx,0014
mov dx,0102
mov ah,09
int 21
loop 012d
int 20

También podría gustarte