Lenguaje en Alto y Bajo Nivel

34
Lenguaje en alto y bajo nivel • El ordenador sólo entiende un lenguaje conocido como código binario o código máquina, consistente en ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar cualquier acción. • Los lenguajes más próximos a la arquitectura hardware se denominan lenguajes de bajo nivel y los que se encuentran más cercanos a los programadores y usuarios se denominan lenguajes de alto nivel.

Transcript of Lenguaje en Alto y Bajo Nivel

Page 1: Lenguaje en Alto y Bajo Nivel

Lenguaje en alto y bajo nivel

• El ordenador sólo entiende un lenguaje conocido como código binario o código máquina, consistente en ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar cualquier acción.

• Los lenguajes más próximos a la arquitectura hardware se denominan lenguajes de bajo nivel y los que se encuentran más cercanos a los programadores y usuarios se denominan lenguajes de alto nivel.

Page 2: Lenguaje en Alto y Bajo Nivel

Lenguaje de bajo nivel

• Son lenguajes totalmente dependientes de la máquina, es decir que el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras maquinas.

• Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las características del mismo.

Page 3: Lenguaje en Alto y Bajo Nivel

• El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales para su funcionamiento. Consiste en la combinación de 0's y 1's para formar las ordenes entendibles por el hardware de la maquina. Este lenguaje es mucho más rápido que los lenguajes de alto nivel. La desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible.

Page 4: Lenguaje en Alto y Bajo Nivel

• El lenguaje ensamblador es un derivado del lenguaje maquina y esta formado por abreviaturas de letras y números llamadas menmotécnicos. Con la aparición de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener.

Page 5: Lenguaje en Alto y Bajo Nivel

Lenguaje de alto nivel• Son aquellos que se encuentran más cercanos al

lenguaje natural que al lenguaje máquina. Están dirigidos a solucionar problemas mediante el uso de EDD's.

Nota: EDD's son las abreviaturas de Estructuras Dinamicas de Datos, algo muy utilizado en todos los lenguajes de programación. Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa.

Page 6: Lenguaje en Alto y Bajo Nivel

• Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a otra sin ningún tipo de problema.

• Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina/s para la que están diseñando el programa. Tan solo necesitan un traductor que entiendan el código fuente como las características de la maquina.

• Suelen usar tipos de datos para la programación y hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito especifico (como FORTRAN para trabajos científicos).

Page 7: Lenguaje en Alto y Bajo Nivel

Ensamblador

• Se llaman ensambladores los programas encargados de traducir los programas escritos en ensamblador a código binario.Fíjese en que tanto el programa traductor como el lenguaje se llaman del mismo modo: ensamblador.

• Como el lenguaje ensamblador es muy próximo al binario, estos traductores son programas relativamente sencillos.

Page 8: Lenguaje en Alto y Bajo Nivel

Compiladores• El compilador es un programa que traduce el

código de alto nivel a código binario. Es, por tanto, parecido al ensamblador, pero mucho más complejo, ya que las diferencias entre los lenguajes de alto nivel y el código binario son muy grandes.

• El programa escrito en lenguaje de alto nivel se denomina programa fuente o código fuente. El programa traducido a código binario se llama programa objeto o código objeto. Por lo tanto, el compilador se encarga de convertir el programa fuente en un programa objeto.

Page 9: Lenguaje en Alto y Bajo Nivel

• Una vez que se ha obtenido el programa objeto ya no es necesario volver a realizar la traducción (o compilación), a menos que se haga alguna modificación en el programa fuente, en cuyo caso habría que volver a compilarlo.

• El programa objeto, una vez generado, puede ejecutarse en la máquina en la que fue compilado, o en otra de similares características (procesador, sistema operativo, etc.).

Page 10: Lenguaje en Alto y Bajo Nivel

• Una vez que se ha obtenido el programa objeto ya no es necesario volver a realizar la traducción (o compilación), a menos que se haga alguna modificación en el programa fuente, en cuyo caso habría que volver a compilarlo.

• El programa objeto, una vez generado, puede ejecutarse en la máquina en la que fue compilado, o en otra de similares características (procesador, sistema operativo, etc.).

Page 11: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa

• El segmento de pila define el espacio de almacenamiento para la pila.• El segmento de datos define los

datos que el programa usará.• El segmento de código contiene las

instrucciones del lenguaje ensamblador.

Page 12: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa• Un procedimiento es un conjunto de instrucciones

diseñadas para llevar a cabo una función específica.• Un segmento de código puede constar de sólo un

procedimiento, pero usualmente es organizado en varios procedimientos pequeños para hacer que el programa sea más estructurado.

• Cada procedimiento debe tener un nombre definido por la directiva PROC, seguido por instrucciones en lenguaje ensamblador y debe ser finalizado por la directiva ENDP (que debe tener la misma etiqueta usada para nombrar al procedimiento).

Page 13: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa

• La directiva PROC puede tener las opciones FAR o NEAR.

• El sistema operativo que controla el computador debe ser dirigido al inicio del programa para ejecutarlo.

• DOS requiere que el punto de entrada al programa sea un procedimiento FAR.

• NEAR es la opción por defecto.

Page 14: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa• La directiva ASSUME asocia los registros de segmentos

con las etiquetas de los segmentos respectivos: Se asumirá que los registros de segmentos son iguales a las etiquetas de los segmentos usadas en el programa.

• Si un segmento extra es usado, también deberá incluirse en la sentencia ASSUME.

• La directiva ASSUME es necesaria porque un programa en lenguaje ensamblador podría tener varios segmentos de código, uno o más segmentos de datos y más de un segmento de pila, pero sólo uno de cada uno podrá ser direccionado por el CPU a un tiempo (el CPU sólo tiene un CS, un DS, un SS y un ES).

Page 15: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa

• La directiva ASSUME también ayuda al ensamblador a calcular los desplazamientos (offsets) direccionados desde el inicio del segmento.

• Por ejemplo en “MOV AL,[BX]” el BX es el offset del segmento de datos. Es necesario pues que el ensamblador identifique cual será el segmento de datos a usar cuando existe más de uno.

Page 16: Lenguaje en Alto y Bajo Nivel

Segmentos de un programa

• Recordar que ASSUME es una directiva para el ensamblador y que para ejecutar un programa se deben proporcionar los valores de CS, DS y SS que le corresponden a dicho programa.

• El sistema operativo debe pasar el control al programa para que éste pueda ejecutarse, por lo que asigna los valores de CS y SS respectivos. El valor del registro DS (y ES) debe ser inicializado por el programa.

Page 17: Lenguaje en Alto y Bajo Nivel

Modelos de memoriaSMALL MODEL• Este es uno de los más ampliamente usados

modelos de memoria para los programas en lenguaje ensamblador.

• Este modelo usa un máximo de 64K bytes de memoria para código y otros 64K bytes para datos.

Page 18: Lenguaje en Alto y Bajo Nivel

MEDIUM MODEL• En este modelo los datos también deben

mantenerse dentro de 64K bytes pero el código podría superar los 64K bytes de memoria.

COMPACT MODEL• Es el opuesto al MEDIUM MODEL. Los datos

pueden exceder los 64K bytes de memoria, el código no.

Page 19: Lenguaje en Alto y Bajo Nivel

LARGE MODEL• Combina los dos modelos anteriores (ambos

segmentos pueden superar los 64K bytes de memoria).

• Aunque los datos pueden superar los 64K bytes, ningún conjunto de datos (tal como un arreglo) debe superar los 64K bytes.

Page 20: Lenguaje en Alto y Bajo Nivel

HUGE MODEL• Ambos segmentos pueden superar los 64K

bytes de memoria.• Un conjunto de datos (tal como un arreglo)

puede superar los 64K bytes.

TINY MODEL• Es usado con archivos del tipo COM.• El total de la memoria usada para código y

datos deben mantenerse dentro de 64K bytes.

Page 21: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Modos de direccionamiento

• 7 modos de direccionamiento básicos: Modo registro: el operando es un registro. Modo inmediato: el operando es una constante. Modo directo: el operando es una dirección efectiva

(explícita). Modo registro indirecto: similar al anterior pero la dirección

efectiva está contenida en un registro (BX, BP, SI, DI). Modo relativo a base: la dirección efectiva se encuentra

sumando un desplazamiento a BX o BP. Modo indexado directo: igual al anterior usando SI o DI. Modo indexado a base: combinación de los dos anteriores.

La dirección efectiva se calcula como la suma de un registro base, un registro índice y, opcionalmente, un desplazamiento.

Page 22: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Modos de direccionamiento

• Ejemplos de uso:

Modo registro: add ax, bx Modo inmediato: add ax, 5 Modo directo: add ax, [100] Modo registro indirecto: add ax, [bx] Modo relativo a base: add ax, [bp + 100] Modo indexado directo: operaciones de cadena:

movsb Modo indexado a base: add ax, [bx + si + 100]

Page 23: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Transferencia de datos

IN carga el acumulador desde un dispositivo de I/OLAHF carga los flags en AHLEA carga una dirección efectivaLDS carga DS y un regis de 16 b con datos de memo de 32 bitsLES carga ES y un regis de 16 b con datos de memoria de 32 bitsMOV carga byte o palabra o doble palabraOUT saca datos del acumulador a un puerto de I/OPOP recupera una palabra de la pilaPOPF recupera los flags de la pilaPUSH almacena una pálabra en la pilaPUSHF almacena los flags en la pilaSAHF carga AH en los flagsXCHG intercambia bytes o palabrasXLAT emplea AL para entrar a una tabla de conversión

Page 24: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Instrucciones aritméticas

AAA, AAD,AAM, AAS ajuste ASCII para suma, división, producto y restaADD suma datos entre registros o la memoria y otro registroADC suma con acarreoCBW convierte byte a palabraCMP compara los datosCWD convierte palabra a doble palabraDAA, DAS ajuste decimal en AL para una suma/resta en BCDDEC decrementa operando en 1DIV división sin signoIDIV división con signoIMUL multiplicación con signoINC incrementa operando en 1MUL multiplicación sin signoNEG cambia el signoSBB resta con acarreoSUB resta datos entre los registros y la memoria u otro registro

Page 25: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Manipulación de bits

AND Y lógicaNOT invertir (complemento a 1)OR O lógicaSAR desplazamiento aritmético a derechaSHL/SAL desplazamiento a izquierdaSHR desplazamiento lógico a derechaRCL rotación a la izquierda con acarreoROR rotación a izquierdaRCR rotación a derecha con acarreoROR rotación a derechaTEST operación con el AND lógico pero sólo afecta

banderasXOR O exclusivo

Page 26: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Cadenas

CMPS comparación entre 2 cadenas en memoria

LODS cargar el acumulador con un dato de una cadena

MOVS mover cadena de memoria a memoria

SCAS comparación entre los datos de una cadena y el acumulador

STOS almacenar el acumulador

Page 27: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Transferencia de programa

CALL llamada a subrutinaINT interrupción de softwareINT 3 interrupción 3INTO interrupción si hay overflowIRET retorno de una rutina de interrupciónJA, JAE, JB, JBE saltar si mayor, mayor o igual, menor, menor o igualJE/JZ saltar si es cero o igualJG, JGE, JL, JLE saltar si mayor, mayor o igual, menor, menor o igualJMP salto incondicionalJNE/JNZ saltar si no es igual o no es ceroJNC, JNO, JNP, JNS saltar si no acarreo, overflow, paridad, signoJC, JO, JP, JS saltar si acarreo, overflow, paridad, signoLOOP repite un ciclo CX vecesLOOPE, LOOPNE igual a la anterior pero termina prematuramente por Z=1, 0JCXZ saltar si CX es 0RET retorno de subrutina

Page 28: Lenguaje en Alto y Bajo Nivel

Arquitectura del P 8086/8088:Control del procesador

CLC borrar acarreoCLD habilitar incremento automáticoCLI deshabilitar terminal INTRCMC complementar acarreoHLT alto hasta que se reinicialice o exista interrupciónNOP no operaciónSTC activa acarreoSTD habilitar decremento automáticoSTI habilitar interrupcionesWAIT espera a que el terminal TEST=0LOCK controla el terminal LOCK

Page 29: Lenguaje en Alto y Bajo Nivel

Archivos EXE vs Archivos COM

¿Por qué un archivo COM?• Hay ocasiones donde, debido a limitaciones

de memoria, se requiere tener un código compacto.

• El hecho que un archivo EXE pueda tener cualquier tamaño es una de las razones para que estos archivos sean usados ampliamente.

Page 30: Lenguaje en Alto y Bajo Nivel

Archivos EXE vs Archivos COMArchivo EXE Archivo COM

Tamaño ilimitado Máximo tamaño 64K bytes.

El segmento de pila está definido

No hay definición del segmento de pila

El segmento de datos está definido

EL segmento de datos está definido en el segmento de código

El código y los datos pueden ser definidos en cualquier dirección

El código y el segmento deben empezar en la dirección 0100H

Archivo más grande (requiere más memoria)

Archivos más pequeño (requiere menos memoria)

Page 31: Lenguaje en Alto y Bajo Nivel
Page 32: Lenguaje en Alto y Bajo Nivel
Page 33: Lenguaje en Alto y Bajo Nivel
Page 34: Lenguaje en Alto y Bajo Nivel