问题标签 [machine-instruction]
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.
compiler-construction - 第一个编译器是如何编写的?
我听说过鸡和蛋以及自举。我有几个问题。
是什么编写了第一个将某些东西转换为二进制指令的编译器?
汇编是编译还是翻译成二进制指令?
...我很难相信他们用二进制编写了编译器。
c - C 编程和 error_code 变量效率
我读过的大多数代码都使用int
标准错误处理(从函数等返回值)。但是我想知道使用uint_8
will a compiler 是否有任何好处——阅读:大多数架构上的大多数 C 编译器——使用立即地址模式生成指令——即将 1 字节整数嵌入到指令中? 我正在考虑的关键指令是函数返回后的比较,使用 uint_8 作为其返回类型。
我可能会错误地思考事情,因为引入 1 字节类型只会导致对齐问题——编译器喜欢将东西打包成 4 字节可能是完全理智的原因,这可能是每个人都只使用整数的原因——并且因为这是与堆栈相关的问题,而不是堆,所以没有真正的开销。
做正确的事是我的想法。但是,为了争论,可以说这是一种流行的廉价微处理器,用于智能手表,它配置有 1k 的内存,但在其指令集中确实有不同的寻址模式:D
另一个稍微专门化讨论的问题(x86)是:文字是:
和
同类型?或者编译器会在第二种情况下生成一个 8 字节的文字。如果是这样,它可以使用它来生成一个比较指令,该指令将文字作为立即值,并将返回的 int 作为寄存器引用。请参阅 CMP 指令类型。.
assembly - ASM 8086 中的 ADC 指令
当我ADC
用于示例时:
当我做这个时:
将AL
是3
或4
?(CF
加还是不加?)
operating-system - 操作系统每秒指令数
我是计算机体系结构和设计的新手。我的问题是一个高级程序指令集一个接一个地在 CPU 中执行。在执行这些指令时,它是否甚至涉及操作系统指令作为开销?例如:如果在 2 GHz 处理器中,有 2*10^9 条指令可以在 2*10^9 时钟周期内执行。那么操作系统总是每秒执行大约 1*10^9 条指令。这种开销是否总是存在,并且只有另外 1*10^9 指令可以免费执行以供其他自定义计划程序执行?
这是否意味着操作系统应该始终执行尽可能少的指令,以便它可以容纳更多要执行的其他程序?
cpu-architecture - 处理器/寄存器/内存中的数据、地址和指令如何区分?
在处理器中,如何区分数据、地址和指令?执行程序时,当一切都在0
s 和1
s 中并且寄存器加载数据和地址时,处理器如何区分指令?
c++ - 哪些 C++ 代码编译为 x86 REP 指令?
我在 C++ 中将元素从一个数组复制到另一个数组。我rep movs
在 x86 中找到了似乎将 ESI 的数组复制到 EDI 大小为 ECX 的数组的指令。但是,我尝试的for
nor循环都没有编译为VS 2008 中的指令(在 Intel Xeon x64 处理器上)。如何编写将编译为该指令的代码?while
rep movs
machine-instruction - 仅修改存储单元的 LSB
是否可以编写一个指令序列,在地址 B3 的存储单元的最低有效位中放置 1 而不会干扰存储单元中的其他位?
我指的机器指令是 STOP、ADD、SWITCH、STOP、LOAD、ROTATE 等。
c++ - aesimc 指令给出不正确的结果
我正在尝试使用我的 Sandy Bridge 上提供的 AES 机器指令(基于英特尔的白皮书)来实现 AES 加密。不幸的是,我在生成用于解密的轮密钥的阶段停止了。具体来说,指令aesimc
(应用反向混合列操作)返回不正确的结果。
在他们的论文中,他们有一个例子:
所以输入:
我得到以下使用_mm_aesimc_si128()
:
它应该返回:
结果不一样。为什么会这样?
如果你想重现它,我用下面的代码对其进行了测试(记住-maes -msse4
编译时的参数):
编辑:英特尔白皮书中的示例是错误的。正如汉斯建议的那样,我的芯片是小端的,所以字节交换是必要的——来回交换。
optimization - 大于和大于或等于之间是否有任何性能差异?
在当今的现代处理器上,分支条件的大于和大于或等于比较之间是否存在性能差异?如果我有一个很容易出现的情况,那么选择是否有任何轻微的优势,>
反之亦然>=
?(这适用于 Intel 或 AMD 硬件上的编译语言)
clock - 帮助时钟周期
我很难理解时钟周期。这就是问题所在,给我一个程序,它有两条指令 X 和 Y,我知道 X 运行 20% 的时间,需要 8 个时钟周期,而另一条指令 Y 运行 80% 的时间,需要 2 个时钟循环。如果我的程序有 1000 万条指令,我需要找到:
A. 执行一条指令的最少时钟周期数?
B. 通过改进指令 X 可以找到使用阿姆达尔定律的最大加速。
这是我的狩猎,请在我错的地方帮助我。对于 A 来说,执行一条指令的最小时钟周期数是 1 个时钟周期。我以为我在某处读过这个,但我不确定。
做 BI 假设我要在 X 的时钟周期为 1 时解决加速问题,因为这意味着它执行得最快。
这些假设是否正确?任何帮助,将不胜感激。谢谢