如何在8位AVR处理器中实现32位寄存器?

时间:2015-04-08 21:03:48

标签: assembly avr

我应该创建一个32位加法器,但我不知道如何从8位寄存器创建32位寄存器,这些寄存器由AVR ATmega169在汇编中使用。

2 个答案:

答案 0 :(得分:1)

这就是进位标志的用途。

使用ADD指令添加每个32位数的最低字节。这将把加法的进位(第9位)置于进位标志中。然后使用ADC指令依次添加每对较高字节。它将在添加中包含进位标志,并在添加后将下一个进位放入其中。

答案 1 :(得分:0)

我不太了解AVR汇编程序,但我编译了一个程序,它总结了两个uint32_t,汇编结果如下:

lds r20,_ZZ4mainE1x
lds r21,_ZZ4mainE1x+1
lds r22,_ZZ4mainE1x+2
lds r23,_ZZ4mainE1x+3
lds r24,_ZZ4mainE1y
lds r25,_ZZ4mainE1y+1
lds r26,_ZZ4mainE1y+2
lds r27,_ZZ4mainE1y+3
add r24,r20
adc r25,r21
adc r26,r22
adc r27,r23
sts _ZZ4mainE4tled,r24
sts _ZZ4mainE4tled+1,r25
sts _ZZ4mainE4tled+2,r26
sts _ZZ4mainE4tled+3,r27

C代码如下:

static uint32_t volatile x;
static uint32_t volatile y;
static uint32_t volatile tled;

tled=x+y;

声明volatile已被用于避免编译器优化,这会产生包含添加结果的代码!

汇编代码演示了编译器如何使用8个8位寄存器来完成所需的操作!