code:sureg - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
1732
1733 /*
1734 * Load the user hardware segmentation
1735 * registers from the software prototype.
1736 * The software registers must have
1737 * been setup prior by estabur.
1738 */
1739 sureg()
1740 {
1741 register *up, *rp, a;
1742
1743 a = u.u_procp->p_addr;
1744 up = &u.u_uisa[16];
- a 指向 PPDA区
1745 rp = &UISA->r[16];
1746 if(cputype == 40) {
1747 up =- 8;
1748 rp =- 8;
1749 }
1750 while(rp > &UISA->r[0])不为pdp11/40时不作讨论
- up 指向 u.u_uisa[8]
- rp 指向 UISA[8]
- 1746 的 判断 当前机器为pdp11/40时为真
1751 *--rp = *--up + a;
1752 if((up=u.u_procp->p_textp) != NULL)i = 0..7
- UISA[i] ← u.u_uisa[i] + a
1753 a =- up->x_caddr;
1754 up = &u.u_uisd[16];
- 若已加载正文段,则 a ← PPDA区首地址 - 正文段首地址
1755 rp = &UISD->r[16];
1756 if(cputype == 40) {
1757 up =- 8;
1758 rp =- 8;
1759 }
1760 while(rp > &UISD->r[0]) {不为pdp11/40时不作讨论
- up 指向 u.u_uisd[8]
- rp 指向 UISD[8]
- 1756 的 判断 当前机器为pdp11/40时为真
1761 *--rp = *--up;
1762 if((*rp & WO) == 0)
1763 rp[(UISA-UISD)/2] =- a;
1764 }
1765 }i = 0..7
- UISD[i] ← u.u_uisd[i]
UISA[i] ← UISA[i] - a i = 0..7 相当于UISA[i] ← u.u_uisa[i] + 正文段起始地址
- 若 u.u_uisd[i] 不含有写标志 (1762)(数据段和栈段含有写标志,只有正文段不含写标志),则
1766 /* ------------------------- */