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

时间:2016-07-11 11:49:48

标签: assembly arm gpio

现在我正在研究如何通过汇编语言控制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。我不知道如何处理“如果”

1 个答案:

答案 0 :(得分:0)

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

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中的位

(不确定你是否需要和NE或andEQ在这里。一个循环会更优雅,但是:我不在家atm,所以我不能写专业代码)