【问题标题】:Performing bit shift operations (asr, lsl, lsr)执行位移操作(asr、lsl、lsr)
【发布时间】:2018-11-19 11:12:56
【问题描述】:

我正在尝试手动计算这些位移操作,但我不确定如何去做。 ARM 指令是:

ldr    r0, =0XCAFEBABE
asr    r0, r0, 9

我知道asr的意思是算术右移,相当于把这个数除以2。

另外两个我不知道该怎么做:

ldr    r0, =0XCAFEBABE
lsl    r0, r0, 11

对于这个,我知道如何进行逻辑左移,但我不确定它如何与移位 11 位一起工作。

最后,

ldr    r0, =0XCAFEBABE
lsr    r0, r0, 6

对于这个,我不确定什么是逻辑右移。

【问题讨论】:

    标签: binary hex bit bit-shift


    【解决方案1】:

    逻辑移位算术移位的区别在于后者保留了最高位。

    算术移位 的这种行为对于有符号数很有用,不会更改Two's complement 中的符号。如果最高位是1 - 表示负数 - 1s 在右移中移入 (asr),最高位在左移中锁定在 1 (asl)。如果最高位为0,则此0(表示正数)被锁定,0s 从左移入。

    逻辑移位中,0s 在两个方向(lsllsr)进行移位。这对于无符号数的无余数乘法和除法或比特流操作很有用。

    现在,解决你的任务:

    • 将十六进制值CAFEBABE 转换为位表示
    • 应用逻辑移位算术移位
    • 将位表示转换为十六进制

    【讨论】:

    • 你说 1 右移是什么意思?这是否意味着只有那些被转移?
    • 算术右移一位将使10100000 变为11010000,而移位两位将使10100000 变为11101000。所以在某种程度上你可以说1s 在算术移位中从左边移入。
    猜你喜欢
    • 2023-03-10
    • 2021-06-03
    • 1970-01-01
    • 2016-01-24
    • 2020-09-18
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多