我的代码如下所示:
section .text
global _start:
_start:
...
如果我用以下代码编译它:
nasm -f elf test.asm
我没有错误,在连接后,程序对我有效。
现在的问题是我的导师无法编译我的程序,并且必须删除行global _start:
中的“:”才能使其正常工作。
答案 0 :(得分:2)
我试图找出NASM可能不会拒绝的原因:
GLOBAL与EXTERN一样,允许对象格式定义私有 通过冒号扩展。例如,精灵对象格式 允许您指定全局数据项是函数还是数据:
global hashlookup:function, hashtable:data
像EXTERN一样,是原始的 GLOBAL的形式与用户级形式的不同之处仅在于它可以 一次只拿一个参数。
- http://www.nasm.us/doc/nasmdoc6.html
所以这只是解析器的一个怪癖。它组装,但我没有检查它汇集到什么。
不要这样做。这显然是错误的,你不应该期望它能起作用。它恰好运气好。在这些情况下一如既往,坚持正常的语法,否则无法获得任何好处。即使你不混淆编译器/汇编器,你也会混淆其他人类读者。