通常,Microsoft ARM 汇编程序使用 ARM 程序集语言,该语言记录在 ARM 编译器 armasm 参考指南中。 但是,某些程序集指令的 Microsoft 实现不同于 ARM 程序集指令。 本文介绍了差异。
ARM 程序集指令的 Microsoft 实现
AREAMicrosoft ARM 汇编程序支持以下
AREA属性:ALIGN、CODE、CODEALIGN、DATA、NOINIT、READONLY、READWRITE、THUMB、ARM。除
THUMB和ARM以外,所有属性都按照 ARM 编译器 armasm 参考指南中记录的那样工作。在 Microsoft ARM 汇编程序中,
THUMB指示分区CODE包含 Thumb 代码,并且是分区CODE的默认值。ARM指示分区包含 ARM 代码。ATTR不支持。
CODE16不支持,因为它表示 Microsoft ARM 汇编程序不允许的预 UAL Thumb 语法。 请改用
THUMB指令以及 UAL 语法。COMMON不支持通用区域的对齐规范。
DCDO不支持。
DN、QN、、SN不支持注册别名上的类型或通道规范。
ENTRY不支持。
EQU不支持定义符号的类型规范。
EXPORT和GLOBAL使用此语法指定导出:
EXPORT|GLOBALsymbol{[type]}symbol是要导出的符号。 如果指定,[type]可以是[DATA]或者[FUNC],前者表示符号指向数据,后者表示符号指向代码。GLOBAL是EXPORT的同义词。EXPORTAS不支持。
FRAME不支持。
FUNCTION和PROC程序集语法允许在过程上指定自定义调用约定:列出调用方保存的寄存器,以及被调用方保存的寄存器。 但是,虽然 Microsoft ARM 汇编程序接受语法,但它会忽略寄存器列表。 汇编程序生成的调试信息仅支持默认调用约定。
IMPORT和EXTERN使用此语法指定导入:
IMPORT|EXTERNsymbol{ {, TYPE, WEAKaliast}}symbol是要导入的符号的名称。如果
WEAKalias指定,则表示外部symbol弱。 如果在链接时找不到它的定义,则对其的所有引用将绑定到alias。如果
TYPEt已指定,则t指示链接器应如何尝试解析symbol。t可能具有以下值:值 说明 1 不要搜索 symbol的库。2 搜索 symbol的库。3 symbol是alias的别名(默认)。EXTERN是IMPORT的同义词,仅当当前程序集中引用它时才导入symbol。MACRO不支持使用变量来保存宏的条件代码。 不支持宏参数的默认值。
NOFP不支持。
OPT、TTL、、SUBT不支持,因为 Microsoft ARM 汇编程序不生成列表。
PRESERVE8不支持。
RELOCRELOC n只能遵循指令或数据定义指令。 没有可以重新定位的“匿名符号”。REQUIRE不支持。
REQUIRE8不支持。
THUMBX不支持,因为 Microsoft ARM 汇编程序不支持 Thumb-2EE 指令集。