Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1764743
  • 博文数量: 76
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2481
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-20 20:49
个人简介

欢迎光临我的博客

文章分类

全部博文(76)

文章存档

2018年(4)

2017年(1)

2016年(2)

2015年(2)

2013年(5)

2012年(29)

2010年(33)

分类: 系统运维

2012-04-13 20:20:51

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技术内幕》
阅读(4470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~