Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
汇编代码60^. 在UNIX V6源代码的low.s文件中_Unix_Assembly - Fatal编程技术网

汇编代码60^. 在UNIX V6源代码的low.s文件中

汇编代码60^. 在UNIX V6源代码的low.s文件中,unix,assembly,Unix,Assembly,unixv6的源代码是可用的,并且有一本J.Lions的书。从书中我知道“.”符号表示当前位置。我不明白下一个: “*表格中的转让声明 标识符=表达式 将值和类型与标识符相关联 . = 60^. 运算符“^”传递第一个 操作数和第二个操作数的类型 (在本例中为“位置”);* 该语句可以在文件low.s(0526)中找到。这是什么意思?它是否真的改变了PC寄存器的值,并表现为跳转指令?我知道这是旧代码,但我想理解它。谢谢。在中,是位置计数器,是段(文本、数据或bss)开头的偏移量。当汇编程序开始处

unixv6的源代码是可用的,并且有一本J.Lions的书。从书中我知道“.”符号表示当前位置。我不明白下一个: “*表格中的转让声明

标识符=表达式

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

在中,
是位置计数器,是段(文本、数据或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
,因为意图很清楚,但我不知道它是否有效。