首页 > 解决方案 > 汇编代码。= 60^。在 UNIX V6 源代码的 low.s 文件中

问题描述

UNIX V6 的源代码是可用的,J.Lions 有一本关于它的书。从书中我知道“。”符号表示当前位置。我不明白下一个:“*形式的赋值语句

标识符 = 表达式

将值和类型与标识符相关联。在示例中。= 60^。运算符 '^' 传递第一个操作数的值第二个操作数的类型(在本例中为“位置”);*” 该语句可以在文件 low.s (0526) 中找到。这是什么意思?它实际上改变了PC寄存器的值并表现为跳转指令吗?我知道这是旧代码,但我想了解它。谢谢。

标签: unixassembly

解决方案


在第6 版汇编器中,.是位置计数器,即从段(文本、数据或 bss)开头的偏移量。当汇编程序开始处理文件时,.每个段中为 0,并且通过赋值.或存在数据或指令语句而递增。

该语句. = 60^.意味着取值 60(八进制),将其转换为位置计数器的类型(在本例中为 type data),并将其分配给位置计数器。您将low.s在设置中断向量的区域中看到几个这样的语句。

当链接编辑器将多个目标文件组合在一起时,它们的文本、数据和 bss 部分被连接起来(COMMON 数据除外,它只分配一次),并且对指令或数据的任何引用(例如标签)都将被适当地重新定位。

构建 Unix 内核需要一个额外的步骤来确保应该在低内存中的数据被加载到正确的地址。在low.s和其余的 Unix 内核对象文件链接在一起之后,运行sysfix以使数据段的加载地址为 0,并适当地重新定位所有数据引用。因此该语句有效地将位置计数器设置为物理地址 60。. = 60^.


推荐阅读