1.1 IMPORTANCIA DE LA PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR
El lenguaje ensamblador como
cualquier lenguaje de programación es un conjunto de palabras que le indican al
ordenador lo que tiene que hacer. Sin embargo la diferencia fundamental es que cada
instrucción escrita en lenguaje ensamblador tiene una correspondencia exacta
con una operación en el procesador. Por lo que son operaciones muy sencillas
tales como: “Cargar 32 en el registro BX” o “Transferir el contenido del
registro CL al CH”. Así pues, las palabras del lenguaje ensamblador son nemotécnicas
que representan el código máquina, lenguaje que entiende el procesador.
En el 8086/88 se definen los
siguientes tamaños de datos:
4 bits - nibble
8 bits - byte
16 bits - word
32 bits – dword
1.2 EL PROCESADOR Y SUS REGISTROS
La Unidad Central
de Proceso (CPU, por sus siglas en inglés)
tiene 14 registros internos cada uno de 16 bits. Los
primeros cuatro, AX, BX, CX y DX,
son de uso general y se pueden usar también como registros de 8
bits. Es decir, AX se puede dividir en AH y AL
(AH es el byte alto, high, y AL es
el byte bajo, low) Lo mismo es aplicable a los otros
tres (BX en BH y BL, CX en
CH y CL y DX en DH y DL)
Estos
son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits)
Los
registros de la CPU son conocidos por sus nombres propios, que son:
AX
(acumulador)
BX
(registro base)
CX
(registro contador)
DX
(registro de datos)
DS
(registro del segmento de datos)
ES
(registro del segmento extra)
SS
(registro del segmento de pila)
CS
(registro del segmento de código)
BP
(registro de apuntadores base)
SI
(registro índice fuente)
DI
(registro índice destino)
SP
(registro del apuntador de pila)
IP
(registro del apuntador de siguiente instrucción)
F
(registro de banderas)
El registro AX se usa para almacenar
resultados, lectura o escritura desde o hacia los puertos.
El BX sirve como apuntador base o índice.
El CX se utiliza en operaciones de
iteración, como un contador que automáticamente se incrementa o decrementa de
acuerdo con el tipo de instrucción usada.
El DX se usa como puente para el acceso de
datos.
El DS es un registro de segmento cuya
función es actuar como policía donde se encuentran los datos. Cualquier dato,
ya sea una variable inicializada o no, debe estar dentro de este segmento. La
única excepción es cuando tenemos programas del tipo *.com, ya que en éstos
sólo puede existir un segmento. El registro ES tiene el propósito general de
permitir operaciones sobre cadenas, pero también puede ser una extensión del DS
Ejemplo de código usando AX, DS y DX:
.MODEL SMALL
.STACK
.DATA
CADENA1 DB
"HOLAMUNDO"."$"
.CODE
PROGRAMA:
MOV AX,@DATA
MOV DS,
AX
MOV DX,
OFFSET CADENA1
MOV AH, 9
INT 21H
END PROGRAMA
1.3 LA MEMORIA PRINCIPAL (RAM)
Este
tipo de memoria puede ser borrada y grabada las veces que deseemos. La única
desventaja es que la información grabada en ella solo puede ser utilizada
mientras tenga energía. En cuanto se corte la alimentación, los datos que se
grabaron se borrarán instantáneamente. Se usan solo como almacenamiento
temporal.
1.4 EL CONCEPTO DE INTERRUPCIONES
Una
interrupción es una situación especial que suspende la ejecución de un programa
de modo que el sistema pueda realizar una acción para tratarla. Tal situación
se da, por ejemplo, cuando un periférico requiere la atención del procesador
para realizar una operación de E/S.
Las
interrupciones constituyen quizá el mecanismo más importante para la conexión
del microcontrolador con el mundo exterior, sincronizando la ejecución de
programas con acontecimientos externos.
Ejemplos
de interrupciones
int 01h-->un solo paso
int 02h-->Interrupción no enmascarable
int 03h--> Punto de interrupción
int 04h-->Desbordamiento
int 05h-->Impresión de pantalla
int 08h-->Cronometro
int 15h-->Servicios del sistema
int 16h-->Funciones de entrada del teclado
int 18h-->Entrada con el Basic de Rom
int 19h-->Cargador de arranque
int 20h-->Invoca al servicio de
terminación de programa del DOS
int 21h-->Invoca a todos los servicios de
llamada a función DOS
int 1Ah-->Leer y establecer la hora
int 1Bh-->Obtener el control con una
interrupción de teclado.
int 2oh-->Terminar un programa
int 33h-->Funciones del Ratón
1.5 LLAMADAS AL SERVICIO DE SISTEMAS
Una
llamada al sistema es un método o función que puede invocar un proceso para
solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos
recursos del sistema requiere la ejecución de código en modo privilegiado, el
sistema operativo ofrece un conjunto de métodos o funciones que el programa
puede emplear para acceder a dichos recursos. En otras palabras, el sistema
operativo actúa como intermediario, ofreciendo una interfaz de programación
(API) que el programa puede usar en cualquier momento para solicitar recursos
gestionados por el sistema operativo.
1.6 MODOS DE DIRECCIONAMIENTO
Los
modos de direccionamiento indican la manera de obtener los operandos y son:
Direccionamiento
de registro
Direccionamiento
inmediato
Direccionamiento
directo
Direccionamiento
indirecto mediante registro
Direccionamiento
indirecto por registro base
Direccionamiento
indexado
Direccionamiento
indexado respecto a una base
El
tipo de direccionamiento se determina en función de los operandos de la
instrucción.
La
instrucción MOV realiza
transferencia de datos desde un operando origen a un operando Su formato es el
siguiente:
MOV destino, origen
1.7 PROCESO DE ENSAMBLADO Y LIGADO
1. El programa utiliza un editor de texto para crear un
archivo de texto ASCII, conocido como archivo de código fuente.
2. El ensamblador lee el archivo de código fuete y
produce un archivo de código objeto, una traducción del programa a lenguaje
máquina. De manera opcional, produce un archivo de listado. Si ocurre un error,
el programador debe regresar al paso 1 y corregir el programa.
3. El enlazador lee el archivo de código objeto y
verifica si el programa contiene alguna llamada a los procedimientos en una
biblioteca de enlace. El enlazador copia cualquier procedimiento requerido de
la biblioteca de enlace, lo combina con el archivo de código objeto y produce
el archivo ejecutable. De manera opcional, el enlazador puede producir un
archivo de mapa.
4. La herramienta cargador (loader) del sistema operativo
lee el archivo ejecutable y lo carga en memoria, y bifurca la CPU hacia la
dirección inicial del programa, para que éste empiece a ejecutarse.
1.8 DESPLEGADO DE MENSAJES DEL MONITOR
Todos
los gráficos y el texto que se muestran en el monitor se escriben en la RAM de
visualización de video, para después enviarlos al monitor mediante el
controlador de video. El controlador de video es en sí un microprocesador de
propósito especial, que libera a la CPU principal del trabajo de controlar el
hardware de video.
INSTRUCCIONES DE TRANSFERENCIA DE DATOS
Las
instrucciones de transferencia de datos copian datos de un sitio a otro y son:
MOV, XCHG,
XLAT,
LEA, LDS, LES, LAHF, SAHF, PUSH, PUSHF, POP, POPF.
MOV
realiza la transferencia de datos del operando de origen al destino, MOV admite
todos los tipos de direccionamiento.
Ambos
operandos deben ser del mismo tamaño y no pueden estar ambos en memoria.
MOV
reg, reg ; reg es cualquier registro.
MOV
mem, reg ; mem indica una posición de memoria
MOV
reg, mem
MOV
mem, dato ; dato es una constante
MOV
reg, dato
MOV
seg-reg, mem ;seg-reg es un registro de segmento
MOV seg-reg, reg
MOV mem, seg-reg
MOV
reg, seg-reg
XCHG
realiza el intercambio entre los valores de los operandos. Puede tener operando
en registros y en memoria:
XCHG reg, mem
XCHG reg, reg
XCHG mem, reg
LEA carga en un registro especificado
la dirección efectiva especificada como en el operando origen:
LEA reg, mem
Ejemplos:
LEA AX, [BX] ; carga en AX la dirección
apuntada por BX.
LEA AX, 3[BP+SI] ; carga en AX la dirección
resultado de multiplicar por 3 la suma de los contenido de BP y SI.
Ejemplo de codigo usando LEA
CODE SEGMENT
ASSUME
CS:CODE, DS:CODE. SSCODE, ES:CODE
ORG 100h
principio:
mov ah, 0Fh
mov ah, 0
int 10h
lea dx,
mensaje_a_mostrar
mov
ah, 9h
int
21h
int
20h
mensaje_a_mostrar db "hola
mundo!!$",0
CODE ENDS
end principio
INSTRUCCIONES
DE PRUEBA, COMPARACIÓN Y SALTOS.
Este grupo es una continuación del anterior,
incluye las siguientes instrucciones:
EST verifica
CMP compara
JMP salta
JE, JZ salta si es igual a cero
JNE, JNZ salta si no igual a cero
JS salta si signo negativo
JNS salta si signo no negativo
JP, JPE salta si paridad par
JNP, JOP salta si paridad impar
JO salta si hay capacidad excedida
JNO salta si no hay capacidad excedida
JB, JNAE salta si por abajo (no encima o
igual)
JNB, JAE salta si no está por abajo (encima o
igual)
JBE, JNA salta si por abajo o igual (no
encima)
JNBE, JA salta si no por abajo o igual
(encima)
JL, JNGE salta si menor que (no mayor o
igual)
JNL, JGE salta si no menor que (mayor o
igual)
JLE, JNG salta si menor que o igual (no
mayor)
JNLE, JG salta si no menor que o igual
(mayor)
EJEMPLO
cmp al,
18
jge mayor
jmp
menor
mayor:
mov ah,
09
lea dx, msg1
int 21h
jmp fin
menor:
mov ah, 09
lea dx, msg2
int 21h
jmp fin
No hay comentarios:
Publicar un comentario