Assembly ARM LDRLE指令的作用是什么?

Assembly ARM LDRLE指令的作用是什么?,assembly,arm,Assembly,Arm,我正在用LDRE指令检查一些DISAssembly。e、 g: LDRLE R3, #0x1234 我在说明书里找不到这个。所以我的问题是,LDRLE指令做什么 我猜,如果指令由c代码表示: // LDRLE R3, #0x1234 R3 = R3 <= 0x1234 ? R3 : 0x1234 //LDRLE R3,#0x1234 R3=R3如果设置了CPSR寄存器中的小于位,则将0x1234中的值加载到R3中 在C中: 如果(小于比特集)r3=*(0x1234) 因此,如果在上一条

我正在用LDRE指令检查一些DISAssembly。e、 g:

LDRLE R3, #0x1234
我在说明书里找不到这个。所以我的问题是,LDRLE指令做什么

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

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

R3=R3如果设置了CPSR寄存器中的小于位,则将0x1234中的值加载到R3中

在C中: 如果(小于比特集)r3=*(0x1234)

因此,如果在上一条指令中设置了小于或等于位:

mov r0, #0
cmp r0, #1 ; equivalent to subs r0, r0, #1
然后,任何带有LE条件标志的指令都将被执行,否则它将被视为NOP

以下是手册页面:
LDRLE
指令实际上是LDR(从内存加载寄存器)指令,带有条件执行限定符“LE”(小于或等于)

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

因此,换言之,仅当根据PSR中的当前标志“LE”条件为真时,才执行此
LDR
指令。这些标志可能受
LDRLE
指令之前执行的指令的影响。换言之,LE条件是根据先前指令的效果而不是当前指令(在本例中为
LDRLE
指令)的操作数值来计算的


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

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

因此,关于臂组件的说明可能类似于:

ADD[cond][S]
其中,
cond
是以两个字母编码的条件,允许有条件执行,
S
允许决定当前指令是否应影响条件代码(与条件执行结合使用非常有用)


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

感谢您的解释和文档!这个答案中有一些误导性/错误的信息。首先,CPSR中没有“小于位”(或您稍后声明的LE条件标志)。“小于或等于”(LE)是一种条件,其布尔状态实际上基于PSR中多个位的值((Z==1)| |(N!=V))。其次,您的C等价物是不正确的——您说R3是从内存地址0x1234(寄存器间接)加载的,而实际上R3是用立即数0x1234加载的。请不要编辑您的答案,因为这会使此注释混淆。顺便说一句——答案的最后一部分是有用的/正确的——如果条件为FALSE,则指令不会执行,并且解释从条件到PSR标志状态的映射的URL是有用的。@MM-您已经(匆忙地)接受了Bogwonch的答案,但请阅读下面我的答案。