【发布时间】:2019-04-26 00:23:12
【问题描述】:
我已经设置了几个问题,其中一个是:
哪些 ARM 指令会清除寄存器 r5,使其所有位都设置为“0”?
and r5, r5, #0 eor r5, r5, r5 lsr r5, #32 sub r5, r5, r5
据我了解,sub r5, r5, r5 会在从自身减去数字时清除寄存器。 and 和 eor 显然看起来不对。
lsr r5, #32 是否也清除寄存器?它将 r5 寄存器移动 32 位,对吗?因此,如果该指令清除寄存器,那么它也是有意义的。
与此相关,我还需要解释这段代码:
当执行以下ARM指令序列时,寄存器r0和寄存器r1的内容是什么关系?
mov r0, #12 mov r1, #1 start: cmp r0, #0 ble end mul r1, r0, r1 sub r0, r0, #1 b start end:
我不完全确定cmp r0, #0 做了什么,以及它最终是否会改变 r0 的值。我知道它比较值。
所以,据我了解,运行此代码后,mul r1, r0, r1 表示 r1 设置为等于 12 为 1 * 12 = 12(如果 cmp r0,#0 不会影响 r0 的值,即我不知道)。
因此,r1 设置为 12 - 1 = 11。
任何人都可以澄清我在运行此代码后是否得到了正确的 r0 (12) 和 r1 (11) 值,cmp r0, #0 和 ble end 在这里做了什么以及它如何影响寄存器 r0,如果在全部?
【问题讨论】: