2007/01/02

2.6 ExtTOY 的缺憾

ExtTOY doc 的最後一段如下 XD:

ExtTOY 最大的缺點就是(擴充的)組合語言指令並未適當對應至底層的機器碼,例如 push [RB + 2] 這樣一個看似單純的指令,實際上產出的機器碼竟然需要 6 個 instructions,這使得產出的機器碼長度和組合語言程式的長度不甚相稱,無法在組合語言層級反映出「instruction count 大幅上升」的事實,對於 assembly programmer 有點欺騙意味。這個問題在河內塔示例中清楚顯現:組合語言層級看似有效的指令僅約 30 個,但產出的機器碼長度卻達到 100 個指令。不過 stack 和 procedure operations 又是相當重要的操作,的確應該提供,因此最佳的解決方案是把這些功能設計到硬體架構上,直接從硬體層級支援。這就是設計 TOY86 的動機。

另外,ExtTOY 的規定有點太過嚴格(尤其在 procedure 內),這可能抹殺一些重要的用途,例如 pointer to function。TOY86 Assembly 設計時將盡量使所有合理行為都能不費力地完成(當然以不妨礙上段所提的相稱感為前提),其中「能實作 C/C++ 所支援的特性」(*1) 會是主要的參考因素。

(*1) 我們曾考慮是否要為 TOY86 實作一部簡單的 C compiler(只選擇 C 容易實作的子集),但一來時間緊迫,二來這主要是 compiler 方面的技術,和主題相距太遠,因而作罷。

--
再來就開始設計 TOY86 architecture 了 XD。

Labels: