和Steve之间的通信--RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10

  1. 云栖社区>
  2. 博客>
  3. 正文

和Steve之间的通信--RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10

罗宾豪 2012-04-13 20:20:51 浏览693
展开阅读全文
Steve,
mtpi是一个汇编指令,用于在内核模式和用户模式之间传递数据。在第18页有描述

From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10
Date: Sun, 20 Nov 2011 17:01:08 +0800

郝先生,

mtpi函数的代码在哪一页?我重新翻阅了一下,除了在第140页处(最后一段)可以找到一点有关mtpi的说明外,我没有发现书里有mtpi的代码。

Steve

From: qf.hao@hotmail.com
To: quntmec@hotmail.com
Subject: RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10
Date: Sun, 13 Nov 2011 21:08:41 +0800

因为mtpi指令把栈指针又恢复了(+2),所以32次循环后,sp还是不变。

From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10
Date: Sun, 30 Oct 2011 14:22:21 +0800

郝先生,

谢谢你的回复。对于1,我的问题更正如下:

第145页,函数clearseg(),第12行(clr -(sp))。假设循环前栈顶为SP,在循环32次后,栈顶为何不是在 (SP-64)(这里是64,我之前算错了)?即在循环32次的过程中,堆栈的栈顶并没有持续往低地址发展(但在循环中却有会另栈顶往低地址发展的语句,如上面提到的第12句)?

Steve

From: qf.hao@hotmail.com
To: quntmec@hotmail.com
Subject: RE: 关于《UNIX技术内幕》的勘误及遇到的问题_10
Date: Sat, 29 Oct 2011 22:09:31 +0800

Steve,
请见答案如下。

From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: 关于《UNIX技术内幕》的勘误及遇到的问题_10
Date: Wed, 26 Oct 2011 17:55:22 +0800

郝先生,

1、第145页,函数clearseg(),第12行(clr -(sp))。假设循环前栈顶为SP,在循环32次后,栈顶为何不是在 (SP-62)?即在循环32次的过程中,堆栈的栈顶并没有持续往低地址发展(但在循环中却有会另栈顶往低地址发展的语句,如上面提到的第12句)?
郝:我没有太理解你的问题。这里是一个32次的循环,每次SP -2,这样32次之后就减了64.
2、第149页,第3段,即代码 _lshift 处,第7行不太理解(mov r1 , r0)。在整个32位整数的左移过程中,高16(r0)和低16位(r1)都进行了左移,为何到最后时用低16位(r1)覆盖高16(r0)呢?
郝:
你的问题很好,这里lshift主要用来做32位的除法(你可以从其被调用看到),16位结果=32位被除数/16位数,所以最后结果只取低16位。
否则对于乘法运算确实有问题。再版我考虑加上说明。

此外,勘误如下:

142 6 1 跳转到第23行(应为16行)。后面接着的24行、25行和26行分别改为17行,18行和19行。
145 7 1 8行设定1号用户活动页地址寄存器….(应为描述符寄存器)
郝:对。谢谢

Steve







    
    
    
《返璞归真--UNIX技术内幕》

网友评论

登录后评论
0/500
评论
罗宾豪
+ 关注