โ๏ธ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 0
La 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 expression
Por ejemplo:
TOTAL_STUDENTS equ 50
Luego puede usar este valor constante en el codigo, como:
mov ecx, TOTAL_STUDENTS
mov eax, TOTAL_STUDENTS
El operador de una instruccion EQU puede ser una expresion:
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
El 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 10
Mas 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