ARM 汇编 if(data & 0x01) rGPGDAT &= ~(0x1<<7);

ARM assembly if(data & 0x01) rGPGDAT &= ~(0x1<<7);

现在正在研究如何用汇编语言控制ARM GPIO。 所以我正在尝试将 C 源代码更改为汇编语言。

但是写这部分有点吃力

if(data & 0x01) rGPGDAT &= ~(0x1<<7);

if(data & 0x02) rGPGDAT &= ~(0x1<<6);

if(data & 0x03) rGPGDAT &= ~(0x1<<5);

if(data & 0x04) rGPGDAT &= ~(0x1<<4);

我觉得应该用TST。我不知道如何处理"if"

你应该可以在没有分支的情况下做到这一点:

mov r1, <your data>  ; change this accordingly
mov r2, <rGPGDAT>    ; change this accordingly
tst    r1,#1
andne  r2,#$FF -1
tst    r1,#2
andne  r2,#$FF -2
tst    r1,#4
andne  r2,#$FF -4
tst    r1,#8
andne  r2,#$FF -8

关键是指令,您可以在其中定义要执行的指令的条件(在本例中 Z=0) 如果该位在 r1 中设置,则 tst 清除零标志,并且 andne 将清除 r2

中的位

(不确定这里是否需要 andNE 或 andEQ。还有一个循环会更优雅但是:我不在家 atm,所以我不能写 propper 代码)