gpt4 book ai didi

assembly - 什么是添加到ARM汇编指令.W和.N后缀?

转载 作者:行者123 更新时间:2023-12-04 00:58:30 24 4
gpt4 key购买 nike

我们在 write_four_registers_and_readback() 里面,下一条指令是调用 delay(10) :

004002a4:   b.n 0x4002f4 <write_four_registers_and_readback+172>
78 delay(10);

ARM Instruction Set 我们了解到 b 是分支,后面跟着一个两个字母的助记符

例子:
CMP R1,#0 ; Compare R1 with zero and branch to fred
; if R1 was zero, otherwise continue
BEQ fred ; to next instruction.

但是这个 .n 似乎没有包含在两个字母的助记符表中......坦率地说,它也不是一个两个字母的助记符。这是什么意思。

此外,数字 0x4002f4 是什么意思?它只是放在 <> 中的地址的绝对表示吗?或其他东西 - 点 4.4.3 Assembler syntax 似乎没有解释。

设备为 SAM4S ,工具链为 arm-none-eabi-gcc

最佳答案

那里有非常古老的引用资料,但有一个现代工具链。在推出 Thumb-2 时,ARM 还推出了一个新的 Unified Assembler Language这允许编写可以组装到 ARM 或 Thumb 的代码,(可能)无需修改。大多数(如果不是全部)最近的工具链默认为 UAL(尽管许多仍然通过某种方式支持旧语法)。

在 UAL 中,.n.w后缀适用于具有 16 位 Thumb(“窄”)和 32 位 Thumb-2(“宽”)编码*的助记符。如果未指定,汇编器将自动选择适当的编码,但如果需要特定编码(例如,强制使用 32 位编码,汇编器将选择 16 位版本以填充代码以进行缓存对齐),则后缀可以指定。

反汇编器通常会发出后缀以确保输出(如果通过汇编器传回)将产生完全相同的目标代码。

所以,你有一个 16 位的 Thumb 分支指令来寻址 0x4002f4 ,恰好是符号 write_four_registers_and_readback 后面的 172 个字节.

* 从技术上讲,所有 ARM 编码也是“宽”的,因此可能需要 .w后缀,但在这种情况下完全是多余的。

关于assembly - 什么是添加到ARM汇编指令.W和.N后缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com