2012-10-22 12 views
7

私はアセンブリ言語を学ぶための計画段階にあり、x86アセンブリを使い始めますが、64ビットプロセッサ(i7、i5、Core 2 Duo )とオペレーティングシステム。私は自分の既存のマシンを仕事に使っていて、学習や練習中に間違ったことをしたくないので、古いハードウェアを使って安価な32ビットシステムを購入したり、構築したりしています。しかしその前に、私は同じ目的のために仮想マシンを使用することが可能かどうか疑問に思っています。実行されるマシン命令は、仮想マシンにのみ限定されるか、または仮想マシンのホスト(すなわち、自分自身のコンピュータ)と対話しますか?仮想マシンを使用したアセンブリの学習

誰かがすでにこのようなことを試してきたかどうかを見て回ったことがありますが、誰も持っていないようです。私の質問は純粋ではありません。しかし、もし誰かがこのテーマについていくつかの光を放つことができ、安全で隔離された環境で組立を学びたい私のような人々のためのいくつかの指針を提供することができれば素晴らしいだろう。

+0

問題なく32ビットコードで64ビットCPUとして使用できます。 VMを使用する必要はありません – Gunner

答えて

12

私は強くお勧め:

1)あなたが求めているものと同等の命令セットシミュレータ()を使用します。より良い視界と成功のより良いチャンス、より少ない欲求不満、あまりチャンスをあきらめない。

2)x86アセンブリを最初に学習しないでください。 (ハードウェアを持つことはx86を最初に学ぶための悪い言い訳です)。非常に悪いアーキテクチャ、最初に良いアーキテクチャを学んでください。その後、x86を学び、後で8088/86を学び、最初に多くのシミュレータ/エミュレータの1つを使って学びます。

3)いくつかの命令セットを学んでください。あなたが良いものから始めれば、他のすべての命令セットやプログラミング言語さえも文法の小さな問題です。

4)アセンブリを学ぶ悪い方法であるシステムコールを学習しておらず、命令セットとそのプログラミング方法を学ぶことはできません。システムコールは、アセンブリを学んだ後、アプリケーションのプログラミングを続ける。

msp430(またはpdp11/lsi11)、arm、thumb、avr、mico8などのリストが優れています。いくつかのことを学んだ後にmipsを保存すると、他のアーキテクチャの誤った考え方になる可能性のある珍しい機能があります。

あなたのプログラミングスキルがすでに強力であれば、数日でアセンブリを取り上げ、数週間で数から数多くの命令セットを得ることができます。このガイドに従って、互いに関係のない(良い)命令セットを学んだら、x86を見てみると、なぜそれが最後かどうかを覚えている理由がわかります。 6502やpicなど、歴史的な教育的価値がありますが、家族の歴史の性質上、チューニング/プログラミングの観点からはそれをはるかに上回りません。実際にはアセンブリの禅を読むことをお勧めします。それが書かれていても、8088/86パフォーマンスチューニングではなく一般的にパフォーマンスコーディングについて考える方法について覚えています。

実際にアセンブラを学ぶ良い方法は、逆アセンブラを書くことです。ほとんどの命令セットは可変長であり、可変長語ディスアセンブラは高度なプログラミング問題です。 ARMとサム(サム2ではなく)は固定語長であり、ディスアセンブラを書くのは非常に簡単です。

+0

あなたの貴重な提案を共有してくれてありがとう、dwelch! ARMとAVRの両方をサポートすると思われるAtmel Studio 6 IDEを調べました。これはシミュレータの出発点ですか(特に私はVisual Studioのバックグラウンドから来ています)、または他のオプションを探す必要がありますか? – Zishan

+0

私は完成とテストの様々な状態でシミュレータのセットを持っているhttp://github.com/dwelch67特にthumbulator。またはamber_samplesを参照してください。 avrsimと呼ばれるものではなく、そのようなものがあります。あなたが雑草の中で吊り下げられている場合や、雑草の中にいる場合に備えて、命令が実行されるのを見ることができるようにしたいと考えています。 qemuは、例えば、ベアメタルやアセンブリーを学ぶよりも、linuxのようなオペレーティングシステムを立ち上げることを学ぶのに適しています。 –

+0

明確にする。アセンブラでのシステムコールの学習は、どの言語のシステムコールを学習するか、オペレーティングシステムやGUIパッケージを選択するか、すべてのAPIを使用することを学ぶためにしばらく時間がかかります。システムに何らかのシステムコールがある場合と同じです。命令セットからシステムコールの教育を分離します。あなたは一週間のうちにasmで環境に関するすべてのシステムコールを学ぶことはできませんが、あなたが一般的にプログラミングを知っていればすぐにasmを学ぶことができます。 –

2

qemuで開始してください。これは、OSをインストールすることなく、プログラム(rawアセンブリ、c、C++など)を実行できる軽量なVMです。

+0

ありがとう、JosephH。試してみましょう。 – Zishan

3

はい、仮想マシン内でアセンブリプログラミングを行うことができ、仮想マシンによって公開される命令セットに制限されます。 64ビットホスト環境内で32ビットマシンを実行すると、32ビットの命令だけが表示されます。

組み込みプログラミングはホスト環境では「安全ではありません」というわけではありません。したがって、別のハードウェアを完全にエミュレートする場合や、ブートローダーと小さなオペレーティングシステム。

しかし、私は確かに、ブートローダやオペレーティングシステムの作成を始めません。あなたはデバッガにアクセスできず、テストサイクルも長くなるでしょう。 http://www.nasm.us/から始めて、x86/x86-64アセンブリを学んだり、http://wiki.qemu.org/Main_Pageを調べて、ARMプログラミングのようなことをしてください。

+0

ありがとう、ヘキシスト。ブートローダーとOSを書くことは、どれほどうまくいくかによっては後で目標になるかもしれませんが、NASMを試してみましたが、何らかの理由で私のWindows 8(x64)がそれを気に入らないように見えます(互換性の問題)。私は、Linuxを実行している32ビットのVMがこれに対してより良いかもしれないと思います。 NASMとQemuにそれを試してもらいます。 – Zishan

+0

NASMにはどんな問題がありますか?私はNASMを実行し、私の64ビットマシンで32ビットのアプリケーションを作成します。 – Gunner

+0

@Gunner NASMを実行しようとするたびに、次のメッセージダイアログが表示されます。「64ビットバージョンのWindowsとの互換性がないため、プログラムまたは機能「nasm.exe」を起動または実行できません。 64ビットWindows互換バージョン(利用可能な場合)」を選択します。メッセージダイアログのタイトルに「サポートされていない16ビットアプリケーション」が表示されます。 NASMのウェブサイトでは、ダウンロードが16/32/64ビットであるかどうかはわかりません。 – Zishan

0

はMARSSx86(略しMARSS)Marss86

を試みる具体 実装をマルチコア、サイクル正確完全なシステムのためのツールのx86-64アーキテクチャの シミュレーションです。私たちの目標は、既存のツールに基づいてシンプルで効率的な完全な システムアーキテクチャシミュレーション環境を作成することです。

0

あなたはARMアーキテクチャに関して、アセンブリ言語を習得しようとしている場合は、私の提案は、それがどのようにもto use qemu w.r.t assembly and its best place to start

http://www.bravegnu.org/gnu-eprog/index.html#intro

http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/

を説明し、これらのサイト.Here以下から基礎を学ぶです

上記のサイトから、qemuのような仮想マシンを試すことができます。real hardware

関連する問題