使用 8 位寄存器添加两个 16 位数字(汇编)

Adding two 16 bit numbers using 8 bit registers (Assembly)

我需要使用指令 add 和 adc 将两个 16 位数相加。我使用的微控制器是 AtMega32,它的最大寄存器大小为 8 位

这是我到目前为止尝试过的方法,例如我正在添加数字 5438 + 6098

.include "m32def.inc"
.org 0x0000

init:
ldi r16,54
ldi r17,38
ldi r18,60
ldi r19,98

start:
add r17,r19
adc r16,r18

rjmp init

如果我添加低位字节 38 和 98 = 136,这是一个 8 位数字,所以它存储它非常好,没有进位,但我希望它继续下去,这样我就可以将 54 和 60 与进位相加得到115。我不知道,也许我做错了什么

你是confusing/mixing十进制和二进制?

你是说要将 5438 小数与 6098 小数相加吗?这意味着您要添加 0x153E + 0x17D2。如果是这样,你将 0x3E + 0xD2 = 0x10 与进位相加,然后你将 0x15 + 0x17 + 进位 = 0x2D 添加,因此结果为 0x2D10 = 11536,这也是你在计算器上进行十进制加法时得到的结果。

如果这些是十六进制数 0x5438 + 0x6098,那么您需要告诉汇编器它们是十六进制 0x54 或 54h 或 $54,无论汇编器的语法是什么(0x54 应该有效)。

所以在任何一种情况下修复立即值,我认为你的程序会工作。