iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Arm Platforms

30天從0開始探索嵌入式世界系列 第 14

Day14.進入 ARM 世界: ARM Instruction Sets

繼續探討我們昨天沒完成的 ARM Instruction Sets。

Reverse Ordering Operations

  • 為什麼需要 Reverse Ordering Operations?

不同CPU在溝通時,可能會因為Byte Ordering (Big Endian 或 Little Endian不同),而需要Reverse 操作。

  • Example:
REV Rd, Rn  ; Rd = rev(Rn)	;Reverse bytes in word
REV16 Rd, Rn ; Rd = rev16(Rn)	;Reverse bytes in each half word
REVSH Rd, Rn ; Rd = revsh(Rn)	;Reverse bytes in bottom half word and sign extend the result

Data transfer instructions

前面介紹的 Register movement operations 的 MOV 指令只有在 Register 之間互相傳送資料,這次補充 Register 和
memory 間互相傳遞資料。

  • Single register load/store
  • Example:
LDR r0, [r1] ; r0 <-- mem[r1]
STR r1, [r0] ; mem[r0] <-- r1
LDR.W R0,[R1, #offset]! ; Read mem[R1+offset], with R1
                        ; update to R1+offset

使用.W Postindexing 更新 Register

  • Multiple register load/store

    驚嘆號(!)代表要存取後會 register 進行更新
    IA,IB,DA,DB 遞增/遞減()記憶體中的地址以Load/sotre你的數據,還有 after/before之分必須注意可能會導致記憶體位置有所不同
  • Example:
STM r0, {r1,r2} ; r1 --> [r0]  r2 --> [r0+4]
STM r0, {r1,r2} ; r1 <-- [r0]  r2 <-- [r0+4]


higher register numbers in higher addresses
與 Single load/store 相反

Status Register Access Instructions

  • MRS (Register <-- Status Register)
  • MSR (Status Register <-- Register)
  • Example:
MSR r0, IPSR ;(r0 <-- IPSR)
MSR APSR, r0 ;(APSR <-- r0)

Flow Control

用來實作Program Control

  • IF-THEN-Else
  • Conditaion branch
  • Loop
  • Switch case
  • Function call

Conditional Branch Instructions

Stack Memory Access


r13 是 SP (stack pointer)

除了 PUSH、POP 我們也可以使用 STM/LDM 搭配 FA,FD,EA,ED來進行操作。

Full 代表最後被使用的地址。

Thumb Instruction Sets

Thumb Instruction Sets 可以看做是 ARM Instruction Sets 壓縮子集,能夠提供程式碼更佳的密度,它是16-bit的指令模式,缺點就是會受到一些限制。後來又有 Thumb2 的出現,原本單純的 16 bits Thumb 指令集加入了一些 32 bits 的指令, 也加入了 IT (If Then) 指令。

所有Cortex-M CPU都使用Thumb-2指令集

參考資料

ARM指令
ARM Instruction Set
Definitive Guide To the ARM Cortex-M3
NYCU OCW Lec05 微處理機系統實驗
Introduction to Computer Systems


上一篇
Day13.進入 ARM 世界: ARM Instruction Sets
下一篇
Day15.進入 ARM 世界: ARM Cortex-M Programming
系列文
30天從0開始探索嵌入式世界15

尚未有邦友留言

立即登入留言