โ๏ธVARIABLES Y CONSTANTES
Asignacion de Espacio de Almacenamiento para Datos Inicializados:
La sintaxis para la declaracion de asignacion es:
[variable-name]    Define-directiva    Initial-value    [,initial-value]Donde, variable-name es el identificador de cada espacio de almacenamiento. Se asocia un valor de compensacion pada cada nombre de variable definido  en el segmento de datos.
Hay cinco formas basicas :
DB
Define Byte
allocates 1 byte
DW
Define Word
allocates 2 bytes
DD
Define Doubleword
allocates 4 bytes
DQ
Define Quadword
allocates 8 bytes
DT
Define Ten Bytes
allocates 10 bytes
Ejemplos de algunos de los usos de estas directivas:
choise        db    'y'
number        dw    12345
neg_number    dw    -12345
big_number    dq    123456789
real_number1  dd    1.234
real_number2  dq    123.456- Cada byte se almacena como su valor ASCII en hexadecimal. 
- Cada valor decimal se convierte automaticamente a su equivalente binario de 16 bits y se almacena como su numero hexadecimal . 
- El procesador utiliza el ordenamiento de bytes little-endian. 
- Los numeros negtivos se convierten en su representacion en complemento a 2. 
- Los numeros de punto flotante cortos y largos se representan usando 32 a 64 bits. 
Asignacion de almacenamiento para datos no inicializados
Las directivas de reserva se utilizan para reservar espacio para datos no inicilaizados. Las directivas de reserva toman un solo operando que especifica el numero de unidades de espacio a reservar. Cada directiva de definicion tiene una reserva relacionada.
Hay cinco formas basicas:
RESB
Reserve a Byte
RESW
Reserve a Word
RESD
Reserve a Doubleword
RESQ
Reserve a Quadword
REST
Reserve a Ten Bytes
Multiples Inicializaciones
La directiva TIMES permite ultiples inicializaciones al mismo valor,. Por ejemplo, una matriz denominada marcas de tamano 9 se puede definir e inicializar a 0 usando la siguiente declaracion:
marks    TIMES 9 dw 0La directiva TIMES es util para matrices y tablas. Por ejemplo:
section .text
    global _start
_start:
    mov edx, 9
    mov ecx, stars
    mov ebx, 1
    mov eax, 4
    int 0x80
    
    mov eax, 1
    int 0x80
    
section .data
    stars times 9 db '*'Constantes
En esto tenemos tres directivas:
- EQU 
- %assing 
- %define 
EQU:
La directiva EQU se utiliza para definir constantes. La sintaxis de la directiva EQU es la siguiente:
CONSTANTE_NAME EQU expressionPor ejemplo:
TOTAL_STUDENTS equ 50Luego puede usar este valor constante en el codigo, como:
mov ecx, TOTAL_STUDENTS
mov eax, TOTAL_STUDENTSEl operador de una instruccion EQU puede ser una expresion:
LENGTH equ 20
WIDTH equ 10
AREA equ length * widthEl segmento de codigo anterior definiria AREA como 200.
Ejemplo:
Veamos el uso ilustrado de la directiva EQU:
SYS_EXIT    equ 1
SYS_WRITE   equ 4
STDIN       equ 0
STDOUT      equ 1
section .txt
    global _start
_start:
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, msg1
    mov edx, len1
    int 0x80
    
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, msg2
    mov edx, len2
    int 0x80
    
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, msg3
    mov edx, len3
    int 0x80
    
    mov eax, SYS_EXIT
    int 0x80
    
section .data
    msg1 db 'Welcome to the word', 0xA,0xD
    len1 equ $ - msg1
    
    msg2 db 'Welcome, programere', 0xA,0xD
    len2 equ $ - msg2
    
    msg3 db 'Linux'
    len3 equ $ - msg3
      %assing:
esta directiva se puede usar para definir constantes numericas como equ. esta directiva permite la redifinicion. Por ejemplo, puede definir la constante TOTAL:
%assing     TOTAL 10Mas adelante en el codigo, puede redefinirlo:
%assing     TOTAL 20%define
Esta directiva permite tanto constantes numericas como de cadena. Esta directiva es similar a #define en C. Por ejemplo, puede definir la constante PTR como:
%define PTR [EBP+4]El codigo anterior reemplazar PTR por [EBP+4].
Esta directiva tambien permite la redefinicion y distingue entre mayuscula y minuscula.
รltima actualizaciรณn
