gpt4 book ai didi

assembly - 用imul指令如何计算sign flag?

转载 作者:行者123 更新时间:2023-12-04 20:00:18 25 4
gpt4 key购买 nike

documentation for imul指出:

SF is updated according to the most significant bit of the operand-size-truncated result in the destination.



那么,对于 64 位操作,我的理解是 SF = (a * b) >> 63 ,或者更简单的如果 ab已签署, SF = a * b < 0 .

但是,我得到了两个大数相乘的意外结果:
mov rax, 0x9090909090909095
mov rdx, 0x4040404040404043
imul rax, rdx
0x9090909090909095 * 0x4040404040404043的结果是 0xefcba7835f3b16ff .它设置了符号位,但是在 imul 之后SF 标志被清除。操作说明。这是怎么回事?

这是 cross-posted to the Intel forums前一段时间。

最佳答案

Other sources说 SF 在 imul 之后是未定义的.这很可能意味着 SF 的结果在较新的处理器上定义良好,但较旧的处理器不提供该功能。我的电脑已经 5 岁了,我可能属于第二类。

编辑 : 使用 Archive.org 的 Wayback Machine,我发现文档从声明 SF 未定义更改为 SF 在 September 2014 中定义。修订。上一版本,June 2014 , 仍然说 SF 是未定义的。这记录在随附的 Documentation Changes 中。文档,尽管更改的理由不是。

编辑 2 我的 CPU 是 i7 M 620。我可以使用更旧的 Core2Duo P7550 并且能够确认 imul未设置 SF要么。

编辑 3 从 2016 年 9 月版开始,IMUL说 SF 是未定义的,所以这解决了这个问题。

关于assembly - 用imul指令如何计算sign flag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com