【问题标题】:ARM: tst.w on register containing addressARM:包含地址的寄存器上的 tst.w
【发布时间】:2014-05-24 10:59:42
【问题描述】:

假设你有这个指令:

tst.w r6, #0x1

而 r6 包含某物的地址,它会将 0x1 与该地址还是该地址的值进行比较?

【问题讨论】:

  • ARM 是一种加载/存储架构,不允许对内存进行任何直接操作。该指令将对 R6 和 1 进行逻辑“与”并相应地更改标志。
  • 它类似于bool test(void *p) { return (int)p & 1 ? true : false; },不同之处在于它执行bool 的汇编版本并设置条件代码。这就像 dwelch's 的回答,如果你喝了 ARM cool-aid。

标签: assembly arm


【解决方案1】:

阅读说明书

if ConditionPassed() then
EncodingSpecificOperations();
(shifted, carry) = Shift_C(R[m], shift_t, shift_n, APSR.C);
result = R[n] AND shifted;
APSR.N = result<31>;
APSR.Z = IsZeroBit(result);
APSR.C = carry;
// APSR.V unchanged

这里

result = R[n] AND shifted;

(shift_t, shift_n) = DecodeImmShift(type, imm3:imm2);

所以正如 BitBank 所说,它和寄存器的立即数并调整标志。

【讨论】:

  • 我投了反对票,因为我看不出这与问题有什么关系。
猜你喜欢
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2018-10-22
  • 2013-01-10
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多