右移算术和十六进制数

时间:2013-10-22 05:01:53

标签: assembly hex sparc

set 0x8675309F, %o1
sra %o1, 16, %o1

有人可以解释一下sra应该在这里做什么,我知道这是正确的移位算术,但它在这个指令中究竟做了什么。我也知道如何将十六进制数转换为十进制数,从十进制转换为二进制数,但有没有更简单的方法对十六进制数进行逻辑门操作?例如,如果我想要AND或OR或XOR两个十六进制数字,我将如何做到这一点?我知道它是如何用二进制完成的,但有没有办法用十六进制来做或者你需要转换为二进制,然后对所述二进制数进行逻辑门操作?

这是我的尝试:答案将是0x8675,所以这就是我所做的(不确定这是否正确)我将十六进制数转换为小数,然后从十进制转换为二进制,这是我做的正确的地方移位操作右移16位(或在二进制数的前面加16个零),然后我再次转换为十六进制。问题是要转换回十六进制我必须使用在线转换器并从十进制转换为二进制我也使用转换器(因为数量非常大),问题是在任何类型的检查我不会能够使用在线转换器,那么解决这个问题的最快方法是什么技术?

如何对十六进制数进行逻辑门AND或XOR运算,我必须转换为二进制,还是可以在十六进制数上预先形成逻辑门操作?

2 个答案:

答案 0 :(得分:3)

十六进制是数字的文本格式,而不是数字本身的属性。因此,十六进制与您可能希望对数字执行的任何机器操作的含义无关。

算术右移是右移,如果设置了最高有效位,则将1移位到空出的高位(否则为0)。这具有保留数量符号的效果。

答案 1 :(得分:1)

使用二进制或十六进制或十进制数格式执行逻辑运算无关紧要,因为输出将是相同的。但是,如果使用十六进制表示,它的优点是您可以使用dec更轻松地读取源代码中的二进制值。 原因是,因为hexadimzmal有一个bas是base 2的倍数,所以你可以很容易地在视觉上识别十六进制数字的四位数二进制文件,而这在十进制格式中并不那么容易。

举个例子:

 3ab9h   ->   3      A     B     9
             0011  1010  1011  0101

因此Hex中的每个数字都是一个四位二进制数,这很容易处理。