delphi – 调用汇编语言函数会导致“浮点堆栈检查”异常
发布时间:2020-12-15 04:26:17 所属栏目:大数据 来源:网络整理
导读:执行以下代码: function ABCD32(Value: Cardinal): Single; register;asm BSWAP EAXend;function HexToFloat(hexValue: string; fmt: THexFloatFormat): Single;var c: Cardinal; Err: Integer;begin Result := NaN; c := HexToCardinal(hexValue,Err); //D
执行以下代码:
function ABCD32(Value: Cardinal): Single; register; asm BSWAP EAX end; function HexToFloat(hexValue: string; fmt: THexFloatFormat): Single; var c: Cardinal; Err: Integer; begin Result := NaN; c := HexToCardinal(hexValue,Err); //DCBA format if Err <> 0 then Exit(); case fmt of hfABCD: Result := ABCD32(c); //Here,after return from ABCD32 hfBADC: Result := BADC32(c); hfCDAB: Result := CDAB32(c); hfDCBA: Result := DCBA32(c); end; end; 导致运行时错误:
这是什么以及如何处理它? 更新 这是CPU窗口输出: HexFloat.dpr.162: hfABCD: Result := ABCD32(c); 004E98F8 8B45F0 mov eax,[ebp-$10] 004E98FB E894FFFFFF call ABCD32 004E9900 D95DF4 fstp dword ptr [ebp-$0c] //WTF? 004E9903 9B wait //Exception happens here 004E9904 EB28 jmp $004e992e 解决方法
您的功能不尊重ABI.浮点值应在x87单元的ST(0)中返回.
function ABCD32(Value: Cardinal): Single; register; asm BSWAP EAX PUSH EAX FLD [ESP] ADD ESP,4 end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |