Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
43
ARM Ltd non produce microprocessori: progetta e vende propriet intellettuale ARM una architettura:
insieme dei registri e delle istruzioni disponibili modi dindirizzamento gestione delle interruzioni
43
2009
43
T (Thumb: istruzioni da 16 bit) M (Multiply: con prodotto da 64 bit) E (Enhanced: con istruzioni DSP per applicazioni multimediali
Le pi diffuse nei sistemi embedded portatili (smartphones, Personal Digital Assistants, ) sono le versioni 4 e 5.
2009
43
Obiettivi di progetto
Insieme completo di periferiche on-chip Elevate prestazioni Basso consumo Rapporto prezzo/prestazioni
43
Mobile Communication
Smartphones
2009
14x14 mm 289-pin FBGA (Fine Ball Grid Array) 43 Processo produttivo: 130 nm Frequenza: 533 MHz max Bus memoria: 100 MHz max Tensione di alimentazione 1.2V Consumo: 0,368W @ 400 MHz
2009
43
2009
ARMv4: caratteristiche
Larchitettura ARMv4 a 32 bit word=32 bit (in memoria allineati ad indirizzi multipli di 4) halfword=16 bit (in memoria allineati ad indirizzi multipli di 2) byte =8 bit (singolarmente indirizzabili in memoria)
232 byte di memoria indirizzabili (4GB), ma S3C2440 supporta max 1 GB (8 banchi da 128 MB)
Architettura degli Elaboratori
43
2009
43
2009
10
43
2009
Modi operativi
User (USR): modo utente FIQ (FIQ): gestione veloce interruzioni IRQ (IRQ): gestione interruzioni Supervisor (SVC): modo protetto Abort (ABT): per gestione memoria Undefined (UND): emulaz. coprocessori System (SYS): usa risorse di USR senza limitazioni daccesso
11
43
2009
I registri: panoramica
12
43
2009
I registri
R0-R13: registri di uso generale SP: stack pointer (R13) LR: link register (R14) PC: program counter (R15)
Punta allistruzione da eseguire
13
43
14
43
Riservati
Architettura degli Elaboratori 2009
15
43
2009
Operazioni di I/O
LI/O di tipo memory mapped: i registri delle periferiche si trovano in locazioni di memoria predefinite 2 tipi di interruzioni: Normale Fast (vengono salvati meno registri) Hardware delle periferiche con accesso diretto alla memoria (DMA)
Architettura degli Elaboratori
16
43
2009
17
43
2009
Le istruzioni
ARMv4 prevede: - istruzioni di elaborazione dati a 3 operandi: uno (registro) per il risultato, due per gli operandi: SUB R2, R0, R1 @ R2=R0-R1 SUB R2, R0, R1, LSL #4 @ R2=R0-R1*16 - altre istruzioni a 2 operandi: uno per lop. destinazione, uno per lop. sorgente: MOV R2, R2, ASR #2 @ R2=R2/4 - altre istruzioni a 1 operando: ad es. le istruzioni di branch: B LAB2
Architettura degli Elaboratori
18
43
2009
19
43
2009
20
43
MOVEQ R0, #0 MOVNE R0, #0 MOVGT R0, #0 MOVLE R0, #0 MOVAL R0, #0
poni R0=0 solo se Z=1 esegui se Z=0 esegui se Z=0 e N=V esegui se Z=1 o NV esegui sempre
2009
21
43
22
Flag di condizione Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1 e Z=0 C=0 o Z=1 N=V N!=V Z=0 e N=V Z=1 o N!=V Opcode [31:28] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Significato
Uguali Non uguali Carry Attivato / Senza segno maggiore o uguale Carry Disattivato / Senza segno minore Negativo Positivo o Zero Overflow Non Overflow Senza segno maggiore Senza segno minore o uguale Con segno maggiore o uguale Con segno minore Con segno maggiore Con segno minore o uguale Sempre ( il default) Mai
EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV
43
2009
I modi di indirizzamento
Ogni categoria di istruzioni ha i propri: ci sono 4 classi di modi di indirizzamento. RISC: niente indirizzamento assoluto (non usa puntatori in memoria, ma solo nei registri) indirizzamento in memoria (indiretto con registro) solo per le istruzioni LDR (load) e STR (store)
Architettura degli Elaboratori
23
43
2009
Classi di indirizzamento
Modo 1: per istruzioni di elaborazione dati ADC, ADD, AND, BIC, CMN, CMP, EOR, MOV, MVN, ORR, RSB, RSC, SBC, SUB, TEQ, TST Modo 2: per Load&Store di word o unsigned byte LDR, LDRB, STR, STRB Modo 3: per L&S di halfword o signed byte LDRH, LDRSB, LDRSH, STRH Modo 4: per L&S di registri multipli LDMxx, STMxx
Architettura degli Elaboratori
24
43
2009
25
43
@ R4 R3+R2
2009
26
43
2009
<shifter_operand>: indirizzamento immediato Il campo dellistruzione contiene il valore su cui operare sintassi: #<immediato> esempio:
27
43
@ R3 R3+1
2009
28
cond 0 0 1 opcode S
Rn
Rd
rotate
immed_8
43
29
43
@ R3 R1+R2/2R5
2009
30
cond 0 0 0 opcode S
Rn
Rd
shift_imm sop 0
Rm
43
cond
0 0 0 opcode S
Rn
Rd
Rs
0 sop 1
Rm
codifica di Rm, <sop> Rs <sop>: 00 01 10 11 LSL LSR ASR ROR (RRX = ROR #0)
2009
Modo 1: esempi
mov R0, #0 add R3, R3, #1 cmp R7, #1000 bic R9, R8, #0xff00 mov R2, R0 add R4, R3, R2 mov R2, R0, LSL #2 add R9, R5, R5, LSL #3 sub R9, R5, R5, ASR #3 rsb R9, R5, R5, ASR #3 mov R5, R3, RRX mov R7, R4, ROR R3 @ @ @ @ @ @ @ @ @ @ @ @ @ @ R0 0 R3 R3+1 cc (R71000) R9 R8 and not 0xff00 R2 R0 R4 R3+R2 R2 R0*4 R9 R5+R5*8 = R5*9 R9 R5R5/8 R9 R5/8R5 R5 R3 ruotato esteso a destra di una posiz. R7 R4 ruotato a destra di R3 posizioni
31
43
2009
32
43
2009
33
43
2009
Modo 2: offset
Offset immediato [Rn, #<offset_12>] Offset da registro [Rn, Rm]
34
@ Rd M[Rn <offset_12>]
43
@ Rd M[Rn Rm]
Modo 2: pre-incremento
Pre-incremento immediato [Rn, #<offset_12>]! @ Rn Rn <offset_12> @ Rd M[Rn] Pre-incremento da registro [Rn, Rm]! @ Rn Rn Rm @ Rd M[Rn] Pre-incremento da registro scalato [Rn, Rm, <sop> #<shift_imm>]! @ Rn Rn (Rm <sop> # <shift_imm>) @ Rd M[Rn]
Architettura degli Elaboratori
35
43
2009
Modo 2: post-incremento
Post-incremento immediato [Rn], #<offset_12> @ Rd M[Rn] @ Rn Rn <offset_12> Post-incremento da registro [Rn], Rm @ Rd M[Rn] @ Rn Rn Rm Post-incremento da registro scalato [Rn], Rm, <sop> #<shift_imm> @ Rd M[Rn] @ Rn Rn (Rm <sop> # <shift_imm>)
Architettura degli Elaboratori
36
43
2009
37
43
Pre-incremento
[Rn, [Rn, [Rn, [Rn, [Rn, Rm, Rm, Rm, Rm, Rm, LSL #num]! LSR #num]! ASR #num]! ROR #num]! RRX]!
Post-incremento
[Rn], [Rn], [Rn], [Rn], [Rn], Rm, Rm, Rm, Rm, Rm, LSL #num LSR #num ASR #num ROR #num RRX
@ R1M32[R0]; R0R0-(R2/4)
2009
Indirizzamento auto-relativo
Si ottiene usando il registro R15 (PC) nellindirizzamento indiretto con registro:
esempi: ldr R1, [R15, -#8] @ R1 M32[R15-8] ldr PC, [PC, R0, LSL #2] @ PC M32[PC+R0*4]
38
43
Modo 2: esempi
ldr R2, [R0] ldr R1, [R0,#4] ldr R1, [R0], #8 @ R2 M32[R0] @ R1 M32[R0+4] @ R1 M32[R0] @ R0 R0+8
39
43
ldr PC, [PC, R0, LSL #2]@ PC M32[PC+R0*4] strb R7, [R9], #1 @ M8[R9] R7B @ R9 R9+1 @ R0 R0+4 @ M32[R0] R5
2009
40
43
2009
41
43
NOTA BENE: non ha senso parlare di STORE per quantit con segno, perch non c alcuna estensione del segno da effettuare
Architettura degli Elaboratori 2009
42
43
start_addr = Rn ; end_addr = Rn + #regs*4 - 4 start_addr = Rn + 4 ; end_addr = Rn + #regs*4 start_addr = Rn - #regs*4 + 4 ; end_addr = Rn start_addr = Rn - #regs*4 ; end_addr = Rn 4 (#regs il numero di registri indicati in <registers>)
DB decrement before
2009
43
43
2009
Fine
03.a