常见的指令集架构有两种一种是基于寄存器的指令集架构,一种是基于栈的指令集架构。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