我已经开始阅读兰德尔·海德的“组装的艺术”,开始磨练我的味觉。我从here下载并安装了HLA1.38(我需要64位支持),并按照上面列出的文档和上面这本书中的描述编写了Hello,World程序。
program helloWorld;
#include ("stdlib.hhf");
begin helloWorld;
stdout.put("Hello, World!", nl);
end helloWorld;当我运行hla helloWorld.hla时,我得到以下错误消息:helloWorld.asm:66: Error: ambiguous operand size or operands invalid for 'push'
问题中的装配线是:
pushd 0 ;/* No Dynamic Link. */因为我是汇编语言的新手,所以我不知道如何让它工作。我假设我的gas版本和HLA1.38之间存在差异。因此,问题仍然存在:现在该怎么办?
编辑:我试着只编译“program”、“begin”和“end”指令(排除了它是stdlib的可能性),并用一个实际上什么都不做的程序得到了同样的结果。
我使用的是64位CrunchBang Linux。
发布于 2012-06-05 17:17:45
如果你想学习汇编,我真的建议你放弃这本名字很糟糕的书。通常,您希望使用汇编程序,这样您就可以完全控制生成的代码。HLA把它拿走了。如果你想要一种更高级的语言来避免寄存器分配、推入和弹出的麻烦,还有更好的选择。
关于你的问题,由HLA生成的asm似乎不具有有效的GAS语法。由于它主要针对Windows,所以Linux似乎没有经过很好的测试。您可以尝试在文件的顶部添加".intel_syntax noprefix“,或者将$添加到所有立即值(例如0),但我怀疑这不会是一个微不足道的修复。
发布于 2013-02-03 00:25:35
只是为了防止其他任何人试图进入汇编偶然发现这个线程:对于熟悉高级语言的人来说,HLA是一个很棒的中间步骤,他们希望在第一天不需要天鹅潜水就能更接近机器。
然而,正如Tom所说,它并不是实际汇编语言的替代品。也就是说,一旦你熟悉了HLA和汇编语言的一些命令,然后转到真正的汇编语言。这将不会那么令人望而生畏(个人经验)
https://stackoverflow.com/questions/10890145
复制相似问题