指令集架构的定义是什么?

K. *_*son 3 assembly instruction-set cpu-architecture

我试图围绕指令集架构 (ISA) 到底是什么。从我所读到的,我有两种解释。

我的第一个解释是,ISA 是所有寄存器、汇编指令和伪指令、汇编指令和指令格式的集合,这些指令格式构成了可用于对实现指令集的处理器进行编程的汇编语言。

我的第二个解释是 ISA 是计算机单词和汇编指令之间的双射映射。例如,add $s0, $t0, $t1计算值$t0 + $t1并将其存储在 中的指令$s0对应于字000000 bin($t0) bin($t1) bin($rd) 00000 10000,其中bin($reg)是寄存器的二进制表示$reg(本例中使用 MISP)。

我不认为这些解释是相互排斥的,因为它们可以共存,前提是为给定的 ISA 用汇编语言编写的程序将被汇编为实现 ISA 的所有处理器的相同机器代码;然而,我也不认为这很明显,因为如果 ISA 仅仅指的是汇编语言的结构(正如我的第一个解释所暗示的那样),那么根据处理器的不同,相同的程序可能会被组装成两种不同的机器代码表示。

有人可以澄清术语指令集架构到底包含什么吗?

Eri*_*idt 5

指令集架构名义上定义了机器可以执行的每条指令,以及可能的效果、条件和异常等。

指令是根据它们操作的数据来定义的,这些数据被称为操作数。通常,指令会聚集成组,允许可能的操作矩阵,也就是操作码和操作数(包括寻址模式)。MIPS I-Type、J-Type 是这些块的示例,称为格式。

指令是 ISA 的关键。例如,如果没有指令可以引用该寄存器(例如作为操作数),则提供寄存器将毫无意义。这可能就是我们称之为指令集架构的原因,因为我们通过指令定义的镜头来实现寄存器和行为。

指令集架构定义了处理器的机器代码,以及处理器在给定某些状态和要执行的指令的情况下的行为。

机器代码中的指令是二进制数字的字符串,CPU 将其解释为执行。

在机器码中,没有汇编指令、标签、变量名等……;这些都是汇编语言的产物。在机器代码中,表示指令(包含操作码和操作数)和 CPU 操作的数据的二进制数字串都被 CPU 视为数字(位串),如果您愿意的话。 

汇编语言几乎可以 1:1 转换为机器代码指令,尽管指令、宏、伪指令、数据和其他东西更像是一种近似而不是事实。

通常,芯片制造商会定义一种汇编语言以及指令集架构——然而,汇编语言并不是拥有 ISA 的必要条件。ISA 真正意味着了解哪些数字(位串)对处理器有什么意义。

事实上,芯片制造商和/或其他人(例如微软、Linux)也会定义一个应用程序二进制接口,其中包括一个调用约定,以帮助软件消费者编写可互操作的软件。

计算机单词和汇编指令之间的双射映射

是和否:是的,如果您所说的汇编指令是指每个可能指令的操作和行为的定义。

我会说机器代码的位串与处理器如何解析编码的详细定义之间的映射,以及它们的作用,即它们对计算机状态的影响。