Mig*_*ork 2 assembly arm thumb
我正在阅读指令集手册,我想知道.W后缀.
手册说:
在某些情况下,可能需要指定.W后缀,例如,如果操作数是指令或文字数据的标签,则在分支指令的情况下.这是因为汇编程序可能无法自动生成正确大小的编码.
我想不出为什么我需要覆盖汇编程序的默认编码.到目前为止我所尝试的总是没有编译好.W.
他们真的添加了一个特殊的语法来克服汇编程序中可能存在的错误(可能同时修复)吗?
你能提供一些我必须明确使用.W(Cortex-M3上的Thumb2)的例子.
该.W后缀仍然是必要的语法,即使大多数人都不会明确地使用它,以维持该拆卸任何有效的代码,并在完全相同的指令再次使所得到的源回通过汇编结果的行为.因此,每个有效的指令编码必须具有某种在语言中明确表示的方式,即使它不是汇编器默认为基本助记符和操作数选择的首选方法.当然,因为它存在于语法中,所以您不必直接编写机器代码或修补二进制文件来获取这些编码.
现在,在最终的二进制文件中需要非首选编码有各种深奥的原因 - 例如调整指令对齐,使用代码作为数据等等 - 但最不可能的编码可能是重定位.如果您有外部符号的分支或不同部分的符号,汇编程序不一定知道该符号最终会有多远.因此,它必须在发出可能最终无法链接的窄指令或者如果目标最终足够接近可能最终浪费代码空间的宽指令之间进行选择.GNU as和armasm似乎都适用于后者,尽管由于尺寸原因,一些专门的嵌入式汇编程序默认为前者并不难.
运行时重定位是一个更强大的参数:您有一个分支或文字加载,它在汇编时解析,但您可能希望在某些情况下进行热补丁以定位其他内容.即使原始目标位于狭窄范围内,也可能需要额外的宽编码范围.
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |