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:
-
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).
-
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).
-
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).
-
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:
-
DB (Define Byte)
- Utilitzada per declarar una variable de tipus byte.
myByte DB 0x1A ; Declara un byte amb el valor 0x1A
-
DW (Define Word)
- Utilitzada per declarar una variable de tipus word.
myWord DW 0x1234 ; Declara una word amb el valor 0x1234
-
DD (Define Double Word)
- Utilitzada per declarar una variable de tipus double word.
myDword DD 0x12345678 ; Declara una double word amb el valor 0x12345678
-
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
- Declara una variable de cada tipus (byte, word, double word, quad word) amb valors de la teva elecció.
- 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.
Curs de Programació en Assembly
Mòdul 1: Introducció al Llenguatge Assembly
- Què és el Llenguatge Assembly?
- Història i Evolució de l'Assembly
- Conceptes Bàsics i Terminologia
- Configuració de l'Entorn de Desenvolupament
Mòdul 2: Fonaments del Llenguatge Assembly
- Comprensió de la CPU i la Memòria
- Registres i les Seves Funcions
- Sintaxi i Estructura Bàsiques
- Escrivint el Teu Primer Programa en Assembly
Mòdul 3: Representació de Dades i Instruccions
- Sistemes Binari i Hexadecimal
- Tipus de Dades i Mides
- Instruccions Aritmètiques
- Instruccions Lògiques
Mòdul 4: Flux de Control
Mòdul 5: Conceptes Avançats d'Assembly
- Interrupcions i Crides de Sistema
- Macros i Assembly Condicional
- Assembly Inline en Llenguatges d'Alt Nivell
- Optimització del Codi Assembly
Mòdul 6: Assembly per a Diferents Arquitectures
Mòdul 7: Aplicacions Pràctiques i Projectes
- Escrivint un Bootloader Simple
- Creant un Nucli Bàsic de Sistema Operatiu
- Interfície amb el Maquinari
- Depuració i Perfilat del Codi Assembly