> For the complete documentation index, see [llms.txt](https://bla0x1s-organization.gitbook.io/untitled-1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bla0x1s-organization.gitbook.io/untitled-1/reverse-engineering/assembly-x86/declaraciones.md).

# DECLARACIONES

### Declaraciones

Los programas constan de tres tipos de declaraciones:

* Instrucciones ejecutables o instrucciones.
* Directivas de assembly o pseudo-ops
* Macros

Las Instruciones ejecutables le dicen al procesador que hacer, cada instruccion consta de un codigo de operacion (opcode), cada un es generada en codigo maquina.

Las directivas o pseudo-ops informan sobre los diversos aspectos del proceso de ensamblaje. Estos no son ejecutables y no generan lenguaje maquina.

Las macros son basicamente la sustiticion de texto.

#### Sintaxis de las declaraciones

Se ingresa una declaracion por linea, cada una sigue el siguiente formato:

```
[label]    mnemonic    [operands]    [; commentario]
```

Los campos entre corchetes son opcionales. Una instruccion basica tiene dos partes, la primera es el nombre de instruccion (mnemonic) que se va ejecutar, y la segunda son los `operands` o paramtros del comando.

Las siguientes son algunos ejemplos de declaraciones tipicas en assembly:

```
INC COUNT        ; Incrementa la variable de memoria.

MOV TOTAL, 48    ; Transfiere el valor 48 en la variable de memoria total.

ADD AH, BH        ; Agrega el contenido del registro BH al registro AH.

AND MASK1, 128    ; Realiza la operacion AND en la variables MASK1 y 128

AND MASKS, 10     ; Suma 10 a la variables

MOV AL, 10        ; Mueve 10 al registro AL
```

#### Hello Word en Assembly

```
section .text
    global _start
    
_start:                        ; Da el punto de entrada
    mov edx,len                ; Longitud del mensaje
    mov ecx,msg                ; Mensaje a escribir
    mov ebx,1                   ; Descrtiptor del archivo (stdout)
    mov eax,4                    ; Numero de llamadas del sistema (sys_write)
    int 0x80                    ; Llamada al kernel
    
    mov eax,1                    ; Nuemero de llamadas
    int 0x80                    ; Llamadas al kernel

section .data
msg db 'Hello, Word', 0xa      ; Cadena a imprimir
len equ $ - msg                ; Longitud de la cadena
```
