據我所知,不可能使用單個指令直接在暫存器中移動浮點數,如下所示:
fld 0.5
或者
movsd xmm0 , 0.4
我想制作一個將浮點值存盤到記憶體然后到暫存器的宏,如下所示:
%macro fld_macro 1
section .data
_%1 : dq %1
section .text
fld qword [_%1]
%endmacro
我的問題是我想在執行宏之前首先檢查該值是否已經存在。類似的東西:
%macro fld_macro 1
(if _%1 doesnt exist , then )
section .data
_%1 : dq %1
section .text
fld qword [_%1]
(else )
%endmacro
那可能嗎?我正在使用 nasm (-fwin64 ) 和 gcc
uj5u.com熱心網友回復:
據我所知,不可能像這樣使用單個指令直接在暫存器中移動浮點數。
對于大多數值,這是不可能的。
80x86 FPU 確實支持在單個指令(沒有任何立即數)中加載一些常見常量( 0.0、 1.0、PI、...)。您可以在手冊中查看完整串列及其詳細資訊(或在這里:https : //www.felixcloutier.com/x86/fld1 : fldl2t : fldl2e : fldpi : fldlg2 : fldln2 : fldz)。
id 喜歡讓 makro 將浮點值存盤到記憶體然后到暫存器,如下所示:
我的問題是我想在執行宏之前首先檢查該值是否已經存在。像下面這樣的東西
我認為你不能;至少不是以穩健的方式。問題在于前處理器處理字串,并且(例如)字串“1.0”與字串“1.00”不同,因此(假設您可以在 a 中使用字串連接
