将多个数字加载到寄存器时会发生什么



当您将多个值加载到一个寄存器中时,会发生什么,我对此有点困惑。

ldi r18, 28
ldi r19, 24
mov r16, r17
ldi r19, 12
ldi r19, 122
ldi r18, 42
mov r19, r18
mov r18, r19

ldi只是把数字加在一起吗?mov是否替换寄存器中的值?

r18和r19的最终值是多少?

这些不是要求的确切代码,但我想更好地理解

ldi指令只是将立即数据加载到寄存器中。也就是说,它用一个新值覆盖寄存器的内容。

ldi r18, 28 // now value in r18 is 28
ldi r18, 42 // now 42

如果要添加值,则必须使用add(从寄存器添加值(、adc(带进位添加(。没有添加立即值的指令。相反,您可以使用subi指令并减去2-补全数。例如:

ldi r18, 28 // r18 = 28
subi r18, (256 - 42) // now r18 == 70

注意:subi和许多其他带立即变元的指令一样,只接受r16-r31范围内的寄存器。

或者您可以在另一个寄存器中加载该值并使用add:

ldi r18, 28 
ldi r19, 42 
add r18, r19 // now r8 = 28 + 42 == 70

阅读更多AVR指令集手册(pdf(

回答您的问题:

ldi r18, 28     // r18 = 28
ldi r19, 24     // r19 = 24
mov r16, r17    // r16 = unknown value from r17
ldi r19, 12     // r19 = 12
ldi r19, 122    // r19 = 122
ldi r18, 42     // r18 = 42
mov r19, r18    // r19 = r18 (= 42)
mov r18, r19    // r18 = r19 (= 42)

r18r19现在都包含值42

最新更新