4

div?の後に11.1を表示する方法 例:32/5 = 6.4、6しか表示できないので、6.4を表示するにはどうすればよいですか?

OUT23:

    MOV BL,CNT  ;CNT is the total number of even number
    DIV BL
    MOV DL,AL
    MOV BH,AL
    MOV AH,09H
    LEA DX,MSG23
    INT 21H
    MOV DL,BH   ;print out the average, only the integer part able to display
    MOV AH,02
    ADD DL,30H
    INT 21H
4

3 に答える 3

3

2 つの整数を割って分数を出力したい場合は、小学校で手で割るのと同じようにできます。最初の除算で結果の整数部分が得られます。次に、剰余部分に 10 を掛けて除数で除算し、ゼロになるか、目的の精度に達して分数を取得します。

32/5上記の例を見てください

  • 整数部:

    32/5 = 6 → Print out "6."
    
  • 小数部:

    Remainder: 2, multiply it by 10 → 2*10 = 20
    20/5 = 4 → Print out "4"
    Remainder: 0, stop here
    

上記のように、より複雑な除算を行うこともできます。各ステップの後に剰余に 10 を掛けるだけです。結果が無限の場合は、十分な精度が得られたら停止します。例: 25/11 = 2.27272727...

  25/11 = 2 R 3 → 2.
3*10/11 = 2 R 8 → 2
8*10/11 = 7 R 3 → 7
3*10/11 = 2 R 8 → 2
8*10/11 = 7 R 3 → 7
and so on...

もちろん、10 Nを掛けて N 個の小数桁を一度に取得することで、さらに高速に実行できます。


または、浮動小数点値を使用し、FDIV他の人が言ったように浮動小数点除算を行います。その後、float の結果を string に変換する方法はたくさんありますが、正しく丸められた結果を取得するのは非常に難しいため、その目的で作成されたライブラリを使用することをお勧めします。

ただし、非常に単純なデモでは、上記の方法も使用できます。

  • 結果の整数部分を分割して出力し、その後に.
  • 整数部分に 10 を掛けると、整数部分が次の小数桁になります。
  • 整数部分を削除し、目的の精度に達するまで上記の手順を繰り返します

バイナリ浮動小数点プロパティによるエラーを無視すると、大まかな例は次のようになります。

11.157
Int part: 11    → print 11.
Fractional part:
0.157*10 = 1.57 → print 1
 0.57*10 = 5.7  → print 5
  0.7*10 = 7    → print 7

より詳細な情報は、Turn float into string にあります。

于 2013-09-07T11:10:29.077 に答える
2

すでに述べたようDIVに、整数除算を実行します。これは整数除算であるため、結果の商と剰余は別々のレジスタペアで利用できます。正確なレジスタは除数のサイズによって異なります。

1バイト除数

AX - Dividend
AH - Remainder
AL - Quotient

2バイト除数

DX:AX - Dividend
DX - Remainder
AX - Quotient

4バイト除数

EDX:EAX - Dividend
EDX - Remainder
EAX - Quotient

1バイトの除数「BL」を使用しているため、余りはAHレジスタにあります。あなたの場合32/5ALレジスターには値が含まれ、レジスターには値が含まれ6ますAH。これ2は、残りがあなたに答えを与えることを意味します。2/50.46.4

FPU操作を使用する場合は、命令を使用して2つの値325FPUスタックにロードする必要がありFLDます。値ごとに1回ずつ呼び出します。その後、呼び出しFDIVて2つの値をFPUスタックからポップし、それらを分割して結果をプッシュします。 FPUスタックに。

結果は、命令を使用してスタックからメモリアドレスに移動できますFSTP。結果が得られたら、それをバイナリIEEE浮動小数点表現から画面に表示できる文字列表現に変換する必要があります。

于 2011-02-13T18:31:34.423 に答える
2

DIV整数除算命令です。浮動小数点除算が必要な場合は、 を参照する必要がありますFDIV

于 2011-02-12T19:51:05.867 に答える