我有点疑惑:
硬件上跑的是二进制, 我汇编是RISC还是CISC有关系吗? 只要编译器能正确地编译成PowerPC可以执行的机器码不就可以了吗?
7 个解决方案
#1
现在纯CISC和纯RISC的芯片已经很少了,
除非学习体系结构和指令集,这些东西不需要关注,
除非学习体系结构和指令集,这些东西不需要关注,
#2
楼上的兄弟没回答我的问题啊
#3
RISC和CISC只是两种CPU的架构,
编译出的目标代码跟具体的处理器指令集有关,
同样的C程序,
在x86、arm、mips、68k、ppc、sparc、MCS51上编译出的目标代码是不同的,
不知道我表述清楚了没有?
------------------------------------------------------
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
编译出的目标代码跟具体的处理器指令集有关,
同样的C程序,
在x86、arm、mips、68k、ppc、sparc、MCS51上编译出的目标代码是不同的,
不知道我表述清楚了没有?
------------------------------------------------------
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
#4
还是不大明白啊,
假设我这里有一份源代码 X.asm
用A B C 三种编译器会编译得到三种不同的机器码O P Q.
其中O可以在PPC上跑, P可以在x86上跑. 这跟X.asm用什么指令集没啥关系啊?
假设我这里有一份源代码 X.asm
用A B C 三种编译器会编译得到三种不同的机器码O P Q.
其中O可以在PPC上跑, P可以在x86上跑. 这跟X.asm用什么指令集没啥关系啊?
#5
C语言可以这样理解,对应各种处理器可能有不同的处理器,
汇编语言不可以这样理解,汇编语言本来就是直接操作寄存器,直接汇编成目标代码,可以认为各种处理器的汇编语言是不相同的,
汇编语言不可以这样理解,汇编语言本来就是直接操作寄存器,直接汇编成目标代码,可以认为各种处理器的汇编语言是不相同的,
#6
举个例子:
单片机上的汇编指令,和PC上的汇编指令是不同的,
C语言的程序,在单片机和PC上都可以通过编译并运行,单片机上用Keil编译器,PC上用TC/VC/gcc等,编译出来的目标码、以及中间生成的汇编代码都是不相同的,
这也是高级语言的优越性,
除了OS的启动代码、某些需要特殊优化的地方、和某些单片机应用,都不再使用汇编语言了,
用户不用考虑处理器指令的差异,只要选择合适的高级语言编译器就可以了,
单片机上的汇编指令,和PC上的汇编指令是不同的,
C语言的程序,在单片机和PC上都可以通过编译并运行,单片机上用Keil编译器,PC上用TC/VC/gcc等,编译出来的目标码、以及中间生成的汇编代码都是不相同的,
这也是高级语言的优越性,
除了OS的启动代码、某些需要特殊优化的地方、和某些单片机应用,都不再使用汇编语言了,
用户不用考虑处理器指令的差异,只要选择合适的高级语言编译器就可以了,
#7
RISC和CISC 其实是系统设计师们看问题的不同角度
RISC 是精简指令集,也就是它的指令都是经过精简的,指令的功能都很简单,每一个指令占据4个字节,大小是固定的,这样,基本上,取指令,解码,执行等花费的时间几乎也都是固定的,这也就从一方面说明,RISC的硬件做的不需要像CISC那么复杂。
可能出现 几条RISC 指令才能完成一条CISC指令的功能的情况。
CISC 是复杂指令集,其实都是相对而言的。 CISC的指令功能强大,并且每条指令的大小也不固定,少则一个字节,多个几个字节,这也就说明了,不同的指令的取指令,解码,执行花费的时间可多可少。
其实,发展到现在,RISC 和 CISC 已经是我中有你,你中有我了
RISC 是精简指令集,也就是它的指令都是经过精简的,指令的功能都很简单,每一个指令占据4个字节,大小是固定的,这样,基本上,取指令,解码,执行等花费的时间几乎也都是固定的,这也就从一方面说明,RISC的硬件做的不需要像CISC那么复杂。
可能出现 几条RISC 指令才能完成一条CISC指令的功能的情况。
CISC 是复杂指令集,其实都是相对而言的。 CISC的指令功能强大,并且每条指令的大小也不固定,少则一个字节,多个几个字节,这也就说明了,不同的指令的取指令,解码,执行花费的时间可多可少。
其实,发展到现在,RISC 和 CISC 已经是我中有你,你中有我了
#1
现在纯CISC和纯RISC的芯片已经很少了,
除非学习体系结构和指令集,这些东西不需要关注,
除非学习体系结构和指令集,这些东西不需要关注,
#2
楼上的兄弟没回答我的问题啊
#3
RISC和CISC只是两种CPU的架构,
编译出的目标代码跟具体的处理器指令集有关,
同样的C程序,
在x86、arm、mips、68k、ppc、sparc、MCS51上编译出的目标代码是不同的,
不知道我表述清楚了没有?
------------------------------------------------------
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
编译出的目标代码跟具体的处理器指令集有关,
同样的C程序,
在x86、arm、mips、68k、ppc、sparc、MCS51上编译出的目标代码是不同的,
不知道我表述清楚了没有?
------------------------------------------------------
RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。
RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。
#4
还是不大明白啊,
假设我这里有一份源代码 X.asm
用A B C 三种编译器会编译得到三种不同的机器码O P Q.
其中O可以在PPC上跑, P可以在x86上跑. 这跟X.asm用什么指令集没啥关系啊?
假设我这里有一份源代码 X.asm
用A B C 三种编译器会编译得到三种不同的机器码O P Q.
其中O可以在PPC上跑, P可以在x86上跑. 这跟X.asm用什么指令集没啥关系啊?
#5
C语言可以这样理解,对应各种处理器可能有不同的处理器,
汇编语言不可以这样理解,汇编语言本来就是直接操作寄存器,直接汇编成目标代码,可以认为各种处理器的汇编语言是不相同的,
汇编语言不可以这样理解,汇编语言本来就是直接操作寄存器,直接汇编成目标代码,可以认为各种处理器的汇编语言是不相同的,
#6
举个例子:
单片机上的汇编指令,和PC上的汇编指令是不同的,
C语言的程序,在单片机和PC上都可以通过编译并运行,单片机上用Keil编译器,PC上用TC/VC/gcc等,编译出来的目标码、以及中间生成的汇编代码都是不相同的,
这也是高级语言的优越性,
除了OS的启动代码、某些需要特殊优化的地方、和某些单片机应用,都不再使用汇编语言了,
用户不用考虑处理器指令的差异,只要选择合适的高级语言编译器就可以了,
单片机上的汇编指令,和PC上的汇编指令是不同的,
C语言的程序,在单片机和PC上都可以通过编译并运行,单片机上用Keil编译器,PC上用TC/VC/gcc等,编译出来的目标码、以及中间生成的汇编代码都是不相同的,
这也是高级语言的优越性,
除了OS的启动代码、某些需要特殊优化的地方、和某些单片机应用,都不再使用汇编语言了,
用户不用考虑处理器指令的差异,只要选择合适的高级语言编译器就可以了,
#7
RISC和CISC 其实是系统设计师们看问题的不同角度
RISC 是精简指令集,也就是它的指令都是经过精简的,指令的功能都很简单,每一个指令占据4个字节,大小是固定的,这样,基本上,取指令,解码,执行等花费的时间几乎也都是固定的,这也就从一方面说明,RISC的硬件做的不需要像CISC那么复杂。
可能出现 几条RISC 指令才能完成一条CISC指令的功能的情况。
CISC 是复杂指令集,其实都是相对而言的。 CISC的指令功能强大,并且每条指令的大小也不固定,少则一个字节,多个几个字节,这也就说明了,不同的指令的取指令,解码,执行花费的时间可多可少。
其实,发展到现在,RISC 和 CISC 已经是我中有你,你中有我了
RISC 是精简指令集,也就是它的指令都是经过精简的,指令的功能都很简单,每一个指令占据4个字节,大小是固定的,这样,基本上,取指令,解码,执行等花费的时间几乎也都是固定的,这也就从一方面说明,RISC的硬件做的不需要像CISC那么复杂。
可能出现 几条RISC 指令才能完成一条CISC指令的功能的情况。
CISC 是复杂指令集,其实都是相对而言的。 CISC的指令功能强大,并且每条指令的大小也不固定,少则一个字节,多个几个字节,这也就说明了,不同的指令的取指令,解码,执行花费的时间可多可少。
其实,发展到现在,RISC 和 CISC 已经是我中有你,你中有我了