注意:以下都是从网上转载过来的。如果有自己的想法,完全是猜测,不足为准。都是我从网上copy过来的。
示例:计算 1 + 1
情况1:基于操作数栈的指令集
iconst_1
iconst_1
iadd
istore_0
把1压入操作数的栈顶;
继续把1压入操作数栈的栈顶;
把栈最顶上的两个值出栈,进行加法操作,得到一个结果,把这个结果放回操作数栈的栈顶;
把操作数栈顶的值放到局部变量表的第0个变量槽中;
情况2:基于寄存器的指令集
mov eax, 1
add eax, 1
把1放入寄存器eax中;
对寄存器eax中的值进行加法操作,加上一个1,结果仍然保存在寄存器中;
可以看出,基于寄存器的指令,都包含两个个参数,用逗号隔开;并且访问和存储值都是使用寄存器来访问的。
执行相同的操作,基于寄存器的指令会更少一些,而基于栈的指令则会多一些。