汇编代码60^. 在UNIX V6源代码的low.s文件中
unixv6的源代码是可用的,并且有一本J.Lions的书。从书中我知道“.”符号表示当前位置。我不明白下一个: “*表格中的转让声明 标识符=表达式 将值和类型与标识符相关联 . = 60^. 运算符“^”传递第一个 操作数和第二个操作数的类型 (在本例中为“位置”);* 该语句可以在文件low.s(0526)中找到。这是什么意思?它是否真的改变了PC寄存器的值,并表现为跳转指令?我知道这是旧代码,但我想理解它。谢谢。在中,汇编代码60^. 在UNIX V6源代码的low.s文件中,unix,assembly,Unix,Assembly,unixv6的源代码是可用的,并且有一本J.Lions的书。从书中我知道“.”符号表示当前位置。我不明白下一个: “*表格中的转让声明 标识符=表达式 将值和类型与标识符相关联 . = 60^. 运算符“^”传递第一个 操作数和第二个操作数的类型 (在本例中为“位置”);* 该语句可以在文件low.s(0526)中找到。这是什么意思?它是否真的改变了PC寄存器的值,并表现为跳转指令?我知道这是旧代码,但我想理解它。谢谢。在中,是位置计数器,是段(文本、数据或bss)开头的偏移量。当汇编程序开始处
是位置计数器,是段(文本、数据或bss)开头的偏移量。当汇编程序开始处理一个文件时,每个段中的
为0,并通过赋值到
或通过存在数据或指令语句而递增
语句=60^。
表示取值60(八进制),将其转换为位置计数器的类型(在本例中,输入数据
),并将其分配给位置计数器。您将在设置中断向量的区域中的low.s
中看到几个类似的语句
当链接编辑器将多个对象文件组合在一起时,它们的文本、数据和bss部分将连接在一起(公共数据除外,它只分配一次),对指令或数据的任何引用(如标签)都将被适当地重新定位
构建Unix内核需要一个额外的步骤,以确保在适当的地址加载低内存中的数据。将low.s
和其他Unix内核对象文件链接在一起后,将使数据部分的加载地址为0,并适当地重新定位所有数据引用。所以=60^。
语句有效地将位置计数器设置为物理地址60。亲爱的马克。我理解需要将数据放在特定的物理地址。但令人困惑的是如此复杂的表达方式60^ . 从你提供的书中,我发现位置计数器可能不会减少。但无论如何。为什么不直接在位置计数器上加60呢?或者只是把它设为60?相反,在low.c文件中,使用了“or”运算符。对不起,是我的错!它不是“或”运算符。引用这本书:“ˆresult具有第一个操作数的值和第二个操作数的类型;最常用于定义语法与现有指令相同的新机器指令。”@Shkodzer输入偏移量(文本、数据、bss)是处理PDP-11等系统上的分段内存的一种优雅方式。您可以有一个text
类型的标签,其值是一段代码的地址,并且可以在数据部分的语句中使用它(作为C中函数地址数组的一部分,在中断向量中,等等),链接器将适当地重新定位它。也就是说,需要像这样的语法=60^。
似乎过于冗长。我希望汇编程序的作者也允许=60
,因为意图很清楚,但我不知道它是否有效。