2009-07-20 22 views
16

私はMacで、理想的にはネイティブのアセンブリを書くことを楽しみたいですが、QEMUなどで学習するのが簡単かどうかは分かります。アセンブリの学習を始めるには

私は、プロセッサに応じてアセンブリの異なる方言があることを知っています - どの方言が習得するのが最良ですか?

私は実際にどこで始めるべきか、どのようにアセンブリでプログラムを実行する方法についてのあらゆる指針を持っていませんか?

答えて

1

「最良の」アセンブリとは言わない人もいますが、X86/X86-64はこれが最も広く使われているのでお勧めします。プログラムを実行するには、単にGCCを使ってバイナリに変換し、それをコンソールで実行するだけです。

14

私が提案しているのは、最高のアセンブラプロデューサーであるgccと一緒に行動することです。

単純なプログラムをC言語で記述し、-Sスイッチでコンパイルします。アセンブラコードを含むfile.sが得られます。ティンカーとそれを学びます。 別のアセンブラを学びたいなら、gccをクロスコンパイラとしてコンパイルし、サポートされているプラ​​ットフォーム用にアセンブラを作るだけです。

最適化を-O0で無効にすることを忘れないでください。そうしないと、奇妙なトリックが見つかる可能性があります。

これは

(OK多数)
.cstring 
LC0: 
    .ascii "hello world!\0" 
    .text 
.globl _main 
_main: 
    pushl %ebp 
    movl %esp, %ebp 
    pushl %ebx 
    subl $20, %esp 
    call L3 
"L00000000001$pb": 
L3: 
    popl %ebx 
    leal LC0-"L00000000001$pb"(%ebx), %eax 
    movl %eax, (%esp) 
    call L_puts$stub 
    movl $0, %eax 
    addl $20, %esp 
    popl %ebx 
    leave 
    ret 
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 
L_puts$stub: 
    .indirect_symbol _puts 
    hlt ; hlt ; hlt ; hlt ; hlt 
    .subsections_via_symbols 
+0

これは便利な方法です。 .sファイルをバイナリに変換するにはどうすればよいですか? –

+1

とgcc hello.s :) –

+0

-sはデバッグ情報(変数名など)を保持しますか? –

0

私はMIPSを学び、SPIMで "コンピュータ構成"のクラスをテストしました。

this bookが機能するかどうかわかりませんが、それは価値があるかもしれません。私たちは教授が書いた "本"(もっとチュートリアルやチートシートのようなもの)を使っていたので、それ以外は利用できません。

0

アセンブリコードで繁栄しているコミュニティに参加してください。最初に心に浮かぶのは、デモシンです。 1つは、productions released for x86 Macs on pouet.netです。アクティブなグループの一部のコーダーと連絡を取ってみてください。彼らの中には、アイデアやコードを共有したいと思っている人もいれば、自分自身を書くよう動機づけられる人もいます。

これは、私がその日に戻ってきた方法ですが、Atari 8ビットで始まりました。

関連する問題