【问题标题】:Adding two 16 bit numbers using 8 bit registers (Assembly)使用 8 位寄存器添加两个 16 位数字(程序集)
【发布时间】:2016-02-21 15:16:20
【问题描述】:

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

【问题讨论】:

  • 你应该检查包含高位的寄存器是否溢出,除非你确定数字加起来不会超过 2^16 无符号和 2^15 有符号。

标签: assembly avr atmega


【解决方案1】:

您在混淆/混淆十进制和二进制?

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

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

因此,无论哪种情况,修复立即值,我认为您的程序都可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2013-05-14
    • 2021-04-05
    • 2014-11-05
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多