7 Stos 2015 www


http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska
http://en.wikipedia.org/wiki/Reverse_Polish_notation
Odwrotna Notacja Polska
Reverse Polish Notation [1#2]
wprowadzona w latach 1950 przez Burksa, Warrena i Wright / Hamblina na
cześć polskiego matematyka Jana Aukasiewicza, jako zapis wyrażeń
arytmetycznych, w którym znak wykonywanej operacji umieszczony po
Podstawy techniki
operandach (zapis postfiksowy), a nie pomiędzy nimi (konwencjonalny zapis
algebraiczny  zapis infiksowy) lub przed operandami (zwykła notacja polska
mikroprocesorowej
 zapis prefiksowy)
ETEW006
jednoznacznie określa kolejność wykonywanych działań:  3 + 4  3 4 +
Stos
zapis całkowicie rezygnuje z użycia nawiasów w wyrażeniach
automatyczny stos pozwala na proste przechowywania pośrednich wyników
do wykorzystania w pózniejszych obliczeniach
Andrzej Stępień
Katedra Metrologii Elektronicznej i Fotonicznej
stos zawiera listę oczekujących wartości/argumentów
http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska
http://en.wikipedia.org/wiki/Reverse_Polish_notation
Odwrotna Notacja Polska [2#2]
Jak rozwiązać problem ?
wyrażenie "5 + ((1 + 2) " 4) - 3" zapisane w RPN jako: 5 1 2 + 4 " + 3 -
" "
" "
" "
stos
parametr operacja stos
5 na stos 5 Jeśli w języku wysokiego poziomu (ALGOL/FORTRAN,
2
+
1 na stos 5, 1
rok 1950) zwiększyć efektywność i wydajność przez
1 3
2 na stos 5, 1, 2
wprowadzenie podprogramów, to jak:
+ dodawanie 5, 3 5 5
" przenieść zmienne z programu głównego do tego
4 na stos 5, 3, 4 4
"
3
12
podprogramu ?
" mnożenie 5, 12 5
5
" zapamiętać adres powrotu z podprogramu ?
12
+
" zapamiętywać wartości chwilowe obliczeń ?
+ dodawanie 17 5 17
" uprościć obliczenia, np. typu X = (A + B) " (C + D) ?
3 na stos 17, 3 3
6
6 odejmowanie 14 17 14
P. J. Koopman, Jr.: Stack Computers the new wave.
Originally published by Ellis Horwood in 1989
Po co komu stos ? Stos (Stack)
TOS
Rozwiązanie
(Top Of Stack -
12 34 56 78
szczyt stosu )
wprowadzić stos (Stack), liniową strukturę danych traktowaną jako 12 34 56
rejestr typu LIFO (Last In First Out) lub wydzielony obszar
12 34
pamięci RAM
12
PUSH 12
PUSH 34
wprowadzić instrukcje procesora typu:
PUSH 56
PUSH 78
LIFO
PUSH
 PUSH arg, odesłanie argumentu na stos
POP
 POP arg, pobranie argumentu ze stosu
12 34 56
12 34
 CALL addr, wywołanie podprogramu  odesłanie na stos
12
adresu powrotu z podprogramu
Fig. 1.1  An
example of
 RET, powrót z podprogramu  pobranie ze stosu adresu
POP 78 stack operation
powrotu, adresu dalszej części programu głównego POP 56
POP 34
POP 12
1
z grawitacj
ą
, bez praw mechaniki
P. J. Koopman, Jr.: Stack Computers the new wave. P. J. Koopman, Jr.: Stack Computers the new wave.
Originally published by Ellis Horwood in 1989 Originally published by Ellis Horwood in 1989
PUSH
koniec
Operacje na stosie
Komputery stosowe (Stack Computers)
Stos
(stack)
MCU wykorzystuje wieloelementowe instrukcje
zapisu/odczytu (load-store multiple instructions)
Stos jest prostą, intuicyjną strukturą (Stacks are simple, a child intuitively
początek
do wykonywania operacji na stosie: POP
understands a stack of things and how it works)
operacja PUSH (placing data onoto the stack) do zapisu danych na stosie
Stos jest strukturą, tablicą, obszarem danych o dostępie typu LIFO (Last In
First Out buffer). operacja POP (lub PULL) (removing data from a stack) do odczytu
danych ze stosu
Komputer stosowy to maszyna posiadająca część:
przepełnienie stosu (stack overflow) występuje, jeśli w trakcie operacji
 sprzętową:
PUSH wskaznik stosu (stack pointer) zwiększany (increment) lub
wskaznik stosu (SP  stack pointer) adresujący wydzielony obszar zmniejszany (decrement) przekracza zadeklarowany rozmiar stosu
pamięci RAM (stos)
niedomiar stosu (underflow occurs)  jeśli w trakcie operacji POP
zestaw wewnętrznych rejestrów (on-chip registers) pełniących rolę
wskaznik stosu (stack pointer) zmniejszany (decrement) lub zwiększany
całego lub części stosu (pozostała część stosu w pamięci RAM)
(increment) doprowadza do odczytu danych z poza zadeklarowanego
 programową  instrukcje w celu łatwej komunikacji ze stosem
obszaru stosu
P. J. Koopman, Jr.: Stack Computers the new wave.
Originally published by Ellis Horwood in 1989
push & pop
operations
ALU: addition, subtraction,
(LIFO)
logical (AND, OR, XOR) and
Stack
test for zero
DS
Typy stosu
TOS
Machine
Data Stack
sprzętowy:
ALU
- stos złożony z N dodatkowych, równoległych rejestrów lub rejestrów
RS
przesuwnych typu LIFO
D
Return Stack
A
- szybkie (w stosunku do realizacji programowej) odwołania do stosu
store subroutine
T
mały rozmiar stosu (w stosunku do realizacji programowej)
Program
return address
A
Counter
B programowy:
u
Memory - adresowanie dodatkowym rejestrem, wskaznikiem stosu SP
s
Address
I/O
(Stack Pointer)
Register
Fig. 3.1  The
- automatyczna inkrementacja / dekrementacja wskaznika stosu SP
Canonical
Address
przy każdorazowym odwołaniu do stosu
Stack
Data Data
Machine
- alokacja stosu w pamięci RAM, specjalnej lub ogólnej
Control Program
Logic & IR Memory
- rozmiar stosu ograniczony rozmiarem dostępnej pamięci RAM
P. J. Koopman, Jr.: Stack Computers the new wave. P. J. Koopman, Jr.: Stack Computers the new wave.
Originally published by Ellis Horwood in 1989 Originally published by Ellis Horwood in 1989
Pojedynczy stos Wielokrotny stos
pojedynczy stos standardowo obsługiwany przez procesor 
dedykowany zestaw instrukcji (PUSH, POP, CALL, RET itp.) wielokrotny stos kontrola przepływu danych i sterowania:
- jeden stos (jeden obszar pamięci RAM) do pamiętania adresów
przeznaczenie pojedynczego stosu  przechowywanie stanu powrotów z podprogramów i obsługi przerwań (sterowanie)
procesora przy wywoływaniu funkcji i obsłudze przerwań oraz
- inne stosy (inne obszary pamięci RAM) do przenoszenia parametrów
przechowywanie wyników cząstkowych obliczeń; zwykle
do/z funkcji (dane)
wykorzystywane przez kompilator
w komputerach stosowych możliwość automatycznego dostępu do
zaleta pojedynczego stosu  łatwiejsze zarządzanie pamięcią, jeden parametrów wejściowych i wyjściowych funkcji  przetwarzanie
obszar pamięci przeznaczony na stos równoległe
dwa stosy w języku Forth: jeden do przenoszenia parametrów, drugi do
wada pojedynczego stosu  wzajemne zagnieżdżenie parametrów
przechowywania adresów powrotów z podprogramów
wejściowych i wyjściowych podprogramów oraz adresów powrotów z
podprogramów i obsługi przerwań
2
register
Top-Of-Stack
Cortex"!-A8. Technical Reference Manual. PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM
Revision: r3p2. ARM, DDI 0344K, fig. 2-10 Microcontroller. Microchip Technology, 1996, DS30412C
Hardware Stack
Cortex-A Registers
PIC17C4x (Microchip Technology) [1#2]
Privileged Modes
Exception Modes
szesnaście, 16-bitowych rejestrów tworzy stos sprzętowy
Super- Unde- Fast Secure
User System Abort Interrupt
visor fined Interrupt
monitor
stos nie jest częścią programu i nie jest
R0
częścią pamięci danych (zestaw
The basis of the Security
R1
Extensions model is that the wewnętrznych rejestrów)
R2
R3 computing environment
Thumb
R4 splits into two isolated
brak możliwości wpisu i odczytu
state
ARM R5 states, the Secure state and
zawartości wartości do/ze wskaznika stosu
state
R6
the Nonsecure state
R7
stan licznika programu (PC) zapisywany
R8 R8_fiq
na stosie, gdy jest wykonywana instrukcja
R9 R9_fiq
R10 Saved Program R10_fiq CALL lub jest przyjmowane przerwanie
R11 Status Register R11_fiq
R12 R12_fiq
instrukcje RETURN (Return from subroutine),
R13 (Stack Pointer) R13_svc R13_abt R13_und R13_irq R13_fiq R13_mon
RETLW (Return literal to WREG [Working
R14 (Link Register) R14_svc R14_abt R14_und R14_irq R14_fiq R14_mon
Register]) lub RETFIE (Return from interrupt
PC (Program Counter)
and enable interrupts) pobierają zawartość ze
FIGURE 6-1:PROGRAM MEMORY
CPSR (Current Program Status Register)
stosu MAP AND STACK
SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR _fiq SPSR_mon
PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM
Microcontroller. Microchip Technology, 1996, DS30412C Microcontroller. Microchip Technology, 1996, DS30412C
Hardware Stack Hardware Stack
PIC17C4x (Microchip Technology) [2#2] STKAV bit
bit STKAV (stack available) do kontroli przepełnienia stosu
stos jest buforem
kołowym/pierścieniowym (circular
bit STKAV = 1 ustawiany po zerowaniu procesora
buffer)
bit STKAV = 0 po osiągnięciu przez wskaznik stosu wartości 0Fh (16-ty
wartość początkowa wskaznika wpis do stosu)
stosu po dowolnym zerowaniu
bit STKAV = 0 jeśli wystąpi przepełnienie stosu  wskaznik stosu
wynosi '0
zmienia stan z 0Fh na 00h (stack pointer rolls over) i pozostaje w tym
stanie do zerowania procesora
po 16-krotnym wykonaniu operacji
PUSH (bez operacji POP), 17-ta
operacja PUSH nadpisuje wartość
 0  0 R  1 R/W  1 R  1 R  1  0  0
CPUSTA
pierwszej operacji PUSH
unimpl unimpl GLINTD TO PD unimpl unimpl
STKAV
REGISTER
18-ta operacja PUSH nadpisuje
STKAV = 1, stos dostępny
FIGURE 6-1:PROGRAM MEMORY
wartość drugiej operacji PUSH itd.
STKAV = 0, stos zapełniony
MAP AND STACK
Plik: startup_LPC11xx.s J. Yiu: The Definitive Guide to the ARM Cortex-M0.
www.Keil.com Elsevier Inc. 2011, p.39
J. Yiu: The Definitive Guide to the ARM Cortex-M3.
Second Edition. Elsevier Inc. 2010, p.40
Rozpoczęcie programu
Rozpoczęcie programu
Cortex M0 / Cortex-M0+ [1#3]
Cortex M0 / Cortex-M0+ [2#3]
po zakończeniu stanu reset procesor odczytuje dwa słowa:
27 ; Stack Configuration
28 ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> % pierwsze o adresie 0x0000 0000: wartość początkowa wskaznika stosu
29 ;
R13 = MSP
30
% drugie o adresie 0x0000 0004: rozpoczęcie wykonywania kodu programu
31 Stack_Size EQU 0x00000200
32 użytkownika (Reset vector); LSB = 1 oznacza tryb Thumb
33 AREA STACK, NOINIT, READWRITE, ALIGN=3
34 Stack_Mem SPACE Stack_Size
to zasadnicza różnica, ponieważ standardowo, inne procesory od adresu
35 __initial_sp
0x0000 0000 rozpoczynają wykonywanie kodu programu
54 ; Vector Table Mapped to Address 0 at Reset
55
inicjalizacja
początek kodu
56 AREA RESET, DATA, READONLY wskaznika stosu
programu
MSP
57 EXPORT __Vectors
58
Address= Address= Address=
Reset
59 __Vectors DCD __initial_sp ; Top of Stack
0x0000 0000 0x0000 0004 Reset vector
60 DCD Reset_Handler ; Reset Handler
adres początku
61 .................................................................................
kodu programu
3
banked
unbanked
registers
registers
User Memory Space
User Memory Space
ARM Architecture. Reference Manual.
Plik: *.map
ARM DDI 0100I, July 2005, p.A5-47
www.Keil.com
RAM
Organizacja
Rozpoczęcie programu addr+4 next + 3
stosu programowego addr+3 next + 2
Cortex M0 / Cortex-M0+ [3#3]
addr+2 next + 1
Stos narasta w górę lub w dół; stos:
addr+1 next
Plik 3_Klawisz_LED_SysTick.map: last
SP = addr
- narastający (A  ascending)  narastające
next
addr 1
adresy pamięci RAM traktowanej jako stos
Image Symbol Table next + 1
addr 2
- malejący (D  descending)  malejące adresy next + 2
addr 3
pamięci RAM traktowanej jako stos
Local Symbols next + 3
addr 4
RAM
Symbol Name Value Ov Type Size Object(Section)
Wskaznik stosu (Stack pointer  SP) wskazuje:
addr+4 nex + 2
addr+3 next + 1
RESET 0x00000000 Section 192 startup_lpc11xx.o(RESET)
- pełny stos (F  full stack), wskaznik stosu SP
addr+2 next
...........................................................................................................................
wskazuje adres ostatniej zajętej lub pełnej
addr+1 last
HEAP 0x10000088 Section 0 startup_lpc11xx.o(HEAP)
komórki pamięci RAM
SP = addr
STACK 0x10000088 Section 512 startup_lpc11xx.o(STACK)
last
- pusty stos (E  empty stack), wskaznik stosu addr 1
Heap_Mem 0x10000088 Data 0 startup_lpc11xx.o(HEAP)
next
SP wskazuje adres pierwszej wolnej lub addr 2
Stack_Mem 0x10000088 Data 512 startup_lpc11xx.o(STACK)
next + 1
addr 3
pustej komórki pamięci RAM
__initial_sp 0x10000288 Data 0 startup_lpc11xx.o(STACK)
next + 2
addr 4
RAM
RAM
Organizacja typu: FA / EA Organizacja typu: FD / ED
addr+4 next + 3
addr+2
Stos o narastających adresach lub malejących Stos o narastających adresach lub malejących
addr+3 next + 2 FD
addr+1
adresach: adresach:
addr+2 next + 1
last
SP = addr
- narastające (Ascending) adresy wskaznika stosu (SP)
- narastające (Ascending) adresy wskaznika
addr+1 next
next
addr 1
przy zapisie do stosu
stosu (SP) przy zapisie do stosu
last
SP = addr next + 1
addr 2
- malejące (Descending) adresy wskaznika
- malejące (Descending) adresy wskaznika stosu
addr 1 next + 2
addr 3
FA
(SP) przy zapisie do stosu stosu (SP) przy zapisie do stosu
addr 2 next + 3
addr 4
Wskaznik stosu (SP) wskazuje na:
Wskaznik stosu (SP) wskazuje na:
- pełny stos (Full stack), wskaznik stosu (SP)
- pełny stos (Full stack), wskaznik stosu (SP)
wskazuje na ostatnią zajętą komórkę pamięci
RAM RAM
wskazuje na ostatnią zajętą komórkę pamięci
stosu; kolejność operacji PUSH:
stosu; kolejność operacji PUSH:
addr+4 nex + 2
addr+2
1. wpis zmiennej na stos
1. wpis zmiennej na stos
addr+3 next + 1 ED
addr+1
2. inkrementacja wskaznika stosu (SP)
2. dekrementacja wskaznika stosu (SP)
addr+2 next
SP = addr
addr+1 last
last
- pusty stos (Empty stack), wskaznik stosu - pusty stos (Empty stack), wskaznik stosu (SP) addr 1
next
(SP) wskazuje na pierwszą wolną komórkę SP = addr wskazuje na pierwszą wolną komórkę pamięci addr 2
next + 1
pamięci stosu; kolejność operacji PUSH: addr 1 stosu; kolejność operacji PUSH: addr 3
EA
next + 2
1. inkrementacja wskaznika stosu (SP) addr 2 1. dekrementacja wskaznika stosu (SP) addr 4
2. wpis zmiennej na stos 2. wpis zmiennej na stos
ARMv6-M Architecture Reference Manual. ARMv6-M Architecture Reference Manual.
ARM DDI 0419C, September 2010 ARM DDI 0419C, September 2010
ARMv7-M Architecture Reference Manual. ARMv7-M Architecture Reference Manual.
ARM DDI 0403D, Errata 2010_Q3 ARM DDI 0403D, Errata 2010_Q3
Cortex M Cortex M
Rejestry wskaznika stosu (Stack Pointer) Rejestr powiązań (Link Register)
rejestry ogólnego przeznaczenia rdzenia rejestry ogólnego przeznaczenia rdzenia
R0 R0
R1 (General Purpose ARM Core Register) R1 (General Purpose ARM Core Register)
R2 R2
rejestry rejestry
R3 R3
(Low (Low
R4 R4
Register) Register)
R5 R5
R6 2 najmniej znaczące bity wskaznika stosu R6
R7 R7
(MSP lub PSP) są zawsze równe 0, co
R8 R8
oznacza, że są zawsze wyrównane do
rejestry rejestry
R9 R9
(High (High
słowa (word aligned)
R10 R10
Link Register (R14 = LR)
Register) Register)
R11 R11
przechowuje adres powrotu z
R12 R12
Main Stack Register
podprogramu, obsługi
(SP_main po Reset) Stack
MSP
wyjątku/przerwania
R13 (MSP) R13 (PSP) Stack Pointer (SP) R13 (MSP) R13 (PSP)
Pointer (SP)
PSP
Process Stack Register (exception/interrupt)
(SP_process)
R14 R14
Link Register (LR) Link Register (LR)
nieokreślona wartość po
Program Counter (PC) Program Counter (PC)
PC PC
zerowaniu procesora (reset)
4
J. Yiu: The Definitive Guide to the ARM Cortex-M0. J. Yiu: The Definitive Guide to the ARM Cortex-M3.
Elsevier Inc. 2011, Fig. 3.1 Second Edition. Elsevier Inc. 2010, Fig. 2.4, 2.5
Cortex M0 (ARMv6M) Cortex M3 (ARMv7M)
Operation Modes Operation Modes
The Cortex-M0 processor
Privileged User
has two operation modes
Thumb State
When running an exception handler
Handler mode
and two states
Exception
Handler Mode When not running an exception
request
Thread mode Thread mode
Executing exception handler (e.g., main program)
handler
Debug State
Debug
(The processor stop
activities
executing instruction) Thumb/Thumb-2 State
Thread Mode
Start
Executing normal
(Reset)
Exception Privileged
code
Exception Exception
return
Handler
request request
Exception
exit
In Handler mode, the processor uses the Main Stack Pointer (MSP).
In Thread mode it can use Main Stack Pointer or Process Stack Pointer Start
Privileged
User
(Reset)
(PSP).
Thread
Thread
Program of CONTROL
An ARMv6-M implementation only supports
register
[DDI0419C, A2.1.1]
privileged operation
PM0223. STM32L0 Series Cortex-M0+ programming manual.
ARMv6-M Architecture Reference Manual.
STMicroelectronics , DocID025763 Rev 1 , April 2014, p.13
ARM DDI 0419C, September 2010, p.A1-27
ARMv6-M Architecture Reference Manual.
ARM DDI 0419C, September 2010, p.A1-27
Cortex M0+ (ARMv6M)
Cortex M0+ (ARMv6M)
Operation Modes [2#2]
Operation Modes [1#2]
Table 2. Summary of processor mode, execution privilege level, and stack
In ARMv7-M, software can run either at privileged or unprivileged level.
use options
Processor Used to execute Privilege level for Stack used
In systems implemented with the ARMv6-M base architecture, all
mode software execution
software runs at privileged level.
Thread Applications Privileged Main stack
or unprivileged or process stack
By adding the Unprivileged/Privileged Extension, ARMv6-M systems can
Handler Exception handlers Always privileged Main stack
use the same privilege levels as ARMv7-M while still having the benefit of
very low gate count.
Table 9. Control register bit assignments
In addition, with the same privilege levels as ARMv7-M, ARMv6-M systems
Bits Name Function
can use the optional MPU (Memory Protection Unit) that the PMSA
[31:2] Reserved.
(Protected Memory System Architecture) Extension provides.
[1] SPSEL Defines the current stack:
0 = MSP is the current stack pointer.
In Handler mode, the processor uses the Main Stack Pointer (MSP).
1 = PSP is the current stack pointer.
In Thread mode it can use Main Stack Pointer or Process Stack Pointer
In Handler mode this bit reads as zero and ignores writes.
(PSP).
[0] nPRIV Defines the Thread mode privilege level:
An ARMv6-M implementation only supports 0 = Privileged.
[DDI0419C, A2.1.1]
1 = Unprivileged
privileged operation
1)
www.keil.com MSP430FR57xx Family User's Guide.
2)
TI SLAU272B, May 2011 Revised January 2013, p.169
Procedure Call Standard for the ARM Architecture.
ARM, IHI 0042E, 30th November 2012
MSP430
AAPCS
PUSH  wpis na stos
ARM7/9
AAPCS (Procedure Call Standard for the ARM Architecture)  relacje między PUSH[.W] Wpisz słowo na stos
PUSH.B Wpisz bajt na stos
procedurą wywołująca i wywoływaną 2):
zasady wywoływania podprogramu, użycia rejestrów Syntax PUSH dst lub PUSH.W dst
zasady wykorzystania rejestrów przez procedurę wywoływaną
PUSH.B dst
zasady ingerencji procedury wywoływanej w stan procedury wywołującej
Operation SP  2 SP
dst @SP
Przeznaczenie rejstrow:
R1 .. R0  argumenty / wyniki / robocze
Przykład
R3 .. R2  argumenty / robocze po inicjalizacji:
MOV.W #0x0280, SP ; np. SP = 0280h po Init
SPINIT = End_of_RAM + 1
R8 .. R4  argumenty
PUSH R9 ; SP = 0280h  2 = 027Eh
1)
__irq void IRQ_Timer0 (void) = 0280h
Stos
; R9 @SP
{ // STMDB R13!, {R0-R1}
SP = 027Eh R9
PUSH #1234h ; SP = 027Eh  2 = 027Ch
& & & & & & & & & & & & & & &
; #1234h @SP SP = 027Ch 1234h
} // LDMIA R13!, {R0-R1}
?
// SUBS PC, R14, #4
5
MSP430FR57xx Family User's Guide. PM0223. STM32L0 Series Cortex-M0+ programming manual.
TI SLAU272B, May 2011, Revised January 2013, p.168 STMicroelectronics, DocID025763 Rev 1, 2014, p.52
Cortex"!-M0 Revision: r0p0. Technical Reference Manual.
ARM DDI 0432C, p.3-6
MSP430
PUSH & POP
POP  odczyt ze stosu
Cortex M0 / Cortex-M0+ (ARMv6M)
Full-Descending stack:
Operation Description Assembler Cycles
POP[.W]* Odczytaj słowo ze stosu
POP.B* Odczytaj bajt ze stosu
PUSH Push PUSH {} 1+N
Push with link register PUSH {, LR} 1+N
Syntax POP dst ! *MOV @SP+, dst
!
!
!
instrukcja emulowana
POP Pop POP {} 1+N
Pop and return POP {, PC} 3+N
lub POP.W dst ! *MOV.W @SP+, dst
!
!
!
instrukcja emulowana
must use only R0-R7
POP.B dst ! *MOV.B @SP+, dst
!
!
!
instrukcja emulowana
instructions do not change the flags
Examples:
Operation @SP temp
SP + 2 SP
PUSH {R0  R2} ; (SP % 4) ! R2
temp dst
; (SP % 8) ! R1
; (SP % 12) ! R0
PM0223. STM32L0 Series Cortex-M0+ programming manual. Cortex"!-M0 Devices. Generic User Guide.
STMicroelectronics, DocID025763 Rev 1, 2014, p.66 ARM DUI 0497A, p.2-24
Cortex"!-M0 Revision: r0p0. Technical Reference Manual.`
ARM DDI 0432C, p.3-6
Cortex-M
R15 (PC)
Branch (CALL)
R14 (LR)
Składowanie MSP (Main Stack Pointer)
or
R13
Cortex M0 / Cortex-M0+ (ARMv6M)
(Stacking)
PSP (Process Stack Pointer)
R12
R11
wpis do licznika rozkazów
wartość wskaznika
(PC) adresu procedury R10
stosu (SP) przed
obsługi wyjątku/przerwania
R9 przyjęciem
(exception/interrupt vector
wyjątku/przerwania
Operation Description Assembler Cycles
R8

handler) i pobranie pierwszej
R7
xPSR [2]
Branch Branch with Link BL label 4
instrukcji tej procedury
R6
R15 (PC) [1]
Branch indirect with Link BLX Rm 3
R5
aktualizacja wartości rejestru R14 (LR) [8]
LR do wartości zwanej R4
POP Pop and return POP {, PC} 3+N
R12 [7]
EXC_RETURN
R3 R3
[6]
R2
R2 [5]
R1 R1 [4]
R0
Examples: wpis do rejestru IPSR R0 [3]
(Interrupt Program Status
stacking wartość wskaznika
APSR EPSR IPSR
BL funC ; Branch with link (Call) to function funC,
Register) numeru
stosu (SP) po
Application
; return address stored in LR wyjątku/przerwania PRIMASK
+ Execution przyjęciu
+ Interrupt
(exception/interrupt
wyjątku/przerwania
FAULTMASK
Program Status
BLX R0 ; Branch with link and exchange (Call)
number)
Register
BASEPRI
; to a address stored in R0
CONTROL
Problemy i pytania
1. Jakie jest przeznaczenie stosu ?
2. Gdzie są pamiętane argumenty w komputerze stosowym ?
3. Jaka jest kolejność wykonywanych operacji w odwrotnej notacji polskiej ?
4. Jaka jest logiczna organizacja stosu ?
5. Co oznaczają skróty FA i EA dotyczące organizacji stosu ?
6. Co oznaczają skróty FD i ED dotyczące organizacji stosu ?
7. Jakie są zalety i wady pojedynczego stosu ?
8. Jakie są zalety i wady wielokrotnego stosu ?
9. Czym się różni stos sprzętowy od programowego ?
10. Jakie jest przeznaczenie instrukcji PUSH i POP ?
11. Jakie jest przeznaczenie instrukcji CALL i RET ?
12. W jaki sposób jest adresowany i obsługiwany stos sprzętowy ?
13. W jaki sposób jest adresowany i obsługiwany stos programowy ?
14. Jakie jest przeznaczenie rejestru SP ?
15. Jak rozszyfrować pojęcie TOS przy dostępie do stosu ?
16. Na czym polega inicjalizacja stosu ?
6


Wyszukiwarka

Podobne podstrony:
2 Architektura 15 www
4 Typy instrukcji Tryby?resowania 15 www (1)
3 Przetw?nych Typy proces 15 www (1)
12 DMA 15 www
13 Power 15 www
8 Przerwania 15 www
6 Pamieci ROM RAM 15 www
9 Liczniki 15 www
5 Architektura MCU 15 www (1)
www livemocha com angielski lekcja audio
15 3
15

więcej podobnych podstron