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技术内幕》