问题标签 [sign-extension]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - Ollydbg : 用 Movsx 扩展符号
Movsx
用正确的符号扩展寄存器1
?
那么为什么在 Ollydbg 我得到了这个:
- 前:
- 后:
我应该有而FFFFFF65
不是没有?00000065
ECX
谢谢 !
assembly - 我们何时以及为什么要签署extend 并将cdq 与mul/div 一起使用?
我今天有一个测试,我唯一不明白的问题涉及将双字转换为四字。
这让我想到,为什么/什么时候我们为乘法或除法签名扩展?另外,我们什么时候使用cdq之类的指令呢?
assembly - Is a sign or zero extension required when adding a 32bit offset to a pointer for the x86-64 ABI?
Summary: I was looking at assembly code to guide my optimizations and see lots of sign or zero extensions when adding int32 to a pointer.
At first, I thought my compiler was challenged at adding 32bit to 64bit integers, but I've confirmed this behavior with Intel ICC 11, ICC 14, and GCC 5.3.
This thread confirms my findings, but it's not clear if the sign or zero extension is necessary. This sign/zero extension would only be necessary if the upper 32bits aren't already set. But wouldn't the x86-64 ABI be smart enough to require that?
I'm kind of reluctant to change all my pointer offsets to ssize_t because register spills will increase the cache footprint of the code.
assembly - 汇编 cltq 和 movslq 的区别
Computer Systems A Programmer's Perspective (2nd Edition)的第 3 章提到这
cltq
相当于movslq %eax, %rax
.
为什么他们要创建一个新指令 ( cltq
) 而不是只使用movslq %eax,%rax
?这不是多余的吗?
c++ - 带符号和无符号操作数的位 '&'
我遇到了一个有趣的场景,根据正确的操作数类型,我得到了不同的结果,我无法真正理解其原因。
这是最小的代码:
我在 Linux 64 位上使用 g++(gcc 版本 4.5.2)编译了这段代码:g++ -std=c++0x -Wall example.cpp -o example
输出是:
ffffffff81230000
81230000
在第一种情况下,我无法真正理解输出的原因。
为什么在某些时候将任何时间计算结果提升为有符号的 64 位值 ( int64_t
),从而导致符号扩展?
如果首先将 16 位值向左移动 16 位然后提升为 64 位值,我将在这两种情况下都接受“0”的结果。check
如果编译器首先提升touint64_t
然后执行其他操作,我也会接受第二个输出。
但是&
0xFFFF ( int32_t
) 与 0xFFFFU ( uint32_t
) 怎么会导致这两个不同的输出呢?
python - python中的位域专业化
这是 C++ 中的代码:
此代码的输出为 -3。当我尝试在 python 中重现此代码时,会生成 11101 的位字段,但是当答案转换为 int 时,会给出 29 的答案。
以下是python的代码:
我还使用 ctypes 结构作为替代代码,但没有用:
我的问题是,我将如何使用位数组或任何其他给出正确答案的方法来产生这个结果。
python - 从可变位宽扩展符号
这是 C++ 中的代码:
结果:-3
结果数将是一个有符号数,其位数存储在 b 中。我正在尝试在 python 中复制此代码:
结果:29
我无法像从 C++ 中的输出一样获得符号扩展数。我想知道我当前代码(python)中的错误或问题,以及使用这种技术的可能解决方案。
assembly - 带有负立即常数的 MIPS 中的 andi 与 addi 指令
假设 $t2= 0x55555550
,然后执行以下指令:
$t2 变成0x0005550
MIPS 仿真器1证实了这一点
然而,这不是我所期望的。我认为答案应该是 0x55555550 & 0xFFFFFFFF = 0x55555550。我认为常数 -1 在 and 逻辑之前被符号扩展为 0xFFFFFFFF 。但似乎答案是 0x55555550 & 0x0000FFFF
为什么 -1 符号扩展为 0x0000FFFF 而不是 0xFFFFFFFF
脚注 1:编者注:启用“扩展伪指令”的 MARS 确实将其扩展为多个指令以0xffffffff
在 tmp 寄存器中生成,因此保持$t2
不变。否则,MARS 和 SPIM 都会以不可编码的错误拒绝它。其他汇编程序可能不同。
c++ - C++ 中从 24 位到 32 位的有符号扩展
我有 3 个无符号字节分别通过网络传输。
我需要将这些转换为有符号的 32 位值,但我不太确定如何处理负值的符号。
我想将字节复制到 int32 中的高 3 个字节,然后将所有内容向右移动,但我读到这可能会出现意外行为。
有没有更简单的方法来处理这个?
表示使用二进制补码。
c++ - 符号扩展 11 位到 32 位
如何在 C++ 中将 11 位数字符号扩展为 32 位数字?
我有以下功能,但它没有按预期返回正确的符号扩展:
以下函数适用于 16 位到 32 位的符号扩展: