私はMacで、理想的にはネイティブのアセンブリを書くことを楽しみたいですが、QEMUなどで学習するのが簡単かどうかは分かります。アセンブリの学習を始めるには
私は、プロセッサに応じてアセンブリの異なる方言があることを知っています - どの方言が習得するのが最良ですか?
私は実際にどこで始めるべきか、どのようにアセンブリでプログラムを実行する方法についてのあらゆる指針を持っていませんか?
私はMacで、理想的にはネイティブのアセンブリを書くことを楽しみたいですが、QEMUなどで学習するのが簡単かどうかは分かります。アセンブリの学習を始めるには
私は、プロセッサに応じてアセンブリの異なる方言があることを知っています - どの方言が習得するのが最良ですか?
私は実際にどこで始めるべきか、どのようにアセンブリでプログラムを実行する方法についてのあらゆる指針を持っていませんか?
「最良の」アセンブリとは言わない人もいますが、X86/X86-64はこれが最も広く使われているのでお勧めします。プログラムを実行するには、単にGCCを使ってバイナリに変換し、それをコンソールで実行するだけです。
私が提案しているのは、最高のアセンブラプロデューサーである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
数年前、私は国会http://www.amazon.com/Assembly-Language-Primer-Personal-Computer/dp/0136619010ピーターノートンの本を拾ったハローアセンブラの世界です。これは、PC用のアセンブリプログラミングを開始する素晴らしい方法でした。私はあなたがこれを手に入れてDOSboxを使って作業できるかどうか疑問に思います。
私はMIPSを学び、SPIMで "コンピュータ構成"のクラスをテストしました。
this bookが機能するかどうかわかりませんが、それは価値があるかもしれません。私たちは教授が書いた "本"(もっとチュートリアルやチートシートのようなもの)を使っていたので、それ以外は利用できません。
アセンブリコードで繁栄しているコミュニティに参加してください。最初に心に浮かぶのは、デモシンです。 1つは、productions released for x86 Macs on pouet.netです。アクティブなグループの一部のコーダーと連絡を取ってみてください。彼らの中には、アイデアやコードを共有したいと思っている人もいれば、自分自身を書くよう動機づけられる人もいます。
これは、私がその日に戻ってきた方法ですが、Atari 8ビットで始まりました。
これは便利な方法です。 .sファイルをバイナリに変換するにはどうすればよいですか? –
とgcc hello.s :) –
-sはデバッグ情報(変数名など)を保持しますか? –