Академический Документы
Профессиональный Документы
Культура Документы
Primul procesor ARM a fost dezvoltat de Acorn Computers Limited, Cambridge, England, 1983 – 1985:
Acorn RISC Machine.
V1 ARM1
V2 ARM2
V2a ARM2aS ARM3
V3 ARM6 ARM600 ARM610 ARM7 ARM700 ARM710
V4T ARM7TDMI ARM710T ARM720T ARM740T
V4 StrongARM ARM8 ARM810
V4T ARM9TDMI ARM920T ARM940T
V5TE ARM9E-S ARM10TDMI ARM1020E Intel XScale
V6 ARM1136J-S ARM1136JF-S
Microcontrolere - Capitolul 7 1
Corneliu BURILEANU ©
Comparaţie cu predecesoarele RISC Berkeley RISC I şi II şi Stanford MIPS:
Asemănări:
• Acces în memorie cu instrucţiuni LOAD – STORE
• Instrucţiuni cu format fix pe 32 de biţi
• Prelucrarea datelor fără acumulator dedicat
• Puţine moduri de adresare
Deosebiri :
• Setul de lucru de registre nu este de 32 de registre şi nu există ferestre de registre
• Instrucţiunile nu durează toate o singură stare
• Nu se foloseşte tehnica întârzierii salturilor pentru a preveni blocarea Unităţii de control
De fapt, ARM este o combinaţie CISC – RISC. Setul de instrucţiuni are caracteristici CISC
mai mult decât RISC
Microcontrolere - Capitolul 7 2
Corneliu BURILEANU ©
7.2. ARM – modurile de lucru
Moduri privilegiate:
Microcontrolere - Capitolul 7 3
Corneliu BURILEANU ©
7.3. ARM – Setul de registre
Microcontrolere - Capitolul 7 4
Corneliu BURILEANU ©
Modurile de lucru
Moduri privilegiate
Moduri care tratează excepţii
Utilizator Sistem Supervizor Abort Nedefinit Întreruperi Într. rapide
R0 R0 R0 R0 R0 R0 R0
R1 R1 R1 R1 R1 R1 R1
R2 R2 R2 R2 R2 R2 R2
R3 R3 R3 R3 R3 R3 R3
R4 R4 R4 R4 R4 R4 R4
R5 R5 R5 R5 R5 R5 R5
R6 R6 R6 R6 R6 R6 R6
R7 R7 R7 R7 R7 R7 R7
R8 R8 R8 R8 R8 R8 R8_fiq
R9 R9 R9 R9 R9 R9 R9_fiq
R10 R10 R10 R10 R10 R10 R10_fiq
R11 R11 R11 R11 R11 R11 R11_fiq
R12 R12 R12 R12 R12 R12 R12_fiq
R13 R13 R13_svc R13_abt R13_und R13_irq R13_fiq
R14 R14 R14_svc R14_abt R14_und R14_irq R14_fiq
PC PC PC PC PC PC PC
Microcontrolere - Capitolul 7 5
Corneliu BURILEANU ©
R0 – R7 sunt registre fizice. (8)
R8 – R14 sunt registre logice – în sensul ca pot fi translatate în registre fizice diferite, astfel:
Microcontrolere - Capitolul 7 6
Corneliu BURILEANU ©
R13: indicator de stivă nededicat: SP
CPSR este „registrul de stare al programului curent”. În modurile care tratează excepţii,
acest registru este trecut în SPSR – “registrul de stare al programului salvat”.
Microcontrolere - Capitolul 7 7
Corneliu BURILEANU ©
31 30 29 28 27 7 6 5 4 3 2 1 0
N Z C V Q I F T M4 M3 M2 M1 M0
N – negativ
Z – zero
C – transport
V – depăşire
Microcontrolere - Capitolul 7 8
Corneliu BURILEANU ©
Setul de lucru conţine (indiferent de modul de lucru):
Microcontrolere - Capitolul 7 9
Corneliu BURILEANU ©
7.4. ARM – Memoria şi porturile
Memoria are 4 GB, sau 2Gw sau 1Gdw; informaţiile sunt aliniate
Adresele instrucţiunilor:
• Salturi: AFsalt ← AF curentă
curentă + 8 + offset
• Secvenţial: AF instr. următoare ← AF instr.
instr. urmă curentă + 4
instr. curentă
Se folosesc atât „micul indian” cât şi „marele indian”. Nu există instrucţiuni specifice pentru
trecerea de la o convenţie la alta. Există un terminal de intrare pentru a configura convenţia
care se potriveşte cu memoria folosită
Microcontrolere - Capitolul 7 10
Corneliu BURILEANU ©
Moduri de adresare
• post-indexare: se foloseşte doar registrul bază pentru adresare; apoi registru bază este
actualizat cu cele 2 entităţi se adună sau se scad, ceea ce permite indexarea automată într-un şir:
AF ← (r)
(r) ← (r) ± AE
Microcontrolere - Capitolul 7 11
Corneliu BURILEANU ©
7.5. ARM – Setul de instrucţiuni
Aproape toate instrucţiunile ARM sunt, de fapt, decizii simple: sunt testate fanioanele N, Z, C, V
din CPSR şi dacă este îndeplinită condiţia, instrucţiunile se desfăşoară normal
Instrucţiunile conţin în format un câmp de 4 biţi [31:28] care codifică condiţia testată
Format Mnemonic Semnificaţie Fanion testat
[31:28]
0000 EQ Egal (Z) ← 1
0001 NE Non-egal (Z) ← 0
0010 CS/HS Mai mare sau egal, numere fără semn (C) ← 1
0011 CC/LO Mai mic, numere fără semn (C) ← 0
0100 MI Negativ (minus) (N) ← 1
0101 PL Pozitiv sau zero (plus) (N) ← 0
0110 VS Depăşire (V) ← 1
0111 VC Non-depăşire (V) ← 0
1000 HI Mai mare, numere fără semn (C) ← 1 & (Z) ← 0
1001 LS Mai mic sau egal, numere fără semn (C) ← 0 ∀ (Z) ← 1
1010 GE Mai mare sau egal, numere cu semn (N) ← 1 & (V) ← 1
1011 LT Mai mic, numere cu semn (N) ← 1 & (V) ← 0
1100 GT Mai mare, numere cu semn (N) ← 0 & (V) ← 0
1101 LE Mai mic sau egal, numere cu semn (N) ← 0 & (V) ← 1
1110 AL Necondiţionat -
1111 NV Rezervat pentru instr. suplimentare -
Microcontrolere - Capitolul 7 12
Corneliu BURILEANU ©
7.5.2. Salturi
Microcontrolere - Capitolul 7 13
Corneliu BURILEANU ©
Salturi condiţionate:
B necondiţionat
BAL Întotdeauna
BEQ Egal
BNE Non-egal
BPL Plus
BMI Minus
BCC Salt dacă transport e 0
BLO Mai mic (fără semn)
BCS Salt dacă transport e 1
BHS Mai mare sau egal (fără semn)
BVC Salt dacă depăşire e 0
BVS Salt dacă depăşire e 1
BGT Mai mare (cu semn)
BGE Mai mare sau egal (cu semn)
BLT Mai mic (cu semn)
BLE Mai mic sau egal (cu semn)
BHI Mai mare (fără semn)
BLS Mai mic (fără semn)
Microcontrolere - Capitolul 7 14
Corneliu BURILEANU ©
Exemple:
Microcontrolere - Capitolul 7 15
Corneliu BURILEANU ©
7.5.3. Prelucrări de date
Toţi operanzii sunt pe 32 biţi
Microcontrolere - Capitolul 7 16
Corneliu BURILEANU ©
Deplasări:
Setarea fanioanelor se face opţional (cu excepţia comparaţiilor) se face indicând în asamblor
un „S” la mnemonică; de exemplu ADDS
Microcontrolere - Capitolul 7 17
Corneliu BURILEANU ©
7.5.4. Înmulţiri
Înmulţire „lungă”:
• SMULL operanzii sunt în 2 registre generale şi rezultatul, pe 64 biţi este stocat
în alte 2 registre concatenate; numerele sunt întregi cu semn
• UMULL operanzii sunt în 2 registre generale şi rezultatul, pe 64 biţi este stocat
în alte 2 registre concatenate; numerele sunt întregi fără semn
• SMLAL operanzii sunt în 2 registre generale, la rezultat se adună conţinutul
a 2 registre concatenate şi rezultatul este stocat în aceste al treilea şi al patrulea registru;
numerele sunt întregi cu semn
• UMLAL operanzii sunt în 2 registre generale, la rezultat se adună conţinutul
a 2 registre concatenate şi rezultatul este stocat în aceste al treilea şi al patrulea registru;
numerele sunt întregi fără semn
Microcontrolere - Capitolul 7 18
Corneliu BURILEANU ©
Exemple:
Microcontrolere - Capitolul 7 19
Corneliu BURILEANU ©
7.5.5. Instrucţiuni aritmetice speciale
CLZ înscrie într-un registru numărul de cifre binare 0 ale unui operand din alt registru,
începând cu msb şi până la primul 1
Determină câte deplasări stânga sunt necesare pentru normalizarea unui operand
Exemple:
CLZ R4, R2
Microcontrolere - Capitolul 7 20
Corneliu BURILEANU ©
7.5.6. Accesul în memorie
Microcontrolere - Capitolul 7 21
Corneliu BURILEANU ©
Exemple:
LDR R1, [R0] ; (R1) ← ((R0))
LDR R8, [R3,#4] ; (R8) ← ((R3) + 4)
LDR R12, [R13,#-4] ; (R12) ← ((R13) - 4)
STR R2, [R1,#0x100] ; ((R1) +100H) ← (R2)
LDRB R5,[R9] ; (R5) ← 000000 ↑((R9))
LDR R11, [R3,R5,LSL #2] ; (R11) ← ((R3) + (R5)*4)
LDR R1, [R0,#4]! ; (R1) ← ((R0) + 4)
; (R0) ← (R0) + 4
STRB R7, [R6,#-1]! ; ((R6) -1) ← (R7)
; (R6) ← (R6) – 1
LDR R3, [R9], #4 ; (R3) ← ((R9))
; (R9) ← (R9)+4
STR R2, [R5],#8 ; ((R5)) ← (R2)
; (R5) ← (R5) + 8
LDR R0, [PC,#40] ; (R0) ← ((PC) + 40 + 8)
LDR R0, [R1], R2 ; (R0) ← ((R1))
; (R1) ← (R1) + (R2)
SWP R12, R10, [R9] ; (R12) ← ((R9))
; ((R9)) ← (R10)
SWP R1, R1, [R9] ; (R1) ↔ ((R9))
Microcontrolere - Capitolul 7 22
Corneliu BURILEANU ©
7.5.7. Comunicarea cu coprocesorul
Microcontrolere - Capitolul 7 23
Corneliu BURILEANU ©