问题标签 [immediate-operand]

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 回答
424 浏览

assembly - 为什么我不能将 #1001 移动到手臂上的 r5 中?

我有一个 RPi4,我正在尝试在汇编中编写一些代码以循环 1000 次。当我设置较少的循环数时,代码可以正常工作,但是当我尝试将其设置为 1001 时,会gcc说:

这是代码:

0 投票
1 回答
694 浏览

c++ - 在 intel 内部函数 (AVX) 中使用混合指令

我有一个关于 AVX_mm256_blend_pd功能的问题。

我想优化我大量使用该_mm256_blendv_pd功能的代码。不幸的是,这具有相当高的延迟和低吞吐量。此函数将三个__m256d变量作为输入,其中最后一个变量表示用于从前 2 个变量中进行选择的掩码。

我发现了另一个函数 ( _mm256_blend_pd),它采用位掩码而不是__m256d变量作为掩码。当掩码是静态的时,我可以简单地传递一些东西,比如 0b0111从第一个变量中获取第一个元素和第二个变量的最后 3 个元素。_mm_cmp_pd但是在我的情况下,掩码是使用返回__m256d变量的函数计算的。我发现我可以用来_mm256_movemask_pd从掩码返回一个 int,但是当将它传递给函数时,_mm256_blend_pd我得到一个错误error: the last argument must be a 4-bit immediate

有没有办法使用它的前 4 位传递这个整数?或者是否有另一个类似于 movemask 的功能可以让我使用_mm256_blend_pd?或者我可以使用另一种方法来避免使用对这个用例更有效的 cmp、movemask 和 blend 吗?

0 投票
1 回答
402 浏览

assembly - 将寄存器的所有位设置为1,ORI可以这样做吗?

在 MIPS 汇编考试中,我有几个问题被标记为不正确,我想知道是否有人可以帮助我找出原因,因为我根本不明白为什么。

第一个问题:

将寄存器 $t1 的所有位设置为 1

我的回答是ori $t1, $t1, -1


另外两个问题给出了一些汇编代码,并要求“编写每个汇编程序执行的操作”。原始代码未注释。下面的评论是我的。

第一个简答题:

我对第一个简短回答问题的回答是:“将数组的所有正元素相加,并返回数组的最后一个元素”

我认为倒数第二行应该有 $t0 而不是 $t2 以便它返回它计算的总和而不是最后一个元素,但是我在考试期间向讲师询问了这个问题,他说将所有给定的代码视为正确的/有意即使我认为这是一个错误。


第二个简答题。同样,原始代码未注释。下面的评论是我的。

我对第二个简短回答问题的回答是:“返回数组中所有元素的总和”

如果有人可以帮助我弄清楚我做错了什么,或者它是否被标记为错误?

0 投票
1 回答
267 浏览

riscv - RISC-V:12 位立即数逻辑运算是否对整个寄存器进行操作?

我正在尝试为 RISC-V CPU 编写一个模拟器,但找不到我的问题的明确答案。

假设我想使用

rs1 包含 0xFFFFFFFF,立即值为 0xFFF。

ANDI 是否对完整寄存器进行操作,并仅用零填充立即数的剩余 20 位,因此 rd 中的结果将为 0x000000FFF?

还是忽略高 20 位,rd 中的结果仍然是 0xFFFFFFFF?

XORI 和 ORI 命令的问题相同。

0 投票
2 回答
3256 浏览

assembly - 为什么我们不能将 64 位立即数移动到内存中?

movq首先,我对和之间的区别有点困惑movabsq,我的教科书说:

常规movq指令只能具有可以表示为 32 位二进制补码的立即源操作数。然后对该值进行符号扩展以生成目标的 64 位值。该movabsq指令可以有一个任意的 64 位立即数作为其源操作数,并且只能有一个寄存器作为目标。

我对此有两个问题。

问题 1

movq指令只能具有可以表示为 32 位二进制补码数的直接源操作数。

所以这意味着我们不能做

我们必须这样做:

但是为什么movq设计为不适用于 64 位立即数,这确实违背了q(四分字)的目的,我们需要另一个movabsq只是为了这个目的,不是很麻烦吗?

问题2

由于目标movabsq必须是寄存器,而不是内存,所以我们不能将 64 位立即数移动到内存中:

但有一个解决方法:

那么为什么该规则旨在使事情变得更难呢?

0 投票
1 回答
274 浏览

assembly - 在汇编中明确输入一个十进制数

我发现自己经常无法立即识别数字是十进制还是十六进制(如果十六进制数字没有前缀或字母)。例如,从上一个问题中得到一个数字0000000000400078,但不确定它是哪个。

有没有办法在 x86_64 中显式指定带前缀的十进制数?例如:

我知道这样做movb $22, -2(%rbx)是可行的,但是有没有办法明确地为其添加前缀/后缀,以便我们知道它是小数?

0 投票
2 回答
1388 浏览

arm - 为什么操作码在 MIPS 32 位架构中是 6 位长

以下是 32 位 ARM 和 MIPS 架构的数据传输指令格式。32 位 ARM 架构有 4 位操作码,因为有 16 个寄存器 (2^4=16)。32 位 MIPS 架构有 6 位操作码。考虑到 MIPS 中有 32 个寄存器,它不应该是 5 位吗?

在此处输入图像描述

0 投票
0 回答
166 浏览

assembly - 在 MIPS 架构中如何“立即”工作?

几周前我刚开始学习 MIPS32 架构,当我阅读其中的常量时,它说我可以添加一个不在内存或寄存器中的数字!

例如这个:

如果数字应该在一个 reg 中以计算出 T 那么这个数字(这里是 4)是从哪里来的?它代表什么?我们什么时候真正使用它?

0 投票
0 回答
81 浏览

assembly - 气体中的整数溢出

我不确定这是装配问题还是气体问题。我已经完成了以下操作,以了解汇编器如何处理太大而无法在相应寄存器中编码的立即数:

并运行$ as file.s文件给我以下警告和错误:

以下是与此相关的几个问题:

  • bl : 为什么没有警告尝试添加0xFFFF到中bl?它在组装后被缩短FF,但没有警告信息。
  • bx65535或者0xFF FF是最大的 16 位值,所以这是有道理的。对此有一个警告。
  • ebx : 4294967295or0xFF FF FF FF是最大的 32 位值,所以这是有道理的。对此有一个警告。
  • rbx:这对我来说是令人惊讶的部分,在溢出时这实际上会引发错误而不是警告。为什么会出现这一错误?
0 投票
1 回答
1188 浏览

assembly - 如何将浮点常数移动到 FP 寄存器中?

因此,我正在使用 A64 指令集以汇编形式 ARM 进行编程。我正在使用指令 fmov d1, #31.0 将值移动到 dx 寄存器。但是,当我使用 0.0 或任何高于 31.0 的值时,它会显示错误:

那么,如何在 A64 上定义浮点常量呢?为什么我不能使用 31 以上的任何值或使用 0?如何以十六进制表示值?

另一个问题是:根据arm 的网站,它支持使用浮点寄存器作为 Bx、Hx、Sx、Dx 和 Qx(分别为 8、16、34、64 和 128 位),但我就是不能使用 Bx ,Hx 和 Qx 寄存器,它显示:

" 错误:操作数不匹配 -- `fmov b1,#1.0'"

" 错误:选择的处理器不支持 `fmov h1,#2.0"

" 错误:操作数不匹配 -- `fmov q1,#2.0'"

如何正确设置第二个操作数?