Oberon/V5
外觀
< Oberon
有關在 FPGA 機器上安裝,請參閱 N. Wirth 和 P. Reed 的文件。Oberon RISC 模擬器在當代 MS Windows、類 Unix 系統和 macOS 上執行。請參閱您感興趣的模擬器作者的說明。有關 Android 的附加說明可用。在某些機器上,塊隨機存取記憶體(BRAM)的大小可能會限制開發目標。
與 V2 中的文字 相比。
| 型別 | TextDesc 的欄位 | 欄位型別 | 筆記 |
|---|---|---|---|
| Texts.Text,指向 Texts.TextDesc 的指標 | len | INTEGER[1] | 文字長度,以位元組為單位。 |
| changed | BOOLEAN | 標誌 指示修訂版。 | |
| notify | Texts.Notifier | 指向 方法 的指標,用於通知對狀態更改感興趣的客戶端。 | |
| trailer | Texts.Piece | 指向 哨兵節點 的指標,位於 列表 的片段中。 | |
| pce | Texts.Piece | 最後找到的片段。 | |
| org | INTEGER | 最後找到片段中第一個字元的偏移量,範圍為 [0,len)。 |
| 型別 | PieceDesc 的欄位 | 欄位型別 | 筆記 |
|---|---|---|---|
| Texts.Piece,指向 Texts.PieceDesc 的指標 | f | Files.File | 指標,指向檔案。 |
| off | INTEGER | 整數 偏移量,表示文字中片段的第一個字元。 | |
| len | INTEGER | 片段中的位元組數。 | |
| fnt | Fonts.Font | 指向字型的指標。 | |
| col | INTEGER | ||
| voff | INTEGER | 字元的垂直偏移量,以畫素為單位。 | |
| prev | Texts.Piece | 指向文字的先前片段的指標。 | |
| next | Texts.Piece | 指向文字的下一個片段的指標。 |
模組的編譯會生成 分支,其中 地址 相對於模組的基地址。修補是將這些地址轉換為絕對地址的過程。擴充套件 Oberon 在符號檔案中取消了修補;物件檔案中的修補列表中則沒有。
請參閱 Project Oberon(2013 年新版)。修補由模組載入器 Modules.Load 執行,如第 6.1 節所述。連結和載入,第 79 頁。另請參閱 郵件列表,地址為 2019-11-18 和 2020-12-16..18。
在“6.3. 連結載入器”部分,有一個以“在檔案的最末尾,讀取三個名為 fixorgP、fixorgD 和 fixorgT 的整數。”開頭的段落。
a) 在程式碼生成器模組 ORG 中搜索“fixorgP”,您將在 ORG.Call 中找到此行。
Put3(BL, 7, ((-x.r) * 100H + x.a) * 1000H + pc-fixorgP); fixorgP := pc-1
此外,此行位於 ORG.Put3 中。
code[pc] := ((op+12) * 10H + cond) * 1000000H + (off MOD 1000000H); INC(pc)
b) 對於過程 x,項 x 中的 -x.r 是模組編號 mno,而 x.a 是過程的條目編號 pno。
c) 從 ORG.Call 和 ORG.Put3 推斷出,
the 4 bits [20..23] = -x.r (= the module number, mno) the 8 bits [12..19] = x.a (= the entry number for the procedure, pno) the 12 bits [0..11] = pc-fixorgP (= the displacement between 2 instructions in the fixup chain)
透過步驟 (a-c),編譯器生成此指令前驅。
| BL (4) | cond (4) | mno (4) | pno (8) | pc-fixorgP (12) |
前驅沒有格式化為指令,但長度與一個指令相同,即 32 位。
d) (c) 中的行對應於 Modules.Load 中的這些行。
mno := inst DIV 100000H MOD 10H; pno := inst DIV 1000H MOD 100H; disp := inst MOD 1000H;
Modules.Load 將前驅轉換為 RISC-Arch.pdf 第 3 節的第二種 (u=1) F3 格式。
| BL (4) | cond (4) | offset relative to PC (24) |
| 已釋出的 V5 | 變體 | 筆記 |
|---|---|---|
| Files.Mod | ||
| Out.Mod | 允許使用標誌變數延遲執行 Append。 | |
| Out1.Mod | 允許使用過程變數延遲執行 Append。 | |
| Texts.Mod |
- ↑ 在 V5 中,唯一整數型別是 INTEGER。cf. V2 中的 LONGINT。