基于操作数栈的指令集

注意:以下都是从网上转载过来的。如果有自己的想法,完全是猜测,不足为准。都是我从网上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,结果仍然保存在寄存器中;

 

可以看出,基于寄存器的指令,都包含两个个参数,用逗号隔开;并且访问和存储值都是使用寄存器来访问的。

  执行相同的操作,基于寄存器的指令会更少一些,而基于栈的指令则会多一些。

上一篇:快速学习汇编之 内存读写


下一篇:第19章:寻找UPack OEP