¿Qué es el lenguaje ensamblador?

Algunas veces denominado ensamblador o ASM, un lenguaje ensamblador es un lenguaje de programación de bajo nivel.

Los programas escritos en lenguajes ensambladores son compilados por un ensamblador. Cada ensamblador tiene su propio lenguaje ensamblador, que está diseñado para una arquitectura de computadora específica.

El lenguaje de máquina es solo una serie de números, que no es fácil de leer para los humanos. Usando ASM, los programadores pueden escribir programas legibles por humanos que se corresponden casi exactamente con el lenguaje de máquina.

La desventaja es que todo lo que hace la computadora debe describirse explícitamente, con detalles precisos. La ventaja es que el programador tiene el máximo control sobre lo que hace la computadora.

¿Por qué ASM es un lenguaje de "bajo nivel"?

El ensamblaje se denomina lenguaje de programación de bajo nivel porque existe (casi) una relación de uno a uno entre lo que le dice a la computadora que haga y lo que hace la computadora. En general, una línea de un programa de ensamblaje contiene un máximo de una instrucción para la computadora.

¿En qué se diferencia ASM de un lenguaje de "alto nivel"?

Los lenguajes de alto nivel proporcionan abstracciones de operaciones de bajo nivel que permiten al programador enfocarse más en describir lo que quieren hacer y menos en cómo debe hacerse . Programar de esta manera es más conveniente y hace que los programas sean más fáciles de leer a costa del sacrificio del control de bajo nivel.

Los programas escritos en lenguajes de alto nivel nunca igualarán la velocidad y eficiencia en bruto de los programas escritos en ensamblaje. Ejemplos de lenguajes de alto nivel incluyen Python, Java, JavaScript, Clojure y Lisp.

¿Qué es un lenguaje de "nivel medio"?

Los lenguajes de nivel medio o inferior proporcionan algunas abstracciones de alto nivel para facilitar la vida del programador, a la vez que proporcionan acceso a operaciones de bajo nivel. A menudo se utilizan para escribir sistemas operativos, por lo que a veces se denominan lenguajes de programación del sistema .

Los programas escritos en lenguajes de nivel medio también pueden funcionar, o casi tan bien, como los programas escritos en lenguaje ensamblador. Los ejemplos de lenguajes de programación de nivel medio incluyen C, C ++, Ada, Nim y Rust.

¿Es ASM portátil?

No. Dado que los lenguajes de ensamblaje están vinculados a una arquitectura de computadora específica, no son portátiles. Un programa escrito en un lenguaje ensamblador debería reescribirse completamente para que se ejecute en otro tipo de máquina.

La portabilidad es una de las principales ventajas de los lenguajes de nivel superior. El lenguaje de programación C a menudo se denomina "ensamblaje portátil" porque los compiladores C existen para casi todas las arquitecturas de sistemas modernos. Un programa escrito en C puede requerir algunos cambios antes de compilarse en otra computadora, pero el lenguaje central es portátil.

En términos generales, cuanto más alto es el lenguaje, menos cambios deben realizarse para ejecutarse en otra arquitectura. Los idiomas de nivel inferior (lenguaje de máquina y lenguaje de ensamblador) no son portátiles.

Ejemplo: ¡Hola Mundo! en ensamblaje de 32 bits, para Windows

Aquí está "Hello, World" escrito para un procesador Intel de 32 bits. También se ejecutará en un procesador de 64 bits. Lo compilaremos y lo ejecutaremos en Windows 10.

 global _main extern _printf section .text _main: push message call _printf add esp, 4 ret message: db 'Hello, World!', 10, 0 

Para empezar, abre el Bloc de notas. Copie y pegue el código anterior en un nuevo archivo de texto y guarde el archivo como hello.asm .

Para compilar el ensamblaje, utilizaremos NASM, el ensamblador Netwide. Se puede descargar en //www.nasm.us/.

 nasm -f win32 hello.asm 

Cuando ejecuta este comando, NASM crea un archivo de objeto. Un archivo de objeto contiene código de máquina, pero no es un archivo ejecutable. Nuestro archivo de objeto se llama hello.obj .

Para crear el ejecutable, utilizaremos la versión de MinGW (Minimal GNU para Windows) de 32 bits que proporcionará el compilador gcc. Se puede descargar en //www.mingw.org/.

 gcc -o hello.exe hello.obj 
 Hola 
 ¡Hola Mundo! 

Ejemplo: ¡Hola Mundo! en ensamblaje de 64 bits, para Linux

Aquí está "Hello, World" escrito para un procesador Intel de 64 bits. Lo compilaremos y lo ejecutaremos en Linux de 64 bits.

 impresión externa; la función C printf, que se llamará sección .data; Sección de datos, variables inicializadas msg: db "¡Hola, mundo!", 0; La cadena C termina con 0 fmt: db "% s", 10, 0; El formato de printf, "\ n", sección '0' .text; Inicio de la sección de código global main; el punto de entrada de gcc estándar principal:; la etiqueta del programa para el punto de entrada push rbp; configurar el marco de pila, debe estar alineado mov rdi, fmt mov rsi, msg mov rax, 0; También puede ser: xor rax, rax call printf; Llama a la función printf pop rbp; restaurar pila mov rax, 0; normal, no hay error, retorna el valor; regreso 

Copie y pegue este programa en un nuevo archivo llamado hello.asm .

Luego, compile el ensamblaje con NASM, que puede instalar con su administrador de paquetes. Por ejemplo, en Ubuntu o Debian, puede instalar NASM usando apt:

 sudo apt update && sudo apt install nasm 

Ejecute este comando para crear su archivo de objeto:

 nasm -f elf64 hello.asm 

El archivo objeto se llama hello.o .

A continuación, use gcc para vincular este archivo de objeto a las bibliotecas necesarias en su computadora y compilarlo en un archivo ejecutable llamado hola :

 gcc hello.o -o hello 

Por último, ejecute el archivo ejecutable:

 ./Hola 
 ¡Hola Mundo! 

Para referencia, este es el mismo programa, escrito en C:

 #include int main () {char msg [] = "Hello world \ n"; printf ("% s \ n", msg); devuelve 0; } 

  • Vea las rutinas de depuración para otros ejemplos de código de ensamblaje de bajo nivel e información adicional sobre lo que hace cada rutina.
  • Para ver ejemplos adicionales de lenguaje ensamblador, consulte el sitio web de Happy Codings.

2GL, ensamblador, lenguaje de bajo nivel, lenguaje de máquina, términos de programación