En aquest tema, explorarem els diferents tipus de dades que es poden utilitzar en el llenguatge Assembly, així com les seves mides. Comprendre aquests conceptes és fonamental per escriure codi eficient i correcte en Assembly.

Tipus de Dades Bàsics

En Assembly, els tipus de dades es defineixen principalment per la seva mida en bits. Aquests són els tipus de dades bàsics més comuns:

  1. Byte (8 bits)

    • Representa un valor de 8 bits.
    • Pot emmagatzemar valors de 0 a 255 (sense signe) o de -128 a 127 (amb signe).
  2. Word (16 bits)

    • Representa un valor de 16 bits.
    • Pot emmagatzemar valors de 0 a 65,535 (sense signe) o de -32,768 a 32,767 (amb signe).
  3. Double Word (32 bits)

    • Representa un valor de 32 bits.
    • Pot emmagatzemar valors de 0 a 4,294,967,295 (sense signe) o de -2,147,483,648 a 2,147,483,647 (amb signe).
  4. Quad Word (64 bits)

    • Representa un valor de 64 bits.
    • Pot emmagatzemar valors de 0 a 18,446,744,073,709,551,615 (sense signe) o de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (amb signe).

Taula de Tipus de Dades i Mides

Tipus de Dada Mida (bits) Mida (bytes) Rang (sense signe) Rang (amb signe)
Byte 8 1 0 a 255 -128 a 127
Word 16 2 0 a 65,535 -32,768 a 32,767
Double Word 32 4 0 a 4,294,967,295 -2,147,483,648 a 2,147,483,647
Quad Word 64 8 0 a 18,446,744,073,709,551,615 -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

Declaració de Dades en Assembly

En Assembly, les dades es declaren utilitzant directives específiques. A continuació es mostren algunes de les directives més comunes per declarar dades:

  1. DB (Define Byte)

    • Utilitzada per declarar una variable de tipus byte.
    myByte DB 0x1A ; Declara un byte amb el valor 0x1A
    
  2. DW (Define Word)

    • Utilitzada per declarar una variable de tipus word.
    myWord DW 0x1234 ; Declara una word amb el valor 0x1234
    
  3. DD (Define Double Word)

    • Utilitzada per declarar una variable de tipus double word.
    myDword DD 0x12345678 ; Declara una double word amb el valor 0x12345678
    
  4. DQ (Define Quad Word)

    • Utilitzada per declarar una variable de tipus quad word.
    myQword DQ 0x123456789ABCDEF0 ; Declara una quad word amb el valor 0x123456789ABCDEF0
    

Exemples Pràctics

Exemple 1: Declaració de Variables

section .data
    myByte  DB  0x1A          ; Declara un byte
    myWord  DW  0x1234        ; Declara una word
    myDword DD  0x12345678    ; Declara una double word
    myQword DQ  0x123456789ABCDEF0 ; Declara una quad word

Exemple 2: Accés a les Variables

section .text
    global _start

_start:
    ; Carregar el valor de myByte al registre AL
    mov al, [myByte]

    ; Carregar el valor de myWord al registre AX
    mov ax, [myWord]

    ; Carregar el valor de myDword al registre EAX
    mov eax, [myDword]

    ; Carregar el valor de myQword al registre RAX (en arquitectures de 64 bits)
    mov rax, [myQword]

    ; Finalitzar el programa
    mov eax, 60         ; Número de syscall per a 'exit'
    xor edi, edi        ; Codi de sortida 0
    syscall

Exercicis Pràctics

Exercici 1: Declaració i Accés a Variables

  1. Declara una variable de cada tipus (byte, word, double word, quad word) amb valors de la teva elecció.
  2. Escriu un programa en Assembly que carregui cadascuna d'aquestes variables en els registres corresponents i imprimeixi els seus valors.

Solució de l'Exercici 1

section .data
    myByte  DB  0x2B          ; Declara un byte
    myWord  DW  0x5678        ; Declara una word
    myDword DD  0x9ABCDEF0    ; Declara una double word
    myQword DQ  0x1234567890ABCDEF ; Declara una quad word

section .text
    global _start

_start:
    ; Carregar el valor de myByte al registre AL
    mov al, [myByte]

    ; Carregar el valor de myWord al registre AX
    mov ax, [myWord]

    ; Carregar el valor de myDword al registre EAX
    mov eax, [myDword]

    ; Carregar el valor de myQword al registre RAX (en arquitectures de 64 bits)
    mov rax, [myQword]

    ; Finalitzar el programa
    mov eax, 60         ; Número de syscall per a 'exit'
    xor edi, edi        ; Codi de sortida 0
    syscall

Conclusió

En aquest tema, hem après sobre els diferents tipus de dades en Assembly i les seves mides. També hem vist com declarar aquestes dades i accedir-hi mitjançant exemples pràctics. Aquests conceptes són fonamentals per treballar amb el llenguatge Assembly i ens preparen per a temes més avançats com les instruccions aritmètiques i lògiques.

© Copyright 2024. Tots els drets reservats