6

私はコンパイラーを書いており、すべてのコンパイラーの本で紹介されているすべてのステップ (トークン化、構文解析、構文ツリー構造など) を実行しました。(「コンパイラを書くためのリソース」の質問へのリンクについてコメントしないでください!)。

NASM と alink をバックエンドとして使用することにしました。

ここでの問題は、NASM とアセンブリ全般を学習するための適切なリソースが見つからないことです。

x86 アセンブリに関するウィキブック (ドイツ語) は恐ろしいものです。彼らはそこに書いたコードについても説明していません。現在、1 に 2 を足して結果を出力するなどの簡単なこともできません。

  • NASM x86 アセンブリはどこで学べますか?
4

3 に答える 3

1

あなたがそれをチェックアウトしていない限り、NASM マニュアルは NASM について学ぶための非常に良いリソースです: http://www.nasm.us/doc/

NASM と GAS の比較も少し役立ちます: http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html

Freenode se(r)ver の irc channel #asm には、次のリンクがあります。

また、ちょっとした Hello World をマッシュアップするために時間を費やしました。

bits 32
section .data
    greeting db "hello world", 10
section .text
global _start
_start:
    mov eax, 4 ; sys_write
    mov ebx, 1 ; stdout
    mov ecx, greeting
    mov edx, 12 ; greeting.length
    int 0x80 ; system call interrupt

    mov eax, 1 ; sys_exit
    mov ebx, 0
    int 0x80

これを組み立てます:

nasm -f elf -o example.o example.asm
ld -o example example.o -melf_i386

私自身、Python で小さなコード ジェネレーターを作成しました。さっき途中で忘れてたけど。最近、私は、アセンブリに取り組んでいる人にとって役立つかもしれない、少し異なるツールを書きました。現在、私もいくつかの助けを求めています..私がそこでいくつかの自助をしなければならないように思われることを除いて: x86命令エンコーディングテーブル

私が持っている古いコード ジェネレーターの部分は、新しいテーブル ベースのコード ジェネレーターを起動して実行するまで、 http://bitbucket.org/cheery/g386/にあります。

于 2010-05-18T18:15:08.963 に答える
0

さて、あなたが参考書として本を受け入れるなら。私が 80 年代に Pascal を学んだ当時の私のお気に入りの作家は、Jeff Duntemann でした。彼の最新のアセンブリ ブックでは、NASM が取り上げられています。 http://www.duntemann.com/assembly.htm

どの OS を対象としているかはわかりませんが、上記の本が Linux を対象としているという事実は問題ではありません。関心のあるのはアセンブリ構造です。

正直なところ、コード生成のための実際のアセンブリは最も難しい部分ではありません。私見では、レジスタ管理が本当の学習の場所だと思います。

がんばれ!

于 2010-04-24T10:05:59.417 に答える