2009-06-10 22 views
0

問題:アセンブリ8086:8ビットのバイナリ番号をグレイ番号に相当するものに変換しますか?

は、以下のアルゴリズムを使用して、同等のグレイコード進数にキーボードから入力された8ビットの2進数に変換するプログラムを書く:

[壊れた画像:http://www.harborlandings.com/images/grayAlgm.jpg]

私はアセンブリを学んでいます(8086、クラスで要求されています)、これを行う方法がわかりません。

キーボードから受け取った各文字(1または0)を変換しますか?あるいは、8ビットのバイナリ番号全体を読み込んでループしていくのですか?

私はPerl/Javaから来ているので、アセンブリでどのように動作するかを視覚化するのはちょっと難しいです。また、上のアルゴリズムのシンボルが何であるか分かりません。

ご協力いただきありがとうございます。

+0

プラス・イン・円は除くあります(XOR)演算子を使用します。 – AakashM

+0

どのような種類のライブラリを使用することはできますか?そうでなければ、入力を得ることは、お尻の本当の痛みになります。 – samoz

+0

DOSのような*古いOSesで実行しますか? –

答えて

1

私はアセンブリコードを書いて以来、非常に長い時間がかかりましたが、質問はより哲学的です。より大きな目標を知らなければ、ここにいくつかのアイデアがあります。

入力時にすべてのキーを変換:プログラムが実行されているときに、個々のキーストローク(すなわち、動的コマンド、上、下、左など)に何度も応答する必要があります。この場合、キーストロークは個別に変換する必要があります。他の時には、データまたは文字列のブロックを変換する必要があり、この操作は、通常、より大きなデータブロックであるenterキーの結論で行われます。これらのケースでは、文字を「ループ」させて変換する必要があります。

どちらの場合でも、いずれの場合でも、いずれのタイプの状況からも呼び出せる汎用サブルーチンで「仕事」を行う必要があります。自身が右のグレーの表現、不要ループを得るために一つの場所をずらして、私はこのことができます願ってい

エド

2

は、あなたは、単に文字をXORすることができます。あなたのキャラクターがALに入っている場合の例:

mov bl, al 
shr bl, 1 
xor al, bl 

ALはグレイコード表現になりました。

Cでは、これは次のようになります。

c^=c>>1; 

は、あなたがそれ自身でグレイコードをXORできるバイナリ表現に戻るには、最大のパワーで始まる、権力-の-2を減少させることによって右にシフト2- -of例えば、データサイズよりも小さい:Cで

mov bl, al 
shr bl, 4 
xor al, bl 
mov bl, al 
shr bl, 2 
xor al, bl 
mov bl, al 
shr bl, 1 
xor al, bl 

これは次のようになります

c^=c>>4; c^=c>>2; c^=c>>1; 
関連する問題