Lenguaje de alto nivel.
Este viene siendo un nivel de lenguaje de programación, en donde tenemos gramática que se utiliza normalmente para programar sin tener que ir muy profundo sobre los detalles inherentes a la operación de la computadora, los detalles técnicos se tienen en cuenta cuando se traduce a un lenguaje máquina, cuando pasa por un intérprete o compilador, por lo tanto un lenguaje de alto nivel se manipulan conceptos mas elaborados, pero impide tener la gestión de algunos detalles.
Obviamente, el utilizar el concepto de lenguaje de alto nivel, no quiere decir que ese lenguaje es superior al de bajo nivel, se le dá este tipo de diferencia por lo que he explicado en el párrafo anterior, en lo cual este tipo de lenguajes se obtienen el uso de objetos, variables, matrices, aritmética compleja, expresiones booleanas etc.., pero carecen de la gestión de memoria ó gestiones del procesador.
Aquí tenemos un ejemplo del lenguaje C y lo que se realiza para simplemente imprimir una cadena en este lenguaje.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int main(int argc, char** args){ | |
printf("Roberto\n"); | |
return; | |
} |
Lenguaje de bajo nivel.
Un lenguaje de bajo nivel, es el tipo de codificación que se aproxima al lenguaje máquina binario, este tipo de lenguajes regualrmente se utilizan en cómputo integrado, por lo tanto, podemos decir que la programación de bajo nivel comprende las características de la arquitectura de la computadora, así que este utiliza instrucciones del procesador, por lo tanto para poder programar es necesario conocer conceptos como registros.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.file "ejemplo.c" #debug | |
.section .rodata | |
.LC0: | |
.string "Roberto" | |
.text # inicio de una seccion de codigo | |
.globl main #La etiqueta main es global | |
.type main, @function #es una funcion | |
main: #etiqueta del incio del codigo. | |
pushl %ebp #prologo | |
movl %esp, %ebp #prologo | |
andl $-16, %esp #alinea la pila | |
subl $16, %esp #resta 16 bytes | |
movl $.LC0, (%esp) # Mueve la cadena a la parte superior de la pila | |
call puts #llama a puts | |
leave #epilogo termina la rutina | |
ret #return | |
.size main, .-main | |
.ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2" | |
.section .note.GNU-stack,"",@progbits |
Como pueden observar, que el código en lenguaje ensamblador, es un tanto más complejo, porque tenemos que lidiar con características de la arquitectura de la computadora, registros e instrucciones del procesador.
Referencias
Lenguaje ensamblador
Lenguaje C
Alto nivel
Bajo nivel
5 lab integrados
ResponderEliminarBuena entrada.
ResponderEliminarEn realidad assembly no hace mas complejo el codigo, pero el gcc te traduce el .c con bastante banderas para debugeo y para ser sincero la codificacion assembly para procesadores intel hace ver aun mas ~complejo el codigo.