CPU指令集是什么?和汇编指令有什么联系?

zx4219770 2016-03-24 07:43:09
用高级语言比如C语言写的代码经过编译最终成为可执行文件,文件的内容无非就是一堆数据,是什么不重要,但前提是这些数据从编译出来后就是固定的了,那么问题来了……
数据是不会改变的,但是Intel和AMD的cpu指令集都不同,比如Intel有SSE系列指令集而AMD没有,那么对于不同的指令集相同的数据可以解释出不同的指令,但程序在编写编译出来的时候其指令和要达到的目的肯定是只有一种了,但是经过不同指令集的解析后有多种结果,那么cpu如何保证程序正常的执行?假设如果编译器是考虑到了兼容的问题,使用了让Intel和AMD都能解析出相同结果的x86指令集,那么假设Intel的SSE系列指令集更有高效,但却不能使用反而需要使用比较老式原始的x86指令集其效率岂不是很low?还有反汇编时的把那些数据对应成一句句的汇编指令和cpu的指令集有没有什么联系?或者只是单纯的把数据用汇编指令给描述出来而已?
...全文
2230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs14789652 2017-12-16
  • 打赏
  • 举报
回复
最近在玩新的单片机,MK7A23.他跟同系列的产品,指令集都有微小的区别。 我的理解时指令集更贴近机器语言,不一样的CPU,他们有自己的私语。高级语言可以理解成惯例语言,编译器相当与一个翻译官,可以多种语言翻译成机器语言,让机器工作
zx4219770 2016-03-26
  • 打赏
  • 举报
回复
引用 10 楼 fornetuse123 的回复:
还有听说现在RISC指令集可能会成为未来高性能cpu的指令架构,但是程序少用或者不用CISC那些复杂的指令效果不都是差不多嘛,这只是软件方面的原因怎么使用哪种指令集还会对cpu影响很大吗? risc现在好像占了上峰,据说因为运算速度快过cisc 其实intel开发的64位架构采用的微指令就近似于risc,不是指现在的32e架构,现在的是兼容模式的。不是纯粹的64位架构。 CISC: –优点:指令越多功能越强,强调代码效率,容易和高级语言接轨。可以对存储器直接操作,实现从存储器到存储器的数据转移,可加入DSP指令。 –缺点:指令太多不易记忆;CPU内部结构复杂造成频率不高;指令执行速度慢。 RISC: –优点:指令少容易记忆,尽量将操作码和操作数用1个16位数或32位数表示,指令整齐。CPU时钟频率可以做得很高,指令执行速度快。 –缺点:同样功能的程序,产生的代码量比较大;不能对存储器直接访问,不能实现存储器到存储器的数据转移。
大概知道是怎么回事了,RISC的CPU因为只需要支持简单的指令,所以在设计方面不需要考虑复杂指令的运算,就可以省掉很多复杂指令运算方面的东西用简单指令计算方面的东西来取代那些省掉的部分,所以怪不得RISC的CPU运算效率会比CISC的高。感觉现在的RISC的CPU指令越来越复杂,尽可能的向高级语言靠拢,有打算把指令集直接当高级语言使用一样,但技术却又跟不上反而牺牲了性能,导致同样的制造工艺还不如旧的精简的CPU指令有效率
fornetuse123 2016-03-26
  • 打赏
  • 举报
回复
还有听说现在RISC指令集可能会成为未来高性能cpu的指令架构,但是程序少用或者不用CISC那些复杂的指令效果不都是差不多嘛,这只是软件方面的原因怎么使用哪种指令集还会对cpu影响很大吗? risc现在好像占了上峰,据说因为运算速度快过cisc 其实intel开发的64位架构采用的微指令就近似于risc,不是指现在的32e架构,现在的是兼容模式的。不是纯粹的64位架构。 CISC: –优点:指令越多功能越强,强调代码效率,容易和高级语言接轨。可以对存储器直接操作,实现从存储器到存储器的数据转移,可加入DSP指令。 –缺点:指令太多不易记忆;CPU内部结构复杂造成频率不高;指令执行速度慢。 RISC: –优点:指令少容易记忆,尽量将操作码和操作数用1个16位数或32位数表示,指令整齐。CPU时钟频率可以做得很高,指令执行速度快。 –缺点:同样功能的程序,产生的代码量比较大;不能对存储器直接访问,不能实现存储器到存储器的数据转移。
  • 打赏
  • 举报
回复
“比如Intel有SSE系列指令集而AMD没有”这是错的。
zx4219770 2016-03-25
  • 打赏
  • 举报
回复
引用 5 楼 fornetuse123的回复:
[quote=引用 4 楼 zx4219770 的回复:] [quote=引用 3 楼 fornetuse123 的回复:] 市面上很多软件大多只是分为32位和64位两种,并没有分别不同指令集的程序 你这里说的程序是高级语言编写的程序,不是汇编语言编写的程序,要是你那样理解,那不是所有语言都用一种编译器就行了,干嘛还要分汇编语言编译器,c语言编译器。。。。。。。 那么对于Intel独有或者AMD独有的指令集,那些指令集岂不是要程序编译成支持那些指令集才能执行了?那它们设计出来的意义是什么?程序并不能兼容使用那些指令集 这就是市场竞争,没有什么产品统一规范标准,比如说现在的高级语言一般都有统一的标准,而汇编就是各家cpu厂家说了算,这个规定每个指令的长度都是相同字节,那个规定最短指令一个字节,最长指令6个字节,各个指令长度不等。 这个规定最右边的是目标操作数,这个规定中间的是目标操作数。 就像你现在发明一个产品,别人发明了一个类似产品,尽管功能相似,但实现原理和使用操作可能完全不同
那要是这样的话对于不同指令集的程序反汇编软件比如OD和winDBG该怎么进行反汇编?[/quote] 那得看OD和winDBG想汇编成那种汇编语言,就像汇编语言在被编译成机器码的时候有intel编译器,也有arm和amd编译器[/quote] 那么汇编语言相比于高级语音的优点就是只要编译器能识别编译成机械码可以灵活的使用任何cpu的指令集来写程序,包括RISC和CISC的指令集?当然这个程序肯定是不可能运行的,因为每种cpu支持的指令集都不同,这里不考虑程序能不能执行以及什么文件格式的程序的问题。还有听说现在RISC指令集可能会成为未来高性能cpu的指令架构,但是程序少用或者不用CISC那些复杂的指令效果不都是差不多嘛,这只是软件方面的原因怎么使用哪种指令集还会对cpu影响很大吗?
fornetuse123 2016-03-25
  • 打赏
  • 举报
回复
举个例子:假设 机器码0000
fornetuse123 2016-03-25
  • 打赏
  • 举报
回复
引用 4 楼 zx4219770 的回复:
[quote=引用 3 楼 fornetuse123 的回复:] 市面上很多软件大多只是分为32位和64位两种,并没有分别不同指令集的程序 你这里说的程序是高级语言编写的程序,不是汇编语言编写的程序,要是你那样理解,那不是所有语言都用一种编译器就行了,干嘛还要分汇编语言编译器,c语言编译器。。。。。。。 那么对于Intel独有或者AMD独有的指令集,那些指令集岂不是要程序编译成支持那些指令集才能执行了?那它们设计出来的意义是什么?程序并不能兼容使用那些指令集 这就是市场竞争,没有什么产品统一规范标准,比如说现在的高级语言一般都有统一的标准,而汇编就是各家cpu厂家说了算,这个规定每个指令的长度都是相同字节,那个规定最短指令一个字节,最长指令6个字节,各个指令长度不等。 这个规定最右边的是目标操作数,这个规定中间的是目标操作数。 就像你现在发明一个产品,别人发明了一个类似产品,尽管功能相似,但实现原理和使用操作可能完全不同
那要是这样的话对于不同指令集的程序反汇编软件比如OD和winDBG该怎么进行反汇编?[/quote] 那得看OD和winDBG想汇编成那种汇编语言,就像汇编语言在被编译成机器码的时候有intel编译器,也有arm和amd编译器
zx4219770 2016-03-25
  • 打赏
  • 举报
回复
引用 3 楼 fornetuse123 的回复:
市面上很多软件大多只是分为32位和64位两种,并没有分别不同指令集的程序 你这里说的程序是高级语言编写的程序,不是汇编语言编写的程序,要是你那样理解,那不是所有语言都用一种编译器就行了,干嘛还要分汇编语言编译器,c语言编译器。。。。。。。 那么对于Intel独有或者AMD独有的指令集,那些指令集岂不是要程序编译成支持那些指令集才能执行了?那它们设计出来的意义是什么?程序并不能兼容使用那些指令集 这就是市场竞争,没有什么产品统一规范标准,比如说现在的高级语言一般都有统一的标准,而汇编就是各家cpu厂家说了算,这个规定每个指令的长度都是相同字节,那个规定最短指令一个字节,最长指令6个字节,各个指令长度不等。 这个规定最右边的是目标操作数,这个规定中间的是目标操作数。 就像你现在发明一个产品,别人发明了一个类似产品,尽管功能相似,但实现原理和使用操作可能完全不同
那要是这样的话对于不同指令集的程序反汇编软件比如OD和winDBG该怎么进行反汇编?
fornetuse123 2016-03-25
  • 打赏
  • 举报
回复
市面上很多软件大多只是分为32位和64位两种,并没有分别不同指令集的程序 你这里说的程序是高级语言编写的程序,不是汇编语言编写的程序,要是你那样理解,那不是所有语言都用一种编译器就行了,干嘛还要分汇编语言编译器,c语言编译器。。。。。。。 那么对于Intel独有或者AMD独有的指令集,那些指令集岂不是要程序编译成支持那些指令集才能执行了?那它们设计出来的意义是什么?程序并不能兼容使用那些指令集 这就是市场竞争,没有什么产品统一规范标准,比如说现在的高级语言一般都有统一的标准,而汇编就是各家cpu厂家说了算,这个规定每个指令的长度都是相同字节,那个规定最短指令一个字节,最长指令6个字节,各个指令长度不等。 这个规定最右边的是目标操作数,这个规定中间的是目标操作数。 就像你现在发明一个产品,别人发明了一个类似产品,尽管功能相似,但实现原理和使用操作可能完全不同
zx4219770 2016-03-25
  • 打赏
  • 举报
回复
引用 1 楼 fornetuse123 的回复:
不同的cpu有不同的指令集,对应不同的汇编指令。汇编指令是cpu指令集的集合元素 编译器无法为不同的cpu编译出相同的汇编指令。这也是为什么会有不同的编译器的原因
市面上很多软件大多只是分为32位和64位两种,并没有分别不同指令集的程序,但可以确定的是用户只要把软件放在相应的系统上都可以正常运行,如果按这种说法那么这些程序编译出来的指令集是市面上cpu都支持的指令集才对呀,那么对于Intel独有或者AMD独有的指令集,那些指令集岂不是要程序编译成支持那些指令集才能执行了?那它们设计出来的意义是什么?程序并不能兼容使用那些指令集
fornetuse123 2016-03-25
  • 打赏
  • 举报
回复
不同的cpu有不同的指令集,对应不同的汇编指令。汇编指令是cpu指令集的集合元素 编译器无法为不同的cpu编译出相同的汇编指令。这也是为什么会有不同的编译器的原因
赵4老师 2016-03-25
  • 打赏
  • 举报
回复
Intel的新CPU的指令集大多都兼容旧CPU的指令集。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧