问题标签 [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 投票
1 回答
237 浏览

c - 组件 IA32 中的符号扩展

我是组装新手,我正在使用 IA32 架构。我正在尝试编写一个.s产生以下操作的函数:C + A - D + B

  • A 是一个 8 位变量
  • B 是一个 16 位变量
  • C 和 D 都是 32 位变量

该函数应该返回一个 64 位的值,该值必须用 C 语言打印,我无法弄清楚。

我正在尝试这个,它适用于正数的测试,但是当我使用负数时它不起作用,我无法弄清楚原因。

我的功能sum_and_subtract.s

一个正确的例子是:

  • A = 0,B = 1,C = 0,D = 0;预期 = 1 -> 结果 = 1 并且适用于此示例

在以下情况下会出现错误:

  • A = 0,B = 0,C = 0,D = 1;预期 = -1 -> 结果 = 256

看到你的评论后,我忘了写我的主要代码来打印我的 long long 结果。

主.c:

这里是。

我有这个其他文件sum_and_subtract.h

0 投票
1 回答
91 浏览

assembly - 在不使用 MOVZX/MOVSX 的情况下在汇编中进行零/符号扩展

我正在尝试进行零或符号扩展,但不使用MOVZXor MOVSX
我基本上想模仿上述命令,但不使用它们。有没有办法做到这一点?
要从左侧添加 0,SHR但我不太确定它是否可以正常工作,因为它会更改值...

我正在使用大会 8086

0 投票
0 回答
127 浏览

assembly - 如何在avr中将int8转换为int16

在我的计算机科学课上,我们这周才开始使用 AVR。我在将 8 位 int 转换为 16 位 int 所需的位操作方面遇到问题。对于上下文,我在 arduino 上运行程序。

这是我到目前为止所拥有的:

这正是我通过查看该网站上的文档和类似问题所得到的,但我不知道从这里去哪里,或者即使这是完全正确的。任何帮助将不胜感激!

0 投票
1 回答
759 浏览

assembly - 关于 MIPS I 型指令符号扩展的困惑

我正在学习 MIPS 指令,当我测试需要签署扩展立即数的 I 型指令时,我对以下结果感到困惑(它们都在 MARS 中运行):

  1. 假设我们有源代码行 ori $s1, $s2, 0xfd10,MARS 给出了基本的汇编指令 ori $17, $18, 0x0000fd10。这是期望,因为零ori应该扩展16 位立即数。如果我们只将函数更改oriandi,即源代码行 andi $s1, $s2, 0xfd10,MARS 给出几乎相同的基本汇编指令 andi $17, $18, 0x0000fd10。但是,与 不同ori的是,andi应该使用符号扩展。所以基本的汇编指令应该是andi $17, $18, 0xfffffd10.

andi也应该使用零扩展!请忽略第一个问题。

  1. slti rt, rs, imm例如,当我尝试使用时slti $s1, $s2, 0x8000,MARS 拒绝执行该行并且错误消息是"0x8000": operand is out of range. 我看不出立即数超出范围的原因。如果我稍微改变一下立即数,比如说,slti $s1, $s2, 0x7fff它会起作用,并且立即数会扩展到0x00007fff. 我的期望是0x8000应该扩展到0xffff8000. 我的理解有什么问题吗?
0 投票
1 回答
137 浏览

assembly - 在 Thumb 模式下将寄存器符号扩展为 64 位(设置所有位 = 符号位)

我正在为 ARM7TDMI(ARMv4T 架构)使用汇编程序。我正在使用 Thumb 模式,因为 ROM 具有 16 位总线 (GBA)。我想对一个 32 位寄存器进行符号扩展,以获取另一个寄存器,其中所有位都设置为源寄存器第 31 位的副本。符号扩展的寄存器是一个高位寄存器,特别是 R9。

我目前正在使用这个:

但这需要 4 条指令。有没有更短的方法?

0 投票
0 回答
100 浏览

assembly - 汇编 movsbq 指令

movz我理解和之间的区别movsmovz用零填充空字节,同时movs用符号位(零或一)填充它们。

但是,我遇到了以下示例

  1. movabsq $0x0011223344556677, %rax
  2. movb $0xAA, %dl
  3. movb %dl, %al
  4. movsbq %dl, %rax

在第 3 行之后,%rax = 00112233445566AA. 直到这我才明白。但是我不明白为什么 %rax 在第 4 行之后等于。 FFFFFFFFFFFFFFAA不应该是00000000000000AA因为 %dl 是正数,所以空位填充为零吗?

0 投票
1 回答
37 浏览

mips - lh/lb(Load Half / Load Byte)中的符号扩展发生在哪里?

我研究了 mips 一段时间,关于( RIJ )格式以及在处理 I 格式时何时需要符号扩展。

但是在 lh(Load Half) 或 lb(Load Byte) 的情况下,一旦它们从内存中取出,它们的符号就会从 8 位/16 位扩展到 32 位以避免潜在的错误,但是什么时候会发生这种情况?

符号甚至在进入 ALU 之前就扩展了立即数,但是在从内存中读取所需的数据之后,需要在将其保存到寄存器之前进行符号扩展。

但是 mips 架构的覆盖(单周期)在 WriteBack 阶段没有符号扩展步骤,这是如何工作的?