相关疑难解决方法(0)

Move上的浮点运算无效?

我遇到了一个我以前从未见过的奇怪问题,在Delphi 2010中有时使用例程CopyMemory(内部调用Move)我得到一个Invalid Float Point Operation异常,当使用Move时会发生这种情况?

我在汇编程序中有一个调试信息,我检查了Move的源代码,问题发生在FILD指令中,我发现FILD将一个整数值从内存转换为寄存器中的浮点,它可能触发无效操作,但为什么那个会发生?我现在坚持了2天

Assembler Information:
; System.Move (Line=0 - Offset=1)
;
00404E0C cmp eax, edx
00404E0E jz System.Move
00404E10 cmp ecx, +$20
00404E13 jnbe System.Move
00404E15 sub ecx, +$08
00404E18 jnle System.Move
00404E1A jmp dword ptr [System.Move+ecx*4]
00404E21 fild qword ptr [ecx+eax]
00404E24 fild qword ptr [eax] ; <-- EXCEPTION
00404E26 cmp ecx, +$08
00404E29 jle System.Move
00404E2B fild qword ptr [eax+$08]
00404E2E cmp ecx, +$10
00404E31 jle System.Move
00404E33 fild qword ptr [eax+$10]
00404E36 fistp qword …
Run Code Online (Sandbox Code Playgroud)

delphi assembly

1
推荐指数
1
解决办法
1126
查看次数

标签 统计

assembly ×1

delphi ×1