基于寄存器架构与栈架构

基于寄存器架构和基于栈架构

区别

二者之间使用的指令集不同

寄存器架构

三地址与二地址形式的指令集

三地址指令集

op dest, src1, src2

1
2
a = b + c
// add a, b, c

arm处理器的主要指令集就是三地址形式的

二地址指令集

op dest, src

1
2
a += b
// add a, b

x86系列的处理器就是二地址形式的

栈架构

零地址指令

零地址意味着源和目标d都是隐含参数,其实现依赖与栈

这个栈指的是求值栈(evaluation stack,也叫做operand stack“操作数栈”或者expression stack“表达式栈”)

bytecode
1
2
3
4
5
//原本应该没有注释2333
iconst_1 //在求值栈压入整形常量1
iconst_2 //在求值栈压入整形常量2
iadd //在求值栈弹出两个值,相加后压入求值栈
istore_0 //从求值栈顶弹出一个值,并将值保存到局部变量区的第一个位置

由于指令的源和目标都是隐含的,所以可以用更少的空间放入更多的指令.

但是一般零地址指令要完成一件事情,会比二地址/三地址指令用更多条指令.

参考

基于栈与基于寄存器的指令集架构