继续探讨我们昨天没完成的 ARM Instruction Sets。
不同CPU在沟通时,可能会因为Byte Ordering (Big Endian 或 Little Endian不同),而需要Reverse 操作。
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
前面介绍的 Register movement operations 的 MOV 指令只有在 Register 之间互相传送资料,这次补充 Register 和
memory 间互相传递资料。
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
惊叹号(!)代表要存取後会 register 进行更新
IA,IB,DA,DB 递增/递减()记忆体中的地址以Load/sotre你的数据,还有 after/before之分必须注意可能会导致记忆体位置有所不同
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 相反
MSR r0, IPSR ;(r0 <-- IPSR)
MSR APSR, r0 ;(APSR <-- r0)
用来实作Program Control
Conditional Branch Instructions
r13 是 SP (stack pointer)
除了 PUSH、POP 我们也可以使用 STM/LDM 搭配 FA,FD,EA,ED来进行操作。
Full 代表最後被使用的地址。
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
<<: Day 12 Odoo Server Actions (ir.actions.server)
延续昨日 今天来把登入的功能搞定吧! 记得我们day7学到的东西吗? :class="pr...
电子商贸系列 | 善用电子商贸增加客源 电子商贸系列能助你了解建立网上商店的实际流程及细节,并挑选最...
1.preliminaries 要如何选定特徵与要做甚麽样的分类 step1:要先定做怎样的分类 s...
元件介绍 Tabs 是一个选项卡切换元件,能够在同一层级的内容组别当中导航、切换。此元件由两个部分构...
Docker 可以提供安全的沙盒环境来做测试, 建构多用户的 PaaS (platform as a...