【发布时间】:2021-11-23 15:38:58
【问题描述】:
所以这里我有以下代码(ARMv6 程序集):
wait$:
ldr r2,[r0,#24] //read 32 bits from addr + 24 in r0 and store in r2
tst r2,#0x80000000 //????
bne wait$
我了解除tst 指令之外的所有行。我在网上做了一些研究,我能找到的最佳定义是:
测试一个寄存器是零还是负。在寄存器和自身之间执行逻辑与。
我在理解它的含义时遇到了一些困难,因此我尝试使 C 等同于 tst 指令,这就是我得到的:
if(valRead & 0x80000000 != 0){}
上面的代码似乎不起作用。 tst 的更容易理解的定义是什么?在 C 中它的等价物是什么?
【问题讨论】:
-
这澄清了你的问题? stackoverflow.com/questions/54131662/…
-
@Frankie_C 与我的定义几乎相同
-
TST 不会在寄存器与其自身之间执行逻辑与,而是使用第二个操作数并根据结果相应地设置零标志。 and 本身用于检查零结果。 C 定义是有效的,即使删除了
!=0部分。如果它对您不起作用,请检查ValRead是否与ldr r2,[r0,#24]相同。 -
volatile int *ptr = /*whatever is in r0*/; while (ptr[6] < 0); -
C 代码不起作用,因为您的括号错误。
!=在 C 中的绑定比&更紧密。您需要编写if ((valRead & 0x80000000) != 0)或只写if (valRead & 0x80000000)才能使其工作。