En aquest tema, aprendrem sobre les instruccions aritmètiques en el llenguatge Assembly. Aquestes instruccions són fonamentals per realitzar operacions matemàtiques bàsiques com la suma, la resta, la multiplicació i la divisió. A més, veurem com manipular els registres per emmagatzemar els resultats d'aquestes operacions.
Conceptes Clau
- Registres: Espais de memòria dins de la CPU que s'utilitzen per emmagatzemar dades temporals.
- Operands: Valors o adreces de memòria sobre els quals s'executen les operacions aritmètiques.
- Flags: Indicadors que es modifiquen en funció del resultat d'una operació aritmètica (per exemple, el flag de zero, el flag de transport, etc.).
Instruccions Aritmètiques Bàsiques
Suma (ADD)
L'instrucció ADD
s'utilitza per sumar dos operands. El resultat es guarda en el primer operand.
Sintaxi:
Exemple:
Resta (SUB)
L'instrucció SUB
s'utilitza per restar el segon operand del primer operand. El resultat es guarda en el primer operand.
Sintaxi:
Exemple:
MOV AX, 10 ; Carrega el valor 10 en el registre AX SUB AX, 4 ; Resta 4 del valor en AX (AX = 10 - 4 = 6)
Multiplicació (MUL)
L'instrucció MUL
s'utilitza per multiplicar dos operands. En el cas de la multiplicació, el resultat es guarda en registres específics depenent de la mida dels operands.
Sintaxi:
Exemple:
MOV AX, 2 ; Carrega el valor 2 en el registre AX MOV BX, 3 ; Carrega el valor 3 en el registre BX MUL BX ; Multiplica AX per BX (AX = 2 * 3 = 6)
Divisió (DIV)
L'instrucció DIV
s'utilitza per dividir dos operands. El dividend es troba en registres específics, i el quocient i el residu es guarden en registres específics depenent de la mida dels operands.
Sintaxi:
Exemple:
MOV AX, 10 ; Carrega el valor 10 en el registre AX MOV BX, 2 ; Carrega el valor 2 en el registre BX DIV BX ; Divideix AX per BX (AX = 10 / 2 = 5, residu = 0)
Exercicis Pràctics
Exercici 1: Suma i Resta
Escriu un programa en Assembly que sumi dos nombres i després resti un tercer nombre del resultat.
Codi:
section .data num1 db 10 num2 db 5 num3 db 3 section .text global _start _start: ; Carrega els valors en registres mov al, [num1] add al, [num2] sub al, [num3] ; Finalitza el programa mov eax, 1 int 0x80
Exercici 2: Multiplicació i Divisió
Escriu un programa en Assembly que multipliqui dos nombres i després divideixi el resultat per un tercer nombre.
Codi:
section .data num1 db 6 num2 db 2 num3 db 3 section .text global _start _start: ; Carrega els valors en registres mov al, [num1] mov bl, [num2] mul bl mov bl, [num3] div bl ; Finalitza el programa mov eax, 1 int 0x80
Errors Comuns i Consells
- Desbordament de Registres: Assegura't que els registres utilitzats poden emmagatzemar el resultat de l'operació. Per exemple, multiplicar dos valors grans pot causar un desbordament.
- Flags: Després d'una operació aritmètica, revisa els flags per assegurar-te que l'operació s'ha realitzat correctament.
- Divisió per Zero: Evita dividir per zero, ja que això causarà una excepció en el programa.
Resum
En aquest tema, hem après les instruccions aritmètiques bàsiques en Assembly: ADD
, SUB
, MUL
i DIV
. Hem vist com utilitzar aquestes instruccions per realitzar operacions matemàtiques bàsiques i hem practicat amb alguns exercicis. A més, hem discutit alguns errors comuns i consells per evitar-los. Amb aquests coneixements, estàs preparat per avançar cap a instruccions més complexes i aplicacions pràctiques en Assembly.
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