《微型计算机原理与应用》学习辅导(三)

🏠 首页 《无线电》杂志 1986年 🔗 第10期 🔗 第7页 分类:应用电子仪器 🔗 唐肖光 🔗

汇编语言程序设计基础和接口技术与中断,这是《微型计算机原理与应用》电视系列片中的重点章节。

汇编语言是微型计算机软件开发的常用的一种语言。用汇编语言编写的程序具有程序效率高、执行速度快等特点,目前大多数以微型计算机为基础的系统都使用汇编语言编制程序,并大量应用于实时控制。因此,掌握好汇编语言及其程序设计方法,是具有实用价值的。

汇编语言又是面向机器的语言。由于它与微型计算机本身的结构特点关系密切,所以学习汇编语言不仅可以加深对机器结构的了解,而且也只有充分地利用了微机结构的特点,才有可能编写出紧凑的、高效的汇编语言源程序。

汇编语言源程序在微机中之所以被执行是要靠已装入机器的汇编程序。汇编程序的基本任务是把用汇编语言编写的源程序翻译成二进制的机器代码,也就是目标程序。

从应用的角度出发,我们要把精力集中于汇编语言本身的语句结构和源程序的编写方法上。具体地说,首先要搞清楚汇编语言源程序的语句结构组成、各字段的使用规则以及常用的伪指令;其次,重点掌握系列片中所介绍的分支程序、循环程序和子程序等程序类型的编写方法。并通过多阅读程序、动手编制程序和上机调试的学习途径,逐步掌握汇编语言程序设计方法,从而进一步提高程序设计的技巧。

这里给出了一个用Z80汇编语言所编写的源程序,程序没有加以注释,请读者阅读后自行加注,并注意这些注释应使用分号“;”与相应语句的其它部分分开。

COUNT:EQU 10

ORG 200H

START:LD HL,BLK1

LD DE,BLK2

LD BC,COUNT

LOOP: LD A,(HL)

LD(DE),A

INC HL

INC DE

DEC B

JP NZ,LOOP

HALT

ORG AFH

BLK1 1,2,3,4,5,6,7,8,9,0

ORG 2B0H

BLK2: DS 10

END START

读者不难得知:该程序是实现从存储地址为AFH开始的十个单元中的数据(1,2,3,…,9,0)传送到存储地址为2B0H开始的十个单元中去。但是,在这个程序中,是否有违反规定的错误呢?有。即操作码ORG后跟的操作数AFH是符号地址还是十六进制数呢?由于是字母开头AFH是可以被误解为某个符号名被引用作标号,因此,为了区分数与符号名,通常汇编程序要求对十六进制数的一个十进制数字打头,所以应在AFH前加一个零,写作OAFH。

此外,请思考以下几个问题:

(1)主程序在存储器中的起始地址是多少?

(2)指令DEC B和JP NZ,LOOP可用怎样一条指令所替代?

(3)从标号LOOP开始的用于数据传送的一组指令是否有功能相当的指令所替代?若被替代,是否还必须保留标号LOOP?

(4)指出该程序中伪指令。

在了解和掌握了汇编语言的主要特性的基础上,读者可以更多地进行汇编语言程序设计的实践。为了方便大家掌握编写程序的基本方法,系列片中介绍了描述程序的一个有效的、形象化的方法,这就是所谓流程图(请复习一下《计算机概论》的§5.3)。同时还比较洋细地介绍了分支、循环、子程序等程序设计的最基本的方法,也是最常用的方法。读者在复习中可将电视教材中给出的流程图,写出与之对应的汇编语言源程序;反之,将已给出的汇编语言程序,画出与之对应的流程图。

有的初学者反映,阅读程序还可以,但独立做题目感到很困难。这是什么原因呢?主要是掌握算法问题。因为编写程序首要一步是确定解决问题的操作步骤或运算次序,并把它列出一个逐步处理的过程。这种解决问题的操作步骤或计算过程称为算法。流程图实际上是算法的一种图解表示。所以,明确了算法后通常可借助流程图来帮助编写程序,而且画流程图可以由粗到细,即先画粗框,再画细框。当然,有时事先画出的框图往往是不完善的,等到程序编制完毕,并上机调试以后,可反过来重新整理和补充流程图,从而获得一个较完整的直观的资料。

总之,把语句结构、指令系统、伪指令掌握好,并把解决问题的算法搞清楚了,编写程序才会有头绪。

关于“接口技术与中断”(电视教材的第六章),这一章内容是起承上启下的作用,它对深入了解微处理器如何与所需要的外部设备甚至一些外国设备连接起来,以构成一个实用的微机系统是必不可少的基础知识。那么,重点应抓住什么呢?首先应搞清接口的作用,掌握CPU与外设间的数据传送几种基本方式,尤其着重掌握好Z80的中断处理方法。

接口的重要作用大家是不难理解的,因为外部设备或其它一些部件都具有各自的不同特性,它们无论在工作方式和速度上不可能跟微处理器性能完全一致。所以,为了实现将它们连接成一个整体,就必须通过相应的接口,而且,一般都需要采用硬、软结合的接口技术去实现它们之间的连接。

就CPU与外设之间的数据传送而言,通常有三种常用的方式。即程序传送、程序中断传送和直接存储器存取(DMA)传送。其中DMA是利用专门的硬件电路,使外部接口可直接与内存进行高速的数据传送,而不必经过CPU的一种传送方式。读者应将这三种方式的特点作一归纳比较。在此重点讨论有关中断传送的若干问题。

利用中断技术之所以可提高CPU的效率,是因为CPU不要浪费时间等待外部设备传送数据。一般的过程是这样:CPU在执行着主程序,一旦遇到需要CPU处理或数据交换时,由外设提出请求,使CPU转去为请求服务,待完成后立即返回执行刚才被打断的主程序。主程序被打断的地方,叫做断点或中断断口。

目前微型计算机中的中断系统发展日趋完善,系统功能比较强而且灵活。引起中断的原因或者说发出中断请求的来源(称中断源)可以有多种:外设请求中断;当计算机中一些关键部位出故障时,向CPU提出中断请求;在控制中需要实时时钟,可让CPU及时转去完成检测和控制等工作;为了方便用户调试程序,设置了某些程序可自愿中断的手段,等等。

一个完整的中断处理过程是:中断请求——中断排队——中断响应——中断处理和中断返回这五个环节。读者的复习可围绕这些环节一步步地进行。下面简要讨论一下Z80的中断处理方法中的某些问题。

一、Z80 CPU为什么要设置二个中断允许触发器IFF\(_{1}\)和IFF2?

大家知道,Z80 CPU的引脚中有NMI—和INT—控制信号线,它们是外界向CPU提出请求的信号,前者是“非屏蔽中断请求”后者是“(可)屏蔽中断请求”,并规定非屏蔽中断可以打断屏蔽中断,为了实现这种功能,除用IFF\(_{1}\)决定是否允许响应I—NT请求外,增加IFF2,以便在接受N—MI时,暂存IFF\(_{1}\)原状态。因为IFF1是处于何种状态均应将IFF\(_{1}\)置0。所以,这时由IFF2来暂存。

二 Z80 CPU响应屏蔽中断时的三种方式所遵循的规则有何差别?

这三种方式是方式0、方式1和方式2。前二种中的中断服务程序的入口地址是固定的,方式0是0页的不同的8个入口地址,方式1是到0038H单元去执行中断处理程序。而方式2中断服务程序可放在内存的任意区段,它可从列有入口地址的地址表中读取相应的中断服务入口地址。这是一种功能最强的方式,也是最灵活的一种中断方式。

思考题答案:(1)200H;(2)DJNZ LOOP;(3)LDIR不保留标号LOOP(4)EQU、ORG、DB、DS、END。(唐肖光)