有各种开源汇编程序,例如gas、nasm和yasm。它们有不同pseudo-ops
的macro
语法。对于许多开源项目,汇编程序经过预处理以替换常量和平台条件。
gcc
假设您可以使用所有当前的attributes
和,创建汇编程序会有什么限制#pragmas
,不包括翻译性能(编译/汇编到二进制时间)?
我不是在谈论inline-assembly。
#define MOV(RA,RB) (OXFEB10000UL | RA << 16 | RB)
#define ADD(RA,RB) (OXFEB20000UL | RA << 16 | RB)
#define RET (OXFEB7ABCDUL)
unsigned long add4[] __attribute(section(".text")) =
{
ADD(R0,R1),
ADD(R2,R3),
MOV(R1,R2),
ADD(R0,R1),
RET()
};
我相信使用指针算术可以允许模拟.
和其他labels
. 也许这是一个XY 问题;我试图理解为什么有这么多汇编程序。似乎一切都可以由预处理器完成,而汇编器确实是程序员的偏好;或者我缺少技术限制。
我想这可能与“你可以用汇编程序做的事情,而你不能用shell 代码做的事情”有关。
编辑:我已将其从C重新标记为compiler。我对汇编程序的技术细节感兴趣。它是简单的1-1
翻译和发射重定位(如编译器那样)还是还有更多?正如我上面所概述的那样,我并不是要人们编写汇编程序。我试图了解汇编程序在做什么。我不相信装配工有一本龙书。当然,预处理器不能自己创建a binary
,需要额外的机器;它只翻译文本。