A. 处理器架构、指令集和汇编语言,三者有何关系
想要知道处理器架构、指令集和汇编语言,三者有何关系,我们先要了解一下这三个名词解释。
指令集架构,简称指令集,ISA、CPU执行单元和解码逻辑基本上由指令集决定。软件和硬件之间的接口,程序员可以根据CPU的指令集编写各种编译器,用高级语言编写程序。
指令集决定处理器的架构,因为处理器架构是使用硬件电路实现指令集。但是什么样的处理器架构被使用,什么样的硬件电路被设计,以及每个人的设计可能不同。
要设计一个处理器,您需要有一个指令集,它指示处理器操作和控制处理器以实现相应的功能。
为了方便人类操作指令集,汇编语言是用来描述指令集的,汇编语言类似于人类语言,更易于阅读。
B. CPU指令集的概念和作用
这里不再进行正式而科学的描述,如果想了解关于“指令集”最专业的权威的定义,你可以去网络中搜索了解。
这里简单地打个比方:缺乏某种指令集的CPU,进行相关运算会非常慢甚至无法进行。就好比一个不会乘法口诀的人,想计算“一斤大白菜3块钱,买8斤需要多少钱”这个算数问题,只能掰着手指用加法慢慢算,结果算了半分多钟才出结果。
而拥有了指令集的加持后,就好比掌握了乘法口诀,可以瞬间“三八二十四”给出计算结果。
C. CPU指令集和CPU架构之间的关系是什么
这是我自己早期在贴吧的回复
解释一下几个名词:
指令集架构,即ISA:CPU物理硬件和上层软件之间的一个接口。设计一个cpu,他能执行的所有指令集合就称为指令集。ISA方便了编译器开发者,开发者不需要知道cpu的硬件设计(指令在cpu中怎么变成电流,时钟信号如何控制时序,指令如何被执行等等),只要知道这个cpu兼容的指令集就可以制作编译器了。
[好好理解“接口”的意思,学计算机的都一定要弄清楚接口,无论是学软件还是硬件]微架构,学术界里称为微结构,其实是一个东西。描述cpu核心的一切逻辑设计。可以说是CPU所有逻辑的草图,不过现在的CPU都是用HDL写的了verilog之类吧
我自作主张地把他分为两个层面吧,我从网络图片里搜了张图作解释。
硬件抽象层(HAL)
一个简单的一位带进位加法器
PLL层面是用一切逻辑部件去描述HAL层面上的东西,所以这层面上的当然要比HAL要复杂得多啦。
即使兼容一个指令集,CPU也可以有多种不同的设计。加速加法器,部件重用等等。
例如:用某些简单的控制部件去控制一个部件的寄存器写入源,这样就可以少一个寄存器的硬件开销了。
我再举一个通俗点的例子:
就像你买来一个灯泡你并不需要知道灯泡里面的电路时如何布局的,只是简单的看看说明书,怎样装上,怎样通电就能实现发光的供能了。灯泡好比CPU,里面的所有设计就是微架构,ISA就是说明书,人就(编译器)的角色。
D. 处理器架构,指令集和汇编语言,三者有何关系
指令集架构简称指令集,ISA,CPU的执行单元和解码logic基本上由指令集决定。软件硬件之间的一个接口,程序员根据CPU的指令集能编写各种各样的编译器,用高级语言编写程序。
汇编语言属于指令集,指令集包括机器指令和汇编指令。一条机器指令对应一条汇编指令,如mips中的000000机器码指令对应汇编指令的add假加法指令。汇编语言是便于人去理解的,记着一条add指令总比000000容易吧。
处理器架构就是微架构,学术界称为微结构。主要是CPU的流水线部分的设计。
E. 什么是RISC架构
RISC直接意思就是精简指令集结构CPU。
这个东西太深奥了,只能复制了,试着自己写点也删除了。
指令集也可以理解为软件和硬件之间沟通的桥梁,不同的厂家可能会用不同的方法来实现相同的指令集,从而让遵循相同指令集的软件可以无需修改即可运行。比如我们熟知的Intel和AMD都实现了x86指令集,这基本上统治了PC的市场。
Krste教授决定带领团队重新开发一个完全开放的、标准的、能够支持各种应用的新指令集,他也得到了RISC的发明者之一,Dave Patterson教授的大力支持。从2010年夏天开始,大约花了四年的时间,这个团队设计和开发了一套完整的新的指令集,同时也包含了移植好的编译器、工具链、仿真器,并经过数次流片验证。为了能够加快开发的效率,以便能够快速的评估和修改设计以及提高可复用性,Chisel作为一种新的硬件构建语言也被开发了出来。简言之,你可以用scala这种函数式编程语言去设计硬件,并最终能够生成传统的Verilog HDL用于ASIC/FPGA,或者生成C++用于仿真。
这个新的指令集叫做RISC-V,“V”包含两层意思,一是这是Berkeley从RISC I开始设计的第五代指令集架构,二是它代表了变化(variation)和向量(vectors)。
F. 关于cpu指令集和编译器的问题
这些软件在编写时也考虑到了这点,所以用兼容的方式是可以运行的,当然,在优化过的程序(与指令集最匹配)中肯定会获得较好的运行效率。
个人观点,不够专业,仅供参考!
G. 指令集、编译器、算法、CPU
CPU就是用来计算的,CPU可以做不同的计算,每种计算是一个命令,你可以用命令通知CPU做这种计算,所有的命令构成了指令集。
你写的代码CPU是不懂的,需要翻译成上面说的命令,这个翻译者就是编译器。
算法跟他们的关系稍远一些。如果把计算比作生产的话,那算法就是配方和工艺,指导着从原材料到产品的生产过程。
希望能帮助到你。
H. 在不考虑编译器优化等因素下,下面那个运算比较快
下面是在编译器不优化的情况下的代码反汇编后的结果
14: if (a > b)//我们看到,只有3条指令,
0040104D mov edx,dword ptr [ebp-4] //将a放入寄存器EDX
00401050 cmp edx,dword ptr [ebp-8] //比较EDX和b的大小
00401053 jle main+3Ch (0040105c) //如果a<b跳转到0040105c
15: {
16: return 1;
00401055 mov eax,1
0040105A jmp main+4Fh (0040106f)
17: }
18: if (a - b > 0)//我们看到有4条指令
0040105C mov eax,dword ptr [ebp-4]//将a放入EAX
0040105F sub eax,dword ptr [ebp-8]//a-b的差放入EAX
00401062 test eax,eax//比较EAX是否为0
00401064 jle main+4Dh (0040106d)//条件跳转
19: {
20: return 2;
00401066 mov eax,2
0040106B jmp main+4Fh (0040106f)
21: }
所以我认为if (a > b) {....}
效率更高