堆棧機
堆棧機块饺,全稱為“堆棧結(jié)構(gòu)機器”赞辩,即英文的 “Stack Machine”∈诩瑁基于堆棧機模型實現(xiàn)的計算機辨嗽,無論是虛擬機還是實體計算機,都會使用“椈刺冢”這種結(jié)構(gòu)來實現(xiàn)數(shù)據(jù)的存儲和交換糟需。棧是一種“后進先出(LIFO)”的數(shù)據(jù)結(jié)構(gòu),即最后被放入棧容器的數(shù)據(jù)會被最先取出谷朝。
堆棧機的指令集中包含了零地址指令(“0-operand” instruction set)洲押,硬件在運行運算時,使用兩種基本操作進行運算:
- 推入:將數(shù)據(jù)放入堆棧的頂端(數(shù)組形式或串列形式)圆凰,堆棧頂端 top 指針加一杈帐。
- 彈出:將頂端數(shù)據(jù)輸出(回傳),堆棧頂端數(shù)據(jù)減一专钉。
累加器機
累加器機挑童,英文為“Accumulator Machine”,是一種寄存器跃须,用來存儲計算產(chǎn)生的中間結(jié)果炮沐。累加器機模型是一種古老的計算模型,僅能夠支持單一值的累加寄存器單元回怜,因此大年,基于累加器機模型設(shè)計的指令都只支持一個操作數(shù)。
寄存器機
寄存器機玉雾,英文為 Register Machine翔试,也譯為暫存器機,這種計算模型的機器复旬,使用特定的 CPU 寄存器組垦缅,來作為指令執(zhí)行過程中數(shù)據(jù)存儲和交換的容器。
在寄存器中驹碍,由于每一條參與到數(shù)據(jù)交換和處理的指令壁涎,都需要顯示地標(biāo)記操作數(shù)所在的寄存器凡恍,相較于堆棧機和累加器機,指令更長怔球,但也更加靈活嚼酝。
三種計算模型的比較
- 堆棧機使用棧結(jié)構(gòu)作為數(shù)據(jù)存儲與交換的容器,由于其“先進后出”的特性竟坛,無法直接操作位于棧底的數(shù)據(jù)闽巩,因此,在特殊情況下担汤,機器會使用額外的指令來進行棧數(shù)據(jù)的交換過程涎跨,從而損失一定的執(zhí)行效率。但另一方面崭歧,堆棧機模型實現(xiàn)簡單隅很,指令代碼長度適中。
- 累加器機由于只有一個累加器寄存器可用于存儲數(shù)據(jù)率碾,因此在指令的執(zhí)行過程中外构,可能會頻繁請求機器的線形內(nèi)存,從而導(dǎo)致一定的性能損耗播掷。但另一方面审编,該模型最多只能有一個操作數(shù),因此對應(yīng)的指令代碼較為精簡歧匈。
- 寄存器機內(nèi)大多數(shù)與數(shù)據(jù)操作相關(guān)的指令垒酬,都需要在執(zhí)行時指定目標(biāo)寄存器,因此件炉,指令代碼的長度較長勘究。寄存器機擁有更多的數(shù)據(jù)暫存容器,一方面斟冕,靈活的數(shù)據(jù)操作導(dǎo)致寄存器的分配和使用規(guī)則變得復(fù)雜口糕,另一方面,在使用得當(dāng)?shù)那闆r下磕蛇,同樣的計算邏輯景描,基于寄存器機模型,可以生成更為高效的指令執(zhí)行結(jié)構(gòu)秀撇。
最后
我的個人主頁 里也同步進行了更新超棺,歡迎來逛逛。