AVR 中的无效寄存器将立即数加载到低寄存器而不是高寄存器?

问题描述 投票:0回答:1

我正在尝试编写一个汇编程序来添加两个数字(使用ATmega328P)。该任务需要将 r5 中的值(具体为 0x88)与内存位置 0x0260 中的值相加,并将结果存储在内存位置 0x0360 中。这是我到目前为止所写的:

.include "m328pdef.inc"
ldi r5, 0x88
lds r1, 0x0260
add r5, r1
sts 0x0360, r5
end: rjmp end

如果我用 r16 和 r18 替换寄存器名称,程序就可以运行。然而,当使用r5时,程序给出“无效寄存器”错误。

该怎么办?该分配需要使用寄存器号 5。

assembly avr cpu-registers
1个回答
3
投票

我用 google 搜索了一下,发现 LDI 只适用于高 16 个寄存器 - R16-R31。所以我决定对 r16 进行 LDI 操作,然后将其 MOV 到 r5。

© www.soinside.com 2019 - 2024. All rights reserved.