常见的指令集架构有两种一种是基于寄存器的指令集架构,一种是基于栈的指令集架构。JVM采用的是后者。
通过一段代码来分别介绍一下基于栈的指令集合基于寄存器的指令集的区别
public static void method(){
int a=1;
int b=2;
int c=a+b;
return;
}
基于栈的指令集架构执行的指令

不算方法返回return一共8行代码,每个指令都是相对于栈顶栈帧和栈顶栈帧操作数栈的操作,无需关心操作数(进行加减乘除的变量,上图中的1、2)的地址,指令中无需包含操作数的地址信息所以指令集更小;而且指令集统用不依赖与硬件,可以移植性高。
基于寄存器的指令集架构执行的指令
首先科普几个问题
- 寄存器是什么:寄存器是CUP内部少量的高速存储器,用于保存机器指令的操作数。
- 32位处理器有16个寄存器,每个寄存器有各自的名字:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP、ES、CS、SS、DS、FS、GS、EIP、EFLAGS。
mov eax,1 //将操作数1暂存于寄存器eax
add eax,2 //将eax寄存器的值加2
用基于寄存器的指令集架构的每条指令都需要显示指定寄存器的名称(地址),指令集包含地址信息所以指令集更大,而且对CUP硬件的耦合性高可移植性差;但只要两行指令即可完成上面8行代码的操作,相同操作可以用更少的指令完成,而且依赖于硬件所以性能会比基于栈的指令集性能高。
语雀地址:https://www.yuque.com/yangxiaofei-vquku/wmp1zm/ue47cb
本文探讨了两种常见的指令集架构——基于栈的和基于寄存器的指令集。栈式指令集架构在执行如加法等操作时,依赖于操作数栈,指令集更小,具有较高的可移植性。而寄存器指令集则利用CPU内部的寄存器直接存储和操作数据,指令集较大,但效率更高,依赖硬件,移植性较差。以Java虚拟机(JVM)为例,其采用栈式架构。通过对比基于这两种架构的相同代码实现,可以看出栈式需要更多指令,而寄存器式仅需少数指令即可完成相同任务。
511

被折叠的 条评论
为什么被折叠?



