问题标签 [instruction-set]
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.
encoding - 如何在汇编程序中实现相对 JMP (x86)?
在为 x86 平台构建汇编程序时,我遇到了一些JMP
指令编码问题:
(来自我最喜欢的 x86 指令网站,http: //siyobik.info/index.php?module=x86&id=147 )
都是相对跳转,其中每个编码(操作+操作数)的大小在第三列。
现在我原来的(因此是错误的)设计为每条指令保留了最大(5字节)空间。操作数尚不为人所知,因为它是到一个未知位置的跳转。所以我实现了一种“重写”机制,如果跳转的位置已知,则将操作数重写到内存中的正确位置,并用NOP
s 填充其余部分。这在紧密循环中是一个有点严重的问题。
现在我的问题是以下情况:
问题是我想要JMP
指令的最小编码(并且没有 NOP
填充)。
在计算操作数 at之间的c
相对距离之前,我必须知道指令的大小。这同样适用于at :它需要知道 的大小才能计算 和 之间的相对距离。a
b
d
JMP
c
d
e
a
现有的汇编程序如何解决这个问题,或者您将如何解决这个问题?
这就是我想解决问题的方法:
首先将所有指令编码为
JMP
和它的目标之间的操作码,如果该区域包含可变大小的操作码,则使用最大大小,5
例如JMP
.JMP
然后通过选择可能的最小编码大小(3、4 或 5)并计算距离,对相对于它的目标进行编码。如果对任何可变大小的操作码进行编码,则更改之前的所有绝对操作数,以及跳过此编码指令的所有相对指令:当它们的操作数更改以选择可能的最小大小时,它们将被重新编码。此方法保证结束,因为可变大小的操作码只能缩小(因为它使用它们的最大大小)。
我想知道,也许这是一个过度设计的解决方案,这就是我问这个问题的原因。
assembly - 从哪里获得所有版本的 x86 又名 IA32 指令集架构手册
我知道Intel 64 and IA-32 Architectures Software Developer's Manuals。我也知道这些涵盖了所有遗留和旧处理器 ISA。
但我想要每个处理器的单独手册(与处理器一起发布的手册)。
我设法找到了80386 手册
编辑:
我开始赏金了。
assembly - 汇编器mov问题
我有下一个代码:
为什么我不能这样写?
所有来源:
谢谢!
assembly - ia-32 汇编中的 3 个操作数 imul 指令究竟做了什么?
我正在阅读说明
我对它到底在做什么感到困惑。我知道 imul 会成倍增加,但我无法弄清楚语法。
language-agnostic - 围绕数字的硬件表示来思考:一个假设的二进制补码问题
这是一个非常幼稚的问题(我知道),但我认为这将是一个很好的起点,可以考虑如何实际执行 CPU 的基本指令集:
在二进制补码系统中,您不能反转您的实现可以表示的最大负数的符号。这样做的理论原因很明显,因为最大负数的取反将超出实现的范围(范围始终为
-128 到 127)。
但是,当您尝试对最负数执行否定运算时实际发生的情况非常奇怪。例如,在 8 位表示中,最大负数是 -128,或二进制的 1000 0000。通常,要否定一个数字,您会翻转所有位,然后加一个。但是,如果您尝试使用 -128 执行此操作,您最终会得到:
与您开始时使用的号码相同。出于这个原因,维基百科称其为“奇怪的数字”。
在同一篇维基百科文章中,它说上述否定
被检测为溢出条件,因为最高有效位进位但没有进位。
所以我的问题是:
A)这到底是什么意思?和
B) 似乎 CPU 每次执行基本算术运算时都需要执行额外的错误检查步骤,以避免与此否定相关的事故,从而产生大量开销。如果是这种情况,为什么不截断可以表示的数字范围以将奇怪的数字排除在外(即 8 位为 -127 到 127)?如果不是这样,您如何在不产生额外开销的情况下实施此类错误检查?
assembly - 一个简单的 MIPS,问题
我有一个问题,这有点令人困惑
答案,在后面跟slt有关。有人可以解释一下,这个问题到底在问什么,答案是什么?
谢谢
c - Differences between ARM architectures from a C programmer's perspective?
I'm fairly new to programming for ARM. I've noticed there are several architectures like ARMv4, ARMv5, ARMv6, etc. What is the difference between these? Do they have different instruction sets or behaviors?
Most importantly, if I compile some C code for ARMv6, will it run on ARMv5? What about ARMv5 code running on ARMv6? Or would I only have to worry about the difference if I were writing kernel assembly code?
operating-system - 操作系统每秒指令数
我是计算机体系结构和设计的新手。我的问题是一个高级程序指令集一个接一个地在 CPU 中执行。在执行这些指令时,它是否甚至涉及操作系统指令作为开销?例如:如果在 2 GHz 处理器中,有 2*10^9 条指令可以在 2*10^9 时钟周期内执行。那么操作系统总是每秒执行大约 1*10^9 条指令。这种开销是否总是存在,并且只有另外 1*10^9 指令可以免费执行以供其他自定义计划程序执行?
这是否意味着操作系统应该始终执行尽可能少的指令,以便它可以容纳更多要执行的其他程序?
x86 - 英特尔向哪个 CPU 添加了条件移动指令?
我记得在某处读到过它……有人能对此有所了解吗?
cpu - CPU如何知道它的指令集?
基本的电脑操作问题,但我不知道怎么问。当我们说计算机具有指令集时,计算机如何知道该指令集是什么?它存储在ROM芯片中吗?它是否存储在CPU中的某个地方?制造商将它放在哪里以便它可以读取磁盘并开始处理机器代码?