使用汇编语言划分奇数

时间:2015-11-05 14:58:30

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

我假设使用汇编语言(ARM 6)将一个整数(例如42)减半,可以使用逻辑右移来生成21但是有人可以解释为什么21可以减半给我10.5?我不知道发生了什么事情"在幕后"处理小数值。

更新

我想真正的问题是:是用于除法的LSR还是只是向右移位?如果是后者那么Logical Shifts的应用是什么?

2 个答案:

答案 0 :(得分:3)

整数除法不能产生十进制/浮点数。如果需要该结果,则必须将数字转换为浮点数,然后使用浮点除法指令。事实证明,浮点数比整数有totally different representation in binary,因此,移位不会对浮点数起作用。

  

是用于除法的LSR还是只是向右移位?

为什么不两者兼而有之? LSR意在根据名称暗示移位。向右移位位与无符号整数除以2相同(向右移动十进制数与除以10相同)。

  

如果是后者那么Logical Shifts的应用是什么?

逻辑转换的应用很多。 Here是几个例子。

答案 1 :(得分:1)

LSR只是将位移位到右侧(逻辑移位)。如果你的号码是无符号的,你可以使用LSR for div 2。 但是如果需要将2除以有符号数,则应使用ASR(算术移位)。