lunes, 4 de marzo de 2019

Unidad 1. Introduccion al lenguaje ensamblador


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

Unidad 3 -Unidad 4

Unidad 3 Modularizacion Programación modular Los avances en la programación de computadoras han permitido crear hermosas y grandes aplic...