【问题标题】:Dividing odd numbers using assembly language使用汇编语言除奇数
【发布时间】:2016-02-06 11:34:44
【问题描述】:

我假设要使用汇编语言 (ARM 6) 将整数(例如 42)减半,可以使用逻辑右移来产生 21,但有人可以解释如何将 21 减半得到 10.5?我不确定处理小数值的“幕后”发生了什么。

更新

我想真正的问题是:LSR 是用于除法还是仅用于右移位?如果是后者,那么逻辑移位的应用是什么?

【问题讨论】:

  • 一旦使用浮点数,计算机就不再使用普通寄存器(eaxebx 等)。相反,它使用浮点寄存器,因此搜索“浮点汇编”可能会对您有所帮助。 (我从来没有使用过浮点寄存器,所以很遗憾我不能轻易地把它变成一个答案,但祝你好运!)
  • 您可以切换到定点并在零指令中进行除法,但随后由进一步的代码来按预期解释该数字。

标签: assembly arm bit-manipulation operators bit-shift


【解决方案1】:

整数除法不能产生小数/浮点数。如果您想要该结果,则必须将数字转换为浮点数,然后使用浮点除法指令。事实证明,浮点数比整数有一个totally different representation in binary,因此,移位不适用于浮点数。

LSR 是用于除法还是仅用于右移位?

为什么不两者兼而有之?顾名思义,LSR 旨在移动位。结果发现右移位与 无符号整数除以 2 相同(与将十进制数右移与除以 10 相同)。

如果是后者,那么逻辑移位的应用是什么?

逻辑移位有很多应用。 Here 是几个例子。

【讨论】:

  • 但我无法理解在将奇数除以二时进行无符号整数除法的意义。
  • 这叫做整数除法,你在学校做过:结果是商,你刚刚移动的位是余数。
【解决方案2】:

LSR 只是将位右移(逻辑移位)。如果您的号码未签名,则可以将 LSR 用于 div by 2。 但是,如果您需要将有符号数除以 2,则应使用 ASR(算术移位)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2010-12-24
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多