【发布时间】:2015-01-23 08:40:43
【问题描述】:
我写了这个函数来将单数舍入为整数:
function Round(const Val: Single): Integer;
begin
asm
cvtss2si eax,Val
mov Result,eax
end;
end;
它有效,但我需要更改舍入模式。显然,根据this,我需要设置 MXCSR 寄存器。
我如何在 Delphi 中做到这一点?
我首先这样做的原因是我需要“远离零”的舍入(就像在 C# 中一样),即使通过 SetRoundingMode 也是不可能的。
【问题讨论】:
-
你不需要
mov Result, eax。结果是 eax。其实function Round(const Val: Single): Integer; asm cvtss2si eax,Val end;就够了;) -
谢谢。这回答了另一个问题。
-
@BBaz,为什么我不能对这个函数做同样的事情:function MSb(const Val: Integer): Integer;如果 Val = 0 那么 Result := -1 否则 asm BSR EAX, Val MOV Result, EAX end;结束;
-
因为在我之前的评论中它是一个(几乎)naked asm 函数。您也必须在 asm 中编写分支(如果则不然)。请注意,我忘记了 RET...以使其成为真正的裸 asm 函数。
-
谢谢。有人帮我解决了这个问题(包括克服似乎是编译器错误):stackoverflow.com/questions/27133303/…
标签: delphi delphi-7 sse rounding inline-assembly