2016-11-04 5 views
1

ユーザが4桁の数字を入力する(1960年に入力すると言う)別の数字を最後の2桁(60)と比較する必要があります。最初の2桁は00から99までの何でもかまいませんので、1900を引くことはできません。私はバイナリを操作しようとしましたが、運はありません。どのように私は1960年から60を得ることができるか、または2005年から05、どのような提案。整数の最初の2桁を削除する - アセンブリ/ nasm

+1

また、単純ではあるが効率の悪い方法は、値をチェックして100を引くループを作ることです。最後の結果は答えです。 – lurker

答えて

3

データmod 100! (データ%100) または分けて残りを取る。同じ考え。 100によって

+0

ありがとう、私はまだそれを試してhavent信じることができない! – user1726845

2

分割し、残りを使用:

mov dx, 0 
mov ax, 1960 
mov bx, 100 
div bx 
;REMAINDER 60 IS IN DX. 
0

最初に整数に文字列から変換するときに最初の2桁をスキップします。

10は2の累乗ではないため、10進数の上位桁は2進表現の下位ビットに影響するため、ビット単位のトリックは役に立ちません。

+0

最初の2桁*は使用しないことをお勧めします*実際には、入力時(文字列として数字が短く存在する場合)と使用時間(比較が行われる場所と数字は単に整数として存在します)。 –

+0

@SepRoland:そうです、それは本当です。しかし、これはアセンブリ言語ですが、可能な限りすべてのショートカットや機会を活用できるはずです。大規模なプログラムの一部として使用する場合は、おそらくこれを書き直す必要があります。他の答えはすでに一般的な/柔軟な解決策をカバーしているので、私はDIVについて言及しませんでした(または効率的に行うためにモジュラ乗法逆関数を使用します)。 –

関連する問題