问题标签 [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 回答
2589 浏览

assembly - 我可以将 64 位常量添加到 64 位寄存器吗?

在我的 64 位 Intel 机器上,以下代码有效:

而这个看起来相当相似的会产生警告并且不起作用:

我应该坚持使用数字 1 还是我错过了什么?这种行为似乎很尴尬。

代码 nr 2 产生的警告:

0 投票
4 回答
3896 浏览

assembly - ARM:为什么立即数只有 12 位?

这是什么意思:我只有 12 位用于立即常数,所以我可以只表示从 0 到 2^12 = 4096 的立即常数吗?操作数 2 如果是寄存器,可以有 32 位,但为什么立即数只有 12 位呢?这个数字是从哪里来的?

0 投票
2 回答
48126 浏览

assembly - 是否可以在 x86 汇编中乘以 mul 的立即数?

我正在使用 DosBox 模拟器学习 x86 的汇编。我正在尝试执行乘法。我不明白它是如何工作的。当我编写以下代码时:

我得到一个错误。虽然,在我使用的参考文献中,它以乘法表示,它假设 AX 始终是占位符,因此,如果我写:

它将al值乘以 2。但它不适用于我。

当我尝试以下操作时:

我在 ax 中得到结果 9。请参阅此图片以进行说明: 在此处输入图像描述

另一个问题:我可以直接使用内存位置进行乘法吗?例子:

0 投票
1 回答
13053 浏览

assembly - 文字 VS 立即数操作数

在我这学期的系统软件课程中,我们学习了汇编程序和其他系统软件。在阅读整个课程时,我遇到了LITERALS的主题。

在文字和立即操作数之间进行了比较,表明它们之间的唯一区别是文字不是指令的一部分,而立即操作数是。

如果我们可以使用直接操作数,为什么我们必须使用文字?是什么让他们与众不同?换句话说,什么时候使用文字,什么时候使用直接操作数?

0 投票
1 回答
5701 浏览

assembly - MIPS I 指令立即域

该字段由算术和条件分支指令使用。

第一个问题是:

可以存储在立即算术指令和条件分支中的值范围是多少?

二是:

如果 MIPS 处理器有 64 个寄存器,您将如何更改立即指令格式以引用这些寄存器?我将如何绘制和标记格式?

0 投票
3 回答
668 浏览

assembly - 如何设计虚拟cpu/指令集:区分LDA $02和LDA B

所以,我正在设计自己的虚拟 CPU。我有一些寄存器和内存,可以执行一些基本指令。但是,现在我被困住了。

我如何区分(在我组装的“机器代码”中):

现在我已将操作数 ($02B) 都编码为0x02. 该指令LDA被编码为单个字(此时为 uint16)。

这显然会带来问题。解决此问题的最佳方法是什么?我想我有以下选择:

  1. 以某种方式将我们正在处理的值或寄存器(或稍后的内存位置)的指令编码为 16 位
  2. 为不同的操作数创建不同的指令。例如LOADIA, LOADRA,LOADMA分别用于文字、寄存器和内存。

恕我直言,选项 1 是最好的。您能否确认 1 是一个有效选项或提供其他处理此问题的方法。谢谢!

0 投票
2 回答
1122 浏览

assembly - 在 x86-64 (GNU Assembler) 中指定 8 位立即数

我正在尝试在汇编中为 x86-64 编写一些特殊的例程(即使 x86 示例也可以)。问题:我的即时信息仅在链接时解决。

例如,

会将两个标签/符号之间的差异添加到 rax。不幸的是,因为 GNU Assembler 只执行一次(我不知道为什么,即使是像 FASM 这样的开源汇编程序也执行多次),它无法解决这些问题,因此它会让链接器执行此操作。

不幸的是,它将为链接器保留 4 个字节(32 位立即数),这不是我想要的,因为标签的差异始终在 -128 到 +127 范围内。

我的问题,我如何强制或指定指令应该有一个 8 位立即数?比如,这里的语法是什么?在 AT&T 语法或 Intel 中,两者都可以。例如,在 NASM 中,您可以:

指定 8 位立即数。但是如何在 GAS 中做到这一点?即使它不知道立即数本身,强制它使用 8 位立即数的语法是什么......出于特定原因,我最好在 GAS 中使用它,所以请不要告诉我使用 NASM 作为回答!

编辑:对不起,我忘了提,是的,这是一个“前向参考”。两个标签都是在指令之后定义的,这就是 GAS 无法解决它们的原因,我认为这是一个重定位,但是使用 '.byte label2-label1' 确实有效,因为我已经测试过了,所以我知道它应该是可能的如果它有一些语法......

0 投票
2 回答
3239 浏览

assembly - ARM MOV 和 MVN 操作数

我正在尝试编写代码来做两件事:如果我的值在 ARM 数据处理指令中可以作为常量呈现,则将 1 返回到寄存器 r2。这段代码可以做到这一点(如果效率低,请提供更好的方法)。但是,我也想修改它以告诉我是否需要使用 MOV 或 MVN。

0 投票
2 回答
6586 浏览

assembly - 在 MIPS 中,何时使用有符号扩展,何时使用零扩展?

我正在设计一个 MIPS 处理器作为我的个人项目,现在我遇到了一个非常困惑的问题。我只是无法总结在 MIPS 中何时使用有符号扩展以及何时使用零扩展。

我搜索了很多资源,主要是说:

1) ADDI、ADDIU 都使用有符号扩展。
2) ANDI、ORI、XORI 都使用零扩展。

但是,在这两条指令中,我开始感到困惑:

SLTIU/SLTI

在 Imagination 的“MIPS 程序员架构卷 II-A:MIPS 指令集手册”第 368 页中说: 图片1

它清楚地提到了 16 位立即数是有符号扩展的。但我不明白以下语句:

[0, 32767] 或最大 [max_unsigned-32767, max_unsigned] 无符号范围的结尾。

还有一些人说 16 位立即数是零扩展的,如下所示:

http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/pseudojump.html

那么,有人能解释一下 MIPS 中的有符号指令和无符号指令之间到底有什么区别吗?

0 投票
1 回答
2890 浏览

assembly - x64 MOV 32 位立即数到 64 位寄存器

此页面上代码部分的第二条指令:

x86

看起来像这样:MOV r9d, 0。编码如下:41 B9 00 00 00 00

唯一的问题是......英特尔 x64 手册中没有MOV指令将 4 字节立即数放入 64 位寄存器中。

这些是英特尔手册中的说明:

该指令似乎有效,但如何?