โš™๏ธ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 :

Directive
Purpose
Storage Space

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:

Directive
Purpose

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