armの逆アセンブルについてです。r0に任意の値Xを設定するにはE3A0000Xと書きますがs0に任意のfloat値を設定するにはどう書けばいいか教えてください。

1件の回答

回答を書く

1073700

2026-08-30 21:30

+ フォロー

arm の逆アセンブルで s0 に任意の float を直接設定する方法についてですが、

r0 に対する MOV 即値命令(例:E3A0000X = MOV r0,#X)のように、

任意の float 値を「即値として」VFP レジスタに直接埋め込む命令は ARM には存在しません。



float の設定は、一般的に以下のいずれかの方法を使用します。



【方法1:リテラル定数からロードする】

VLDR s0, =1.23

逆アセンブルでは

VLDR s0, [pc, #imm]

となり、実際の float ビット列は定数プール(literal pool)に配置されます。



【方法2:汎用レジスタ経由でビット列を転送する】

MOV r0, #0x3F800000 ; 1.0f の IEEE754 ビットパターン

VMOV s0, r0 ; r0 → s0 へビット列コピー



必要に応じて 32bit 値は MOV + MOVT で構成します。



なお ARMv7 以降には

VMOV.F32 s0, #imm

という浮動小数即値命令もありますが、表現できる値は極めて限定的で、

任意の float 値を代入する用途には適しません。



以上の理由から、任意 float の設定には

・VLDR によるリテラルロード

・VMOV による汎用レジスタ経由

のいずれかを使用するのが一般的です。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有