2017-05-20 20 views
0

したがって、プロセッサが数値を丸める方法を変更するアセンブリ関数を作成する必要があります。私はそれを持っている。今私はそれを証明する必要があります。だから私は1つの値を画面に書き込む必要がありますし、丸めメソッドを変更し、同じ値を書き、それが最下位のmantisビットで変更されていることを確認します。どのようにして、私はFEは、このように、IEEE 754形式で3.14値を書き込むことができます。アセンブリ内のバイナリで浮動小数点レジスタの値を表示

0 10000000 10010001111010111000011

私はそれをprintfできるか、それを返すことができますので、私はC.

からその関数を呼び出すことができる機能を意味します
+0

アセンブリにその関数を記述しますか?またはCで?どのアーキテクチャとオペレーティングシステムをプログラミングしていますか? – fuz

+0

アセンブリ中。私はManjaro 64ビットですが、32ビットプログラムにしたい(したがって、 '-m32'でコンパイルします) – Frynio

答えて

0

あなたはMOV命令を使用してCPUレジスタ(Cローカル変数)にロードし、FST命令を使用してメモリにFPUレジストリの値をコピーすることができます(あなたがx86アーキテクチャの下だと仮定した場合)

FPUことを、覚えておいてくださいレジスタは80ビットを有する

1

printfでバイナリを出力する方法はありません。これを行う必要がある場合は、独自の関数を記述する必要があります。これはすでにSOでカバーされています。 here

あなたはフロート(IEEE 754単精度)のコンポーネントを打破したい場合は、あなたは少しのように労働組合を使用することができます。

union float_bits 
{ 
    float f; 
    struct bits 
    { 
     unsigned int s:1; 
     unsigned int m:23; 
     unsigned int e:8; 
    } b; 
}; 

あなたはその後、Fにあなたのフロートをロードして読んでいましたbs/bm/beからの符号/仮数/指数

関連する問題