- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
SF is updated according to the most significant bit of the operand-size-truncated result in the destination.
SF = (a * b) >> 63
,或者更简单的如果
a
和
b
已签署,
SF = a * b < 0
.
mov rax, 0x9090909090909095
mov rdx, 0x4040404040404043
imul rax, rdx
0x9090909090909095 * 0x4040404040404043
的结果是
0xefcba7835f3b16ff
.它设置了符号位,但是在
imul
之后SF 标志被清除。操作说明。这是怎么回事?
最佳答案
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/
谢谢帮助,我的问题是关于从下面的代码中收到的 ax 值? mov al,22h mov cl,0fdh imul cl 真机结果:ff9a 我的预期:00:9a(通过二进制相乘) 第一个数字是 22h
我编译了以下程序: #include uint64_t usquare(uint32_t x) { return (uint64_t)x * (uint64_t)x; } 这反汇编为: 0:
我正在使用运行时调试器。 EAX:0000 0023 EDX:5555 5556 imul edx EAX:aaaa aac2 EDX:0000 000b 我完全困惑,无法弄清楚这种乘法是如何工作的。
我目前正在从游戏中反转哈希函数并遇到了这个问题: Game.exe+1F745D - 69 C0 93 01 00 01 - imul eax,eax,Game.exe+C00193 指令本身不是问题
哪个更快 - val = val*10; 或 val = (val<<3) + (val<<2); 与移位指令相比,imul 需要多少个时钟周期? 最佳答案 这是21世纪。现代硬件和编译器知道如何生成
我正在学习 ASM 语言并在 Ubuntu Eclipse C++ 上试用 IMUL 函数,但出于某种原因,我似乎无法从我的代码中获得所需的输出。 Required: Multiply the neg
它比 * 表达式表现更好吗?为什么? This article描述它对像 Emscripten 这样的项目很有用。这是为什么? 谢谢 最佳答案 精简版 Math.imul(a,b) 将 a 和 b 相
我必须用 C 语言编写什么才能让汇编器用一个操作数显示 imul ?例如: imul %ebp 最佳答案 如果您想编写 C 代码,以便编译器使用一个操作数发出 imul,那么唯一的方法是使用加宽有符
我写了一个非常基本的 C 函数,叫做“multby22”,它的作用正如它的名字所暗示的那样:它需要一个 long 并返回那个 long 乘以 22。(我知道这是一个毫无意义的函数,但我把它写到尝试帮助
我发现 mul和 imul可用于将有符号数乘以无符号数。 例如: global _start section .data byteVariable DB -5 section .text _s
所以,我有这样的代码: XOR DX, DX MOV BX, 1 MOV AX, BX MOV CX, 10 .LOOP: JCXZ .EXIT_LOOP
我想知道,主要是出于好奇,对于一个操作使用同一个寄存器是否比使用两个更好。考虑到性能和/或其他问题,什么会更好? mov %rbx, %rcx imul %rcx, %rcx 或者 mov %rbx,
MUL 运算符只有单操作数形式有什么原因吗? IMUL 运算符可以采用三种不同的形式(一个、两个或三个操作数),这样更方便。从技术的角度来看,我看不出 MUL 运算符不能采用二/三操作数形式的任何原因
我在尝试使用 Math.imul() 方法,我发现它在输入很少时速度更快,而在输入很多时速度较慢。这是为什么? (也许它与 Math.imul() 本身无关,但这没关系,我仍然有兴趣了解我得到的结果!
这个问题是关于我们如何将一个整数与一个常数相乘。那么让我们看一个简单的函数: int f(int x) { return 10*x; } 如何才能最好地优化该函数,尤其是在内联到调用方时? 方
在/O2(发行版)模式下查看Visual Studio(2015U2)生成的程序集时,我看到此“手动优化”的C代码片段已转换回乘法: int64_t calc(int64_t a) { retur
我正在阅读说明 imul 0xffffffd4(%ebp, %ebx, 4), %eax 我对它到底在做什么感到困惑。我知道 imul 相乘,但我无法弄清楚语法。 最佳答案 (我知道并且更喜欢 Int
我正在查看为这个简单的 x64 程序生成的程序集 Visual Studio: struct Point { int a, b; Point() { a = 0; b
说我有 EDX = 0xA28 EAX = 0x0A280105 我运行这段 ASM 代码 IMUL EDX 据我所知,如果指定了一个操作数,它只使用 EAX.. 所以在C代码中应该是这样的 EAX
我试图从本质上得到以下结果...... Inputs EAX, EDX IMUL EDX Return EAX:EDX as full 64-bit result 我正在查看 https://gito
我是一名优秀的程序员,十分优秀!