background image

1

Podstawy techniki 

mikroprocesorowej 

ETEW006

Stos

Andrzej Stępień

Katedra Metrologii Elektronicznej i Fotonicznej

Odwrotna Notacja Polska
Reverse  Polish  Notation  

[1#2]

wprowadzona 

w latach 1950 przez Burksa, Warrena i Wright / Hamblina na 

cze

ść

 

polskiego matematyka Jana Łukasiewicza

, jako zapis wyra

ż

e

ń

 

arytmetycznych, w którym 

znak

wykonywanej 

operacji

umieszczony 

po 

operandach 

(zapis  postfiksowy), a nie pomi

ę

dzy nimi (konwencjonalny zapis 

algebraiczny – zapis  infiksowy) lub przed operandami (zwykła notacja polska 
– zapis prefiksowy)

jednoznacznie okre

ś

la 

kolejno

ść

wykonywanych działa

ń

: ”

3 + 4

 ”

3 4 +

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ó

ź

niejszych obliczeniach

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

parametr

operacja

stos

na stos

5

na stos 

5, 1

na stos 

5, 1, 2

+

dodawanie

5, 

3

4

na stos 

5, 3, 4

mno

ż

enie

5, 

12

+

dodawanie

17

na stos

17, 3

̶

odejmowanie

14

Odwrotna Notacja Polska  

[2#2]

wyra

ż

enie  "

5 + ((1 + 2) 

∗∗∗∗

4) − 3

" zapisane w 

RPN

jako:   

5 1 2 + 4 

∗∗∗∗

+ 3 −

http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska

http://en.wikipedia.org/wiki/Reverse_Polish_notation

3

5

+

stos

12

5

17

+

14

̶

1

2

5

3

5

4

12

5

17

3

Jak  rozwiązać problem ?

Je

ś

li w j

ę

zyku wysokiego poziomu (ALGOL/FORTRAN, 

rok 1950) zwi

ę

kszy

ć

 efektywno

ść

 i wydajno

ść

 przez 

wprowadzenie podprogramów, to jak:

• przenie

ść

 zmienne z programu głównego do tego 

podprogramu ? 

• zapami

ę

ta

ć

 adres powrotu z podprogramu ?

• zapami

ę

tywa

ć

 warto

ś

ci chwilowe oblicze

ń

 ?

• upro

ś

ci

ć

 obliczenia, np. typu X = (A + B) 

(C + D) ?

Po  co  komu  stos ?

Rozwi

ą

zanie

wprowadzi

ć

 

stos

(Stack), liniow

ą

 struktur

ę

 danych traktowan

ą

 jako 

rejestr

typu 

LIFO

(Last In First Out) lub 

wydzielony obszar 

pami

ę

ci RAM

wprowadzi

ć

 instrukcje procesora typu:

– PUSH arg

, odesłanie argumentu na stos 

– POP arg

, pobranie argumentu ze stosu

– CALL addr

,

wywołanie podprogramu – odesłanie na stos 

adresu powrotu z podprogramu

– RET

,

powrót z podprogramu – pobranie ze stosu adresu 
powrotu, adresu dalszej cz

ęś

ci programu głównego

Stos (Stack)

12

34

12

PUSH 12 PUSH 34

56

34

PUSH 56

12

78

56

PUSH 78

34

12

12

34

12

POP 12

POP 34

56

34

POP 56

12

POP 78

TOS

(Top Of Stack  -
szczyt stosu )

PUSH

POP

Fig. 1.1 – An 
example of 
stack operation

z

 g

ra

w

it

a

c

j

ą

b

e

z

 p

ra

w

 m

e

c

h

a

n

ik

i

P. J. Koopman, Jr.: Stack Computers the new wave.

Originally published by Ellis Horwood in 1989

LIFO

background image

2

Komputery  stosowe  

(Stack Computers)

Stos 

jest prost

ą

, intuicyjn

ą

 struktur

ą

 (

Stacks are simple, a child intuitively 

understands a stack of things and how it works

)

Stos 

jest struktur

ą

, tablic

ą

, obszarem danych o dost

ę

pie typu

LIFO

(

L

ast 

I

F

irst 

O

ut buffer)

Komputer stosowy

to maszyna posiadaj

ą

ca cz

ęść

sprz

ę

tow

ą

:

wska

ź

nik stosu 

(

SP – stack pointer

adresuj

ą

cy wydzielony  obszar 

pami

ę

ci RAM (stos)

zestaw wewn

ę

trznych rejestrów 

(

on-chip registers

pełni

ą

cych rol

ę

 

całego lub cz

ęś

ci stosu (pozostała  cz

ęść

 stosu w pami

ę

ci RAM)

programow

ą

 – instrukcje

w celu łatwej komunikacji ze stosem

P. J. Koopman, Jr.: Stack Computers the new wave. 

Originally published by Ellis Horwood in 1989

Operacje na stosie

MCU wykorzystuje wieloelementowe instrukcje 
zapisu/odczytu (

load-store multiple instructions

do wykonywania  operacji na stosie:

operacja 

PUSH

(

placing data onoto the stack

do zapisu danych na stosie

operacja 

POP

(lub 

PULL

) (

removing data from a stack

do odczytu 

danych ze stosu

przepełnienie stosu 

(

stack overflow

wyst

ę

puje, je

ś

li w trakcie operacji 

PUSH

wska

ź

nik stosu (

stack pointer

zwi

ę

kszany  (

increment

lub 

zmniejszany (

decrement

przekracza zadeklarowany  rozmiar stosu

niedomiar stosu 

(

underflow occurs

– je

ś

li w trakcie operacji 

POP

wska

ź

nik stosu (

stack pointer

zmniejszany (

decrement

lub zwi

ę

kszany 

(

increment

doprowadza do odczytu danych z poza zadeklarowanego 

obszaru stosu

P. J. Koopman, Jr.: Stack Computers the new wave. 

Originally published by Ellis Horwood in 1989

Stos

(stack)

pocz

ą

tek

koniec

PUSH

POP

Stack
Machine

DS

Data Stack

Program

Counter

Data

Address

ALU

RS

Return Stack

TOS

Program

Memory

Control

Logic & IR

I/O

Memory

Address

Register

Data

D
A

T
A

B

u
s

push & pop 

operations

(LIFO)

store subroutine 

return address

Fig. 3.1 – The 

Canonical 
Stack 
Machine

ALU: addition, subtraction, 

logical (AND, OR, XOR) and 

test for zero

T

o

p

-O

f-

S

ta

c

k

 

re

g

is

te

r

P. J. Koopman, Jr.: Stack Computers the new wave. 

Originally published by Ellis Horwood in 1989

Typy   stosu

sprz

ę

towy

:

- stos zło

ż

ony  z 

N

dodatkowych, równoległych 

rejestrów

lub rejestrów 

przesuwnych  typu LIFO

szybkie

(w stosunku do realizacji programowej) odwołania do stosu 

mały rozmiar stosu

(w stosunku do realizacji programowej)

programowy

:

adresowanie

dodatkowym rejestrem, 

wska

ź

nikiem stosu SP

(Stack Pointer)

automatyczna inkrementacja

dekrementacja

wska

ź

nika stosu SP 

przy ka

ż

dorazowym odwołaniu do stosu

alokacja stosu w pami

ę

ci RAM

, specjalnej lub ogólnej

rozmiar stosu ograniczony rozmiarem dost

ę

pnej pami

ę

ci RAM

Pojedynczy  stos

pojedynczy  stos 

standardowo obsługiwany  przez procesor –

dedykowany zestaw instrukcji (PUSH, POP, CALL, RET itp.)

przeznaczenie pojedynczego  stosu

– przechowywanie stanu 

procesora przy wywoływaniu funkcji i obsłudze przerwa

ń

 oraz 

przechowywanie  wyników  cz

ą

stkowych oblicze

ń

; zwykle 

wykorzystywane przez kompilator

zaleta pojedynczego  stosu

– łatwiejsze zarz

ą

dzanie  pami

ę

ci

ą

, jeden 

obszar pami

ę

ci przeznaczony na stos

wada pojedynczego stosu

– wzajemne zagnie

ż

d

ż

enie parametrów 

wej

ś

ciowych  i wyj

ś

ciowych podprogramów oraz adresów powrotów z 

podprogramów i obsługi przerwa

ń

P. J. Koopman, Jr.: Stack Computers the new wave. 

Originally published by Ellis Horwood in 1989

Wielokrotny   stos

wielokrotny stos

kontrola przepływu  danych i sterowania:

jeden stos (jeden obszar pami

ę

ci RAM) do pami

ę

tania adresów 

powrotów z podprogramów i obsługi przerwa

ń

 (sterowanie)

inne stosy (inne obszary pami

ę

ci RAM) do przenoszenia parametrów 

do/z funkcji (dane)

komputerach stosowych

mo

ż

liwo

ść

 automatycznego dost

ę

pu do 

parametrów wej

ś

ciowych i wyj

ś

ciowych funkcji – przetwarzanie 

równoległe

dwa stosy w j

ę

zyku Forth: 

jeden do przenoszenia parametrów, drugi do 

przechowywania  adresów powrotów z podprogramów

P. J. Koopman, Jr.: Stack Computers the new wave.

Originally published by Ellis Horwood in 1989

background image

3

Cortex-A  Registers

User

System

Super-

visor

Abort

Unde-

fined

Interrupt

Fast

Interrupt

Privileged Modes

Exception Modes

R14_fiq

R13_fiq

R12_fiq

R11_fiq

R10_fiq

R9_fiq

R8_fiq

R14_irq

R13_irq

R14_und

R13_und

R14_abt

R13_abt

R14_svc

R13_svc

SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR _fiq

R0

R1
R2
R3

R4
R5

R6

R7

R8
R9

R10
R11
R12

R13 

(Stack Pointer)

R14  

(Link Register)

u

n

b

a

n

k

e

d

 

re

g

is

te

rs

b

a

n

k

e

d

 

re

g

is

te

rs

PC 

(Program Counter)

CPSR 

(Current Program Status Register)

Saved Program

Status Register

ARM

state

Thumb

state

Cortex™-A8. Technical Reference Manual. 

Revision: r3p2. ARM, DDI 0344K, fig. 2-10

Secure

monitor

R14_mon

R13_mon

SPSR_mon

The basis of the 

Security 

Extensions model 

is that the 

computing environment 

splits

into 

two

isolated 

states, the 

Secure state 

and 

the 

Nonsecure state

Hardware Stack

PIC17C4x 

(Microchip Technology)   [1#2]

PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM 

Microcontroller.  Microchip Technology, 1996, DS30412C

FIGURE 6-1:PROGRAM MEMORY 

MAP AND STACK

stos

nie jest cz

ęś

ci

ą

 programu i nie jest 

cz

ęś

ci

ą

 pami

ę

ci danych (zestaw 

wewn

ę

trznych rejestrów)

brak

mo

ż

liwo

ś

ci wpisu i odczytu 

zawarto

ś

ci warto

ś

ci do/ze wska

ź

nika stosu

stan licznika programu (PC) zapisywany 
na stosie, gdy jest wykonywana instrukcja 

CALL

lub jest przyjmowane przerwanie 

instrukcje

RETURN 

(Return from subroutine)

,

RETLW 

(Return literal to WREG [Working 

Register]) 

lub

RETFIE

(Return from interrupt 

and enable interrupts) 

pobieraj

ą

 zawarto

ść

 ze 

stosu

U

s

e

M

e

m

o

ry

 S

p

a

c

e

szesna

ś

cie, 16-bitowych rejestrów tworzy 

stos sprz

ę

towy

Hardware Stack

PIC17C4x

(Microchip Technology)   [2#2]

stos

jest buforem 

kołowym/pier

ś

cieniowym (

circular

buffer

)

warto

ść

pocz

ą

tkowa wska

ź

nika 

stosu po dowolnym zerowaniu 

wynosi 

'0‚

po

16-krotnym 

wykonaniu

operacji 

PUSH 

(bez operacji POP), 17-ta 

operacja PUSH 

nadpisuje

warto

ść

 

pierwszej

operacji 

PUSH

18-ta operacja PUSH 

nadpisuje

warto

ść

 

drugiej 

operacji 

PUSH 

itd.

U

s

e

M

e

m

o

ry

 S

p

a

c

e

PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM 

Microcontroller.  Microchip Technology, 1996, DS30412C

FIGURE 6-1:PROGRAM MEMORY 

MAP AND STACK

Hardware Stack 

STKAV  bit

bit STKAV

(

stack available

do kontroli przepełnienia stosu

bit STKAV = 1

ustawiany po zerowaniu procesora

bit STKAV = 0

po osi

ą

gni

ę

ciu przez wska

ź

nik stosu warto

ś

ci 

0Fh 

(16-ty 

wpis do stosu)

bit STKAV = 0

je

ś

li wyst

ą

pi przepełnienie stosu – wska

ź

nik stosu 

zmienia stan z 0Fh na 00h (stack pointer rolls over) i pozostaje w tym 
stanie do zerowania procesora

STKAV = 1, 

stos dost

ę

pny

STKAV = 0,

stos zapełniony

STKAV

GLINTD

TO

PD

unimpl

unimpl

unimpl

unimpl

– 0

– 0

R – 1 R/W – 1 R – 1

R – 1

– 0

– 0

CPUSTA

REGISTER

PIC17C4X. High-Performance 8-Bit CMOS EPROM/ROM 

Microcontroller.  Microchip Technology, 1996, DS30412C

Rozpoczęcie programu

Cortex

M0 / Cortex-M0+  

[1#3]

Plik:  startup_LPC11xx.s

www.Keil.com

27

; <h> Stack Configuration

28

; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>

29

; </h>

30

31

Stack_Size

EQU

0x00000200

32

33

AREA

STACK

NOINIT

READWRITE

ALIGN

=

3

34

Stack_Mem

SPACE

Stack_Size

35

__initial_sp

54

; Vector Table Mapped to Address 0 at Reset

55

56

AREA

RESET, DATA, 

READONLY

57

EXPORT

__Vectors

58

59

__Vectors

DCD

__initial_sp

; Top of Stack

60

DCD

Reset_Handler

; Reset Handler

61

.................................................................................

Rozpoczęcie programu

Cortex

M0 / Cortex-M0+  

[2#3]

J. Yiu: The Definitive Guide to the ARM Cortex-M0.

Elsevier Inc. 2011, p.39

J. Yiu: The Definitive Guide to the ARM Cortex-M3.

Second Edition. Elsevier Inc. 2010, p.40

po 

zako

ń

czeniu stanu reset 

procesor odczytuje dwa słowa:

pierwsze o adresie

0x0000 0000

: warto

ść

 pocz

ą

tkowa wska

ź

nika stosu 

R13 = MSP

drugie o adresie

0x0000 0004

: rozpocz

ę

cie wykonywania kodu programu 

u

ż

ytkownika (Reset vector); LSB = 1 oznacza tryb Thumb

to 

zasadnicza ró

ż

nica

, poniewa

ż

 standardowo, inne procesory od adresu 

0x0000 0000 rozpoczynaj

ą

 wykonywanie kodu programu

Address=

0x0000 0004

Address=

0x0000 0000

Reset

inicjalizacja

wska

ź

nika stosu 

MSP

adres pocz

ą

tku 

kodu programu

Address=

Reset vector

pocz

ą

tek kodu 

programu

background image

4

Rozpoczęcie programu

Cortex

M0 / Cortex-M0+  

[3#3]

Plik:  *.map

www.Keil.com

Plik 3_Klawisz_LED_SysTick.map

:

Image Symbol Table

Local Symbols

Symbol Name Value

Ov Type Size

Object(Section)

RESET

0x00000000

Section

192

startup_lpc11xx.o(RESET)

...........................................................................................................................

HEAP

0x10000088

Section

0

startup_lpc11xx.o(HEAP)

STACK

0x10000088 Section

512

startup_lpc11xx.o(STACK)

Heap_Mem

0x10000088

Data

0

startup_lpc11xx.o(HEAP)

Stack_Mem

0x10000088 Data

512

startup_lpc11xx.o(STACK)

__initial_sp

0x10000288 Data

0

startup_lpc11xx.o(STACK)

Organizacja  
stosu programowego

Stos

narasta w 

gór

ę

lub w 

dół

stos

:

narastaj

ą

cy 

(

A

– ascending) – narastaj

ą

ce 

adresy pami

ę

ci RAM traktowanej jako stos

malej

ą

cy 

(

D

– descending) – malej

ą

ce adresy 

pami

ę

ci RAM traktowanej jako stos

Wska

ź

nik stosu 

(Stack pointer – SP) wskazuje:

pełny stos 

(

F

– full stack), wska

ź

nik stosu SP 

wskazuje adres ostatniej zaj

ę

tej lub pełnej 

komórki pami

ę

ci RAM

pusty stos 

(

E

– empty stack), wska

ź

nik stosu 

SP wskazuje adres pierwszej wolnej lub 
pustej komórki pami

ę

ci RAM

SP = addr

addr+1

addr+2

addr+3

addr+4

addr–1
addr–2
addr–3
addr–4

last

next

next + 1
next + 2
next + 3

next

next + 1

next + 2

next + 3

SP = addr

addr+1

addr+2

addr+3

addr+4

addr–1
addr–2
addr–3
addr–4

last

next

next + 1
next + 2

last

next

next + 1

RAM

RAM

ARM Architecture. Reference Manual. 

ARM DDI 0100I, July 2005, p.A5-47

nex + 2

Organizacja typu: FA / 

EA

SP = addr

addr+1

addr+2

addr+3

addr+4

addr–1
addr–2

last

next

next + 1

next + 2

next + 3

SP = addr

addr+1

addr+2

addr+3

addr+4

addr–1
addr–2

last

next

next + 1

nex + 2

RAM

RAM

Stos o narastaj

ą

cych adresach

lub malej

ą

cych 

adresach

:

narastaj

ą

ce 

(

A

scending)

adresy wska

ź

nika 

stosu 

(SP)

przy zapisie do stosu

malej

ą

ce (Descending) adresy wska

ź

nika stosu 

(SP) przy zapisie do stosu

Wska

ź

nik stosu 

(SP)

wskazuje na

:

pełny stos 

(

F

ull stack), wska

ź

nik stosu (SP)

wskazuje na ostatni

ą

 zaj

ę

t

ą

 komórk

ę

 pami

ę

ci 

stosu; kolejno

ść

 operacji PUSH:

1.

wpis zmiennej na stos

2.

inkrementacja wska

ź

nika stosu 

(SP)

pusty stos 

(

E

mpty stack), wska

ź

nik stosu 

(SP) wskazuje na pierwsz

ą

 woln

ą

 komórk

ę

 

pami

ę

ci stosu; kolejno

ść

 operacji PUSH:

1. inkrementacja wska

ź

nika stosu 

(SP)

2. wpis zmiennej na stos

FA

EA

Organizacja typu: FD / 

ED

SP = addr

addr+1

addr–1
addr–2
addr–3
addr–4

next

next + 1
next + 2
next + 3

SP = addr

addr+1

addr+2

addr–1
addr–2
addr–3
addr–4

last

next

next + 1
next + 2

addr+2

last

RAM

RAM

Stos o 

narastaj

ą

cych adresach 

lub malej

ą

cych 

adresach

:

narastaj

ą

ce (Ascending) adresy wska

ź

nika stosu (SP) 

przy zapisie do stosu

malej

ą

ce

(

D

escending)

adresy wska

ź

nika 

stosu 

(SP) 

przy zapisie do stosu

Wska

ź

nik stosu 

(SP)

wskazuje na

:

pełny stos 

(

F

ull stack), wska

ź

nik stosu (SP) 

wskazuje na ostatni

ą

 zaj

ę

t

ą

 komórk

ę

 pami

ę

ci 

stosu; kolejno

ść

 operacji PUSH:

1.

wpis zmiennej na stos

2.

dekrementacja wska

ź

nika stosu 

(SP)

pusty stos 

(

E

mpty stack), wska

ź

nik stosu (SP) 

wskazuje na pierwsz

ą

 woln

ą

 komórk

ę

 pami

ę

ci 

stosu; kolejno

ść

 operacji PUSH:

1.

dekrementacja wska

ź

nika stosu 

(SP)

2.

wpis zmiennej na stos

FD

ED

Cortex

M

Rejestry wskaźnika stosu  

(Stack Pointer)

MSP

PSP

Main Stack Register

(SP_main po Reset)

Process Stack Register

(SP_process)

Link Register (LR)
Program Counter (PC)

Stack Pointer (SP)

ARMv6-M Architecture Reference Manual. 

ARM DDI 0419C, September 2010

ARMv7-M Architecture Reference Manual. 

ARM DDI 0403D, Errata 2010_Q3

R0
R1
R2
R3
R4
R5
R6
R7
R8
R9

R10
R11
R12

R14

PC

2 najmniej znacz

ą

ce bity wska

ź

nika stosu 

(MSP lub PSP) s

ą

 zawsze równe 0, co 

oznacza, 

ż

e s

ą

 zawsze wyrównane do 

słowa (

word aligned

)

R13 (PSP)

R13 (MSP)

rejestry ogólnego przeznaczenia rdzenia

(General Purpose  ARM Core Register)

rejestry 

(Low

Register)

rejestry

(High

Register)

Cortex

M

Rejestr powiązań 

(Link Register)

Link Register (LR)

Program Counter (PC)

Stack

Pointer (SP)

ARMv6-M Architecture Reference Manual. 

ARM DDI 0419C, September 2010

ARMv7-M Architecture Reference Manual. 

ARM DDI 0403D, Errata 2010_Q3

R0
R1
R2
R3
R4
R5
R6
R7
R8
R9

R10
R11
R12

R14

PC

R13 (PSP)

R13 (MSP)

rejestry ogólnego przeznaczenia rdzenia

(General Purpose ARM Core Register)

rejestry 

(Low

Register)

rejestry

(High

Register)

Link Register 

(R14 = LR)

przechowuje adres powrotu z 
podprogramu, obsługi 
wyj

ą

tku/przerwania 

(exception/interrupt)

nieokre

ś

lona warto

ść

 po 

zerowaniu procesora (reset)

background image

5

Cortex

M0  

(ARMv6M)

Operation Modes

J. Yiu: The Definitive Guide to the ARM Cortex-M0.

Elsevier Inc. 2011, Fig. 3.1

Thread Mode

Executing normal

code

Thumb State

Exception
request

Exception
return

Handler Mode

Executing exception

handler

Debug State

(The processor stop

executing instruction)

Debug

activities

The 

Cortex-M0

processor 

has two operation modes 
and two states

Start

(

Reset

)

An 

ARMv6-M implementation only supports 

privileged operation

[DDI0419C, A2.1.1]

In 

Handler mode

, the processor uses the 

Main Stack Pointer

(MSP).

In 

Thread mode 

it can use

Main Stack Pointer 

or 

Process Stack Pointer 

(PSP).

Cortex

M3   

(ARMv7M)

Operation Modes

J. Yiu: The Definitive Guide to the ARM Cortex-M3.

Second Edition. Elsevier Inc. 2010, Fig. 2.4, 2.5

Privileged

Thread

Thumb/Thumb-2  State

Exception
request

Exception

exit

Start

(

Reset

)

Privileged

Handler

User

Thread

Exception

request

When 

running an exception 

handler

When 

not running an exception

handler (e.g., main program)

Privileged

User

Handler 

mode

Thread 

mode

Thread mode

Program of CONTROL

register

Cortex

M0+  

(ARMv6M)

Operation Modes

[1#2]

ARMv6-M Architecture Reference Manual.

ARM DDI 0419C, September 2010, p.A1-27

An 

ARMv6-M implementation only supports 

privileged operation

[DDI0419C, A2.1.1]

In 

Handler mode

, the processor uses the 

Main Stack Pointer

(MSP).

In 

Thread mode 

it can use

Main Stack Pointer 

or 

Process Stack Pointer 

(PSP).

In ARMv7-M, software can run either at privileged or unprivileged level

In systems implemented with the ARMv6-M base architecture, all 
software runs at privileged level.

By 

adding

the 

Unprivileged/Privileged Extension

ARMv6-M

systems can 

use the same privilege levels as ARMv7-M 

while still having the benefit of 

very low gate count.

In addition, with the same privilege levels as ARMv7-M, 

ARMv6-M systems 

can use the optional MPU

(Memory Protection Unit) that the PMSA 

(Protected Memory System Architecture) Extension provides.

Cortex

M0+  

(ARMv6M)

Operation Modes

[2#2]

PM0223. STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics , DocID025763 Rev 1 , April 2014, p.13

ARMv6-M Architecture Reference Manual.

ARM DDI 0419C, September 2010, p.A1-27 

Table 2. Summary of processor mode, execution privilege level, and stack 

use options 

Processor  Used to execute

Privilege level for 

Stack used 

mode

software execution 

Thread

Applications 

Privileged

Main stack 

or

unprivileged

or 

process stack

Handler 

Exception handlers

Always 

privileged

Main stack 

Table 9. Control register bit assignments 

Bits

Name 

Function 

[31:2] 

Reserved. 

[1] 

SPSEL 

Defines the current stack: 

0 = MSP is the current stack pointer

1 = PSP is the current stack pointer

In Handler mode this bit reads as zero and ignores writes.

[0]

nPRIV

Defines the Thread mode privilege level: 

0 = Privileged

1 = Unprivileged 

AAPCS

ARM7/9

1) 

www.keil.com

2) 

Procedure Call Standard for the ARM

®

Architecture.

ARM, IHI 0042E, 30th November 2012 

__irq void IRQ_Timer0 (void)

1)

// STMDB

R13!, {R0-R1}

………………………………………
}

// LDMIA

R13!, {R0-R1}

// SUBS

PC, R14, #4

AAPCS

(

Procedure Call Standard for the ARM Architecture

– relacje mi

ę

dzy 

procedur

ą

 wywołuj

ą

ca  i wywoływan

ą

 

2)

zasady wywoływania  podprogramu, u

ż

ycia rejestrów

zasady wykorzystania  rejestrów przez procedur

ę

 wywoływan

ą

zasady ingerencji procedury wywoływanej w stan procedury wywołuj

ą

cej

Przeznaczenie rejstrow

:

R1 .. R0 – argumenty / wyniki / robocze
R3 .. R2 – argumenty / robocze
R8 .. R4 – argumenty 

MSP430

PUSH — wpis na stos

PUSH[.W]

Wpisz słowo na stos

PUSH.B

Wpisz bajt na stos

Syntax

PUSH 

dst

lub  

PUSH.W dst

PUSH.B dst

Operation 

SP – 2 

 SP

dst 

 @SP

Przykład

MOV.W #0x0280, SP

; np. SP = 0280h po Init

PUSH

R9

; SP = 0280h – 2 = 027Eh
; R9 

@SP

PUSH

#1234h

; SP = 027Eh – 2 = 027Ch
; #1234h

@SP

MSP430FR57xx Family User's Guide. 

TI SLAU272B, May 2011–Revised January 2013, p.169

po inicjalizacji:
SP

INIT

= End_of_RAM + 1

= 0280h

R9

?

1234h

SP = 027Eh

SP = 027Ch

Stos

background image

6

MSP430

POP — odczyt ze stosu 

POP[.W]*

Odczytaj słowo ze stosu

POP.B*

Odczytaj bajt ze stosu

Syntax

POP

dst 

*

MOV

@SP+, dst

instrukcja emulowana

lub

POP.W dst

*

MOV.W @SP+, dst

instrukcja emulowana 

POP.B dst    

*

MOV.B  @SP+, dst 

instrukcja emulowana 

Operation 

@SP 

 temp

SP + 2 

 SP

temp 

 dst

MSP430FR57xx Family User's Guide. 

TI SLAU272B, May 2011, Revised January 2013, p.168

PUSH  

&

POP

Cortex

M0 / Cortex-M0+  

(ARMv6M)

PM0223. STM32L0 Series Cortex

®

-M0+ programming manual. 

STMicroelectronics, DocID025763 Rev 1, 2014, p.52

Cortex™-M0 Revision: r0p0. Technical Reference Manual. 

ARM DDI 0432C, p.3-6 

Full-Descending stack

:

Operation Description

Assembler

Cycles

PUSH

Push

PUSH {<loreglist>}

1+N

Push with link register PUSH {<loreglist>, LR}

1+N

POP

Pop

POP

{<loreglist>} 

1+N

Pop and return 

POP

{<loreglist>, PC}

3+N

<loreglist> must use only R0-R7

instructions do not change the flags

Examples:

PUSH  {R0 – R2}

; (SP 

 4) 

R2

; (SP 

 8) 

R1

; (SP 

 12) 

R0

Branch (CALL)

Cortex

M0 / Cortex-M0+  

(ARMv6M)

PM0223. STM32L0 Series Cortex

®

-M0+ programming manual.

STMicroelectronics, DocID025763 Rev 1, 2014, p.66

Cortex™-M0 Revision: r0p0. Technical Reference Manual.`

ARM DDI 0432C, p.3-6

Operation

Description

Assembler

Cycles

Branch

Branch with Link

BL

label

4

Branch indirect with Link

BLX Rm

3

POP

Pop and return 

POP {<loreglist>, PC}

3+N

Examples:

BL

funC

; Branch with link (Call) to function funC, 
; return address stored in LR

BLX

R0 

; Branch with link and exchange (Call)
; to a address stored in R0

Cortex-M 

Składowanie

(Stacking)

Cortex™-M0 Devices. Generic User Guide.

ARM DUI 0497A, p.2-24

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14 (LR)

R15 (PC)

R0

R1

R2

R3

R12

R14 (LR)

R15 (PC)

xPSR

stacking 

PRIMASK

FAULTMASK

BASEPRI

CONTROL

APSR

IPSR

EPSR

wpis do rejestru IPSR 

(Interrupt Program Status 

Register)

numeru 

wyj

ą

tku/przerwania 

(exception/interrupt

number)

wpis do licznika rozkazów 

(PC)

adresu procedury 

obsługi wyj

ą

tku/przerwania 

(exception/interrupt vector 

handler) i pobranie pierwszej 

instrukcji tej procedury

aktualizacja warto

ś

ci rejestru 

LR

do warto

ś

ci zwanej 

EXC_RETURN

MSP 

(Main Stack Pointer)

or

PSP 

(Process Stack Pointer)

warto

ść

 wska

ź

nika 

stosu 

(SP)

przed 

przyj

ę

ciem 

wyj

ą

tku/przerwania

<poprzedni>

Application 

+ Execution

+ Interrupt

Program Status 

Register

[8]

[1]

[2]

[7]

[6]
[5]
[4]

[3]

warto

ść

 wska

ź

nika 

stosu 

(SP)

po 

przyj

ę

ciu 

wyj

ą

tku/przerwania

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 ?