ARM 教材 - cortex-m - 4 - bit-banging

Index: Data Processing


Hackpad



bit-banging : 操作相關的 bits 
  • - forcing bits to be 1 : ORR
  • - forcing bits to be 0 : MVN-AND, BIC
  • - forcing bits to flip : EOR

範例: 
  • #define MASK 0x0110
  • DestA = SrcA | MASK;
  • DestB = SrcB | MASK;
  • assembly : 
  •    ORR R2, R1, R0
  •    ORR R4, R3, R0


範例2: BIC 可用在清除某些 bit
  • #define MASK 0x0110
  • DestA = SrcA & ~MASK;
  • DestB = SrcB & ~MASK;
  • assembly1 : 
  •    MOVW R0, #0x0110
  •    MVN R0, R0
  •    AND R2, R1, R0
  •    AND R4, R3, R0
  • assembly2 :
  •    BIC R2, R1, R0
  •    BIC R4, R2, R0

BIC : 將 operand2 反碼, 和前面做 AND
e.g. BIC     R0,   R0  , #0xF0000000  ;清除R0高位4bit
e.g. BIC    R1,  R1,   #0x0F ;清除 R1 低位 4bit

所以指令設計還是很重要的, 有一個好的指令, 原本兩個 cycle 可以縮成 1 個 cycle,
可以大幅提升效能.

Ref: https://embedded2016.hackpad.com/ARM-Architecture-z5hdXADIEm2


  • Bit-wise logical operations:
  • BIC : bit clear
  • AND    r0, r1, r2    ; r0 := r1 and r2
  • ORR    r0, r1, r2    ; r0 := r1 or r2
  • EOR    r0, r1, r2    ; r0 := r1 xor r2
  • BIC    r0, r1, r2    ; r0 := r1 and not r2

留言

熱門文章