Introducció

El llenguatge Assembly ARM és utilitzat per programar microprocessadors basats en l'arquitectura ARM, que és àmpliament utilitzada en dispositius mòbils, sistemes embeguts i altres aplicacions de baix consum. En aquest mòdul, aprendrem els conceptes bàsics de l'Assembly ARM, incloent-hi la seva sintaxi, instruccions bàsiques i com escriure programes senzills.

Continguts

  1. Arquitectura ARM
  2. Registres ARM
  3. Instruccions Bàsiques
  4. Mode de Direccionament
  5. Escrivint el Primer Programa en ARM Assembly
  6. Exercicis Pràctics

  1. Arquitectura ARM

L'arquitectura ARM és una arquitectura RISC (Reduced Instruction Set Computing), la qual cosa significa que utilitza un conjunt d'instruccions reduït i optimitzat per a una execució ràpida i eficient.

Característiques Clau:

  • Conjunt d'Instruccions Reduït: Menys instruccions, però més simples i ràpides.
  • Registres Multipropòsit: Un gran nombre de registres que poden ser utilitzats per a diverses operacions.
  • Pipeline: Execució de múltiples instruccions simultàniament per millorar el rendiment.

  1. Registres ARM

Els registres són elements de memòria d'alta velocitat dins de la CPU. En ARM, tenim diversos registres generals i alguns registres especials.

Registres Generals:

  • R0-R12: Registres d'ús general.
  • R13 (SP): Punter de pila (Stack Pointer).
  • R14 (LR): Registre de retorn (Link Register).
  • R15 (PC): Comptador de programa (Program Counter).

Registres Especials:

  • CPSR: Registre d'estat del programa actual (Current Program Status Register).

  1. Instruccions Bàsiques

Les instruccions en ARM Assembly són molt similars a altres llenguatges Assembly, però amb algunes particularitats.

Instruccions de Moviment:

MOV R0, #10    ; Mou el valor 10 al registre R0
MOV R1, R0     ; Mou el valor de R0 a R1

Instruccions Aritmètiques:

ADD R2, R0, R1 ; Suma el valor de R0 i R1, i guarda el resultat en R2
SUB R3, R2, #5 ; Resta 5 del valor de R2, i guarda el resultat en R3

Instruccions Lògiques:

AND R4, R0, R1 ; Realitza una operació AND entre R0 i R1, i guarda el resultat en R4
ORR R5, R0, R1 ; Realitza una operació OR entre R0 i R1, i guarda el resultat en R5

  1. Mode de Direccionament

El mode de direccionament defineix com es calcula l'adreça de l'operand. En ARM, tenim diversos modes de direccionament.

Direccionament Immediat:

MOV R0, #10    ; Mou el valor immediat 10 al registre R0

Direccionament Registral:

MOV R1, R0     ; Mou el valor de R0 a R1

Direccionament Indirecte:

LDR R2, [R0]   ; Carrega el valor de la memòria apuntada per R0 a R2
STR R2, [R1]   ; Emmagatzema el valor de R2 a la memòria apuntada per R1

  1. Escrivint el Primer Programa en ARM Assembly

A continuació, escriurem un programa senzill que suma dos nombres i emmagatzema el resultat en un registre.

Exemple de Codi:

.section .data
    num1: .word 5
    num2: .word 10

.section .text
.global _start

_start:
    LDR R0, =num1    ; Carrega l'adreça de num1 a R0
    LDR R1, [R0]     ; Carrega el valor de num1 a R1
    LDR R0, =num2    ; Carrega l'adreça de num2 a R0
    LDR R2, [R0]     ; Carrega el valor de num2 a R2
    ADD R3, R1, R2   ; Suma els valors de R1 i R2, i guarda el resultat en R3

    MOV R7, #1       ; Crida al sistema per sortir
    SWI 0            ; Interrupció de software

Explicació del Codi:

  1. .section .data: Defineix la secció de dades.
  2. num1, num2: Defineix dues variables amb valors 5 i 10.
  3. .section .text: Defineix la secció de codi.
  4. _start: Punt d'entrada del programa.
  5. LDR: Carrega valors de memòria a registres.
  6. ADD: Suma els valors de dos registres.
  7. MOV, SWI: Instruccions per sortir del programa.

  1. Exercicis Pràctics

Exercici 1:

Escriu un programa en ARM Assembly que multipliqui dos nombres i emmagatzemi el resultat en un registre.

Solució:

.section .data
    num1: .word 3
    num2: .word 4

.section .text
.global _start

_start:
    LDR R0, =num1    ; Carrega l'adreça de num1 a R0
    LDR R1, [R0]     ; Carrega el valor de num1 a R1
    LDR R0, =num2    ; Carrega l'adreça de num2 a R0
    LDR R2, [R0]     ; Carrega el valor de num2 a R2
    MUL R3, R1, R2   ; Multiplica els valors de R1 i R2, i guarda el resultat en R3

    MOV R7, #1       ; Crida al sistema per sortir
    SWI 0            ; Interrupció de software

Exercici 2:

Escriu un programa en ARM Assembly que realitzi una operació lògica XOR entre dos nombres i emmagatzemi el resultat en un registre.

Solució:

.section .data
    num1: .word 6
    num2: .word 9

.section .text
.global _start

_start:
    LDR R0, =num1    ; Carrega l'adreça de num1 a R0
    LDR R1, [R0]     ; Carrega el valor de num1 a R1
    LDR R0, =num2    ; Carrega l'adreça de num2 a R0
    LDR R2, [R0]     ; Carrega el valor de num2 a R2
    EOR R3, R1, R2   ; Realitza una operació XOR entre R1 i R2, i guarda el resultat en R3

    MOV R7, #1       ; Crida al sistema per sortir
    SWI 0            ; Interrupció de software

Conclusió

En aquest mòdul, hem après els conceptes bàsics del llenguatge Assembly ARM, incloent-hi la seva arquitectura, registres, instruccions bàsiques i modes de direccionament. També hem escrit alguns programes senzills per consolidar els nostres coneixements. En el següent mòdul, explorarem altres arquitectures d'Assembly, com MIPS i RISC-V.

© Copyright 2024. Tots els drets reservats