处理器架构、指令集和汇编语言,三者有何关系?

1.处理器架构和处理器指令集的关系式什么? 2.是否指令集决定了处理器的架构? 3.MIPS属于处理器架构还是还是指令集的一种? 4.汇编语言的种类和…
关注者
773
被浏览
330,717

34 个回答

好像大家说的不是很清晰,那我回答下吧

-----------------------------------------------------

先简短回答:

  1. 处理器架构就是处理器的硬件架构,称为微架构。是一堆硬件电路,去实现指令集所规定的操作运算。
  2. 是的,指令集决定了处理器的架构,因为处理器架构就是用硬件电路实现指令集。但是具体用什么样的处理器架构,设计怎样的硬件电路,每个人设计的都可以不一样。
  3. MIPS是一种采取精简指令集(RISC)的处理器架构,既有指令集,也有相应的处理器架构。大名鼎鼎的龙芯就是MIPS的。
  4. 汇编语言是用人类看得懂的语言来描述指令集。否则指令集的机器码都是一堆二进制数字,人类读起来非常麻烦,但汇编是用类似人类语言的方式描述指令集,读起来方便多了。

要设计处理器,首先就需要有指令集,规定处理器相应操作,通过指令集去控制处理器实现相应功能。但处理器是一堆硬件电路,只能识别二进制数据,所以指令集是由一堆二进制数据组成。而二进制数据对人类来说读起来很麻烦。为了方便人类操作指令集,发明了汇编语言来描述指令集。汇编语言类似人类语言,读起来方便多了。

虽然汇编语言读起来方便了,但也有缺陷。首先汇编语言操作起来还是挺麻烦的。其次汇编语言对应一条条指令集,所以当指令集改变时,就得修改相应汇编语言,导致其可移植性很差,不能跨平台使用,如ARM的汇编语言与Intel X86的就不同。这时人们就想开发一种更方便操作,超越指令集的语言,于是有了C,C++等高级语言

但处理器只能识别二进制码,那怎么能识别高级语言呢?于是人们开发了编译器,依照如下顺序,将高级语言翻译成二进制码: 高级语言 \rightarrow 汇编语言 \rightarrow 二进制机器码。

至此,人类可以很方便的利用高级语言编写程序,控制处理器完成相应功能。然后程序员这个红火的职业就此大规模诞生了。

好久的问题了。不过感觉其他答案都不太到位。

为了方便理解,写通俗点。

先回答4个问题,

1,处理器架构即微结构,指令集架构决定微结构的一部分(解码逻辑和执行单元)

2,指令集决定微结构的一部分硬件逻辑设计

3,mips有多个意思,既是一个公司;也可以是一个单位,百万指令每秒。

4,汇编指令是让人看得懂的,只是指令集的另外一种表示形式。

指令集ISA:他是CPU的一个特性,决定CPU的解码电路和执行单元,但并不存储在CPU内部。是微结构提供给上层一个接口,类似于程序员写码是用到的api。某CPU能执行哪个指令集的所有指令就称为兼容此指令集。

我打个比方,一个人买回来一个电灯,他使用时并不需要知道电灯发光的原理,只要看说明书使用方法:怎样接线就能实现发光的效果。这里电灯就像是CPU,说明书就像是指令集,使用电灯的人做汇编程序员的角色。

指令集包括汇编语言形式和二进制机器码格式,CPU执行的是二进制代码(这叫机器指令,机器能理解的),汇编就是给人看的,人能理解的。每条汇编指令都有对应的机器码指令。完成汇编语言和二进制机器码的转换时汇编器(现在都和编译器打包在一起了)。

微结构:每个cpu都有他的微结构,他描述cpu的一切逻辑。前端怎么实现取指令啊,解码怎么让其他部件的得知将要执行的指令,怎样分发指令,执行,写回,操作数旁路转移,预取指令,分支预测,分支出错流水线中指令如何回退,如何恢复,寄存器怎样实现存储等等还有很多很多,写都写不完。


——补——

汇编器,负责汇编代码——>机器码的转换,集成在编译器中。软件实现。

我以mips为例

汇编代码add $s0,$s0转换成mips32机器码就是000000 00000 00000 00000 00000 100000 (共32位)每一段有其意义,分别是『操作码 第一个操作数寄存器号 第二个操作数寄存器号 目的寄存器号 shamt funct』