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

时间:2016-02-21 15:16:21

标签: assembly avr atmega

我需要使用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我不知道,也许我做错了什么

1 个答案:

答案 0 :(得分:1)

你混淆/混合十进制和二进制?

您是说要添加5438十进制和6098十进制?这意味着您要添加0x153E + 0x17D2。如果是这样,你添加0x3E + 0xD2 = 0x10,然后加上0x15 + 0x17 + carry = 0x2D,结果是0x2D10 = 11536,这是你在计算器上进行十进制加法时得到的结果。

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

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