HLA Hello,World - Assembler Error

时间:2012-06-05 00:29:52

标签: assembly gas hla

我开始经历兰德尔海德的“大会艺术”,开始磨砺我的味觉。我从here下载并安装了HLA 1.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. */

由于我和汇编语言一样绿,我不知道如何使这项工作。我假设我的汽油版本和HLA 1.38之间存在差异。所以问题仍然存在:现在是什么?

编辑:我尝试只编译'program','begin'和'end'指令(删除它与stdlib有关的可能性),并使用一个实际上没有任何效果的程序获得相同的结果。 / p>

我在64位CrunchBang Linux上。

2 个答案:

答案 0 :(得分:3)

如果你想学习汇编程序,我真的建议放弃HLA和这本名字很糟糕的书。通常,您希望使用汇编程序,以便您可以完全控制生成的代码。 HLA把它带走了。如果你想要一个更高级别的语言来打扰寄存器分配和推送和弹出,那么有更好的选择。

至于你的问题,似乎HLA生成的asm不是GAS的有效语法。由于它主要针对Windows,因此看起来Linux的测试不是很好。您可以尝试在文件顶部添加“.intel_syntax noprefix”,或者将$添加到所有立即值(例如0),但我怀疑不会有一个简单的修复。

答案 1 :(得分:2)

以防其他任何试图闯入大会的人偶然发现这个问题:对于那些熟悉高级语言并希望在第1天没有天鹅潜水的情况下更接近机器的人来说,HLA是一个很棒的中间步骤。 / p> 但是,正如汤姆所说,它并不是实际汇编语言的替代品。一旦你对HLA和汇编的一些命令感到满意,那么就转向真正的汇编语言。它将不那么令人生畏(个人经历)