首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HLA Hello,World -汇编程序错误

HLA Hello,World -汇编程序错误
EN

Stack Overflow用户
提问于 2012-06-05 08:29:52
回答 2查看 1.4K关注 0票数 1

我已经开始阅读兰德尔·海德的“组装的艺术”,开始磨练我的味觉。我从here下载并安装了HLA1.38(我需要64位支持),并按照上面列出的文档和上面这本书中的描述编写了Hello,World程序。

代码语言:javascript
复制
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'

问题中的装配线是:

代码语言:javascript
复制
pushd   0       ;/* No Dynamic Link. */

因为我是汇编语言的新手,所以我不知道如何让它工作。我假设我的gas版本和HLA1.38之间存在差异。因此,问题仍然存在:现在该怎么办?

编辑:我试着只编译“program”、“begin”和“end”指令(排除了它是stdlib的可能性),并用一个实际上什么都不做的程序得到了同样的结果。

我使用的是64位CrunchBang Linux。

EN

回答 2

Stack Overflow用户

发布于 2012-06-05 17:17:45

如果你想学习汇编,我真的建议你放弃这本名字很糟糕的书。通常,您希望使用汇编程序,这样您就可以完全控制生成的代码。HLA把它拿走了。如果你想要一种更高级的语言来避免寄存器分配、推入和弹出的麻烦,还有更好的选择。

关于你的问题,由HLA生成的asm似乎不具有有效的GAS语法。由于它主要针对Windows,所以Linux似乎没有经过很好的测试。您可以尝试在文件的顶部添加".intel_syntax noprefix“,或者将$添加到所有立即值(例如0),但我怀疑这不会是一个微不足道的修复。

票数 3
EN

Stack Overflow用户

发布于 2013-02-03 00:25:35

只是为了防止其他任何人试图进入汇编偶然发现这个线程:对于熟悉高级语言的人来说,HLA是一个很棒的中间步骤,他们希望在第一天不需要天鹅潜水就能更接近机器。

然而,正如Tom所说,它并不是实际汇编语言的替代品。也就是说,一旦你熟悉了HLA和汇编语言的一些命令,然后转到真正的汇编语言。这将不会那么令人望而生畏(个人经验)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10890145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档