【问题标题】:What is instruction set architecture?什么是指令集架构?
【发布时间】:2020-01-04 15:00:21
【问题描述】:

我正在阅读Computer Organization and Design, Fifth Edition by Patterson,我对几句话感到困惑:

主要是什么是ISA(指令集架构)?

以下是一些我无法纠正的句子:

将指令集架构保持为常数可以使该架构的许多实现(可能在成本和性能上有所不同)运行相同的软件。

每条指令的时钟周期是每条指令执行所需的平均时钟周期数,通常缩写为 CPI。由于不同的指令可能需要不同的时间,具体取决于它们执行的操作,因此 CPI 是程序中执行的所有指令的平均值。 CPI 提供了一种方法来比较同一指令集架构的两种不同实现,因为一个程序执行的指令数当然是相同的。

什么是 ISA 的实现?

我的书的定义:

我的书的定义似乎缺乏......或者至少我不明白我的意思:

计算机的指令集架构,或简称架构。指令集架构包括程序员为了使二进制机器语言程序正常工作而需要知道的任何东西,包括指令、I/O 设备等。通常,操作系统会封装执行 I/O、分配内存和其他低级系统功能的细节,因此应用程序程序员无需担心这些细节。为应用程序员提供的基本指令集和操作系统接口的组合称为应用二进制接口(Application Binary Interface,ABI)。

还有:

指令集架构——硬件和底层软件之间的接口。这个抽象接口使许多不同成本和性能的实现能够运行相同的软件。

那么 ISA 是某种将软件转换为机器级指令(例如打开和关闭开关)的程序吗?什么是 ABI?

【问题讨论】:

标签: computer-science


【解决方案1】:

我会说 ISA 是处理器应实现的规范,实现细节称为微架构(例如乱序执行、超标量)。因此,它可以被视为软件开发人员和物理实现之间的接口。

因此,如果 ISA 包含添加指令,则处理器供应商必须以自己的方式实现此类指令。 ISA 规定了许多其他的东西,比如对虚拟内存的支持等。

ISA 的一个著名示例是 x86-64,它的著名实现(即微架构)可以从 Intel 和 AMD 中找到,而它们的实现也因代而异(例如 skylake、coffee lake)。

【讨论】:

    【解决方案2】:

    嗯,昨天有人问过这个……

    Google 8051 指令集是前几个热门之一,非常不错。让我们看一条指令:

    ADD A,R2    0x2A
    

    这会将累加器中的值与寄存器 R2 中的值相加,并将结果存储在累加器中。

    左边是汇编语言语法(汇编语言是由汇编程序定义的,一个读取它的程序,除了处理器开发人员/维护人员文档中使用的标准之外没有其他标准,但您可以制作自己的程序集语言,只要你得到正确的机器码。它不是标准),正确的是机器码。

    指令集架构的实现是解释指令并对其进行操作的处理器。因此,对于这条指令和整个指令集,您需要一些具有累加器寄存器、一组其他通用寄存器和实现每条指令的方法的逻辑。像这样的 CISC 可能由于多种原因被微编码,该操作码基本上将寻址到 rom 中的微指令表中,该表将在累加器中复用到一个 alu 操作数,将 r2 到另一个,告诉 alu 执行加法,并将输出(结果和标志)锁存到适当的位置,然后继续执行下一条指令。

    切换到另一个指令集这个是 arm 指令集的一个子集。

       0:   1840        adds    r0, r0, r1
       2:   1880        adds    r0, r0, r2
       4:   18c0        adds    r0, r0, r3
       6:   1900        adds    r0, r0, r4
       8:   4008        ands    r0, r1
       a:   4010        ands    r0, r2
       c:   4018        ands    r0, r3
       e:   4020        ands    r0, r4
    

    这就是术语“编码”的意义所在。其中一些位向处理器指示每个指令是什么指令,而其他位指示操作数。

    使用定义指令集架构的文档,您可以让 100 名工程师完成 1 到 100 个实现。如果我让 100 名程序员负责拍摄图像并将每个像素的红色值增加 1。你会有一个(松散的)定义,我希望看到 100 种不同的解决方案……实现。 ..

    您正在阅读的书可能与 MIPS 相关,就像一小部分指令集有无数的实现一样。如今,计算机工程师经常参加必须实施 mips 处理器的课程。让数以万计或更多的工程师每年在地球上上课,然后每学期重复一遍,您就可以开始掌握有多少 mips 实现仅来自大学生。同一学期同一班级(房间)中的相同学生可能以某种方式受过教育以产生类似的实现,比其他学校的其他人更重要,或者使用相同教科书的学生可能比使用其他学校的人的结果看起来更相似教科书。有许多硬件描述语言不限于可以使用的 vhdl 和 verilog,它们也可以改变实现。和我上面的图片处理程序类似,没有指定语言,所以有的会选择python,有的会选择C,有的会选择java等。

    一些指令集在 armv4 之前在某种程度上是开放的,在某个点 risc-v 被创建为开放之前的 mips,8051 是在很久以前克隆的,现在我们有很多克隆(可能在您当前的计算机中)以及您和我在互联网上的许多计算机,z80 克隆也是如此)。

    AMD 与 Intel x86 处理器是理解同一 ISA 的两种不同实现的简单方法。

    那么他们试图传达的是一个实现可能需要 N 个时钟来执行加法操作,0x2A,另一个实现可能需要 M 个时钟来执行该操作,并且对所有指令进行平均允许某种形式的比较实现之间。这样想有点粗略,但这是一本教科书,而不是现实。要了解现实,您需要通过一些涵盖基础知识的内容,然后如果非常幸运,您可以看到现实世界的实现,并了解执行指令所涉及的所有内容以及时钟和性能的概念。

    那些 MIPS 作者喜欢自己驱动 ABI,而 ARM 也符合这一点,但没有那么严重。如果我有一个函数 fun (int a, int b),则认为 ABI 无非就是拿 8051;一个 ABI 可能会规定第一个参数在 r3 中传递,第二个在 r4 中传递。相同 ISA 的一些其他 ABI 可能会规定第一个参数被压入堆栈,然后是第二个,因此当您输入函数时,您会看到第二个参数,然后是堆栈上的第一个参数(可能还有其他使用的 ISA 特定项打电话)。

    多年来,我们在 x86 上看到/看到了这一点,特定于编译器,后来有人写下了一些规范,然后编译器开始遵循它。并且根据架构和规格,有些会随着时间而改变。 ARM 对 32 位堆栈对齐没问题,后来改为 64 位。

    如果您是一名程序员,您应该能够采用较旧和/或较简单的指令集之一并编写模拟器。很有教育意义。然后,您可以使用现成的工具,如汇编器或编译器,并制作可以在指令集模拟器上运行的程序。压缩的 risc-v 指令或 arm thumb 指令,您可以在一个周末完成大部分模拟器并对其进行调试。完整的实施可能还需要几天时间。我在想 armv2/3 或 armv4t 而不是 armv7。然后就可以使用llvm或者gnu工具来编写程序了。毫无疑问,应该涵盖什么是 ISA 以及什么是实现的主题。即使您只实现了足够的指令来执行一个简单的循环,最多也只有少量指令。

    【讨论】:

      【解决方案3】:

      ISA 是对计算机响应的命令的描述,包括寻址模式的类型、输入和输出指令以及中断处理,所有这些都是根据 CPU 理解的基本机器指令来描述的。

      计算机制造商还将编写一些代码,这些代码是用于写入磁盘、读取键盘等的基本子程序调用。这些子程序的编写方式必须使用 CPU 将如何与磁盘和其他 IO 交互的知识。

      所以要编写汇编程序,您需要了解机器指令,即 ISA。为了能够编写执行任何 IO 的程序,您将使用制造商提供的子程序。子例程 API 和机器代码构成 ABI。

      一个相当古老的例子是曾经出现在 IBM 兼容 PC 上的 BIOS。这一切的工作方式是计算机供应商制造一台计算机并从供应商那里获得操作系统。接口是某种芯片架构,如 8088、8086 或 80286,它们都有兼容的 ISA。然后计算机供应商编写一个 BIOS,通过抽象出 BIOS 中的硬件地址来处理低级细节。因此,操作系统供应商不必为磁盘和串行端口配置的每种不同组合编写不同的操作系统。

      【讨论】:

        【解决方案4】:

        指令集架构是指令的集合以及这些指令所代表的相应抽象虚拟机。可以有许多非常不同的实现,例如硬件中的随机存取存储器,所有这些都可以使用例如访问 RAM 的相同 x86 CISC ISA 指令。同样,相同种类的硬件 - 例如。相同的 RAM - 可能具有由不相关的 ISA 公开的相同功能,例如x86 和 MIPS。

        【讨论】:

          猜你喜欢
          • 2014-02-10
          • 2020-01-04
          • 2017-09-03
          • 2021-07-06
          • 2012-05-25
          • 2020-02-11
          • 2015-12-24
          • 2018-03-12
          • 1970-01-01
          相关资源
          最近更新 更多