You are on page 1of 59

MICROPROCESADORES Y

CONTROL DE PERIFRICOS
ENSAMBLADORES

Prof. Juan lvarez


LENGUAJE ENSAMBLADOR
Ensambladores
Directivas del lenguaje ensamblador
Creacin y depuracin de programa
Ejemplos bsicos
Formatos de memoria
Interrupciones DOS
LENGUAJE DE MQUINA
El lenguaje de mquina es el lenguaje con el
que trabaja la computadora. Este lenguaje
binario posee reglas de composicin de
instrucciones y los programas con este
lenguaje son reconocidos por el
microprocesador.
El lenguaje de mquina no puede ser
ejecutado por otro microprocesador de
arquitectura distinta o que no sea
compatible.
LENGUAJE DE MQUINA
El lenguaje de mquina es sin embargo un
lenguaje difcil de manejar por el
programador, se presta para cometer
errores en la escritura de instrucciones y en
el clculo de direcciones.
Existe sin embargo una correspondencia uno
a uno entre las instrucciones del lenguaje de
mquina y las del lenguaje ensamblador.
ENSAMBLADORES
El ensamblador es un programa que permite
escribir programas en lenguaje ensamblador
y agrega un conjunto de pseudo-operaciones
(directivas) que sirven para definir datos y
rutinas que facilitan la tarea de programar.
Los ensambladores convierten las rutinas
escritas en lenguaje ensamblador en lenguaje
de mquina para formar el cdigo objeto y
cambian toda referencia simblica (etiquetas)
por las direcciones o datos correspondientes.
ENSAMBLADORES
Los ensambladores permiten al programador
utilizar el lenguaje ensamblador para
escribir los programas.
Para crear el programa ejecutable a partir del
cdigo objeto, se requiere llamar a otros
programas y servicios del sistema operativo
y agregar rutinas de run-time. Este proceso
se conoce como link.
Eventualmente se puede utilizar el Debugger
para ejecutar paso a paso el programa
ejecutable.
ENSAMBLADORES
Existen 2 ensambladores muy usados:
Macro Assembler de Microsoft (MASM).
Turbo Assembler de Borland (TASM).
La diferencia entre los ensambladores radica
en la forma de generar el cdigo y en las
directivas con que cuenta, pero en general
las diferencias son mnimas.
DIRECTIVAS DEL ENSAMBLADOR
Las directivas del lenguaje ensamblador
indican la forma en se va a procesar un
programa. Algunas directivas generan y
almacenan informacin en memoria.
Por ejemplo: la directiva DB (definir byte)
almacena bytes de datos en memoria; la
directiva BYTE PTR (puntero de byte)
indica ms bien el tamao de los datos a los
que un apuntador o registro ndice hace
referencia.
DIRECTIVAS DEL ENSAMBLADOR
El ensamblador acepta por omisin las
instrucciones del 8086, a menos que un
programa est precedido de la directiva .386
.386P por algn otro modificador de
seleccin del microprocesador.
Una lista de algunas directivas bsicas se dan
en la siguiente tabla.
DIRECTIVAS
.MODEL Selecciona el modelo de programacin

.STARTUP Indica el inicio del programa cuando se


utilizan modelos de programa
.EXIT Regresa al DOS

ASSUME Informa al ensamblador del nombre de cada


segmento para definir segmento completo
OFFSET Especifica una direccin de desplazamiento

PROC Inicia un procedimiento


DIRECTIVAS
SEGMENT Inicia un segmento

STACK Inicio del segmento de pila

BYTE Indica tamao de Byte; al igual que BYTE


PTR
DB Define un dato de 8 bits

DW Define un dato de 16 bits

DD Define un dato de 32 bits


DIRECTIVAS
DQ Define un dato de 64 bits

DT Define un dato de 10 Bytes (80 bits)

DUP Genera duplicados

DWORD Indica tamao de palabra doble; al igual que


DWORD PTR
EQU Relaciona datos con etiqueta

NEAR Define un puntero cercano


DIRECTIVAS
FAR Define un puntero lejano

ORG Establece el inicio dentro de un segmento

MACRO Seala el inicio de una secuencia de macros

PTR Designa un puntero

STRUC Define el inicio de una estructura de datos

WORD Indica el tamao de palabra; as como


WORD PTR
DIRECTIVAS
END Finaliza un archivo de programa

ENDM Finaliza una secuencia de macros

ENDP Finaliza un procedimiento

ENDS Finaliza un segmento o estructura de datos

.386 Reconoce las instrucciones del 386

.386P Reconoce las instrucciones del 386 en el modo


protegido
DIRECTIVAS

.586 Reconoce las instrucciones del Pentium

.586P Reconoce las instrucciones del Pentium en el


modo protegido
EL USO DEL TASM
El Turbo Assembler de Borland (TASM) tiene
varias versiones. En su versin ms simple
debe considerar los siguientes archivos:
C:>\Tasm\
Tasm.exe
Tlink.exe
Tambin se pueden agregar los archivos
Td.exe y rtm.exe para depuracin.
EL USO DEL TASM
Para escribir un programa se puede usar el
editor del DOS:
C: > \TAsm\edit
Escribir el programa y guardar como
<nombre>.asm dentro de \TAsm\
Tambin se puede utilizar el notepad2.
Para obtener el archivo objeto:
C:>\TAsm\Tasm <nombre>
se crea el archivo <nombre>.obj
EL USO DEL TASM
Para obtener el archivo ejecutable:
C:>\TAsm\Tlink <nombre>
se crea el archivo <nombre>.exe
Se puede utilizar el depurador (Debug) del
sistema operativo para revisar los
programas ejecutables en lenguaje de
mquina o para ejecutarlos paso a paso.
Tambin es posible revisar el contenido del
segmento de datos y del segmento de pila.
A continuacin, algunos programas bsicos:
EJEMPLO 01
.model small
.stack 100h
.code
main proc
mov dl, A
mov ah,2
int 21h
mov ah,4Ch
int 21h
main endp
end main
EJEMPLO 01
En este programa contiene varias directivas
pertenecientes al TASM adems de las
instrucciones que permite el lenguaje
ensamblador del procesador.
El programa empieza con la directiva .model
small que significa que se va a utilizar para
este programa un espacio de memoria del
tipo small de acuerdo al formato de
memoria.
FORMATOS DE MEMORIA
MODELO CODIGOS DATOS PILA
Tiny (diminuto) 64KB
Small (pequeo) 64KB 64KB
Medium (mediano) 1MB 64KB

Compact 64KB 1MB


(compacto)
Large (grande) 1MB 1MB
Huge (enorme) 1MB 64KB 64KB
EJEMPLO 01
Al elegir model small se le indica al sistema que se
va a separar un espacio de memoria de 64KB para
el segmento de cdigos y de 64KB para los datos y
la pila.
El modelo tiny se utiliza para los programas del
tipo *.com, en tanto que los otros modelos se usan
para los programas exe.
EJEMPLO 01
Luego viene la directiva .stack 100h, que inicia la
pila y separa dentro del espacio reservado para
datos 256 bytes.
La directiva .code permite iniciar el segmento de
cdigos, dentro del cual se pueden escribir varias
rutinas.
En este programa no figuran datos y por tanto no se
inicia el segmento de datos.
El programa termina con end y se agrega el
nombre del procedimiento con el que empieza el
programa.
EJEMPLO 01
El programa en s aparece entre las
expresiones main proc y main endp.
Cualquier rutina debe tener un nombre, en
este caso main.
La rutina pudo haberse llamado con otro
nombre, por ejemplo pancho.
Entonces la rutina empieza despus de la
frmula pancho proc y termina con
pancho endp.
EJEMPLO 01
Las tres primeras instrucciones de la rutina
imprimen en la pantalla la letra A. Para
ello se utiliza int 21h que es una
interrupcin del DOS. Esta interrupcin
acta siempre con el contenido del registro
AH. Cuando AH=2, entonces significa que
el contenido del registro DL ser enviado al
monitor. Por esta razn se carga
previamente DL con el cdigo ASCII de la
letra A.
EJEMPLO 01
En el Tasm, el cdigo ASCII de un caracter
puede referirse escribiendo el caracter entre
comillas.
Las dos ltimas instrucciones sirven para
terminar el programa principal y devolver
el control al sistema operativo.
Ms adelante se da una tabla con algunas
interrupciones INT 21h.
EJEMPLO 01
Al compilar el programa recordando la
secuencia:
C:>\TAsm\ Tasm ejem01
C:>\TAsm\ Tlink ejem01
Se puede ejecutar directo ejem01.exe;
pero tambin se puede ejecutar paso a paso
con el debug:
C:>\TAsm\ debug ejem01.exe
EJEMPLO 01
C:\Tasm>debug ejem01.exe
-u
15D4:0000 B241 MOV DL,41
15D4:0002 B409 MOV AH,09
15D4:0004 CD21 INT 21
15D4:0006 B44C MOV AH,4C
15D4:0008 CD21 INT 21
15D4:000A FFFF ??? DI
EJEMPLO 01
Obsrvese que el programa est constituido
por las cinco primera lneas a partir de
CS:0000, las dems lneas tienen
informacin de la memoria que no va a ser
ejecutada.
Tambin se puede visualizar el segmento de
datos y el segmento de pila, los registros y
las banderas. Se puede ejecutar paso a paso.
Estas son las facilidades del Debug.
EJEMPLO 01
Ntese que, (al apelar al comando u del
debug), se observa que en las cinco lneas
del programa hay una columna para las
direcciones, otra columna para el lenguaje
de mquina y otra para el listado en
lenguaje ensamblador.
Igualmente se ve que en la primera
instruccin ya no aparece A sino el
correspondiente cdigo ASCII de A;
tambin que no figuran las sufijos h que
indicas cantidad hexadecimal.
EJEMPLO 02
; Este programa mov ah,9
visualiza en el monitor lea dx,mensaje
una cadena de caracteres int 21h
mov ah,4Ch
.model small int 21h
.stack 100h main endp
.code .data
main proc mensaje db Hola
mov ax,@data camaron con
mov ds,ax cola',0dh,0ah,$
end main
EJEMPLO 02
Este programa tiene una estructura parecida
al del ejemplo anterior, sin embargo se
introduce esta vez el segmento de datos con
una informacin:
mensaje db Hola camaron con
cola,0Dh,0Ah,$
Se trata de una cadena de datos del tamao
de 1byte cada uno. El nombre de la cadena
es mensaje y debe terminar con el cdigo
ASCII de $.
EJEMPLO 02
Esta cadena est formada por un conjunto
de cdigos ASCII, cada uno ocupa una
posicin de memoria en el segmento de
datos. El byte 0Dh indica retornar al inicio
de lnea y el byte 0Ah, saltar a la siguiente
lnea.
Int 21h con AH = 9 hace que la cadena de
caracteres se visualice en la pantalla.
EJEMPLO 02
Las dos primeras instrucciones hacen que la
posicin de memoria, donde ha sido ubicado
el segmento de datos por el sistema
operativo, se cargue en el registro DS.
La expresin @data es utilizada para
adquirir este dato, que inicialmente el
programador no lo conoce. No existe una
instruccin para cargar de modo inmediato
el dato en DS.
EJEMPLO 02
La instruccin lea dx,mensaje permite cargar
en DX la posicin de memoria donde
empieza la cadena mensaje.
El segmento de datos pudo haberse escrito
despus del segmento de pila y antes del
segmento de cdigos.
EJEMPLO 03
.model small
.stack 100h
.code
main proc
mov cx,26
mov dl,'A'
L1: mov ah,2
int 21h
inc dl
loop L1
mov ah,4Ch
int 21h
main endp
End main
EJEMPLO 03
El programa del ejemplo 03 imprime en la
pantalla 28 caracteres ASCII empezando
por el cdigo de A. Este programa incluye
dos instrucciones nuevas.
La instruccin INC reg, incrementa el
contenido del registro en una unidad.
La instruccin Loop direcc., ejecuta un
bucle un nmero de veces igual al contenido
de CX desde la posicin direcc.
EJEMPLO 03
As L1: es una etiqueta que reemplaza la
posicin de memoria de la instruccin
escrita en esa lnea en el segmento de
cdigos.
En este caso el bucle se ejecutar 28 veces
antes de terminar con el programa. En cada
vez el contenido de DL se incrementar en 1
para obtener el siguiente cdigo ASCII a
imprimir.
EJEMPLO 04
.model small L2: push ax
.stack 100h mov ah,2
.code int 21h
main proc pop ax
mov al,7Ah loop L1
mov cx,8 mov ah,4Ch
L1: shl al,1 int 21h
mov dl,'0' main endp
jnc L2 End main
mov dl,'1'
EJEMPLO 04
Este programa imprime en el monitor el
contenido del registro AL en binario. El
nmero 7Ah = 01111010 aparecer en la
pantalla. En este programa aparecen dos
nuevas instrucciones.
La instruccin SHL AL,1 desplaza todos sus
bits una posicin hacia la derecha, el bit que
sale se carga en el Carry y el espacio vaco
se llena con un 0.
EJEMPLO 04
La instruccin jnc L2 es un salto
condicional dentro del segmento de cdigos.
Si Carry = 0, entonces el programa contina
en la direccin L2; si Carry = 1, el
programa contina con la instruccin que
sigue sin efectuar ningn salto.
EJEMPLO 04
La idea de las instrucciones
mov dl,'0'
jnc L2
mov dl,1
L2: ---
es cargar en DL el cdigo ASCII de 0 de
1 dependiendo de si Carry = 0 si Carry =
1.
INTERRUPCIONES
Los recursos del sistema se utilizan a travs de
un conjunto de rutinas que realizan una
serie de funciones. Existen dos tipos de
rutinas:
BIOS (Basic Input Output System): son
rutinas bsicas de entrada o salida como
leer una tecla, escribir un carcter por
pantalla, acceder a un sector de disco.
INTERRUPCIONES
DOS (Disk Operating System): son las
rutinas del sistema operativo que facilitan el
desarrollo de aplicaciones.
Una de las rutinas ms frecuentes del DOS se
conoce como la INT 21h, cuya accin
recurre a transferir datos por un dispositivo
de Entrada/Salida. El tipo de accin
depende del valor que tome el registro AH y
de algunos otros valores que tomen otros
registros, por ejemplo el registro DX o DL.
INTERRUPCIONES
Algunas otras rutinas del BIOS son tiles
para controlar el ambiente E/S. Estas
rutinas estn almacenadas en la ROM del
sistema y de video.
La INT 10h se conoce como interrupcin de
servicios de video porque controla
directamente la visualizacin de la pantalla
INTERRUPCIONES
La INT 13h controla las unidades de disco
flexible y las unidades de disco duro
conectados al sistema.
La INT 14h controla los puertos COM
seriales que sirven para comunicaciones.
INTERRUPCIONES
La INT 15h controla a varios dispositivos de
entrada/ salida y permite el acceso a la
operacin en modo protegido y al sistema de
memoria extendido.
La INT 16h se utiliza como una interrupcin
de teclado.
La INT 17h accede al puerto paralelo de la
impresora.
La INT 33h controla el uso del ratn.
INT 21h (tabla resumida)

AH OPERACIN Detalle
01 Lee el teclado AL = carcter ASCII; lo
escrito en el teclado hace eco
en el monitor
02 Escribe en el monitor DL = carcter ASCII a
(pantalla) visualisar

03 Lee carcter del AL = carcter ASCII ledo


COM1
04 Escribe en COM1 DL = carcter a enviar

05 Imprime en LPT1 DL = carcter ASCII a


(impresora) imprimir
INT 21h (tabla resumida)
AH OPERACIN Detalle
08 Lee entrada de Lee carcter de teclado en AL
dispositivo sin eco sin eco
09 Visualiza una cadena DS: DX = direccin de
de caracteres en el cadena; la cadena se termina
monitor con 24h; 0Dh para retorno al
inicio de lnea; 0Ah para
saltar a la siguiente lnea
0A Ingreso de cadena de DS:DX = direccin del buffer,
caracteres por el segundo byte del buffer
teclado a un buffer contiene el nmero de
caracteres pulsados, en el
tercer byte empieza la cadena
hasta terminar con 0Dh
INT 21h (tabla resumida)

AH OPERACIN Detalle
0E Selecciona unidad de DL = nmero de unidad de
disco por omisin disco; AL = nmero total de
unidades de discos presentes.
Unidad de disco A = 00h, B =
01h, C = 02h, etc
2A Lee fecha del sistema AL = da de la semana; CX =
ao; DH = mes; DL = da del
mes (domingo = 00; sbado =
06)
2B Establece fecha del CX = ao; DH = mes; DL =
sistema da del mes
INT 21h (tabla resumida)

AH OPERACIN Detalle
2C Lee hora del sistema CH = hora (0 a 23); CL =
minutos; DH = segundos; DL
= seg/10
2D Establece hora del CH = hora; CL = minutos;
sistema DH = segundos; DL = seg/10

36 Determina espacio DL = nmero de unidad; (ver


libre en disco detalles en manual)
39 Crear subdirectorio DX = direccin de subdirecto-
rio de cadena.
INT 21h (tabla resumida)
AH OPERACIN Detalle
3A Borra subdirectorio DS: DX = direccin de cadena
ASCII del nombre del
directorio
3B Cambiar DX = direccin de
subdirectorio subdirectorio

3C Crear nuevo archivo CX = palabra de atributo: 01h


acceso de slo lectura, 02h archivo o
directorio oculto, 04h archivo del
sistema , 08h etiqueta volumen, 10h
subdirectorio, 20h bit de archivo.
DX = direccin de nombre de
archivo.
INT 21h (tabla resumida)
AH OPERACIN Detalle
3D Abrir un archivo DX = direccin de archivo. En
AL el cdigo de acceso: 00h
slo lectura, 01h slo
escritura, 02h lectura o
escritura.
3E Cerrar un archivo BX = manejar archivo

3F Leer un archivo BX = manejar archivo, CX =


nmero de bytes a leer, DX =
direccin de buffer de archivo
INT 21h (tabla resumida)

AH OPERACIN Detalle
40 Escribe un archivo CX = nmero de bytes a
escribir; BX = asa del
archivo; DS: DX = direccin
del buffer de archivo que
contiene lo datos a escribir
41 Borra archivo DS: DX = direccin de cadena
ASCII del nombre del archivo

4C Devuelve el control al Si hay error este se guarda en


DOS AL
PROBLEMAS PROPUESTOS
1. Se tiene la siguiente fraccin de programa en lenguaje
ensamblador:
XOR AX, AX
MOV SI, 0000H
SUB AX, [SI]
ADC AX, [SI + 2]
XCHG AX, [SI + 4]
MOV BX, [0012H]
AND [BX], AX
CMP DX, CX
a) Dar el modo de direccionamiento de cada instruccin
b) Escribir el lenguaje de mquina de este programa.
PROBLEMAS PROPUESTOS
2. Indicar el modo de direccionamiento de las siguientes
instrucciones:
MOV BX, [BX + 0050H]
ADD [1000H], BP
SUB CX, 1020H
MOV [EBX + 8*EAX], EDX
PROBLEMAS PROPUESTOS
3. Dar el lenguaje de mquina de las siguientes instrucciones:
a)CMP DX, [BX + 200H]
b) ADD [SI], AH
c) MOV [1234H], CX
d) MOV DH, BH
Nota sobre los cdigos de operacin: CMP: 001110; ADD:
000000; MOV: 100010.
PROBLEMAS PROPUESTOS
4. Considerar el siguiente programa en lenguaje
ensamblador.
PUSH DS
PUSHA
SUB AX, AX
MOV AX, CS
MOV DS, AX
MOV BX, 0100H
MOV AX, [BX]
ADD AX, [BX + 2]
ADC AX, [BX + 4]
MOV [BX + 6], AX
PROBLEMAS PROPUESTOS
POPA
HLT

Se pide:
a) Deducir el modo de direccionamiento de cada instruccin
b) Traducir a lenguaje de mquina este programa con la
informacin que se adjunta.

You might also like