Entradas

Mostrando entradas de marzo, 2020

Emulador 8086

Imagen
2.  Descripción. E l emulador 8086 fue el primer que se utilizo para impartir un curso de microprocesadores por la universidad de Don Bosco; Este emulador posee una interfaz de usuario muy amistosa que permite familiarizarse con los fundamentos de la programación en lenguaje ensamblador de forma muy intuitiva, aparte de eso brinda una serie de recursos para ejecutar y depurar los programas 3.  VENTAJAS Fácil de manipular. Interfaz amigable con el usuario. Barras de herramientas que permiten realizar programas mas fácilmente. 4.  DESVENTAJAS. no soportar algunas de las interrupciones más interesantes que posee el sistema operativo. tampoco puede acceder a los puertos físicos (reales), sino que los emula usando otros programas . 5.  Pantalla principal. Es donde se escribirán los archivos fuentes en lenguaje ensamblador, Se puede ver una barra de menú de Windows con sus opciones file, edit, etc. pero también vera unas opciones poco usuales como assembler, e...

Manipulación de la pila

Imagen
-ROT (a b c – c a b) Rota hacia atrás. -2ROT (ab cd ef – ef ab cd) Rota hacia atrás. NIP ( a b – b) Quita a de la pila. OUTK (… n — ..) Elimina el elemento n. TUCK (a b — b a b) Inserta una copia de b. 2?DUP (ab – ab ab) Duplica si ab <> 0. 2DROP (ab — ) Elimina 2 de encima. 2DUP ( ab – ab ab) Duplica los elementos. 2NIP (ab cd – cd) Elimina elementos. 2OUTK (::: n — ::) Elimina el elemento n 2OVER (ab cd – ab cd ab) Inserta una copia de ab. 2PICK (:: n — :::) Copia el elemento n encima de la pila. 2ROLL (::: n — :::) Quita el elemento n y lo deja arriba de la pila. 2ROT (ab cd ef – cd ef ab) Rota los elementos 2TUCK (ab cd – cd ab cd) Inserta una copia de cd. 2SWAP (ab cd – cd ab) Rota los elementos

Instrucciones aritméticas

ADC Adición con acarreo. Sintaxis: ADC destino, fuente Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo. El resultado se guarda en el operando destino. ADD Adición de los operandos. Sintaxis: ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino. DIV División sin signo Sintaxis: DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción. Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX. Si el divisor fué un byte el cociente se almacena en el registro AL y el residuo en AH, si fué una palabra el cociente se guarda en AX y el residuo en DX. IDIV División con signo Sintaxis: IDIV fuente Consiste basicamente en lo mismo que la instrucción DIV, solo que esta última realiza...

Captura de cadenas con formato

Imagen
Nombre_procedimiento PROC Instrucción operando destino , operando fuente Nombre_procedimiento ENDP END Directivas de segmento ; comentarios MOV Transfiere datos entre celdas de memoria y registros. Sintaxis: MOV Destino,Fuente Ejemplo: MOV AX,0006h MOV DX,AX MOVS (MOVSB) (MOVSW) Mueve cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI. Sintaxis: MOVS Este comando no necesita parametros ya que toma como dirección fuente el contenido del registro SI y como destino el contenido de DI. Ejemplo: MOV SI, OFFSET VARIABLE1 MOV DI, OFFSET VARIABLE2 MOVS Primero se inicializan los valores de SI y DI con las direcciones de las variables VARIABLE1 y VARIABLE2 respectivamente, despues al ejecutar MOVS se copia el contenido de VARIABLE1 a VARIABLE2. Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el segundo una palabra. LODS (LODSB) (LODSW) Carga cadenas de un byte o palabra al acumulador. Sintaxis: ...

Incremento y decremento

Imagen
Son las instrucciones más básicas a la hora de hacer operaciones con registros: INC incrementa el valor de un registro, o de cualquier posición en memoria, en una unidad, y DEC lo decrementa. Instrucción INC INC AX Incrementa en uno el valor de AX IN WORD PTR Incrementa la palabra situada en CS. Instrucción DEC DEC AX Decremento AX, le resta uno. DEC WORD PTR Decrementa la palabra situada en CS.

Ciclos condicionales

Sintaxis: LOOP etiqueta La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1. Instrucción LOOPE Propósito: Generar un ciclo en el programa considerando el estado de ZF Sintaxis: LOOPE etiqueta Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo del programa se transfiere a la etiqueta indicada como operando. Instrucción LOOPNE Propósito: Generar un ciclo en el programa, considerando el estado de ZF Sintaxis: LOOPNE etiqueta Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0

Saltos

Imagen
La mayoría de los programas constan de varios ciclos en los que una serie de pasos se repite hasta alcanzar un requisito específico y varias pruebas para determinar qué acción se realiza de entre varias posibles. Una instrucción usada comúnmente para la transferencia de control es la instrucción JMP (jump, salto, bifurcación). Un salto es incondicional, ya que la operación transfiere el control bajo cualquier circunstancia. También JMP vacía el resultado de la instrucción previamente procesada; por lo que, un programa con muchas operaciones de salto puede perder velocidad de procesamiento. La instrucción LOOP, requiere un valor inicial en el registro CX. En cada iteración, LOOP de forma automática disminuye 1 de CX. Si el valor en el CX es cero, el control pasa a la instrucción que sigue; si el valor en el CX no es cero, el control pasa a la dirección del operando. La distancia debe ser un salto corto, desde -128 hasta +127 bytes. Para una operación que exceda este límite, el ensambla...

Comparación y prueba

Imagen
La instrucción CMP pro lo común es utilizada para comparar dos campos de datos, uno de los cuales están contenidos en un registro. El formato general para CMP es:| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato} | Observe que la operación compara el primer operando con el segundo; por ejemplo, el valor del primer operando es mayor que, igual o menor que el valor del segundo operando? La instrucción CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de dirección, CMPS incrementa o disminuye también losregistros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La operación establece las banderas AF, CF, OF, PF, SF y ZF. Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de cualquier longitud. Pero observe que CMPS proporciona una comparación alfanumérica, esto es, una comparación de acuerdo a con los valores ASCII. Considere la com...

captura básica de cadenas

Imagen
En el lenguaje ensamblador el tipo de dato cadena (string) no está definido, pero para fines de  programación, una cadena es definida como un  conjunto de localidades de memoria consecutivas que  se reservan bajo el nombre de una variable. Instrucciones para el manejo de strings Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas: LODS (cargar un byte o palabra): carga el registro acumulador (AX o AL) con el valor de la localidad de memoria determinada por DS:SI se incrementa tras la transferencia. En el siguiente ejemplo simplemente capturamos una cadena en un vector y la imprimimos cuantas veces quiera el usuario, en este programa  aprendemos a usar vectores en MASM. Los vectores se pueden declarar de cualquier tipo de dato que una variable cualquiera solo que se especifica la longitud del vector y con que tipo de dato inicia al crearse para ello se utiliza la palabra reservada dup....

Ciclos numericos

Imagen
Un ciclo, conocido también como interacción, es la  repetición de un proceso un cierto número de veces  hasta que alguna condición se cumpla. En estos ciclos  se utilizan los brincos condicionales basados en el  estado de la bandera. Los ciclos numéricos que se utilizan son los siguientes: instrucción jmp, instrucción loop, instrucción cmp,  instrucción cmps e instrucción de conteo. Instrucción JMP Es una instrucción basada comúnmente para la  transferencia de control, un salto es incondicional ya  que la operación transfiere el control bajo cualquier  circunstancia. También vacía el resultado de la  instrucción previamente procesada: por lo que un  programa con muchas operaciones de saltos puede  perder velocidad de procesamiento, el formato general  para la instrucción JMP es: [ etiqueta] |jmp| dirección corta, cercana o lejana| Instrucción LOOP La instrucción Loop requiere un valor inicial en el  r...

ensamblador y ligado

Imagen
EDICION   Los archivos fuente de código ensamblador deben estar en formato ASCII standard. Para esto puede usarse cualquier editor que permita crear archivos sin formato, e.g. Edlin, Edit, Write,  El editor del Turbo Pascal, Works, Word, WordStar, etcétera. Las declaraciones pueden ser introducidas en mayúsculas y/o minúsculas. Una buena práctica de programación es poner todas las palabras reservadas (directivas e instrucciones) en mayúsculas y todo lo del usuario en minúsculas para fines de facilidad de lectura del código. Las sentencias pueden comenzar en cualquier columna, no pueden tener más de 128 caracteres, no se permiten lineas múltiples ni códigos de control, y cada línea debe ser terminada con una combinación de line-feed y carriage-return. Los comentarios se declaran con; y terminan al final de la línea.  ENSAMBLADO  El ensamblado se lleva a cabo invocando al MASM. Este puese ser invocado, usando una línea de comando, de la siguiente manera:...

Desplegado de mensajes en el monitor

Imagen
Desplegado de mensajes en el monitor MENSAJES EN EL 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. Un monitor de pantalla de cristal líquido (LCD) digital directo recibe un flujo de bits digitales directamente desde el controlador de video, y no requiere del barrido de trama. En este momento podemos comenzar a escribir las verdaderas instrucciones que le indicarán a la computadora que mensaje y como lo va a desplegar. Sugiero que comenzemos por borrar la pantalla. Esto se puede realizar de muy diversas formas, aquí lo haremos usando el BIOS, el cual es un microchip que se encuentra dentro de toda PC y controla las funciones básicas de entrada y salida (Basic Input Output Syst...

PROCESO DE ENSAMBLADO Y LIGADO

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 ést...