2012-04-09 26 views
0

目前我正在阅读这本书:Lions_Commentary_on_UNIX_6th_Edition,我一起尝试了解unix v6的源代码,并且发现了一些令人感兴趣的代码:例如请求解释UNIX V6的一些代码

. = 40^. 
... 
. = 60^. 

这是一些PDP-11组件,我不是很在行,所以任何人都可以向我解释了什么这些代码试图在这里做什么? 此外,在PDP-11中,还有另一个符号:“..”,任何人都可以解释这个符号做什么吗?

回答

0

.是位置计数器,因此汇编语言语句通过表达式40^.60^.来调整位置计数器的位置,所以意图是移动汇编位置计数器。

如果语句读

. = 40 + . 

这将意味着改变位置计数器40(八进制)+位置计数器的当前值。令我困惑的是,^是一个一元运算符,根据MACRO11手册,我没有理解这种用法​​。

0

运算符^返回第一个操作数的值和第二个操作数的类型。

因此.=40^.将位置计数器设置为当前段中的位置40,我认为这是数据或bss。一个普通的.=40会尝试将位置计数器设置为绝对位置40,这将是一个错误,因为as没有发出绝对代码。

..符号是重定位计数器,大约是程序加载的内存位置。这是早期PDP-11上没有重定位硬件的程序的混乱。据我所知,任何人曾经做过的唯一的事情就是在计划开始时设置..=something,这些程序是打算在核心中的特定位置加载的。您可以在这里阅读汇编器手册: http://wwwlehre.dhbw-stuttgart.de/~helbig/os/v6/doc/as.ps