问题标签 [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.
assembly - 我可以将 64 位常量添加到 64 位寄存器吗?
在我的 64 位 Intel 机器上,以下代码有效:
而这个看起来相当相似的会产生警告并且不起作用:
我应该坚持使用数字 1 还是我错过了什么?这种行为似乎很尴尬。
代码 nr 2 产生的警告:
assembly - ARM:为什么立即数只有 12 位?
这是什么意思:我只有 12 位用于立即常数,所以我可以只表示从 0 到 2^12 = 4096 的立即常数吗?操作数 2 如果是寄存器,可以有 32 位,但为什么立即数只有 12 位呢?这个数字是从哪里来的?
assembly - 是否可以在 x86 汇编中乘以 mul 的立即数?
我正在使用 DosBox 模拟器学习 x86 的汇编。我正在尝试执行乘法。我不明白它是如何工作的。当我编写以下代码时:
我得到一个错误。虽然,在我使用的参考文献中,它以乘法表示,它假设 AX 始终是占位符,因此,如果我写:
它将al
值乘以 2。但它不适用于我。
当我尝试以下操作时:
我在 ax 中得到结果 9。请参阅此图片以进行说明:
另一个问题:我可以直接使用内存位置进行乘法吗?例子:
assembly - 文字 VS 立即数操作数
在我这学期的系统软件课程中,我们学习了汇编程序和其他系统软件。在阅读整个课程时,我遇到了LITERALS的主题。
在文字和立即操作数之间进行了比较,表明它们之间的唯一区别是文字不是指令的一部分,而立即操作数是。
如果我们可以使用直接操作数,为什么我们必须使用文字?是什么让他们与众不同?换句话说,什么时候使用文字,什么时候使用直接操作数?
assembly - MIPS I 指令立即域
该字段由算术和条件分支指令使用。
第一个问题是:
可以存储在立即算术指令和条件分支中的值范围是多少?
二是:
如果 MIPS 处理器有 64 个寄存器,您将如何更改立即指令格式以引用这些寄存器?我将如何绘制和标记格式?
assembly - 如何设计虚拟cpu/指令集:区分LDA $02和LDA B
所以,我正在设计自己的虚拟 CPU。我有一些寄存器和内存,可以执行一些基本指令。但是,现在我被困住了。
我如何区分(在我组装的“机器代码”中):
和
现在我已将操作数 ($02
和B
) 都编码为0x02
. 该指令LDA
被编码为单个字(此时为 uint16)。
这显然会带来问题。解决此问题的最佳方法是什么?我想我有以下选择:
- 以某种方式将我们正在处理的值或寄存器(或稍后的内存位置)的指令编码为 16 位
- 为不同的操作数创建不同的指令。例如
LOADIA
,LOADRA
,LOADMA
分别用于文字、寄存器和内存。
恕我直言,选项 1 是最好的。您能否确认 1 是一个有效选项或提供其他处理此问题的方法。谢谢!
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' 确实有效,因为我已经测试过了,所以我知道它应该是可能的如果它有一些语法......
assembly - ARM MOV 和 MVN 操作数
我正在尝试编写代码来做两件事:如果我的值在 ARM 数据处理指令中可以作为常量呈现,则将 1 返回到寄存器 r2。这段代码可以做到这一点(如果效率低,请提供更好的方法)。但是,我也想修改它以告诉我是否需要使用 MOV 或 MVN。
assembly - 在 MIPS 中,何时使用有符号扩展,何时使用零扩展?
我正在设计一个 MIPS 处理器作为我的个人项目,现在我遇到了一个非常困惑的问题。我只是无法总结在 MIPS 中何时使用有符号扩展以及何时使用零扩展。
我搜索了很多资源,主要是说:
1) ADDI、ADDIU 都使用有符号扩展。
2) ANDI、ORI、XORI 都使用零扩展。
但是,在这两条指令中,我开始感到困惑:
SLTIU/SLTI
在 Imagination 的“MIPS 程序员架构卷 II-A:MIPS 指令集手册”第 368 页中说:
它清楚地提到了 16 位立即数是有符号扩展的。但我不明白以下语句:
[0, 32767] 或最大 [max_unsigned-32767, max_unsigned] 无符号范围的结尾。
还有一些人说 16 位立即数是零扩展的,如下所示:
那么,有人能解释一下 MIPS 中的有符号指令和无符号指令之间到底有什么区别吗?