【问题标题】:LDRMIB in ARM AssemblyARM 汇编中的 LDRMIB
【发布时间】: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 指令有什么区别?

提前致谢

【问题讨论】:

    标签: assembly arm


    【解决方案1】:

    您正在寻找具有 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 位。

    【讨论】:

    • 如您所说,LDRPLB 可以重写为 LDRBPL(UAL 之前的语法)。那么,为什么 LDRMIB 不能重写为 MI 为负的 LDR B MI?
    • 因为指令是LDRMIB,单字。 MI不是减号,它是Multiple Increment的首字母缩写,B代表Before not Byte或其他。去 ARM ARM 获取指令,别无他法。
    • 除非语法在过去几年中发生了重大变化,否则我很确定LDRMIB 将是LoaD (word) (if) MInus, ByteLoaD Multiple Increment Before 将写为 LDMIB(注意缺少 R),并且将有一个寄存器列表 ({...}) 作为其第二个操作数。
    • @Michael 哦,太尴尬了,让我来解决这个问题。
    • @auselen 非常感谢。很有帮助。
    猜你喜欢
    • 2021-04-23
    • 2017-07-19
    • 2012-08-12
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多