2010-11-30 8 views
0

これは間違った質問かもしれませんが、私はアセンブリコードのコンセプトを教えるはずのエミュレートされたCPUを使って教えられたアセンブリクラスに入っています。私たちはインテルのプログラムも書いていないので、調整しようとしています。Intel x86命令のエンコーディングを見るためのツールがありますか?

http://imgur.com/tw5S8.png

私はインテルのx86命令でそのようなことを行うことができるだろう:私たちのエミュレートされたCPUで、我々は、命令のバイトに相当したシンボル・テーブル・ファイルを生成することができましたか?

答えて

1

お試しIDA.オペコードのバイナリ値を表示するオプションがあります。

編集:まあ、それは逆アセンブラです。バイナリファイルを開き、Opcodeバイト数を(Options/General /で)ゼロ以外の値に設定してください。

使用した命令のオペコードをリアルタイムで表示するIDEを探している場合は、「市場」がないため、見つけられないと思います。あなたはそれがなぜ必要なのか説明できますか?あなたは長さだけを知りたいのですか、それともそれらを学びたいのですか?長さには単純なパターンがあるので、多くのバイナリを分解することでそれを捕まえることができます。もしそれがあなたが望むオペコードだとすれば、それらの多くがあり、ルールはほとんどなく、実際にはそれを行うには役に立たない。

私は参照してくださいリストファイルを生成する必要があります。アセンブラにはオプションが必要です。 (NASMの場合は-l listfileです)。あなたの.asmファイルに指示を入れて、そのリストを生成してください。各命令のバイナリエンコーディングが含まれている必要があります。

最初に、Intel Instruction Set Refferenceを取得するか、このリンクをhttp://siyobik.info/index.php?module=x86にしてください。ほとんどのオペコードにはいくつかのエンコーディングがあることがわかります。あなたの特定のケースでは、オペコードのビット1は方向を指定し、両方のオペランドがレジスタなので、方向を切り替えたり、レジスタコードを入れ替えることができ、結果は同じになります。通常、算術演算を登録するほとんどのレジスタにこの自由があります。エディタと六角ビューアを持っていfasm.dllに同梱のデモプログラムがあり

db 02h, E0h 
db 00h, C4h 
+0

あなたは多分に私を指すことができるだろうこれを確認するには、このソースファイルをIDAと逆コンパイルしてみてください正しい方向?私はプログラムで.asmファイルを開いたが、次にどこに行くのか分からない。 – kevin

+0

申し訳ありませんが、あなたはすでに私を失ってしまっています。繰り返しますが、私の先生は、インテルで完全なプログラムを書く方法を教えてくれていません。実際には、アドレッシングモードなどの概念があります。私たちのエミュレートされたCPUは、コードを実行して実行されたシンボルテーブルファイルとobjファイルを生成しました。 – kevin

+0

基本的には、命令がどのようにコード化されるかを推測することになっています。私は規則を見ていますが、そうではありませんが、私はそれらを正しく追い求めています。 (すなわち、MOVの異なるオペコード、8ビットレジスタ/メモリ対16ビット、アドレッシングモードなどに依存する)。利用可能な種類のものがない場合、私はそれを正しく読んでくれることを願っています。しかし、ありがとう。 – kevin

関連する問題