Lenguaje Emu8086

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 21

Universidad Nacional de Ingeniería UNI

Recinto Universitario Simón Bolívar R.U.S.B


Facultad de Electrotecnia y Computación

Trabajo de Programación ll
EMU8086

INTEGRANTES: Jhonatan David Martínez Calero 2018-0353U


Edwin Saned Caldera Aguilar 2018-0079U
Osman Ismael Mercado García 2018-0054U
Harley Davidson Briones pavón 2018-0216U
Cesar Alejandro Meléndez 2018-0337U

DOCENTE: Ing. Juan Francisco Gómez Flores

GRUPO: 2M3-Eo

FECHA: 12-08-2019
INTRODUCCIÓN

El lenguaje ensamblador o assembler (en inglés: assembly language y la abreviación asm) es un


lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan
instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos
integrados programables.

EMU8086 es un emulador que 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. También tiene algunas
desventajas como el de no soportar algunas de las interrupciones más interesantes que posee el sistema
operativo y tampoco puede acceder a los puertos físicos (reales), sino que los emula usando otros
programas que ya están incluidos en su respectiva carpeta. 
ORIGENES DEL LENGUAJE

El lenguaje ensamblador x86 es la familia de los lenguajes ensambladores


para los procesadores de la familia x86 introducida en abril de 1972, que
incluye desde los procesadores Intel 8086 y 8088, pasando por los Pentium
de Intel y los Athlon de AMD y llegando hasta los últimos procesadores
x86 de estas compañías.

Los procesadores Intel 8086 y 8088 fueron los primeros de 16 bits en tener
un conjunto de instrucciones conocido actualmente como x86. Fueron un
paso evolutivo en comparación con la generación anterior de CPUs de 8
bits, como el 8080 y heredaron muchas características e instrucciones, las
cuales fueron extendidas para trabajar con 16 bits.

Actualmente manejamos lenguajes de Alto nivel que


son relativamente sencillos a comparación con el lenguaje máquina. Pero
no se llegó al alto nivel desde el código binario, existe un lenguaje
que nació para facilitar el binary code. Este se llama "LENGUAJE
ENSAMBLADOR".
¿QUÉ ES EL LENGUAJE ENSAMBLADOR?

El lenguaje ensamblador es el lenguaje de programación utilizado para escribir programas informáticos de bajo
nivel, y constituye la representación más directa del Código máquina específico para cada arquitectura de
computadoras legible por un programador. Aun hoy se utiliza en la programación de handler o manipuladores
de dispositivos de hardware.
¿Pre-requisitos para usar correctamente el lenguaje ensamblador?

-Conocer a detalle como traba el micro.


-conocer a detalle cómo opera la computadora (Memoria, discos duros, dispositivos E/S).
-Lógica computacional.
-Manejar algún lenguaje de alto nivel(C, C++, C#, Pascal, Perl, VB, JAVA, etc...)
-Manejo del sistema binario y hexadecimal(suma, resta, multiplicación, división).
COMPILADORES PARA MICROCONTROLADORES

El lenguaje ensamblador x86 tiene 2 vertientes diferentes en cuanto a su sintaxis de


programación: sintaxis Intel, usada en sus inicios para la documentación de la plataforma
x86, y sintaxis AT&T .1​.
La sintaxis Intel es la dominante en la plataforma Windows, mientras que en Unix/Linux
ambas son utilizadas aunque GCC solo soportaba la sintaxis AT&T en sus primeras
versiones.

La mayoría de los ensambladores x86 utilizan la sintaxis de Intel, como MASM, TASM,
NASM, FASM and YASM. GAS ha soportado ambas sintaxis desde la versión “2.10” a
través de la directiva “.intel_sintax”.
 
BA JO
E TR A
RN O D
ENTO
Pautas:
Para iniciar se debe ejecutar el archivo EMU886.exe, que se encuentra en la carpeta del mismo nombre, en el
directorio raíz; seguramente en la computadora donde corra el programa tendrá otras alternativas para activar
el programa, como un acceso directo en el escritorio o en el menú de programas del sistema operativo. Si
está ejecutando la versión 4.05 del EMU8086 observará primero la pantalla de Bienvenida (welcome),
similar a la que se muestra en la Figura.
Se presentan cuatro diferentes opciones para elegir: 
• New: Le permite escribir un nuevo código en lenguaje ensamblador (al que Llamaremos “Código Fuente” y
tendrá extensión .ASM)
• Code examples: Le permite acceder a una serie de programas ejemplos que pueden ayudarle a comprender
funciones más complejas.
• Quick star tutor : activa un conjunto de documentos de ayuda, se recomienda revisarlos frecuentemente en caso
de dudas.
• Recent file: Le muestra los últimos archivos que se trabajaron en la máquina. Para continuar este primer
contacto con el emulador seleccione New. Observará una nueva caja de dialogo “choose code template”,como se
muestra en la Figura
Podrá ver una barra de menú de Windows con sus opciones file, edit, etc. pero también vera unas opciones poco usuales como
assembler, emulator, etc. propias del emulador. También vera una serie de botones que le permitirán crear un nuevo archivo
(new), abrir un ejemplo (examples), compilar un archivo fuente (compile), emular un archivo ejecutable (emulate) y otras
opciones que irá descubriendo a medida que se familiarice con el programa. 
Características del entorno de trabajo
 
• El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje
máquina, es decir, es un lenguaje de bajo nivel.

• El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser
modificado, para poder ser usado en otra máquina distinta.

• Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen
menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel.

• Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan
menos espacio que con lenguajes de alto nivel.

• Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se
pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras
cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes
de alto nivel.
Operadores aritméticos y de desplazamiento
/ División
* Multiplicación
MOD (%) Módulo
SHL (<<) Desplazamiento hacia la izquierda
SHR (>>) Desplazamiento hacia la derecha
+ Suma
- Resta
OPERACIONES LÓGICAS
 
Las instrucciones lógicas realizan operaciones lógicas bit a bit con sus operandos. 
Las instrucciones lógicas incluyen las operaciones que se realizan con los operadores “AND”, “OR” y “XOR”. 
AND 
and AL, BL       al AND bl –> al 
OR 
or AL, BL       al OR bl –> al 
XOR 
xor AL, BL       al XOR bl –> al 
NOT 
Esta instrucción lógica consiste en negar cualquier otra instrucción invirtiendo sus valores. 
FUNCIONES DE ENTRADA Y SALIDA

Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desde y
hacia un puerto
INPUT Lectura desde un puerto de entrada
OUTPUT Escritura hacia un puerto de salida
 
La dirección de un puerto puede ser especificada de manera inmediata o a través del registro DX. Como
ejemplo de estas instrucciones tenemos in y out.

 
S DE
UR A
U CT
T R O L
ES O NT R
C
Secuencial: Condicional:
PROGRAM Mult; PROGRAM Mcd;
CONST CONST A := 51; B := 595;
VAR Num1, Num2, Resul :
Val1 = 35;
NATURAL.W;
Val2 = 58; BEGIN Num1 := A; Num2 := B;
VAR IF Num1 > 0 AND Num2 > 0
Mult1, Mult2 : WORD; THEN
Resul : DOUBLE WORD; BEGIN
WHILE Num1 <> Num2 DO
BEGIN
IF Num1 > Num2 THEN Num1 :=
Mult1 := Val1; Num1-Num2
Mult2 := Val2; ELSE Num2 := Num2-Num1;
Resul := 0; Resul := Num1
WHILE Mult1 > 0 DO BEGIN END;
Resul := Resul+Mult2;
Mult1 := Mult1-1;
END;
SENTENCIA IF-ELSE
 
¿Como hago un ’if/else’ en ensamblador?
1. if (a == 0) {
2. r = 1;
3. } else {
4. r = −1; 5
}
Para hacer un ’if’ en ensamblador va bien pensar el código en C y luego:
1. hacer un ’cmp’ de los dos operandos que comparamos pero al revés. Esto es porque en la sintaxis AT&T se compara
el segundo operador con el primero. Así que haríamos: línea 1 ’cmpl $0, a’. En C si uno de los dos operandos es una
constante se suele poner a la derecha. Lo que nos va perfecto porque recordad que el segundo operador no puede ser
inmediato (una constante).

2. Hacer el salto condicional con la condición para ir al ’else’. Si la condición del ’if’ es ’si son iguales’ la condición
para ir al ’else’ es ’si no son iguales’. Por lo tanto: línea 2 ’jne else’.

3. Poner el bloque ’then’: línea 3 ’movl $1, r’. (En C, el bloque ’then’ es el código que se ejecuta si la condición es
cierta)
4. Después del bloque ’then’ salto incondicional al final del ’if’: línea 4 ’jmp endif’.
5. Etiqueta del ’else’: línea 5 ’else:’.
SENTENCIA WHILE
¿Cómo hago un ’while’ en ensamblador?
1 i = 1;
2 while ( i <= 10) {
3 r = r+i ;
4 i++;
5}
Para hacer un bucle en ensamblador va bien pensar primero el código en C. En ensamblador a un bucle le llamaremos ’loop’.
Es más inmediato traducir un ’while’ a ensamblador que un ’for’. Cuando ya tenemos el ’while’ en C:
1. La inicialización de la variable contador ya la sabemos hacer: l´ınea 1 ’movl $1,%ecx’.
2. Empieza el bucle. Necesitaremos una etiqueta aqu´ı: línea 2 ’loop:’ (’while:’ también estaría bien).
3. hacer un ’cmp’ de los dos operandos que comparamos en la condición del ’while’ en C pero al revés. Esto es porque en la sintaxis
AT&T se compara el segundo operador con el primero. Así que haríamos: l´ınea 3 ’cmpl $10,%ecx’. Acordaros, que al igual que en el
caso del ’if’ en C si uno de los dos operandos es una constante se suele poner a la derecha. Lo que nos va perfecto porque en
ensamblador el segundo operador de una instrucción no puede ser inmediato (una constante).
4. Hacer el salto condicional al final del bucle con la condición de salida del bucle (que es la opuesta a la condición de permanencia
que aparece en el ’while’ en C). Si la condición de permanencia del ’while’ era ’i menor o igual que 10’ en ensamblador la condición
de finalizacion del ’loop’ sera ’%exc mayor que 10’. Por lo tanto: línea 4 ’jg endloop’.
Creación de Funciones
Una función es una parte de código que se puede llamar desde su programa a fin de hacer alguna tarea específica. Las funciones
hacen el programa más estructural y más fácil de entender. Generalmente las funciones devuelven al mismo punto en el que fueron
llamadas.
 
 
¿Cómo se declara una función?
La sintaxis para la creación de una función es muy sencilla.
 
• Nombre de la Función:
• Código de la función
• El final de la función
 
El nombre de la función puede ser cualquier palabra o conjunto de letras, siempre y cuando, dicho conjunto no esté dentro de las
palabras reservadas del lenguaje. Por ejemplo, no se puede usar como nombre de función "mov"
 
El código fuente de la función son las tareas que debe ejecutar la función. Pueden ser tantas como el programador considere
necesarias. El fin de la función depende del objetivo que tenga la misma. Puede ser un llamado a otra función o un ret para volver
al punto donde fue llamada la función o un hlt si se desea que el programa finalice tras ejecutar la función.
CONCLUSIONES

El lenguaje ensamblador es el lenguaje de programación utilizado para escribir programas informáticos de


bajo nivel, y constituye la representación más directa del Código máquina específico para cada arquitectura
de computadoras legible por un programador. Aun hoy se utiliza (aunque muy poco) en la programación de
handler o manipuladores de dispositivos de hardware.

También podría gustarte