我正在读Computer Organization and Design, Fifth Edition by Patterson,我对几句话感到困惑:
主要是什么是ISA (指令集架构)?
以下是一些我很难纠正的句子:
将指令集体系结构保持为一个常量,可以使该体系结构的许多实现--想必成本和性能不同--运行相同的软件。
和
每条指令的时钟周期这一术语,即每条指令执行所需的平均时钟周期,通常缩写为CPI。由于不同的指令可能需要不同的时间,这取决于它们所做的事情,CPI是程序中执行的所有指令的平均值。CPI提供了一种比较同一指令集体系结构的两种不同实现的方法,因为为程序执行的指令数量当然是相同的。
ISA的实现是什么?
我的书的定义:
我的书的定义似乎缺乏..。或者至少我不明白我的意思:
计算机的指令集体系结构,或简单的体系结构。指令集体系结构包括程序员为使二进制机器语言程序正确工作所需要知道的一切,包括指令、I/O设备等。通常,操作系统将封装执行I/O、分配内存和其他低级系统功能的细节,以便应用程序程序员不需要担心这些细节。为应用程序程序员提供的基本指令集和操作系统接口的结合称为应用程序二进制接口(ABI)。
此外:
指令集体系结构-硬件与底层软件的接口.这个抽象接口使许多不同成本和性能的实现能够运行相同的软件。
那么ISA是某种将软件转换成机器级指令的程序吗,比如打开和关闭开关?什么是ABI?
发布于 2019-09-01 00:23:44
指令集体系结构是这些指令所代表的指令和相应的抽象虚拟机的集合。硬件中可以有许多非常不同的实现,例如,随机访问内存,它们都可以使用相同的x86、CISC访问内存的指令来访问。同样,同一种硬件-例如相同的内存-可能具有不相关的国际审计准则(如x86和MIPS )所暴露的相同功能。
发布于 2019-09-01 00:32:43
ISA是对计算机响应的命令的描述,包括寻址模式的类型、输入和输出指令以及中断处理,所有这些都是CPU理解的基本机器指令。
计算机制造商还将编写一些用于写入磁盘、读取键盘等的基本子例程调用的代码。这些子程序的编写必须使用cpu如何与磁盘和其他IO交互的知识。
因此,要在汇编程序中编写,您需要知道机器指令,即ISA。为了能够编写一个执行任何IO的程序,您将使用制造商提供的子程序。子例程ABI和机器代码包含ABI。
一个很老的例子是曾经出现在IBM兼容的PC上的BIOS。它的工作方式是,一个计算机供应商会制造一台计算机,并从供应商那里获得操作系统。该接口是一种特定的芯片体系结构,比如8088、8086或80286,它们都具有兼容的ISAs。然后,计算机供应商编写了一个BIOS,它通过抽象BIOS中的硬件地址来处理低级别的细节。因此,操作系统供应商不必为磁盘和串口配置的每个不同组合编写不同的操作系统。
发布于 2019-09-02 03:29:38
做一个网络搜索"8051指令集“,其中一个头几次是相当不错的。让我们接受一条指令:
ADD A,R2 0x2A这会将值添加到寄存器R2中的累加器中,并将结果存储在累加器中。
左边是汇编语言语法(汇编语言是由汇编程序定义的,一个读取汇编语言的程序,除了处理器开发人员/维护人员文档中使用的标准之外,没有其他标准,但只要正确使用机器代码,您就可以使用自己的汇编语言)。它不是一个标准),正确的是机器代码。
指令集体系结构的实现是解释指令并对它们进行操作的处理器。因此,对于这个指令和整个指令集,您需要一些逻辑,它有一个累加器寄存器、一组其他通用寄存器以及实现每条指令的方法。像这样的CISC可能是微编码的,有很多原因,操作码基本上会被写入一个rom中的微指令表中,这个表将把累加器中的微指令mux到一个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个不同的solutions...implementations……
您正在阅读的这本书可能是与MIPS相关的,它就像一个小的指令集列表一样,有无数的实现。如今,计算机工程师们经常参加一门课程,他们必须实现mips处理器。以每年在地球各地上课的数万名或更多的工程师为例,并重复每学期你可以开始了解有多少mips的实现来自于大学生。同一个班级(教室)同一学期的相同学生可能在某种程度上受到了类似的教育,比其他学校的学生或使用同一本教科书的学生的效果可能更接近于使用其他教材的人。有许多硬件描述语言,不限于vhdl和verilog,可以使用,这也改变了实现。类似于我上面的图像处理程序,没有指定语言,所以有些会选择Python、C、Java等等。
有些指令集在一定程度上是在armv4之前打开的,在创建risc-v之前是开放的,8051是以复制的方式复制的,当时和现在我们有许多克隆(很可能在您当前的计算机中,以及您和我之间的许多计算机之间的互联网上,z80克隆也是如此)。
AMD英特尔的x86处理器是一个简单的方法来理解两个不同的实现相同的ISA。
因此,他们试图传达的是,一个实现可能需要N个时钟来执行一个add操作,0x2A,另一个实现可能需要M个时钟来执行该操作,并且所有指令之间的平均值允许在实现之间进行某种形式的比较。这样想有点粗略,但这是一本教科书,而不是现实。为了达到现实,你需要通过一些涵盖基本知识的东西,如果你非常幸运的话,你就能看到现实世界的实现,找出执行指令、时钟和性能的概念所涉及的所有内容。
那些MIPS的作者喜欢自己驾驶ABI,而ARM也与此相一致,但没有那么严重。如果我有一个函数乐趣(int,int ),那么把ABI看作是以8051为限;一个ABI可以命令第一个参数在r3中传递,第二个参数在r4中传递。相同ISA的其他一些ABI可能会指示将第一个参数推送到堆栈上,然后再将第二个参数推到堆栈上,因此当您输入函数时,您将看到第二个参数,然后是堆栈上的第一个参数(可能还有用于调用的其他特定于ISA的项)。
这些年来,我们在x86中看到/看到了这一点,编译器是特定的,后来有人写下了一些规范,然后编译器开始遵守它。根据架构和规范的不同,有些已经随着时间的推移发生了变化。ARM通过了32位堆栈对齐,然后更改为64位后。
如果你是一个程序员,你应该能够使用一个旧的和/或更简单的指令集,并编写一个模拟器。很有教育意义。然后,您可以使用现成的工具,如汇编程序或编译器,并使程序,您可以运行在您的指令集模拟器。压缩的risc-v指令或手臂拇指指令你可以敲出大部分模拟器,并在一个周末调试它。全面实施可能还需要几天时间。我认为手臂2/3或者是armv4t而不是armv7。然后,您可以使用llvm或gnu工具编写程序。应该毫无疑问地涵盖什么是ISA和什么是实现这一主题。即使您只实现了足够的指令来执行一个简单的循环,最多也只能执行少量的指令。
https://stackoverflow.com/questions/57742277
复制相似问题