Salta al contenuto
Note per Studenti L'architettura ARM

L'architettura ARM

In questa pagina 6
In questa pagina 3

ARM è un'architettura RISCMotivazioni del CISC (divario semantico) e dati sull'esecuzione dei programmi; caratteristiche delle architetture RISC; finestre di registri; allocazione dei registri con colorazione di un grafo; confronto e situazione attuale (MIPS, ARM, x86).Architetture RISC e CISC → nata negli anni '80 e oggi la più diffusa al mondo (smartphone, microcontrollori, molti portatili e server). L'azienda progetta l'ISA e i core e ne vende la licenza. Qui si usa la versione a 32 bit (ARMv7, insieme di istruzioni A32), con un cenno a quella a 64 bit.

Registri

16 registri da 32 bit visibili, r0–r15:

Registro Nome Uso
r0–r3 argomenti e valore di ritorno delle funzioni, temporanei
r4–r11 variabili; vanno preservati dalle funzioni chiamate
r12 IP temporaneo
r13 SP stack pointer
r14 LR link register: indirizzo di ritorno dopo BL
r15 PC program counter

Le convenzioni d'uso di r0–r12 sono fissate dalla convenzione di chiamata (AAPCS, vedi Stack e chiamata di funzioni in ARMChiamata con BL e ritorno con BX LR; convenzione di chiamata AAPCS (argomenti in r0-r3, risultato in r0, registri da preservare r4-r11); stack discendente pieno con PUSH e POP; record di attivazione; funzioni foglia e non foglia; esempio ricorsivo del fattoriale con evoluzione dello stack.Stack e chiamata di funzioni in ARM →). Leggere r15 dà l'indirizzo dell'istruzione corrente + 8 (effetto della pipeline originale a 3 stadi).

CPSR (Current Program Status Register): flag N, Z, C, V nei bit 31–28 (vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →), bit di disabilitazione delle interruzioni, bit del modo corrente.

Modi: User (non privilegiato) e modi privilegiati (Supervisor, IRQ, FIQ, Abort, Undefined, System). Entrando in un modo di eccezione alcuni registri (almeno SP e LR) vengono sostituiti da copie private (banked) e il CPSR viene salvato nello SPSR del modo (vedi InterruptClassi di interruzioni; I/O guidato da interrupt; sequenza hardware e software di gestione con salvataggio del contesto sullo stack; identificazione della sorgente (linee multiple, polling, daisy chain, vettore); priorità e interruzioni annidate; eccezioni e modi in ARM.Interrupt →).

Memoria

Caratteristiche dell'insieme di istruzioni

Sintassi dell'assembler (GNU)

armasm
        .data
x:      .word 5             @ una parola inizializzata a 5
        .text
        .global main
main:   LDR r1, =x          @ r1 = indirizzo di x
        LDR r0, [r1]        @ r0 = x
        ADD r0, r0, #1      @ r0 = x + 1
        STR r0, [r1]        @ x = x + 1
        BX  lr              @ ritorno a chi ha chiamato main

Etichette seguite da :, commenti con @ (o //), costanti immediate con #, direttive con il punto (.data, .text, .word, .byte, .asciz, .space).

ARMv8 a 64 bit (AArch64)

31 registri generali da 64 bit (x0–x30, con le metà basse w0–w30), registro zero xzr, SP e PC non sono registri generali, istruzioni sempre di 32 bit, niente esecuzione condizionata generalizzata (restano CSEL e i salti condizionati). I concetti di questo capitolo restano validi.

Errori tipici

  • Usare r13–r15 come registri qualsiasi: hanno ruoli fissi.
  • Aspettarsi che ADD aggiorni i flag: serve ADDS.

Versione ripasso

Architettura RISCMotivazioni del CISC (divario semantico) e dati sull'esecuzione dei programmi; caratteristiche delle architetture RISC; finestre di registri; allocazione dei registri con colorazione di un grafo; confronto e situazione attuale (MIPS, ARM, x86).Architetture RISC e CISC → a 32 bit (ARMv7, A32).

Registri e memoria

Istruzioni

32 bit, 3 operandi. Esecuzione condizionata (ADDEQ r0,r0,#1) contro i salti brevi; flag solo con S o CMP, TST; secondo operando flessibile (ADD r0,r1,r2,LSL #2 =r1+4r2= r_1 + 4r_2, Istruzioni ARM di elaborazione datiIstruzioni aritmetiche (ADD, SUB, RSB, ADC), logiche (AND, ORR, EOR, BIC, MVN), di spostamento (MOV), moltiplicazione (MUL, MLA); secondo operando immediato o registro scalato con LSL, LSR, ASR, ROR; aggiornamento dei flag con S, CMP e TST; esempi di traduzione di espressioni C.Istruzioni ARM di elaborazione dati →); LDM/STM, PUSH/POP; Thumb a 16 bit (circa 30% più compatto).

Assembler GNU

.data, x: .word 5, .text, .global main; main: LDR r1,=x; LDR r0,[r1]; ADD r0,r0,#1; STR r0,[r1]; BX lr. Etichette :, commenti @, immediati #. AArch64: 31 registri da 64 bit (x0-x30), istruzioni da 32 bit.

Errori tipici: r13-r15 hanno ruoli fissi; ADD non aggiorna i flag, serve ADDS.

Teoria collegata