Ensamblaje: sintaxis básica

Un programa de montaje se puede dividir en tres secciones:

  • los data sección,

  • los bss sección, y

  • los text sección.

La sección de datos

los dataLa sección se utiliza para declarar constantes o datos inicializados. Estos datos no cambian en tiempo de ejecución. Puede declarar varios valores constantes, nombres de archivo o tamaño de búfer, etc., en esta sección.

La sintaxis para declarar la sección de datos es:

section.data

La sección bss

los bssLa sección se utiliza para declarar variables. La sintaxis para declarar la sección bss es:

section.bss

La sección de texto

los textLa sección se utiliza para mantener el código real. Esta sección debe comenzar con la declaraciónglobal _start, que le dice al kernel dónde comienza la ejecución del programa.

La sintaxis para declarar la sección de texto es:

section.text
   global _start
_start:

Comentarios

El comentario en lenguaje ensamblador comienza con un punto y coma (;). Puede contener cualquier carácter imprimible, incluido el espacio en blanco. Puede aparecer en una línea por sí solo, como:

; This program displays a message on screen

o, en la misma línea junto con una instrucción, como -

add eax, ebx     ; adds ebx to eax

Declaraciones en lenguaje ensamblador

Los programas en lenguaje ensamblador constan de tres tipos de declaraciones:

  • Instrucciones o instrucciones ejecutables,
  • Directivas de ensamblador o pseudo-operaciones, y
  • Macros.

los executable instructions o simplemente instructionsdígale al procesador qué hacer. Cada instrucción consta de unaoperation code(código de operación). Cada instrucción ejecutable genera una instrucción en lenguaje de máquina.

los assembler directives o pseudo-opsInformar al ensamblador sobre los diversos aspectos del proceso de ensamblaje. Estos no son ejecutables y no generan instrucciones en lenguaje de máquina.

Macros son básicamente un mecanismo de sustitución de texto.

Sintaxis de declaraciones en lenguaje ensamblador

Las declaraciones en lenguaje ensamblador se ingresan una declaración por línea. Cada declaración sigue el siguiente formato:

[label]   mnemonic   [operands]   [;comment]

Los campos entre corchetes son opcionales. Una instrucción básica tiene dos partes, la primera es el nombre de la instrucción (o el mnemónico), que se va a ejecutar, y la segunda son los operandos o los parámetros del comando.

A continuación se muestran algunos ejemplos de declaraciones típicas en lenguaje ensamblador:

INC COUNT        ; Increment the memory variable COUNT

MOV TOTAL, 48    ; Transfer the value 48 in the 
                 ; memory variable TOTAL
					  
ADD AH, BH       ; Add the content of the 
                 ; BH register into the AH register
					  
AND MASK1, 128   ; Perform AND operation on the 
                 ; variable MASK1 and 128
					  
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

El Programa Hola Mundo en Asamblea

El siguiente código en lenguaje ensamblador muestra la cadena 'Hello World' en la pantalla:

section	.text
   global _start     ;must be declared for linker (ld)
	
_start:	            ;tells linker entry point
   mov	edx,len     ;message length
   mov	ecx,msg     ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel
	
   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Hello, world!

Compilar y vincular un programa de ensamblaje en NASM

Asegúrese de haber establecido el camino de nasm y ldbinarios en su variable de entorno PATH. Ahora, siga los siguientes pasos para compilar y vincular el programa anterior:

  • Escriba el código anterior con un editor de texto y guárdelo como hello.asm.

  • Asegúrese de estar en el mismo directorio donde guardó hello.asm.

  • Para ensamblar el programa, escriba nasm -f elf hello.asm

  • Si hay algún error, se le preguntará al respecto en esta etapa. De lo contrario, un archivo objeto de su programa llamadohello.o se creará.

  • Para vincular el archivo de objeto y crear un archivo ejecutable llamado hello, escriba ld -m elf_i386 -s -o hello hello.o

  • Ejecute el programa escribiendo ./hello

Si ha hecho todo correctamente, se mostrará "¡Hola, mundo!" en la pantalla.