【发布时间】:2016-12-23 02:23:46
【问题描述】:
您好,我正在用 C 语言编写一个 olimexino (arduino)。我正在使用以下代码加载 2 个寄存器(atmega328):
asm (
"ldi r20, 0 \n" //load register r20 with 0
"ldi r21, 16 \n" //load register r21 with 16
: : : "r20","r21" //compiler directive to reserve the two registers );
然后我用这个:
asm ( "out 0x05, r21 \n" ); //write '0' to portB
asm ( "out 0x05, r20 \n" ); //write '10000' to portB
从两个寄存器写入端口 B。但是使用两个寄存器 r20 和 r21 会产生问题。如果我进行除法运算,就会发生冲突。例如,如果我的程序的任何部分有“x = x/6”或“y=x%9”之类的语句,那么我存储在这些寄存器中的数字似乎会发生变化。如果我做一个简单的除法,比如“x/4”或“x%8”,那就没问题了。但是任何比简单的班次划分更复杂的操作都会让我感到困惑。
有什么帮助吗?谢谢
【问题讨论】:
标签: cpu-registers atmega