10

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

誰かがすでにそのようなことを試しているかどうかを確認するために周りを見回しましたが、誰も試していないようです.アセンブリについてはまだ何も知らないので、私の質問が素朴な場合は申し訳ありません. しかし、誰かがこの主題に光を当て、安全で隔離された環境でアセンブリを学びたい私のような人々にいくつかの指針を提供できれば素晴らしい.

4

5 に答える 5

15

私は強くお勧めします:

1)命令セットシミュレーターを使用します(あなたが求めているものと同等です)。可視性が大幅に向上し、成功の可能性が高まり、フラストレーションが減り、あきらめる可能性が減ります。

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

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

4) アセンブリを学習し、命令セットとそれを使用してプログラムする方法を学習するための悪い方法であるシステム コールを学習しているのではありません。

msp430 (または pdp11/lsi11)、arm、thumb、avr、mico8、およびその他のリストは、はるかに優れています。いくつかのことを学んだ後のためにミップを保存してください。他のアーキテクチャに対して間違った考え方に陥る可能性のある珍しい機能があります。

プログラミングのスキルがすでに高い場合は、数日でアセンブリを習得でき、数週間で数個から多数の命令セットを取得できます。このガイドに従って、(相互に) 無関係な (良い) 命令セットをいくつか学んだら、x86 に目を向け始めると、私が x86 を最後に学習するか、まったく学習しないことをお勧めする理由が正確にわかります。6502 や pic などのように、歴史的な教育的価値がありますが、ファミリの歴史の性質上、チューニング/プログラミングの観点からはあまり活用できません。実際、The Zen of Assembly を読むことをお勧めします。書かれているときでも、8088/86 のパフォーマンス チューニングではなく、一般的なパフォーマンス コーディングの考え方について書かれていることを思い出してください。

アセンブリを実際に学習する良い方法は、逆アセンブラーを作成することです。問題は、ほとんどの命令セットが可変ワード長であり、可変ワード長の逆アセンブラーが高度なプログラミングの問題であるということです。ARM と Thumb (thumb2 ではない) はワード長が固定されており、逆アセンブラーを作成するのは非常に簡単です。

于 2012-10-23T00:10:51.063 に答える
6

qemuを使用して開始します。OS をインストールしなくても、プログラム (生のアセンブリ、c、c++ など) を実行できる軽量の VM です。

于 2012-10-22T23:33:57.063 に答える
3

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

価値のあることとしては、アセンブリ プログラミングはホスト環境で実行するのが「危険」ではないため、さまざまなハードウェアを完全にエミュレートする場合や、ブートローダーや小さなオペレーティング システムなどを作成する場合を除き、VM を使用する必要はまったくありません。システム。

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

于 2012-10-22T23:34:08.540 に答える
0

Marss86を試す

MARSSx86 (略して MARSS) は、x86-64 アーキテクチャ、特にマルチコア実装のサイクル精度の高いフル システム シミュレーション用のツールです。私たちの目標は、既存のツールに基づいて、シンプルかつ効率的なフル システム アーキテクチャ シミュレーション環境を作成することです。

于 2013-10-27T13:36:33.503 に答える