ARM LDRLE指令有什么作用?

时间:2011-05-27 09:03:39

标签: assembly arm

我正在使用LDRE指令检查一些反汇编。 e.g:

LDRLE R3, #0x1234

我在指令列表中找不到这个。所以我的问题是,LDRLE指令做了什么?

我的猜测,如果指令由c代码表示:

// LDRLE R3, #0x1234
R3 = R3 <= 0x1234 ? R3 : 0x1234

3 个答案:

答案 0 :(得分:3)

LDRLE指令实际上是LDR(从内存加载寄存器)指令,条件执行限定符“LE”(小于或等于)。

当N标志和V标志不同时,条件“LE”为“真”,当Z位置位时,条件“LE”也为真(Z,N和V是PSR中4个标志位中的3个) 。您可以在处理器的PSR布局上找到ARM的信息。

换句话说,只有当PSR中的当前标志的“LE”条件为真时,才会执行此LDR指令。这些标志可能会受到执行之前LDRLE指令的指令的影响。换句话说,LE条件是根据之前的指令的效果来评估的,而不是当前指令的操作数的值(在这种情况下,{{1指令)。

最后,如果执行指令,该指令会做什么(每个当前PSR标志条件LE为真)?它将(立即)值0x1234加载到寄存器R3中。

答案 1 :(得分:0)

如果CPSR寄存器中的位数小于设置,它会将0x1234中的值加载到R3中。

在C中的

:     if(LESS_THAN_BIT_SET)r3 = *(0x1234);

因此,如果在之前的指令中设置了小于或等于位:

mov r0, #0
cmp r0, #1 ; equivalent to subs r0, r0, #1

然后执行带有LE条件标志的任何指令,否则它将被视为NOP。

这是手册页: http://infocenter.arm.com/help/topic/com.arm.doc.dui0068b/Chdehgih.html

答案 2 :(得分:0)

ARM ISA尝试在每条指令上公开可用的硬件资源,例如:由于CPU上有一个桶形移位器,每个指令都可以移位/旋转其中一个操作数,并且由于CPU上有条件代码,每条指令都可以有条件地执行。

因此,关于ARM程序集的指令可能类似于:

ADD[cond][S]

其中cond是用两个字母编码的条件,允许条件执行,S允许判断当前指令是否应该影响条件代码(非常有用并结合条件执行)。

然后,您必须仅使用第一部分(在此示例中为ADD)查找指令。