Skill:编程技巧 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Table of Contents

JSR PC,DST

解释

将当前PC入栈,从DST中恢复先前的PC

RTS PC

解释

退栈恢复先前PC,回到子程序调用前的现场,使程序继续执行

无名结构

举例

2313 struct
2314 {
2315 int rsr;
2316 int rbr;
2317 int xsr;
2318 int xbr;
2319 };
...
2393 while((KL->xsr&0200) == 0)
2394 ;
...

解释

  • 无名结构 是在Unix V6中可以被编译的特殊结构,现代C语言编译器已经无法编译了
  • 无名结构 多用于方便寻址
  • 例中
KL是一个地址,为0177560
KL->xsr 即 0177564 地址中的数据

直接取地址数据

解释

问题

SW = 0177570,为一内存地址
现要判断该地址里的内容是否为0

方法1:

if(SW == 0)
由于SW是一个指针,所以显然不行

方法2:

if(SW-> ==0)
C语言中显然没有这样的语法,所以也行不通

方法3:

0173 /* single integer /*
0174
0175 struct{int integ; }
  • 现在就可以通过语句if (SW->integ == 0) 来判断SW所指向的值是否为空了

设置处理机状态字

负数表示堆栈区

  • 常用 负数 表示堆栈区,举例说明如下
  • 设 n = -5,补码为 1111111111111011
  • 补码 按照 虚实地址映照(以用户态为例) ,转换为如下地址
    • 使用 UISA7/UISD7
    • 块号为 128
    • 块内偏移 为 59 (倒数第5字节)
    • 刚好 为 堆栈的第5个元素
  • 常用 -n 表示 堆栈区 的 第n元素
⚠️ **GitHub.com Fallback** ⚠️