跳轉到內容

Oberon/V5

來自華夏公益教科書

有關在 FPGA 機器上安裝,請參閱 N. WirthP. Reed 的文件。Oberon RISC 模擬器在當代 MS Windows、類 Unix 系統和 macOS 上執行。請參閱您感興趣的模擬器作者的說明。有關 Android 的附加說明可用。在某些機器上,塊隨機存取記憶體(BRAM)的大小可能會限制開發目標。

V2 中的文字 相比。

Text 型別
型別 TextDesc 的欄位 欄位型別 筆記
Texts.Text,指向 Texts.TextDesc 的指標 len INTEGER[1] 文字長度,以位元組為單位。
changed BOOLEAN 標誌 指示修訂版。
notify Texts.Notifier 指向 方法 的指標,用於通知對狀態更改感興趣的客戶端。
trailer Texts.Piece 指向 哨兵節點 的指標,位於 列表 的片段中。
pce Texts.Piece 最後找到的片段。
org INTEGER 最後找到片段中第一個字元的偏移量,範圍為 [0,len)。
Texts.Piece
型別 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-182020-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    
  1. 在 V5 中,唯一整數型別是 INTEGER。cf. V2 中的 LONGINT。
華夏公益教科書