SW 3 Assembler 2010 04 05 v2 cmaj


Systemy wbudowane
Dariusz Makowski
Katedra Mikroelektroniki i Technik
Informatycznych
tel. 631 2720
dmakow@dmcs.pl
http://neo.dmcs.p.lodz.pl/swcr
Katedra Mikroelektroniki i Technik Informatycznych DMCS
1
Systemy wbudowane
Zakres przedmiotu
Zakres przedmiotu
Systemy mikroprocesorowe, systemy wbudowane
Rodzina procesorów ARM
Asembler
Urządzenia peryferyjne
Pamięci i dekodery adresowe
Programy wbudowane na przykładzie procesorów ARM
Metodyki projektowania systemów wbudowanych
Interfejsy w systemach wbudowanych
Systemy czasu rzeczywistego
Katedra Mikroelektroniki i Technik Informatycznych DMCS
2
Systemy wbudowane
Asembler procesora ARM (1)
Asembler procesora ARM (1)
Operand
zródłowy 1 Operand
Operand
zródłowy 2
docelowy
ADDEQS r0, r1, r2
kod operacji
(mnemonik)
aktualizacja
rejestru CPSR
warunek wykonania
instrukcji
Katedra Mikroelektroniki i Technik Informatycznych DMCS
3
Systemy wbudowane
Asembler procesora ARM (2)
Asembler procesora ARM (2)
Składnia assemblera:
A = B + C ;Wynik <= Argument 1 operacja Argument 2)
SUB Rd, Rs, Operand_2
SUB R1, R2, R3 ; R1 = R2 - R3
Jako operand docelowy oraz pierwszy operand zródłowy zawsze należy używać
rejestru
Operand zródłowy drugi może zostać podany w postaci rejestru, wartości stałej lub
wartości skalowanej:
Rx , np. R8
#wartość_stała , np. #5
Rx, operacja_skalowania , np. LSR #5
Katedra Mikroelektroniki i Technik Informatycznych DMCS
4
Systemy wbudowane
Flexible Operand
Flexible Operand
Operand zródłowy drugi (tzw. Flexible Operand 2) może zostać podany w postaci rejestru,
wartości stałej lub wartości skalowanej:
Rx , np. R8
#wartość_stała , np. #5
Rx, operacja_skalowania , np. LSR #5, np:
AND R1, R2, R1 ; R1 = R2 + R1
ADC R5, R7, #255 ; R5 = R7 + 255
ADD R5, R7, R8, ROR #3 ; R5 = R7 + (R8>>3)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
5
Systemy wbudowane
Budowa instrukcji procesora ARM
Budowa instrukcji procesora ARM
Wszystkie instrukcje mają długość 32 bit (instrukcje należy wyrównać do granicy 32 bit.)
Odwołanie do pamięci z wykorzystaniem techniki RMW (Read-Modify-Write)  instrukcje
Load  Store
Ortogonalne argumenty (argument docelowy-zródłowy)
Możliwość użycia jednego z 16 rejestrów (r0-r15)
Regularna budowa instrukcji (kodu maszynowego)  uproszczenie dekodera instrukcji
Katedra Mikroelektroniki i Technik Informatycznych DMCS
6
Systemy wbudowane
Podział instrukcji procesora ARM
Podział instrukcji procesora ARM
Instrukcje procesora ARM można podzielić na sześć grup:
Instrukcje przetwarzające dane,
Arytmetyczne/logiczne, porównujące, instrukcje mnożące (dzielące),
SIMD (Single Instruction Multiple Data)  instrukcje wykonujące podwójne lub poczwórne operacje,
Instrukcje modyfikujące PC (rozgałęzienie programu),
Instrukcje skoków,
Skoki bezwarunkowe/warunkowe,
Skoki do podprogramów,
Zmiana trybu pracy (ARM/THUMB/Jazelle),
Instrukcje operujące na pamięci,
Zapis/odczyt danych z pamięci (obsługa wielu rejestrów),
Operacje atomowe do obsługi semaforów,
Instrukcje obsługujące rejestr stanu,
Modyfikacja oraz odczyt bitów rejestrów CPSR/SPSR,
Instrukcje wykorzystywane przez koprocesor,
Wymiana danych pomiędzy rejestrami ALU a rejestrami koprocesora,
Instrukcje generujące wyjątki,
Programowe przerwania,
Programowe pułapki.
Katedra Mikroelektroniki i Technik Informatycznych DMCS
7
Systemy wbudowane
Instrukcje procesora a kod maszynowy
Instrukcje procesora a kod maszynowy
Katedra Mikroelektroniki i Technik Informatycznych DMCS
8
Systemy wbudowane
Rejestr stanu i flagi statusu
Rejestr stanu i flagi statusu
31 28 27 24 23 16 15 8 7 6 5 4 0
N Z C V Q J U n d e f i n e d I F T mode
f s x c
* rejestr stanu xSR dla architektury instrukcji powyżej ARMv5 może zawierać dodatkowo bity statusu dla
instrukcji SIMD, bit kontrolujący kolejność bitów w pamięci dla instrukcji Load/Store oraz bit Imprecise Abort
Mask
Katedra Mikroelektroniki i Technik Informatycznych DMCS
9
Systemy wbudowane
Model programowy  rejestry dostępne w trybie User oraz System
Model programowy  rejestry dostępne w trybie User oraz System
Current Visible Registers
r0
r0
User Mode
r1
r1
r2
r2
r3
r3
Banked out Registers
r4
r4
(20 rejestrów)
r5
r5
r6
r6
FIQ IRQ SVC Undef Abort
FIQ IRQ SVC Undef Abort
r7
r7
r8 r8
r8 r8
r9 r9
r9 r9
r10 r10
r10 r10
r11 r11
r11 r11
r12 r12
r12 r12
r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp)
r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp) r13 (sp)
r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr)
r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr) r14 (lr)
r15 (pc)
r15 (pc)
cpsr
cpsr
spsr spsr spsr spsr spsr
spsr spsr spsr spsr spsr
Katedra Mikroelektroniki i Technik Informatycznych DMCS
10
Systemy wbudowane
Przykładowy program
Przykładowy program
/* here you can write comments */
main: /* label for main function */
MOV r0, #10 /* set up parameters */
MOV r1, #3
ADD r0, r0, r1 /* r0 = r0 + r1 */
stop:
LDR r5, =0xffff.f200 /* base address for PIO_B */
ADD r0, r0, #1 /* increment r0 */
STR r0, [r5] /* write r0 to PIO_B */
SWI #0x10 /* software interrupt */
while:
B while /* while (1) to avoid exception */
END /* mark end of file */
Katedra Mikroelektroniki i Technik Informatycznych DMCS
11
Systemy wbudowane
Podstawowe instrukcje procesora ARM
Podstawowe instrukcje procesora ARM
Katedra Mikroelektroniki i Technik Informatycznych DMCS
12
Systemy wbudowane
Architektura ARM i Cortex
Architektura ARM i Cortex
The ARM 32-bit instruction set is the base 32-bit ISA used in the ARMv4T,
ARMv5TEJ and ARMv6 architectures. In these architectures it is used in
applications requiring high performance, or for handling hardware exceptions
such as interrupts and processor start-up.
The ARM 32-bit ISA is also supported in the Cortex"!-A and Cortex-R profiles of
the Cortex architecture for performance critical applications, and for legacy code.
Most of its functionality is subsumed into the Thumb-2 instruction set, which also
benefits from improved code density.
Katedra Mikroelektroniki i Technik Informatycznych DMCS
13
Systemy wbudowane
Instrukcje asemblera procesora ARM
(ARM and Thumb-2 Instruction Set Quick
Reference Card)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
14
Systemy wbudowane
Gdzie szukać pomocy ?
Gdzie szukać pomocy ?
J. Augustyn,  Projektowanie systemów wbudowanych na przykładzie rodziny SAM7S
z rdzeniem ARM7TDMI
Lista instrukcji wspieranych przez rodzinę ARM
ARM and Thumb-2 Instruction Set Quick Reference Card
Thumb 16-bit Instruction Set Quick Reference Card
Opis architektury rdzenia procesora ARM:
ARMv5 Architecture Reference Manual
ARMv6-M Architecture Reference Manual
ARMv7-AR Architecture Reference Manual
ARMv7-M Architecture Reference Manual
ARMv7-M Architecture Application Level Reference Manual
ARM v7-M Architecture Application Level Reference Manual Errata
Materiały dostępne na stronie firmy ARM (https://login.arm.com)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
15
Systemy wbudowane
Wspierana lista instrukcji asemblera
Wspierana lista instrukcji asemblera
Numer rdzenia ARM oraz numer wersji instrukcji:
ARM7TDMI ARMv4
ARM9TDMI-E-JS ARMv5
ARM Cortex ARMv7
Katedra Mikroelektroniki i Technik Informatycznych DMCS
16
Systemy wbudowane
Notacja (1)
Notacja (1)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
17
Systemy wbudowane
Notacja (2)
Notacja (2)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
18
Systemy wbudowane
Operacje matematyczne i logiczne
Operacje matematyczne i logiczne
Lista podstawowych instrukcji:
Arytmetyczne: ADD ADC SUB SBC RSB RSC
Logiczne: AND ORR EOR BIC
Porównujące: CMP CMN TST TEQ
Operacje na danych: MOV MVN
Instrukcje operują wyłącznie na rejestrach (brak odwołania do pamięci).
Składnia:
Rozkazy trójargumentowe:
{}{S} Rd, Rn, Operand2
Rozkazy dwuargumentowe:
Operacje porównujące nie korzystają z rejestru Rd
Operacje na danych nie korzystają z rejestru Rn
Drugi operand przesyłany jest do ALU z wykorzystaniem rejestru przesuwnego (ang. barrel
shifter)
Rozkazu porównawcze zawsze aktualizują flagi rejestru CPSR, pozostałe w zależności
od preferencji programisty
Katedra Mikroelektroniki i Technik Informatycznych DMCS
19
Systemy wbudowane
Kodowanie instrukcji matematycznych i logiczych
Kodowanie instrukcji matematycznych i logiczych
Bit I  służy do rozróżniania liczby przesunięć drugiego argumentu (adresowanie
natychmiastowe lub rejestrowe bezpośrednie)
Bit S =1  aktualizacja CPSR po wykonaniu instrukcji
Rn  pierwszy operand zródłowy
Rd  operand docelowy
shifter_operand - drugi operand zródłowy (Flexible Operand 2)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
20
Systemy wbudowane
Przykłady instrukcji arytmetycznych
Przykłady instrukcji arytmetycznych
Instrukcja dodawania
ADD r0, r1, r2 ; r0 = r1 + r2
ADD r0, r1, #200 ; r0 = r1 + 200
Dodawanie z uwzględnieniem bitu przeniesienia
ADC r0, r1, r2 ; r0 = r1 + r2 + carry
Odejmowanie
SUB r0, r1, r2 ; r0 = r1  r2
Odejmowanie z uwzględnieniem bitu przeniesienia
SBC r0, r1, r2 ; r0 = r1 - r2 - NOT(carry)
Odejmowanie, odwrócona kolejność argumentów
RSB r1, r2, #0 ; r1 = #0 - r2 (r1 w kodzie U2)
Odejmowanie, odwrócona kolejność arg. z uwzględnieniem bitu przeniesienia
RSC r3, r1, r2 ; r3 = r2 - r1 - NOT(carry)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
21
Systemy wbudowane
Ćwiczenia przy tablicy
Ćwiczenia przy tablicy
Sumowanie liczb dłuższych niż 32 bity
R1, R2  liczba 64 bitowa (np. 0x1234.5678.ABCD.EF00)
R3, R4  liczba 64 bitowa (np. 0xAAAA.BBBB.CCCC.DDDD)
R0 = (R1|R2) + (R3|R4)
Przykładowy program ?
Jaki będzie wynik ?
Jak długi może być wynik ?
Odejmowanie liczb dłuższych niż 32 bity
R7, R8  liczba 64 bitowa (np. 0x1234.5678.ABCD.EF00)
R10, R12  liczba 64 bitowa (np. 0xAAAA.BBBB.CCCC.DDDD)
R14 = (R7|R8) - (R10|R12)
Przykładowy program ?
Jaki będzie wynik ?
Jak długi może być wynik ?
Katedra Mikroelektroniki i Technik Informatycznych DMCS
22
Systemy wbudowane
Instrukcje logiczne (1)
Instrukcje logiczne (1)
Lista podstawowych instrukcji:
Logiczne: AND ORR EOR BIC
AND  operacja iloczynu logicznego, np. 0x12 AND 0xF0 0x10
ORR  operacja sumy logicznej, np. 0xAC ORR 0x10 0xBC
EOR  operacja różnicy symetrycznej,np. 0x12 AND 0xF0 0xD0
BIC  operacja iloczynu z negacją (AND NOT), np.
0x12 AND (NOT 0xF0) 0x02
Katedra Mikroelektroniki i Technik Informatycznych DMCS
23
Systemy wbudowane
Instrukcje logiczne (2)
Instrukcje logiczne (2)
Lista podstawowych instrukcji:
Logiczne: AND ORR EOR BIC
LDR R0, =0xDEADBEEF
AND R0, R0, #0x00FFFF00
(gdb) p/x $r0
$0 = 0xdeadbeef
44 AND r0, r0, #0x00FFFF00
1: x/i $pc 0x10010 : and r0,r0,#0x00ffff00
(gdb) s
(gdb) p/x $r0
Jaki będzie wynik operacji ?
$1 = 0x00ADBE00
Katedra Mikroelektroniki i Technik Informatycznych DMCS
24
Systemy wbudowane
Instrukcje logiczne (3)
Instrukcje logiczne (3)
Lista podstawowych instrukcji:
Logiczne: AND ORR EOR BIC
LDR R1, =0xDEAD.BEEF
ORR R0, R1, #0x00FF.FF00
(gdb) p/x $r1
$0 = 0xdeadbeef
44 ORR r0, r1, #0x00FFFF00
1: x/i $pc 0x10010 : orr r0,r1,#0x00ffff00
(gdb) s
(gdb) p/x $r0
Jaki będzie wynik operacji ?
$1 = 0xDEFF.FFEF
Katedra Mikroelektroniki i Technik Informatycznych DMCS
25
Systemy wbudowane
Instrukcje logiczne (4)
Instrukcje logiczne (4)
Lista podstawowych instrukcji:
Logiczne: AND ORR EOR BIC
LDR R2, =0xABCD.EF12
ORR R1, R2, #0xFF00.000F
(gdb) p/x $r2
$0 = 0xdeadbeef
44 EOR r1, r2, #0x00FFFF00
1: x/i $pc 0x10010 : eor r1,r2,#0x00ffff00
(gdb) s
(gdb) p/x $r1
Jaki będzie wynik operacji ?
$1 = 0x54cdef1d
Katedra Mikroelektroniki i Technik Informatycznych DMCS
26
Systemy wbudowane
Instrukcje logiczne (5)
Instrukcje logiczne (5)
Lista podstawowych instrukcji:
Logiczne: AND ORR EOR BIC
LDR R2, =0xABCD.EF12
BIC R0, R2, #0xFF00.00FF */ AND NOT /*
(gdb) p/x $r2
$0 = 0xdeadbeef
44 BIC r0, r2, #0x00FFFF00
1: x/i $pc 0x10010 : bic r0,r2,#0x00ffff00
(gdb) s
(gdb) p/x $r0
Jaki będzie wynik operacji ?
$1 = 0x00cd.ef00
Katedra Mikroelektroniki i Technik Informatycznych DMCS
27
Systemy wbudowane
Instrukcje logiczne (1)
Instrukcje logiczne (1)
Lista podstawowych instrukcji:
Porównujące: CMP CMN TST TEQ
Instrukcje oddziałują na flagi rejestru stanu (CPSR)
CMP  instrukcja porównująca dwa operandy, np.
CPSR = status po operacji (Rz  Operand_2)
CMN  instrukcja porównująca dwa operandy z negacją (czasami asembler potrafi
podmienić instrukcję CMP na CMN w celu optymalizacji szybkości wyk. instr.), np.
CPSR = status po operacji (Rz + Operand_2)
TST  instrukcja testująca bity rejestrów (odpowiednik ANDS jednak rezultat
operacji jest tracony), np.
CPSR = status po operacji (Rz AND Operand_2)
TEQ  instrukcja porównująca bity rejestrów (nie modyfikuje flag C i V, odpowiednik
EORS jednak rezultat operacji jest tracony), np.
CPSR = status po operacji (Rz EOR Operand_2)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
28
Systemy wbudowane
Instrukcje logiczne (3)
Instrukcje logiczne (3)
Przykłady użycia instrukcji porównujących
CMP r2, r9 | porównanie rejestrów r2 i r9 (zmienia wszystkie flagi)
CMN r0, #6400 | porównanie rejestru r0 i stałej (zmienia wszystkie flagi
CMPGT r13, r7, LSL #2 | test wykonywany warunkowo jeżeli flaga Z=0 i oraz
| N=V, porównanie rejestru r13 i wartości będącej
| wynikiem operacji r7<<2
TST r0, #0x3F8 | test bitowy rejestru r0 i stałej #0x3f8
TEQEQ r10, r9 | test bitowy rejestrów r0 i r9 (zmienia flagi Z/N)
TSTNE r1, r5, ASR r1 | test wykonywany warunkowo jeżeli flaga Z nie
| jest ustawiona (zmienia wszystkie flagi)
| operand_2 = r5>>r1
Katedra Mikroelektroniki i Technik Informatycznych DMCS
29
Systemy wbudowane
Aktualizacja rejestru statusu
Aktualizacja rejestru statusu
Domyślnie instrukcje nie aktualizują bitów rejestru stanu (nie dotyczy instrukcji
porównujących).
W celu aktualizacji flag rejestru stanu należy posłużyć się sufiksem  S .
loop
&
SUBS r1, r1, #1 ; r1 = r1 -1, update CPRS
BNE loop ; jump if r1<>0
Addition of 64-bit values
ADDS r5, r2, r0 ; r5 = r2 + r0
ADDC r6, r3, r1 ; r6 = r3 + r1 + carry
Negation of 64-bit value
RSBS r2, r0, #0 ; r2 = - r0
RSC r3, r1, #0 ; r3 = - r1 - NOT(carry)
Katedra Mikroelektroniki i Technik Informatycznych DMCS
30
Systemy wbudowane
Operacje z wykorzystaniem stałych liczb
Operacje z wykorzystaniem stałych liczb
Żadna z instrukcji asemblera ARM nie może operować na 32-bitowych stałych.
Ze względu na użytą metodykę kodowania instrukcji pozostało 12 bitów do generowania liczb
stałych (argument 2), np. ADD r0, r1, #10000 ?
Jednostka ALU wykorzystuje dodatkowy układ przesuwnika bitowego (ang. inline barrel shifter)
do zwiększenia zakresu generatorowych liczb stałych.
Daje to możliwość użycia liczby stałej z zakresu 0 - 255, które jest następnie skalowana.
Możliwość przeskalowania liczby z wykorzystaniem rotacji w zakresie od 0 do 30 (krok co 2) 
4 bitowa wartość pomnożona przez 2.
Stałe często wykorzystywane są jako maski bitowe lub wartości przesunięcia:
Poprawne wartości: 0xFF, 0x104, 0xFF0, 0xFF00, 0xFF00.0000, 0xF000.000F,
Niepoprawne wartości: 0x101, 0x102, 0xFF1, 0xFF04, 0xFF003, 0xFFFF.FFFF, 0xF000.001F.
11 8 7 0
rot immed_8
x2
Shifter
ROR
Rule to remember is  8-bits rotated right by an even number of bit positions .
Katedra Mikroelektroniki i Technik Informatycznych DMCS
31
Systemy wbudowane
Przesuwnik bitowy
Przesuwnik bitowy
Rejestr, dana skalowana (opcjonalnie)
Operand
Operand
przesunięcie może zostać podane jako:
2
1
5 bitowa liczba (unsigned integer, np.
#10)
Najmłodsze bity rejestru (np. R7)
Wykorzystywane podczas mnożenia
Barrel
przez stałą liczbę (R1 * 7)
Shifter
Dana w postaci natychmiastowej
8 bitowa liczba z zakresu 0-255.
Rotacja operandu o stałą liczbę (ang.
rotation), mnożenie
ALU
Pozwala na zwiększenie zakresu liczby
ładowanej przy wykorzystaniu
adresowania natychmiastowego (np.
R0, ASR #2080)
Result
Katedra Mikroelektroniki i Technik Informatycznych DMCS
32


Wyszukiwarka

Podobne podstrony:
0110 04 05 2009, cwiczenia nr 10 , Tkanka łączna właściwa Paul Esz
[C] SZZL Pojęcie i istota ZZL u (2009 04 05)
Irak będzie respektować kalendarz wojsk USA (04 05 2009)
Materiały termoizolacyjne nie tylko ocieplają 10 04
10 04
10 04 Planowanie BHP
TI 00 10 04 T pl(1)
BO 04 05 PONN082
10 MOSTY KRATOWE v2 s4

więcej podobnych podstron