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。