1

私はランドール・ハイドの「The Art of Assembly」を読み始めて、私の味覚を刺激し始めました. ここから 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で何かになる可能性を排除して)、事実上何もしないプログラムで同じ結果を得ました。

私は 64 ビットの CrunchBang Linux を使用しています。

4

2 に答える 2

3

アセンブラを学びたいのなら、HLAとこのひどい名前の本を落とすことをお勧めします。通常、生成されたコードを完全に制御できるように、アセンブラーを使用する必要があります。HLAはそれを取り除きます。また、レジスタ割り当てやプッシュとポップに煩わされないように、より高水準の言語が必要な場合は、はるかに優れた選択肢があります。

あなたの質問に関しては、HLAによって生成されたasmはGASに対して有効な構文ではないようです。これは主にWindowsを対象としているため、Linuxは十分にテストされていないようです。.intel_syntax noprefixファイルの先頭に「」を追加するか、すべての即値(0など)に$を追加することを試みることができますが、簡単な修正はないのではないかと思います。

于 2012-06-05T09:17:45.000 に答える
3

Assembly に侵入しようとしている他の誰かがこのスレッドに出くわした場合に備えて: HLA は、高水準言語に精通していて、1 日目にスワン ダイビングをせずにマシンに近づきたい人にとって、素晴らしい中間ステップです。

ただし、トムが述べたように、実際のアセンブリ言語に代わるものではありません。つまり、HLA とアセンブリのいくつかのコマンドに慣れたら、実際のアセンブリ言語に移行します。それははるかに気が遠くなるでしょう(個人的な経験)

于 2013-02-02T16:25:34.700 に答える