常見(jiàn)的虛擬實(shí)現(xiàn)方式有以下兩種:
1. 基于棧式架構(gòu)的特點(diǎn)
- 設(shè)計(jì)和實(shí)現(xiàn)更簡(jiǎn)單,適用于資源受限的系統(tǒng)
- 避開(kāi)了寄存器的分配問(wèn)題:使用零地址指令方式分配
- 指令流中的指令大部分是零地址指令,其執(zhí)行過(guò)程依賴于操作棧。指令集更小,編譯器容易實(shí)現(xiàn)。
- 不需要硬件支持,可移植性更好,更好實(shí)現(xiàn)跨平臺(tái)
2. 基于寄存器架構(gòu)的特點(diǎn)
- 典型的應(yīng)用是x86的二進(jìn)制指令集:比如傳統(tǒng)的PC以及Android的Davlik虛擬機(jī)。
- 指令集架構(gòu)則完全依賴硬件,可移植性差
- 性能優(yōu)秀和執(zhí)行更高效
- 花費(fèi)更少的指令去完成一項(xiàng)操作
- 在大部分情況下,基于寄存器架構(gòu)的指令集往往都以一地址指令、二地址指令和三地址指令為主,而基于寄存器架構(gòu)的指令集卻是以零地址指令為主
關(guān)于指令的概念
機(jī)器指令就是機(jī)器語(yǔ)言的一條語(yǔ)句,是一組有意義的二進(jìn)制代碼
指令的結(jié)構(gòu)如下:

指令結(jié)構(gòu)
指令的分類
1. 零地址指令
指給出操作碼,沒(méi)有顯示地址,適用于:
- 不需要地址碼的指令,例如空操作、停機(jī)、關(guān)中斷指令等;
- 堆棧計(jì)算機(jī)中,僅僅依靠入棧和出棧操作進(jìn)行運(yùn)算,典型的就是Java虛擬機(jī)
零地址指令
2.一地址指令
定義:指令編碼中只有一個(gè)地址碼,指出了參加操作的一個(gè)操作數(shù)的存儲(chǔ)位置,被操作數(shù)則隱含在累加器中,這樣的指令稱為一地址指令。

一地址指令
2.二地址指令

二地址指令
3.三地址指令

三地址指令
4.四地址指令

四地址指令
