Assembly 臂内组件

Assembly 臂内组件,assembly,arm,Assembly,Arm,我正在从一个库文件中学习ARM组装。我查看了一些随机函数,发现这些加载指令我不理解它们的语法 这是: LDRMIB R1, [R5, R3] LDRMIB.W R2, [R2, #-0x24] LDRPLB.W R1, [R2, #-0x24] LDRPLB R2, [R5, R3] 与原始LDR指令有什么区别 提前感谢您正在查找具有前语法的代码段,不要出于学习目的而这样做 发件人: LDRMIB->LDRMIB加载,负/负,字节 LDRPLB->LDRPLB加载正或零字节(这是前逻辑

我正在从一个库文件中学习ARM组装。我查看了一些随机函数,发现这些加载指令我不理解它们的语法

这是:

LDRMIB   R1, [R5, R3]
LDRMIB.W R2, [R2, #-0x24]
LDRPLB.W R1, [R2, #-0x24]
LDRPLB   R2, [R5, R3]
与原始LDR指令有什么区别


提前感谢

您正在查找具有前语法的代码段,不要出于学习目的而这样做

发件人:

LDRMIB
->
LDR
MI
B
加载,负/负,字节

LDRPLB
->
LDR
PL
B
加载正或零字节(这是前逻辑语法),使用前逻辑,它应为
LDRBPL

加载寄存器字节(寄存器)根据基址寄存器值和偏移寄存器值计算地址,加载 从内存中提取字节,零将其扩展为32位字,并将其写入寄存器


LDRMIB.W
->
LDRMIB
.W
用于将指令编码为32位。

LDRPLB可以像您所说的那样重写为LDRBPL(前语法)。那么,为什么LDRMIB不能重写为LDR B MI,哪个MI是负数呢?因为指令是
LDRMIB
,单个字。MI不是负数,它是accronym表示多个增量,B表示Before而不是Byte或其他。转到ARM获取说明,而不是其他任何地方。除非语法在过去几年中发生了重大变化,否则我非常确定
LDRMIB
将是
LoaD(word)(if)减,Byte
。在之前加载多个增量的
将被写为
LDMIB
(注意缺少
R
),并且将有一个寄存器列表(
{…}
)作为其第二个操作数。@Michael哦,太尴尬了,让我来解决这个问题。@auselen非常感谢你。这很有帮助。