【发布时间】:2014-03-27 06:23:35
【问题描述】:
我正在从库文件中学习 ARM 汇编。我正在查看一些随机函数,发现这些加载指令我不理解它们的语法。
这里是:
LDRMIB R1, [R5, R3]
LDRMIB.W R2, [R2, #-0x24]
LDRPLB.W R1, [R2, #-0x24]
LDRPLB R2, [R5, R3]
与原始 LDR 指令有什么区别?
提前致谢
【问题讨论】:
我正在从库文件中学习 ARM 汇编。我正在查看一些随机函数,发现这些加载指令我不理解它们的语法。
这里是:
LDRMIB R1, [R5, R3]
LDRMIB.W R2, [R2, #-0x24]
LDRPLB.W R1, [R2, #-0x24]
LDRPLB R2, [R5, R3]
与原始 LDR 指令有什么区别?
提前致谢
【问题讨论】:
您正在寻找具有 UAL 之前语法的 sn-p,不要出于学习目的这样做。
来自ARM ARM:
LDRMIB -> LDR MI B 加载,减/负,字节
LDRPLB -> LDR PL B 加载,加号,正数或零,字节(这是 UAL 之前的语法),对于 UAL,它应该读取 LDRBPL。
Load Register Byte(寄存器)从一个基址寄存器值和一个偏移寄存器值计算一个地址,加载一个 从内存中取出一个字节,将其零扩展为一个 32 位字,并将其写入寄存器。
LDRMIB.W -> LDRMIB, .W 用于将指令编码为 32 位。
【讨论】:
LDRMIB,单字。 MI不是减号,它是Multiple Increment的首字母缩写,B代表Before not Byte或其他。去 ARM ARM 获取指令,别无他法。
LDRMIB 将是LoaD (word) (if) MInus, Byte。 LoaD Multiple Increment Before 将写为 LDMIB(注意缺少 R),并且将有一个寄存器列表 ({...}) 作为其第二个操作数。