Sie sind auf Seite 1von 55

ARQUITECTURA DEL

COMPUTADOR

ENSAMBLADORES

Profesor: Ing. Emerson Carranza Milla


Arquitectura 8086
LENGUAJE DE MÁQUINA
 El lenguaje de máquina es el lenguaje con
el que trabaja el computador.
 Es un lenguaje binario posee reglas de
composición de instrucciones y los
programas con este lenguaje son
reconocidos por el microprocesador.
 El lenguaje de máquina no puede ser
ejecutado por otro microprocesador de
arquitectura distinta o que no sea
compatible.
LENGUAJE DE MÁQUINA
 El lenguaje de máquina es difícil de
manejar por el programador, ya que se
presta para cometer errores en la escritura
de instrucciones y en el cálculo de
direcciones.
 Existe sin embargo una correspondencia
uno a uno entre las instrucciones del
lenguaje de máquina 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 máquina para formar el código objeto y
cambian toda referencia simbólica
(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 código 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 utilizados:
• Macro Assembler de Microsoft (MASM).
• Turbo Assembler de Borland (TASM).
 La diferencia entre los ensambladores
radica en la forma de generar el código y
en las directivas con que cuenta, pero en
general las diferencias son mínimas.
DIRECTIVAS DEL ENSAMBLADOR
 Las directivas del lenguaje ensamblador
indican la forma en se va a procesar un
programa.
 Algunas directivas generan y almacenan
información en memoria.
 Por ejemplo: la directiva DB (definir byte)
almacena bytes de datos en memoria; la
directiva BYTE PTR (puntero de byte)
indica más bien el tamaño de los datos a los
que un apuntador o registro índice hace
referencia.
DIRECTIVAS DEL ENSAMBLADOR
 El ensamblador acepta por omisión las
instrucciones del 8086, a menos que un
programa esté precedido de la directiva .
386 ó .386P ó por algún otro modificador
de selección del microprocesador.
 Una lista de algunas directivas básicas se
dan en la siguiente tabla.
DIRECTIVAS
.MODEL Selecciona el modelo de programación

.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 dirección de desplazamiento

PROC Inicia un procedimiento


DIRECTIVAS
SEGMENT Inicia un segmento

STACK Inicio del segmento de pila

BYTE Indica tamaño 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 tamaño 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 Señala el inicio de una secuencia de macros

PTR Designa un puntero

STRUC Define el inicio de una estructura de datos

WORD Indica el tamaño 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 versión más
simple debe considerar los siguientes
archivos:
C:>\Tasm\
Tasm.exe
Tlink.exe
 También se pueden agregar los archivos
Td.exe y rtm.exe para depuración.
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\
También 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
máquina o para ejecutarlos paso a paso.
También es posible revisar el contenido del
segmento de datos y del segmento de pila.
 A continuación, algunos programas básicos:
EJEMPLO 01
.model small // Al elegir “model small” se le indica al sistema que se va a separar un espacio de
memoria de 64KB para el segmento de códigos y de 64KB para los datos y la pila
.stack 100h // la directiva “.stack 100h”, inicia la pila y separa dentro del espacio
reservado para datos 256 bytes
.code // permite iniciar el segmento de códigos, dentro del cual se pueden escribir varias rutinas.
En este programa no figuran datos y por tanto no se inicia el segmento de datos.
ini proc // El nombre de la rutina es “ini”; el programa aparece entre “ini
proc” y “ini endp”.
mov dl, “A” // se carga previamente DL con el código ASCII de la letra A.
mov ah,2 // cuando AH=2, significa que el contenido del registro DL será enviado al monitor.
int 21h // es una interrupción del DOS, que actúa siempre con el contenido del
registro AH.
Las tres primeras instrucciones de la rutina imprimen en la pantalla la letra “A”.

mov ah,4Ch
int 21h
ini endp
end ini
Ejemplo 01

mov ah,4Ch
int 21h
ini endp
end ini
En el Tasm, el código 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.
Más adelante se da una tabla con algunas interrupciones INT 21h.
FORMATOS DE MEMORIA
MODELO CODIGOS DATOS PILA
Tiny (diminuto) 64KB
Small (pequeño) 64KB 64KB
Medium (mediano) 1MB 64KB

Compact 64KB 1MB


(compacto)
Large (grande) 1MB 1MB
Huge (enorme) 1MB 64KB 64KB
EJEMPLO 01
 Al compilar el programa recordando la
secuencia:
C:>\TAsm\ Tasm ejem01
C:>\TAsm\ Tlink ejem01
 Se puede ejecutar directo ejem01.exe;
pero también 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
 Obsérvese que el programa está constituido
por las cinco primera líneas a partir de
CS:0000, las demás líneas tienen
información de la memoria que no va a ser
ejecutada.
 También 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
 Nótese que, (al apelar al comando “u” del
debug), se observa que en las cinco líneas
del programa hay una columna para las
direcciones, otra columna para el lenguaje
de máquina y otra para el listado en
lenguaje ensamblador.
 Igualmente se ve que en la primera
instrucción ya no aparece “A” sino el
correspondiente código ASCII de “A”;
también 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 mi
mov ax,@data gente de
mov ds,ax Arquitectura',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 información:
mensaje db “Hola mi gente de
Arquitectura”,0Dh,0Ah,“$”
• Se trata de una cadena de datos del tamaño
de 1byte cada uno. El nombre de la cadena
es mensaje y debe terminar con el código
ASCII de “$”.
EJEMPLO 02
• Esta cadena está formada por un conjunto
de códigos ASCII, cada uno ocupa una
posición de memoria en el segmento de
datos. El byte 0Dh indica retornar al inicio
de línea y el byte 0Ah, saltar a la siguiente
línea.
• 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 posición de memoria, donde ha sido
ubicado el segmento de datos por el sistema
operativo, se cargue en el registro DS.
 La expresión @data es utilizada para
adquirir este dato, que inicialmente el
programador no lo conoce. No existe una
instrucción para cargar de modo inmediato
el dato en DS.
EJEMPLO 02
 La instrucción lea dx,mensaje permite
cargar en DX la posición de memoria
donde empieza la cadena mensaje.
 El segmento de datos pudo haberse escrito
después del segmento de pila y antes del
segmento de códigos.
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 código de “A”. Este programa
incluye dos instrucciones nuevas.
 La instrucción INC reg, incrementa el
contenido del registro en una unidad.
 La instrucción Loop direcc., ejecuta un
bucle un número de veces igual al
contenido de CX desde la posición direcc.
EJEMPLO 03
 Así L1: es una etiqueta que reemplaza la
posición de memoria de la instrucción
escrita en esa línea en el segmento de
códigos.
 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
código 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
número 7Ah = 01111010 aparecerá en la
pantalla. En este programa aparecen dos
nuevas instrucciones.
 La instrucción SHL AL,1 desplaza todos
sus bits una posición hacia la derecha, el bit
que sale se carga en el Carry y el espacio
vacío se llena con un “0”.
EJEMPLO 04
 La instrucción jnc L2 es un salto
condicional dentro del segmento de
códigos. Si Carry = 0, entonces el programa
continúa en la dirección L2; si Carry = 1, el
programa continúa con la instrucción que
sigue sin efectuar ningún salto.
EJEMPLO 04
 La idea de las instrucciones
mov dl,'0'
jnc L2
mov dl,‘1’
L2: ---
es cargar en DL el código ASCII de ‘0’ ó de
‘1’ dependiendo de si Carry = 0 ó si Carry
= 1.
INTERRUPCIONES
Los recursos del sistema se utilizan a través
de un conjunto de rutinas que realizan una
serie de funciones. Existen dos tipos de
rutinas:
• BIOS (Basic Input Output System): son
rutinas básicas de entrada o salida como
leer una tecla, escribir un carácter 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 más frecuentes del DOS se
conoce como la INT 21h, cuya acción
recurre a transferir datos por un dispositivo
de Entrada/Salida. El tipo de acción
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 están almacenadas en la ROM del
sistema y de video.
La INT 10h se conoce como interrupción de
servicios de video porque controla
directamente la visualización 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
operación en modo protegido y al sistema
de memoria extendido.
La INT 16h se utiliza como una interrupción
de teclado.
La INT 17h accede al puerto paralelo de la
impresora.
La INT 33h controla el uso del ratón.
INT 21h (tabla resumida)

AH OPERACIÓN Detalle
01 Lee el teclado AL = carácter ASCII; lo
escrito en el teclado hace eco
en el monitor
02 Escribe en el monitor DL = carácter ASCII a
(pantalla) visualisar

03 Lee carácter del AL = carácter ASCII leído


COM1
04 Escribe en COM1 DL = carácter a enviar

05 Imprime en LPT1 DL = carácter ASCII a


(impresora) imprimir
INT 21h (tabla resumida)
AH OPERACIÓN Detalle
08 Lee entrada de Lee carácter de teclado en AL
dispositivo sin eco sin eco

09 Visualiza una cadena DS: DX = dirección de


de caracteres en el cadena; la cadena se termina
monitor con 24h; 0Dh para retorno al
inicio de línea; 0Ah para
saltar a la siguiente línea

0A Ingreso de cadena de DS:DX = dirección del buffer,


caracteres por el segundo byte del buffer
teclado a un buffer contiene el número de
caracteres pulsados, en el
tercer byte empieza la cadena
hasta terminar con 0Dh
INT 21h (tabla resumida)

AH OPERACIÓN Detalle
0E Selecciona unidad de DL = número de unidad de
disco por omisión disco; AL = número total de
unidades de discos presentes.
Unidad de disco A = 00h, B =
01h, C = 02h, etc
2A Lee fecha del sistema AL = día de la semana; CX =
año; DH = mes; DL = día del
mes (domingo = 00; sábado =
06)
2B Establece fecha del CX = año; DH = mes; DL =
sistema día del mes
INT 21h (tabla resumida)

AH OPERACIÓN 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 = número de unidad; (ver


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

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


acceso de sólo lectura, 02h archivo o
directorio oculto, 04h archivo del
sistema , 08h etiqueta volumen, 10h
subdirectorio, 20h bit de archivo.
DX = dirección de nombre de
archivo.
INT 21h (tabla resumida)
AH OPERACIÓN Detalle
3D Abrir un archivo DX = dirección de archivo. En
AL el código de acceso: 00h
sólo lectura, 01h sólo
escritura, 02h lectura o
escritura.
3E Cerrar un archivo BX = manejar archivo

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


número de bytes a leer, DX =
dirección de buffer de archivo
INT 21h (tabla resumida)

AH OPERACIÓN Detalle
40 Escribe un archivo CX = número de bytes a
escribir; BX = asa del
archivo; DS: DX = dirección
del buffer de archivo que
contiene lo datos a escribir
41 Borra archivo DS: DX = dirección 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 fracción 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 instrucción
b) Escribir el lenguaje de máquina 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 máquina de las siguientes instrucciones:
a)CMP DX, [BX + 200H]
b) ADD [SI], AH
c) MOV [1234H], CX
d) MOV DH, BH
Nota sobre los códigos de operación: 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 instrucción
b) Traducir a lenguaje de máquina este programa con la
información que se adjunta.
Arquitectura 8086

Das könnte Ihnen auch gefallen