问题标签 [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.

0 投票
2 回答
351 浏览

java - 在 Java 中签名扩展任意长度的位模式的最有效方法是什么?

例如,假设我将三个 10 位有符号整数打包成一个 Java 整数。

我可以轻松提取 10 位:

但现在我需要对最高位(右边的第 9 位)进行符号扩展。有没有一种快速的方法可以通过测试最高位和设置来做到这一点?

也许有一种更好的拆包方式,可以将标志留在原处。

0 投票
1 回答
1059 浏览

mips - MIPS中的加载字节指令

我正在通过 MIPS 指令学习计算机体系结构。我有一个问题是:

0x10000000 处的内存包含 0x80 寄存器 $5 包含 0x10000000 执行 lb $8,0($5) 后寄存器 $8 中放入了什么?

我在想,当调用加载字节时,它将从 0x10000000 地址获取 0x80[10000000] 的 8 位,并将其加载到 $8 寄存器的前 8 位,并用零填充剩余位,使答案为 00000080 .但列出的正确答案是FFFFFF80。我不确定我是否理解它。有人可以帮忙解释一下吗?

0 投票
2 回答
2493 浏览

mips - MIPS 中的“立即扩展到 32 位”是什么意思?

我正在阅读 MIPS 数据路径中的指令解码 (ID) 阶段,我得到以下引用:“一旦知道操作数,就读取实际数据(从寄存器)或将数据扩展到 32 位(立即数) 。”

有人可以解释“将数据扩展到 32 位(立即数)”部分是什么意思吗?我知道寄存器都包含 32 位,而且我知道立即数是什么。我只是不明白为什么需要将立即数从 26 位扩展到 32 位。

谢谢!

0 投票
1 回答
3857 浏览

verilog - 如何在系统verilog中进行位扩展?

我想使用复制运算符 {} 在特定时间复制一个位,但我只得到我想要的第一位,而其他位是零,无论该位是零还是一。

我得到一个等于 00000001 不是 11111111

0 投票
1 回答
349 浏览

assembly - 在这种情况下,MOVSX 指令符号如何扩展输入?

我有以下反汇编:

[dest] = d5 cd e8 ca 68

我在下面给出了每条指令的解释和流程:

  1. 它从 [dest] 读取一个字节并将其存储在 eax 中。
  2. edx 的初始值为:F7FBB898。之后, movsx edx, al 指令它变为 FFFFFFD5。此时如何确保 edx 的值是 0x000000d5?

我在 [dest] 中的初始值应该是多少,以便在这些操作之后,eax 中的最终值是 0xd5 而不是 0xFFFFFFD5

0 投票
1 回答
22306 浏览

assembly - movslq 是做什么的?

我很难找出movslq指令的作用。谷歌不是很有帮助,这个列表上也没有这样的说明。在这里我读过

MOVSLQ 将值从 32 位源移动并符号扩展至 64 位目标。

我是这样理解的。该指令将一个值从 32 位源移动到 64 位目标,但确保 64 位目标中的数字的有符号值等于源中的数字,即在负数的情况下它填充前 32 位目的地为 1,否则为 0。

我的理解正确吗?如果没有,请解释我错在哪里。

编辑:

这不是这个主题的重复: assembly cltq and movslq difference。我的问题没有任何解释。你必须阅读整个答案 10 分钟才能说服自己。

0 投票
1 回答
280 浏览

assembly - 这是在 Mul 中使用 cbw 的正确方法吗?

我从 8bit 和 8bit 寄存器中得到乘法。但是,当你有一个 16 位和一个 8 位时,我们如何在乘法之前进行转换:

问题:需要提供260*19的代码片段,并打印结果。我做了:

0 投票
1 回答
327 浏览

c - 为什么 _mm_extract_epi16 没有得到预期的结果?

我在我的程序中发现了由滥用 SSE '_mm_extract_epi16' 指令引起的错误,如下面的代码:

如果提取的值为正,则我得到正确的值 2。相反,我得到错误的值“65533”。或者我可以使用下面的代码获得正确的值。

我不知道为什么会这样。

0 投票
1 回答
837 浏览

assembly - movsbq 和这个添加行做什么?

我试图弄清楚这些代码行的作用

movsbq (%rbx),%rcx

添加 (%rdx,%rcx,4),%eax

0 投票
1 回答
345 浏览

assembly - 如何隔离 64 位寄存器中的字节和字数组元素

我可以说这是一个超级简单的问题,但我还没有弄清楚。基本上,我只想能够将一个元素放入一个数组,并使用寄存器从中添加和减去一些数字,然后将结果放入我的结果变量中。

我知道解决方案与偏移量和索引有关,但我不明白我应该如何将一个数组元素放入寄存器。

我能做些什么?