アセンブリ言語とそのデータ型を勉強していて、.float
に遭遇しました。私はFloat
という名前の変数.float
を宣言し、その値に10.23
を割り当てました。私はそれをアセンブルするためにGNUアセンブラv2.28を使い、次にGNUリンカv2.28を使ってオブジェクトファイルをリンクして実行可能なバイナリを作成しました。ここに私のプログラムはあります:アセンブリ言語での浮動小数点の表現
.data
HelloWorld:
.ascii "Hello World!\n"
ByteLocation:
.byte 10
Int32:
.int 2
Int16:
.short 5
Float:
.float 10.23
IntArr:
.int 3,6,7,8,10
.bss
.comm LargeBuffer, 1000
.text
.globl _start
_start:
nop
movl $1, %eax
movl $0, %ebx
int $0x80
私はGDBデバッガを使ってブレークポイントを設定しました。
(gdb) break *_start+1 Breakpoint 1 at 0x4000b1: file 03 VariableDemo.s, line 22.
そして私は、10進数表現とFloat
のバイナリ表現を見たとき。私は戻って10.23にバイナリ表現を変換するCan anyone explain representation of float in memory?を参照しています
(gdb) x/1bw 0x0000000000600139 0x600139: 10.2299995 (gdb) x/1tw 0x0000000000600139 0x600139: 01000001001000111010111000010100
:私はこれを見つけました。ここに私の計算です:
最初のビット= 1 =>浮動小数点は正です。
次の8ビット= 10000010 =>正数の乗数として+2を表します。
次の23ビット= 01000111010111000010100 => 2の負のパワーと変換されるとき0.278749943
しかし0.278749943 * 2を与えるが10.23ではありません。だから今私は2つの質問に留意しています。
- テキストの10.23がメモリ内で10.2299995と表示されるのはなぜですか。
- どこで計算がうまくいかなかったのですか?
の場合1.お読みください:http://floating-point-gui.de/ – Ped7g