31得票7回答
有符号和无符号操作数进行位运算 '&' 的区别

我遇到了一个有趣的情况,根据正确的操作数类型,我得到了不同的结果,但我真的无法理解其中的原因。 以下是最小化的代码:#include <iostream> #include <cstdint> int main() { uint16_t check = 0x...

19得票2回答
在x86-64 ABI中,将32位偏移量加到指针上时,是否需要符号扩展或零扩展?

总结:我正在查看汇编代码以指导我的优化,并且发现在将int32添加到指针时出现了许多符号或零扩展。void Test(int *out, int offset) { out[offset] = 1; } ------------------------------------- mov...

15得票1回答
MIPS中有关带符号/无符号加载和存储指令的澄清

我似乎无法理解这些东西的概念,即使我手上拿着谷歌和一本课本。 按照格式(opcode,rs,rt,offset)... 在将偏移量添加到地址值之前是否进行符号扩展?还是先添加后扩展? 在lb和lbu的情况下,有什么区别?它是否也遵循MIPS算术定义,即“无符号”意味着它不会报告溢出? 为...

13得票1回答
何时和为什么要使用符号扩展并在乘除法中使用cdq?

今天我参加了一个测试,唯一一个我不理解的问题涉及将双字转换为四字。 这让我想到了一个问题,为什么/何时我们要对乘法或除法进行符号扩展?此外,我们什么时候使用像cdq这样的指令?

12得票1回答
movslq是什么意思?

我很难理解movslq指令的作用。谷歌并没有提供有用信息,在这个列表中也找不到这个指令。在这里我读到: MOVSLQ指令是将32位源操作数移动并符号扩展为64位目的操作数。 我的理解是:该指令将32位源操作数移动到64位目的操作数中,但确保目的操作数中的有符号值等于源操作数中的值。如果...

8得票1回答
汇编语言中的cltq和movslq有什么区别?

程序员的自我修养(第2版)的第3章提到:cltq等价于movslq %eax,%rax。 为什么他们要创建一个新指令(cltq),而不是只使用movslq %eax,%rax?这不是多余的吗?

7得票6回答
算术右移的实际用例有哪些?

我偶然看到了一个问题,询问您是否在实际项目中曾经使用过位移操作。我在许多项目中广泛使用位移操作,但我从未不得不使用算术位移操作,即当左运算符可能为负且应将符号位移入而不是零时的位移操作。例如,在Java中,您可以使用>>运算符执行算术位移(而>>>将执行逻辑位移)...