现在我正在研究如何通过汇编语言控制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。我不知道如何处理“如果”
答案 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,所以我不能写专业代码)