分享

第四篇教材中关于程序计数器PC和指令指针IP描述的原理性错误

 笑对波浪 2018-03-05


  杨成安

(开封大学信息工程学院,河南  开封 475000)

摘要:本文论述了全国计算机专业《微机原理、接口电路和汇编语言程序设计》教材中,关于程序计数器PC和指令指针IP描述的原理性错误,指明其重要性和正确的定义,以期培养学生正确的编程能力。

关键词:程序计数器PC 指令指针IP 程序断点

、问题的提出

      PC寄存器的名称为程序计数器,IP寄存器的名称为指令指针。我们现在来看一下二者在各版教材中的功能描述。(文中的注和下划线,为论文作者所加)

   1.谭版关于IP功能的描述

      谭浩强主编,清华大学出版社2001年出版《微机原理与接口电路》教材。

1)谭版关于控制转移指令的描述:

      86页:直接寻址方式:

     段内直接寻址方式是目标程序和源程序在同一个程序段内,只给出源地址和目的地址的差值,此差值是偏移量,它是一个以IP为基准的8位或16位的带符号补码数。(注:能以IP为基准吗?)

     段内转移指令:

     段内直接短转移JMP  SHORT  OPR;   (IP)←(IP)+ 8位偏移量

   段内直接近转移JMP  NEAR  PTR  OPR;(IP)←(IP)+ 16位偏移量

     (注:(IP)是断点吗?)

     86页:[4.34]

     已知下列程序段,请计算其中转移指令的偏移量。程序如下:

   1000 :1002H  LOOP  :SUB  AH,23H

                              

                              

   1000 :1008H  JMP  SHORT LOOP1(LOOP)

                              

                              

   1000 :1020H  LOOP1:ADD  AH,AL

   当转移指令目的地址用符号LOOP1表示时为正向转移,其偏移量e为正数;

   偏移量e=(IP)目的 -((IP)+2

          =1020H - (1008H+2

           =1020H - 100AH

           =16H                   

     (注:IP= 1008H 

     当转移指令目的地址用符号LOOP表示时为反向转移,所得偏移量e为负数:

   偏移量e=(IP)目的 -((IP)+2补码

          =1002H - (1008H+2补码

           =1020H - 100AH

           =(-8)补码 = F8H                  

     (注:IP= 1008H 

89页:循环控制指令

注意:执行循环控制指令时,将完成(IP)←(IP)+ 8位位移量(符号位扩展到16位)的操作。(注:IP)是断点吗?

90页:子程序调用及返回指令

段内间接调用CALL  DST;(SP)←(SP)- 2

                       ((SP)+ 1,SP)←(IP)

                           IP ←(EA)

                                 (注:压栈的是断点吗?

段内返回    RET ;  (IP)←((SP)+ 1 ,(SP))

                       (SP)←(SP)+ 2

                                 (注:返回的是断点吗?

99页:中断指令

外部中断  INT TYPE;

                … ((SP)+ 1 ,(SP))←(IP)

中断返回  IRET;  (IP)←((SP)+ 1,(SP))

                     (注;压栈和返回的是断点吗?

2.陈版关于IP的描述

陈卜锁主编,上海交通大学出版社2005年出版《微型计算机原理及其应用》(第二版)。

19页:“指令指针IP的内容反映了程序的执行顺序,所以又称程序计数器PC(Program Counter)。”(注:IP = PC 

3.周版关于IP的描述:

周明德编著,清华大学出版社1991年第二版《微型计算机  IBM PC/XT0520系列)系统原理及应用》

仅举一例:第87页CALL

本指令是子程序(或过程)的调用命令,在调用结束后,要由所调用的子程序中的RET指令,返回CALL指令的下一条指令。为了能保证正确返回,就需要把断点(即CALL指令的下一条指令的地址)入栈保护。

对于一个段内的直接调用CALL。堆栈指针减2,使IP(指令指针)入栈。(注:理论要求把断点入栈,实际却是(IP)入栈,(IP=断点

88页:RET

一个段内的返回指令,只返回主程序断点处的指令指针值,即把SP所指的堆栈顶部的一个字的内容弹回到指令指针,且SP加2。

、问题的分析

                    新版本高科技的“刻舟求剑”

      1.指令指针IP等同于程序计数器PC吗?

      根据前文中陈版的论断,“指令指针IP又称程序计数器PC”。给二者划了等号。真的如此吗?

      我们先来看看什么是程序计数器PC!根据冯·诺依曼机思想:“用指令事先编好的程序连续存放在内存程序区中,靠地址+1的方法连续取指执行”。在八位机8080CPU中是采用先取指后执行的串行操作的原理,而其中执行地址+1指令寻址的部件就是程序计数器PC。那么在程序的执行过程中,PC始终是指向下一条要执行的指令。结论:PC中的地址就是需要转移、循环、调用子程序和中断子程序等操作时的断点。

      我们再来看看什么是指令指针IP?在向上兼容的十六位机8086CPU中首先分为两个功能部件,即总线接口部件BIU和执行部件EUBIU负责取指令,EU负责译码执行。并且当BIU执行指令排队栈中的六个字节装满后,(8088CPU4个字节),EU开始从指令排队栈的出栈口,取指令进行译码执行,同时BIU并行操作向入栈口补充一条取指令命令。指令指针IP则是指向下个条要取指的指令,而不是EU要执行的指令。而断点则应该是要执行的指令内存地址,而不是IP内的下一条要取指的指令地址,而且(IP)比断点超前了六个字节(8088CPU超前四个字节)。

      结论:IP中并不是需要作转移、循环、调用子程序、中断子程序等操作时的断点。

      从上述两个结论来看,已经很清楚。第一,IPPC。第二,IP中不是断点的地址。但是无论谭版、陈版,还是周版,甚至国内所有有关教材,在压栈保存断点时都是压栈IP内容,甚至还明文讲到以IP为标准,但IP距离要压栈保存的真正断点超前了六个字节,这是不是一个新版本高科技的“刻舟求剑”的故事呢?

   2.根本原因在于偷换概念

      所谓偷换概念,用哲学的观点分析就是:抽象的肯定,具体的否定;理论的肯定,实际的否定;表面的肯定,暗地的否定!在科学的问题中,偷换概念是最讨厌的,莫说学生就是连老师也很难发现。而且这个错误是最普遍、最容易产生的,恐怕连作者本人也根本意识不到!

      教材中都是虽然表面承认8086CPUIP已经预取6个字节,但在实际操作中却仍然当作PC来使用,把已经预取给忘掉了。甚至有人还干脆认为IP就等于PC

      人类在研究自己的历史时,往往少不了考古。我们要想研究科学问题,怕也是要追根求源,考一考“古”吧!讲是十六位机时也是要了解八位机结构原理的。我在教学中也常爱用这样一句话:“扒皮抽筋,入骨三分“!

      注:顺便提一下,前文中引用的各版本中指令的注释字段亦有原理性错误,这在第三篇论文中已做论述。例(IP)←XX内容,但这里只能是IP的地址,加括号反而变成IP中的内容毫无意义了。

、问题的影响

                    返回不了断点的编程能力还能编程吗?

      教材中连真正的断点都找不到,培养出的计算机专业的学生能学会编程吗?

      科学的问题容不得半点虚假和误差的,恕我等直言。现抛砖引玉,请批评指正!

参考文献:

[1]《微机原理与接口技术》谭浩强主编  清华大学出版社 200191 

[2]《微型计算机原理及其应用》陆一青编哈尔滨工业大学出版社 199181

[3]《微型计算机硬件软件及其应用》周明德编  清华大学出版社  1982101

[4]《计算机组成原理与汇编语言程序设计》俸远祯等  电子工业出版社  199762

[5]《微型计算机》朱绍庐编  人民交通出版社  19835

[6]《微型计算机1BM—PC/XT(0520系列)系统原理及应用》周明德  清华大学出版社19917

[7]《微型计算机原理及其应用》陈卜锁主编  上海交通大学出版社   20011

[8]《微型计算机组成原理与接口技术》赵佩华等编  西安电子科技大学出版社 20018

[9]《微机系统与接口技术》吴产乐主编  华中科技大学出版社 20021

作者简介:杨成安(1947-),男,北京市人,任课题组组长,1982年毕业于吉林大学计算机科学系系统结构专业,师从于王湘浩先生。现任开封大学信息工程学院教授,主要从事计算机专业基础教学和科研、主攻方向计算机系统结构,荣获日内瓦国际专利博览会金奖,日内瓦世界发明家公会会员等。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多