2016-05-04 5 views
-2

Iは、単純なコンピュータの次の命令セットいくつかの数字nが10で割り切れるかどうかを確認するにはどうすればよいですか?

Instruction set

を有する上記命令セットには余り又はモジュラスコマンドはありません。だから私のプロジェクトの最後の部分は、最大の16ビットである前の計算から得た数値nが10で割り切れるかどうかをチェックすることです。もしそうなら、指定された数値nをデータメモリに格納しなければなりませんその番号は無効です、私は上記のリストの指示を使用する必要があります。

nが10で割り切れるかどうかを確認するロジックが得られません。私はすでにnが偶数か奇数かどうかをチェックする方法を知っていますが、それは分割問題を解決しません。

+1

あえぎ...あなたが実際*実装する必要があります*あなたの利用可能な基本オペコードとの独自の除算機能 –

+1

[除算演算子を自分で実装する](http://stackoverflow.com/q/5284898/995714)、または数値が2 **と** [by 5]で割り切れるかどうかを確認する(http://stackoverflow.com/ q/17113660/995714)。 [ビットシフトを使用して10で除算](http://stackoverflow.com/q/5558492/995714)、[ARMで10で除算](http://stackoverflow.com/q/16218228/995714)、[C++ fast 10^xで除算/モジュレーション](http://stackoverflow.com/q//995714) –

答えて

0

10により分割する最も簡単な方法は、繰り返し10を減算することで、残りゴマ10未満

result = 0 
remains = divident 
while (remains >= divisor) 
    result++ 
    remains -= divisor 

」で、より巧妙な方法を使用して、繰り返し(レジスタ幅がどのように決定する場合、シフトを使用することですあなたはしばしばシフトしなければなりません)shift resultとdivident left、キャリーを2番目のレジスタにシフトします。この2番目のレジスタが除数に等しいか等しい場合は、2番目のレジスタから除算し、結果を1つ増やします。
(あなたが覚えていれば小数は、学校で分割されているのと同じように、この)

(32ビットレジスタを想定して)このような何か

result=0 
temp=0 
loop 32 times 
    shift left result 
    shift left divident 
    shift left with carry temp 
    if (temp > divisor) 
     result ++ 
     temp -= divisor 
関連する問題