问题标签 [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.
compilation - 程序如何知道何时在扩展指令集中使用操作码?
我知道在 SSE4 中,添加了一些有利于字符串搜索的指令,特别是 xml 解析。假设我编写了一个利用这些指令的程序,当我将程序移动到另一台具有较旧处理器但没有 SSE4 指令集的计算机时会发生什么?程序会中断吗?
我假设编译器生成哪些指令作为其优化过程的一部分使用,如果编译器在旧 i386 上运行但软件针对 i486,我会丢失这六个指令吗?
如果这就是它的工作原理,那么我如何拥有一些音频制作软件,它可以在我安装它的任何计算机上正常工作,但声称可以利用这些扩展指令。它只是运行时检查和不同的代码路径吗?
所有这些对 Java 字节码或 msil 等中间语言有何影响?
x86 - 新的 ISA 指令与 i386
我了解今天使用最新编译器(GCC、Intel CC、VC 等)编译的所有 x86 (i386) 二进制文件都将在 Intel 386 机器上运行(允许外部依赖,如 OS 函数等),这解释了为什么有YouTube 上关于人们让 Windows 7 在 20 年前的计算机上安装和运行的视频。
但我不明白 ISA 扩展是如何工作的,例如 MMX 和 SSE。如果程序的代码有扩展指令,但处理器不支持该指令,那么程序肯定会崩溃(可能是处理器中断进入操作系统)。我能想到的唯一解决方案是程序的二进制文件检查是否支持指令,如果不支持,则执行保证每个平台都支持的最低公分母代码,但这肯定会使二进制文件非常大,那么那些是扩展但现在实际上是标准的指令呢,比如浮点运算?这是否意味着执行 FP 操作的每个 i386 二进制文件还包括软件 FP 仿真?
如果一个程序进行指令支持的检查,那么它在哪里进行呢?如果您有一个紧密的循环,那么您不希望它在循环内执行检查。我不相信编译器足够聪明,还不知道如何在每种情况下进行优化,因此缺乏可见的编译器选项很奇怪。
我在我的 VC 项目设置中找不到用于控制指令发射的编译器或链接器的任何设置或选项。有一些关于优化的内容,但没有任何东西可以提供我期望的控制。
那么 AMD 的“3DNow!”呢?扩大?3DNow 旨在成为 MMX 之上的扩展,因此它有一些独特的指令和自身的方面,但我在我的 VC 编译器或链接器设置中找不到对它的任何引用,所以如果我正在编写代码如何我可以让我的编译器使用 3DNow!指令(而不是 MMX)?
此外,关于 3DNow 的 Wikipedia 文章指出,AMD 从其处理器中删除了一些 3DNow 指令 - 如果存在假设这些指令存在的代码,它将不再起作用吗?
x86 - 操作系统内核的构建可以在 x86 和 ARM 上运行吗?
我的意思是:这个版本(包括 x86 和 ARM 架构驱动程序)可以在 x86 计算机上运行,也可以在其他 ARM 设备上运行。
我知道现在没有这样的 CPU 支持这两种指令集。但理论上,它会成真吗?上电后,CPU可以检查程序在哪个指令集中?
assembly - 为什么 IA32 不允许内存到内存 mov?
在 Intel 体系结构 IA32 中,movl、movw 等指令不允许同时作为内存位置的操作数。例如,指令 movl (%eax), (%edx) 是不允许的。为什么?
processor - 为什么在指令集架构中“执行”位于“内存”之前?
我在 3 年前学习了处理器架构。
直到今天,我无法弄清楚为什么在顺序指令中execute
位于之前。memory
执行指令[ mov (%eax) %ebx]
时,不需要访问内存吗?
谢谢!
operating-system - 操作系统特权级别与硬件特权级别
操作系统特权级别和底层硬件的特权级别有什么区别?所有系统调用都会导致内核陷入陷阱吗?为什么系统调用会导致陷阱?是因为他们的汇编代码中有特权指令,例如 IN 吗?
c - 如何使用带有动态内存的新 Intel 指令分配 128 位数组?
我是新的英特尔指令,所以直到现在我一直在使用静态内存,所以我有一个声明:
但现在我想知道是否有可能以动态方式分配内存,如使用malloc
或calloc
但对于这个新指令。
compiler-optimization - 分支指令和选择指令的区别
The 'select' instruction is used to choose one value based on a condition, without branching.
我想知道分支指令和选择指令之间的区别(最好是 x86 架构和 PTX)。据我所知,select
与分支指令相比,它更优化,但我没有清晰的画面。
assembly - 为什么他们在 x86-64 中使用数字作为寄存器名称?
rax
AFAIK x86-64 在从 Intel x86 ( ,rcx
等)派生的寄存器中添加了许多通用寄存器,称为r8
- r15
。
他们为什么这样命名新的寄存器?为什么不遵循现有的命名约定并称它们为rfx
,rgx
...?
mips - 可以使用单个指令放置在所需寄存器中的所有位模式的集合
给定以下一组 MiniMIPS 指令:
在 MiniMips 指令中,对于某些操作,例如将寄存器初始化为零位模式(所有位都为零),可能会有多个指令具有执行此操作的能力。
我的问题是,可以使用给定指令集中的单个指令将所有位模式放在所需寄存器中的集合是什么。