1. 12/02/2014
1
IMPORTANCIA DE LA PROGRAMACION EN
LENGUAJE ENSAMBLADOR
• Un programa escrito en lenguaje ensamblador requiere considerablemente
menos memoria y se ejecuta más rápidamente que un programa escrito en un
lenguaje de alto nivel como Pascal.
• El lenguaje ensamblador ofrece al programador la posibilidad de realizar
tareas muy específicas que sería muy difícil llevar a cabo en un lenguaje de
alto nivel.
• El conocimiento del lenguaje ensamblador permite una comprensión de la
arquitectura de la máquina que ningún lenguaje de alto nivel puede ofrecer.
2. 12/02/2014
2
• Desarrollar aplicaciones en lenguajes de alto nivel resulta mucho más
productivo que hacerlo en ensamblador, pero este último resulta
especialmente atractivo cuando hay que optimizar determinadas rutinas que
suponen un cuello de botella para el rendimiento del sistema.
• Los programas residentes y las rutinas de servicio de interrupción casi
siempre se escriben en ensamblador.
• La carga inicial de un S.O. debe realizarse en ensamblador, pues hacerlo con
un lenguaje de alto nivel supondría usar instrucciones que en ese momento
no pueden ser ejecutadas por la máquina.
3. 12/02/2014
3
Ventajas del lenguaje ensamblador:
• Velocidad de ejecución de los programas
• Mayor control sobre el hardware de la computadora
Desventajas del lenguaje ensamblador:
• Repetición constante de grupos de instrucciones
• No existe una sintaxis estandarizada
• Dificultad para encontrar errores en los programas.
¿QUÉ SON LOS REGISTROS?
UN REGISTRO ES UNA MEMORIA DE ALTA VELOCIDAD
Y POCA CAPACIDAD, INTEGRADA EN EL
MICROPROCESADOR, QUE PERMITE GUARDAR
TRANSITORIAMENTE DATOS.
4. 12/02/2014
4
EL PROCESADOR
EL PROCESADOR SOLO ENTIENDE UN
LENGUAJE QUE SE CONOCE COMO:
LENGUAJE ENSAMBLADOR
O
LENGUAJE MAQUINA
REGISTROS
UNO DE LOS MÓDULOS PRINCIPALES QUE
UTILIZA EL LENGUAJE ENSAMBLADOR PARA
MANEJAR EL PROCESADOR SON LOS REGISTROS.
LOS REGISTROS SE EMPLEAN PARA CONTROLAR
INSTRUCCIONES EN EJECUCIÓN, MANEJAR
DIRECCIONAMIENTO DE MEMORIA Y
PROPORCIONAR CAPACIDAD ARITMÉTICA.
5. 12/02/2014
5
LOS REGISTROS INTERNOS DEL PROCESADOR SE
PUEDE CLASIFICAR EN 6 TIPOS DIFERENTES:
• Registros de segmento
• Registros de propósito general
• Registro de apuntadores
• Registro de banderas
• Registros de Puntero de instrucción
• Registros de pila
MEMORIA
PRINCIPAL(RAM)
6. 12/02/2014
6
MEMORIA:
• Es el espacio que necesita la CPU para poder guardar los
programas y los datos que se manipulan mientras están en
uso. Desde el punto de vista físico, la memoria consiste en
chips, ya sea en la tarjeta madre o en un pequeño tablero de
circuitos conectados a ésta.
LA MEMORIA PRINCIPAL O RAM (MEMORIA DE ACCESO
ALEATORIO)
• Es donde el ordenador guarda los datos que está utilizando
en el momento presente; son los "megas" famosos en
número de 32, 64 ó 128.
• Por su función, es una amiga inseparable del
microprocesador, con el cual se comunica a través de los
buses de datos.
7. 12/02/2014
7
• Por ejemplo, cuando la CPU tiene que
ejecutar un programa, primero lo coloca
en la memoria y después lo empieza a
ejecutar.
• Esta clase de memoria es volátil, es decir
que, cuando se corta la energía eléctrica,
se borra toda la información que estuviera
almacenada en ella.
ROM O MEMORIA DE SOLO LECTURA
• contiene un conjunto de instrucciones de inicio que aseguran que
el resto de la memoria esté funcionando de manera apropiada;
verifica los dispositivos de hardware y busca un sistema operativo
en las unidades de disco de la computadora
8. 12/02/2014
8
INTERRUPCIONES
¿QUE ES UNA INTERRUPCIÓN?
• Una interrupción es el rompimiento en la secuencia de un programa para para ejecutar un programa
especial.
9. 12/02/2014
9
CLASES
• Interrupciones por software
• Son aquellas programadas por el usuario, es decir, el usuario decide cuando y donde ejecutarlas, generalmente
son usadas para realizar entrada y salida.
• Interrupciones por hardware
• Son aquellas que son provocadas por dispositivos
• externos al procesador
INTERRUPCIONES POR HARDWARE
EXISTEN 2 TIPOS
• Interrupciones por hardware enmascarables:
• Aquellas en las que el usuario decide si quiere o no ser interrumpido.
• Interrupciones por hardware no enmascarables (NMI):
• Aquellas que siempre interrumpen al programa.
10. 12/02/2014
10
1.5 LLAMADAS AL SISTEMA
(SYSTEM CALL)
ES UN MÉTODO O FUNCIÓN QUE PUEDE INVOCAR UN PROCESO PARA
SOLICITAR CIERTO SERVICIO AL SISTEMA OPERATIVO .
LAS LLAMADAS SON PETICIONES A EJECUCIÓN DE RUTINAS,
PROPORCIONAN LA INTERFAZ ENTRE EL SISTEMA OPERATIVO Y UN
PROGRAMA EN EJECUCIÓN.
• SON INSTRUCCIONES DE LENGUAJE ENSAMBLADOR
• SE PRESENTAN EN LOS MANUALES QUE EMPLEAN LOS
PROGRAMADORES DE ESTE LENGUAJE.
Llamadas al sistema:
• TIME: Permite obtener la fecha y hora del sistema
• WRITE: Se emplea para escribir un dato en un cierto dispositivo de salida, tales
como una pantalla o un disco magnético
• READ: Es usada para leer de un dispositivo de entrada, tales como un teclado o un
disco magnético
• OPEN: Es usada para obtener un descriptor de un fiche del sistema, ese fichero
suele pasarse a write
11. 12/02/2014
11
Algunos sistemas permiten efectuar llamadas al
sistema directamente desde un programa realizado en
el lenguaje a mayor nivel se asemejan a una función o
sub-rutinas que generan una llamada a una ruta en
especial de tiempo de ejecución.
Ejemplo: En el procesador INTEL es INT y en
UNIX son rutinas
El siguiente diagrama ilustra la relación entre la Shell y el
Kernel.
• El Shell es lo que el sistema operativo nos muestra, la
portada, el intérprete de comandos, etc.
• El Kernel es el núcleo del sistema operativo.
12. 12/02/2014
12
INTRODUCCIÓN:
Modo de direccionamiento: mecanismo que permite conocer la ubicación de un dato o instrucción, una
computadora dispone de varios modos de direccionamiento.
Objeto: dato o instrucción que se desea direccionar.
Objetivos de los modos de direccionamiento:
• Reducir el espacio ocupado en memoria por las instrucciones.
• Permitir la reubicación del código.
• Facilitar el manejo de las estructuras de datos.
• Implícito: Llamado también inherente, el operando se especifica en la misma
definición de la instrucción.
• Inmediato: El operando es el que figura en la instrucción, no su dirección.
Este modo es útil para inicializar registros o palabras de memoria con un valor
constante.
• Directo: El campo de operando en la instrucción contiene la direccion en
memoria donde se encuentra el operando
• Indirecto: Aquí, el campo de operando de la instrucción indica la localización
de la dirección efectiva del operando.
13. 12/02/2014
13
• EJECUCION
Para la ejecución del programa simplemente basta teclear su nombre en el
prompt de MS-DOS y teclear ENTER. Con esto el programa será cargado en
memoria y el sistema procederá a ejecutarlo. El proceso completo para poder
crear un programa ejecutable con el Microsoft Macro Assembler se muestra
abajo.
ESTRUCTURA GENERAL DE UN PROGRAMA EN LENGUAJE ENSAMBLADOR.
• Lenguaje ensamblador que usa servicios o funciones de MS-DOS (system calls) para imprimir el mensaje Hola
mundo!! en pantalla.
• ; HOLA.ASM
• ; Programa clasico de ejemplo. Despliega una leyenda en pantalla.
• STACK SEGMENT STACK ; Segmento de pila
• DW 64 DUP (?) ; Define espacio en la pila
• STACK ENDS
• DATA SEGMENT ; Segmento de datos
• SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
• DATA ENDS
• CODE SEGMENT ; Segmento de Codigo
• ASSUME CS:CODE, DS:DATA, SS:STACK
• INICIO: ; Punto de entrada al programa
• MOV AX,DATA ; Pone direccion en AX
• MOV DS,AX ; Pone la direccion en los registros
• MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje
• MOV AH,09H ; Funcion: Visualizar cadena
• INT 21H ; Servicio: Funciones alto nivel DOS
• MOV AH,4CH ; Funcion: Terminar
• INT 21H
• CODE ENDS
• END INICIO ; Marca fin y define INICIO
14. 12/02/2014
14
• Estructura de una línea:
• INSTRUCCIÓN EN ENSAMBLADOR
• INSTRUCCIÓN EN LENGUAJE MÁQUINA
SINTAXIS DE UN LENGUAJE ENSAMBLADOR
DIRECCIÓN CÓDIGO DE OPERACIÓN DIRECCIÓN DE LOS
OPERANDOS
15. 12/02/2014
15
• 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:
• • 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 “;”.
CAMPOS DE UNA INSTRUCCIÓN EN ENSAMBLADOR
• Registros de datos
• Registros de segmento
• Registros punteros de la pila
• Registros índices
• Registro de instrucciones
• Registro de flags de estado
EL MICROPROCESADOR 8086 TIENE CATORCE
REGISTROS DE 16 BITS:
16. 12/02/2014
16
• Los registros competos ax, bx, cx, dx trabajan sobre 16
bits, mientras la parte alta (ah, bh, ch, dh) y baja (al, bl, cl,
dl) de cada registro trabaja sobre 8 bits, es esencial
conocerlo para a la hora de programar no cometer errores
en mover datos de un registro a otro.
ax (ah - al) - acumulador
bx (bh - bl) - registro base
cx (ch - cl) - registro contador
dx (dh - dl) - registro de datos
sp - registro del apuntador de pila
REGISTROS DE DATOS
• SP - Puntero de pila
• BP - Puntero base de pila
• SI - Registro índice
• DI - Registro índice
• IP - Contador de programa
REGISTROS PUNTEROS: REGISTRO DEL APUNTADOR
DE PILA
17. 12/02/2014
17
• CS - segmento de código
• DS - segmento de datos
• ES - segmento extra
• SS - segmento pila
REGISTROS DE SEGMENTO:
INSTRUCCIONES DE TRANSAFERENCIA DE DATOS
• mov: mueve o transfiere
• xchg: intercambia
• in: entrada
• out:salida
• xlat: traduce usando una tabla
• lea: carga la direccion efectiva
• lds: carga el segmento de
datos
• les: carga el segmento extra
lahf: carga los indicadores en ah
sahf: guarda ah en los
indicadores
push fuente: (sp)<- fuente
pop destino: destino <- (sp)
18. 12/02/2014
18
INSTRUCCIONES ARITMÉTICAS
add: suma
adc: suma con acarreo
aaa: ajuste ascii para la suma
daa: ajuste decimal para la suma
sub: resta
sbb: resta con acarreo negativo
aas: ajuste ascii para la resta
das: ajuste decimal para la resta
mul: multiplicacion
imul: multiplicacion entera
aam: ajuste ascii para la multiplicacion
div: division
idiv: division entera
aad: ajuste ascii para la division
cbw: pasar octeto a palabra
cwd: pasar palabra a doble palabra
neg: negacion
sti: poner a 1 el indicador de interrupcion
cli: borrar el indicador de interrupcion
into: interrupcion por capacidad excedida(desbordamiento)
iret: retorno de interrupcion
int: interrupcion
int 21: interrupcion 21, esta manda llamar al sistema operativo que ejecuta las instrucciones anteriores
int 20: interrupcion 20, esta interrupcion ejecuta lo anterior y termina el programa para que no se cicle
INTERRUPCIONES