私は、3と5に等しい2つの変数を持っています。ユーザは、演算の結果を返す計算オペレータを入力する必要があります。8086アセンブリを使用して基本電卓を作成するにはどうすればよいですか?
たとえば、ユーザが*
と入力すると、プログラムは15
と出力されます。私はAssemblyで初心者です。
ありがとうございます。
私は、3と5に等しい2つの変数を持っています。ユーザは、演算の結果を返す計算オペレータを入力する必要があります。8086アセンブリを使用して基本電卓を作成するにはどうすればよいですか?
たとえば、ユーザが*
と入力すると、プログラムは15
と出力されます。私はAssemblyで初心者です。
ありがとうございます。
start:
a = 3
b = 5
i = input
if i != '*'
goto not_mul
r = a * b
goto print_result
not_mul:
if i != '/'
goto not_div
r = a/b
goto print_result
not_div:
...
print_result:
print r
end
特定のアセンブラにラインごとに翻訳してください。
一般的なプログラミングの場合、最初の手順は問題を定義することです。電卓はコマンドラインツールですか、あるいはファンシーなGUIですか?極限精度を得るには、整数計算(例:「5/3 = 1」)または浮動小数点(「5/3 = 1.6666667」など)を使用するか、おそらく任意のサイズの有理数を使用しますか?入力された順序で操作を実行するか、現在の数式を追跡して並べ替えて精度やパフォーマンスを向上させたり、演算子を演算子優先順位の規則(たとえば「5 + 3/2 = 8/2 = 4 "または" 5 + 3/2 = 5 + 1.5 = 6.5 ")
次に、(より大きい)問題を小さな問題に分割し、メソッド/関数/ルーチンとして実装するのに十分小さなものが得られるまでこれを続けます。例えば、「計算機」は、「ユーザインタフェース」、「オペレータ追跡」(例えば、ユーザが要求したが、優先ルールのためにまだ実行されていない操作を追跡する)と、 "これらの部分は、さらに分割することができます(たとえば、「ユーザーインターフェイス」は「STDINからの操作の取得」と「電卓の状態の表示」に分割されます)、「演算子の処理」は「乗算」、「除算」、「加算」、等)。
注:アセンブリの場合、これらの最終的な部分は、高水準の言語よりも少し小さくなる傾向があります。 Cでdo_addition()関数を使用するのは愚かかもしれませんが、アセンブリでdo_addition:ルーチンを持たないのは愚かかもしれません。
すべてを分割したら、書き留めてください。これは、一連のUMLダイアグラム、フローチャート、または何かを記述する単なるテキストファイルです。ソフトウェアがどれくらい長く維持され、どれほど複雑であるかにかかっています(コマンドライン「整数のみ」の計算機は非常に簡単ですが、高/無限精度のGUI計算機は非常に複雑です)。
最後に、すべての小さな部分を実装します。上から下に向かって作業するのが好きです(たとえば、ユーザーインターフェイスから始めるなど)が、下から上へと作業することも同様です(たとえば、加算や減算などを行うルーチンから始めるなど)。重要なことは、あなたが行ったこと(あなたがやったことをテストするための一時的なコードを書いたり、正式な単体テストを実装することなど)を行ったことをテストできることです。
最初にフローチャートを描くか、「擬似コード」で実行したいことを書き出します。次に、アセンブリに変換する方法を理解します。そして、2/3を書いたことがあるときは、あなたが持っているものを投げ捨ててからやり直してください。 (私が8086のアセンブラを作ってから約30年経ったので、それはあなたに与えることができる唯一のアドバイスです)。 –
ところで、まず、[挿入表記](http:// en。 wikipedia.org/wiki/Infix_notation)または[postfix notation](http://en.wikipedia.org/wiki/Reverse_Polish_notation)を参照してください。 (Postfixはコード作成が簡単で、より強力ですが、ユーザにとっては直感的ではありません) –
なぜあなたは8086アセンブリでそれをしなければなりませんか、これは何らかの宿題ですか? – Griwes