第六篇 教材中关于调用子程序和中断子程序现场保护描述的原理性错误
(2011-07-18 02:08:53)
标签:
杂谈 |
教材中关于调用子程序和中断子程序现场保护描述的原理性错误
(开封大学信息工程学院,河南
摘要: 本文论述了全国计算机专业《微机原理、接口电路和汇编语言程序设计》教材中关于调用子程序和中断子程序中现场保护描述的原理性错误。指明了二者的不同性质,并试图给出了不同的、正确现场保护与现场恢复的思维方法。
关键词: 调用子程序,中断子程序,现场保护,现场恢复,入口参数,出口参数
一、问题的提出
1.关于调用子程序现场保护的描述(注:文中下划线为本文作者所加)
①谭浩强主编,清华大学出版社,2001年版《微机原理与接口电路》,第97页
②谭版P97举例:
[例4.48]
子程序名:PZN
子程序功能:统计一组数据中的正数和零的个数。
入口参数:数组首址在SI中,数组个数在CX中。
出口参数:正数个数在AX中,零的个数在BX中。
使用的寄存器:AX、BX、SI、PSW(注:使用的寄存器漏掉了CX!)
子程序如下:
PZN:PUSH
③谭版举例:共12个调用子程序举例
2.关于中断子程序现场保护的描述
①谭版第188页描述
②谭版第188页图8.11
③引用谭版举例第255页[例:9.4]
ORG
CLI
MOV
OUT
:
INC
DEC
STI
IRET
④谭版256页[例9.5]及293页[例:9.10](略)
二、问题的分析
1.关于调用子程序现场保护错误的分析
①谭版中第97页描述的错误
②谭版[例:4.48]错误分析
2.关于中断子程序谭版现场保护描述错误的分析
①谭版的第188页关于中断子程序现场保护的描述,仅仅给出用PUSH指令压入堆栈保护和用POP指令弹出恢复,而根本没有指明为什么要保护和怎样保护。
②谭版第188页图8.11中,在恢复现场前并没有进行关中断,即谭版认为恢复现场的过程中,是允许高级中断来破坏这恢复现场的过程的,显然是错误的,恢复现场应和保护现场一样应关中断,否则返回主程序时,照样会破坏原来寄存器的内容的!
③在上文中引用谭版第255页[例9.4]来看,中断子程序中根本就没有什么现场保护和现场恢复!为什么?
④是一时的笔误吗?非也,综观,谭版256页[例9.5]和293页[例:9.10]中的中断子程序,也都没有现场保护和恢复,这还是中断子程序吗?
三、问题的我见
1.关于调用子程序和中断子程序
①调用子程序的性质
4>参数传递(即入口参数和出口参数)的方法有三种,即CPU寄存器、内存数据区和内存堆栈区。
②参数传递方式不同则现场保护和恢复的方法亦不同。
2>内存数据区参数传递方式中,由于主程序无须动用CPU寄存器赋入口参数,故此方法可以在进入子程序之初保护那些子程序中用到的CPU寄存器内容!同理也可以在返回主程序之前恢复现场。
3>内存堆栈区参数传递方式,问题较难,故须小心使用,注意事项有:
a.由于主程序传递的参数压在堆栈中主程序断点的下面,故应采用堆栈分区的办法解决,即必须充分掌握改变SS或SP指针的技巧。
b.用堆栈参数传递,由于堆栈必须顺序入栈,且反顺序出栈,使用参数时难度也很大。
2.关于中断子程序
①中断子程序与主程序是风马牛不相及的两码事,完成的根本不是同一个算法。
②主程序对中断子程序是未知的,是被动的;中断是随机地在主程序的某位置产生的。
③故主程序根本无法在主程序中予赋参数、保护现场和恢复现场的。
④故中断子程序的保护现场和恢复现场只能在中断子程序中完成。
⑤而且在保护和恢复现场时,不能允许高级中断的产生,8086CPU在响应中断时,自动完成关中断(和保护PSW字即FR寄存器内容)故只有在恢复现场前须考虑再关中断的问题,而且应有两个关中断,即关中断和关单步中断。
⑥在中断子程序返回主程序后,请注意:主程序应是开中断状态,而这个任务在8086CPU中则是由IRET来完成了,该指令包括开中断的隐含操作。(而在8080和Z80CPU中则无此隐含操作,应在中断返回指令前加上开中断指令,否则主程序以后就无法再响应其它中断,而且这个问题会隐蔽的很深,不易发现!并且此开中断指令是延时在中断返回指令后实施的,否则将会产生未返回主程序,又响应其它中断而产生错误。)
⑦中断子程序参数传递只能在内存数据区中进行,并且也只能主程序初始化时完成。
四、问题的意义
参考文献:
[1]《微机原理与接口技术》谭浩强主编
[2]《微型计算机原理及其应用》陆一青编 哈尔滨工业大学出版社 1991年8月1日
[3]《微型计算机硬件软件及其应用》周明德编
[4]《计算机组成原理与汇编语言程序设计》俸远祯等
[5]《微型计算机》朱绍庐编
[6]《微型计算机1BM—PC/XT(0520系列)系统原理及应用》周明德
[7]《微型计算机原理及其应用》
陈卜锁主编
[8]《微型计算机组成原理与接口技术》
赵佩华等编
[9]《微机系统与接口技术》
吴产乐主编
作者简介:杨成安(1947-),男,北京市人,任课题组组长,1982年毕业于吉林大学计算机科学系系统结构专业,师从于王湘浩先生。现任开封大学信息工程学院教授,主要从事计算机专业基础教学和科研、主攻方向计算机系统结构,荣获日内瓦国际专利博览会金奖,日内瓦世界发明家公会会员等。

加载中…