DISP ‘*’ 宏展开: MOV DL,‘*’ MOV AH,02H INT 21H
44.宏指令STORE定义如下: STORE MACRO X, N MOV X+I,I I=I+1
IF I - N STORE X,N ENDIF ENDM
试展开下列调用: I=0
STORE TAB,7 解答:I=0
store tab ,7 mov tab,0 I=1
store tab,7 +mov tab+1,1 I=2
store tab,7 + mov tab+2,2 I=3
store tab+3,3 + mov tab+3,3 I=4
store tab,7
+ mov tab+4,4 I=5
store tab,5
+ mov tab+5,5 I=6
store tab,7 + mov tab+6,6
45.试编写非递归的宏指令,使其完成的工作与44题的STORE相同。 解答:store macro k mov tab+k,k endm
hongdiaoyong i=o rept 7 store %i i=i+1 endm
46.试编写一段程序完成以下功能,如给定名为X的字符串长度大于5时,下列指令将汇编10次。
ADD AX, AX
解答:rept macro x,r mov ax,oper1
if x gt 5 r=0
rept 10 r=r+1
add ax ,ax endm
47.定义宏指令FINSUM:比较两个数X和Y,若X>Y则执行SUM←X+2*Y;否则执行SUM←2*X+Y
解答: finsum macro x,y,sum; mov bx ,x mov al,2 if x gt y mul y add bx,ax mov dx, sum mov dx, bx if x lt y mov bx, x mul x
mov dx,sum mov dx,bx endmaaa
48.试编写一段程序完成以下功能:如变元X=’VT55’,则汇编MOV TERMINAL,0;否则汇编 MOV TERMINAL,1。
解答:pre macro x,arg,terminal mov arg ifidn x,arg mov terminal,0 ifdif x,arg
mov terminal ,1 endm
49.对于DOS功能调用,所有的功能调用都需要在AH寄存器中存放功能码,而其中有一些功能需要在DX中放一个值。试定义宏指令DOS21,要求只有在程序中定义了缓冲区时,汇编为:
MOV AH,DOSFUNC
MOV DX,OFFSET BUFF INT 21H
否则,无MOV DX,OFFSET BUFF指令。并展开以下宏调用: DOS21 01
DOS21 0AH, IPFIELD
解答: DOS21 MACRO DOSFUNC,BUFF MOV AH,DOSFUNC IF B〈BUFF〉 INT 21H ELSE
MOV DX,OFFSET BUFF 宏展开: DOS21 01 MOV AH,0H INT 21H
DOS21 0AH,IPFIEID
MOV AH,0AH
MOV DX,IPFIELD INT 21H
50.编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。
如果(SIGN)=0,则用字节变量DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE,结果都存放在字节变量RESULT中。
解答:MOV AL,DIVD IFE SIGN
MOV AH,0 DIV SCALE ELSE CBW
IDIV SCALE ENDIF
MOV RESULT,AL
第六章输入输出处理方法习题
1.如果8251A设定为异步通信方式,发送器时钟输入端和接收器时钟输入端都连接到频率为19.2KHZ的输入信号,波特率因子为16,则波特率为( )。 (A)1200 (B)2400 (C)9600 (D)19200 答: A
2.试分析,在数据通信中,比特率与波特率分别代表的含义? 答:比特率指数据通信中信号频率每秒钟变化的次数;
波特率指数据通信过程中每秒种传送的位数(bit/s),故 1波特=1位/秒。
3.8255A工作在方式1时,端口A和端口B作为数据输入/输出使用,而端口C的各位分别作为端口A和端口B的控制信息和状态信息。其中作为端口A和端口B的中断请求信号的分别是端口C的()。
(A)PC4和PC2 (B)PC5和PC1 (C)PC6和PC7 (D)PC3和PC0 答: D
4.在DMA传送过程中完成数据传送功能是由( )。 (A) CPU执行从存储器读出的指令 (B) CPU直接控制外部设备与存储器 (C) DMAC执行从存储器读出的指令 (D) 外部设备中的控制部件直接控制 (E) DMAC的硬件直接控制 答: E
5.DAC0832是一个分辨率为(1),输入具有(2)功能的D/A转换器。 (A)8位 (B)10位 (C)12位 (D) 单缓冲 (E) 双缓冲 (F) 无缓冲 答: A E
6.在IBM PC/XT微机中8253-5定时器/计数器的三个通道的工作方式分别为:通道0工 作在(1);通道1工作在(2);通道2工作在(3)。
(A)方式0 (B)方式1 (C)方式2 (D)方式3 (E)方式4 (F)方式5
答: D C D
7.试分析:8251A能不能同时实现发送数据和接受数据的功能?
答:8251A是可编程控制的串行接口芯片,对其方式字、命令字及状态字初始化后,规定其通信方工(同步/异步)及数据格式等,命令字来控制发/收,状态字控制何时可以收/发。其实现的是半双工通信方式,不能同时实现发送和接受数据的功能。
8.当D/A转换器与CPU相连时,如果CPU的数据总线的位数小于D/A转换器的位数,这时需要采用什么结构? 答:当CPU的数据总线的位数小于D/A转换器的位数时,即使采用的D/A转换器内部带有数据缓冲器,也要采用外加三态缓冲器或数据寄存器与CPU相联的结构,并且是两级缓冲,以消除由于两次传送数据而产生的尖峰。
9.ADC0809与CPU相连接时,其模拟输入通道的地址由CPU提供。为了确保它对输入信号的可靠转换,需要在它们之间加上什么东西?
答:为了确保对输入信号的可靠转换,需在ADC0809 的ADDA~ADDC和CPU之间加一级地址锁存器或三态锁存器。
10.试分析:在异步串行通信工作状态下,通信双方是否需要同步?
答:需要同步。异步串行传送是指传送的每一个字符是随机出现在数据流中的,即是把每一个字符看作一个独立的传送单位,字符之间的间隔是随机的、任意的。但是,在一个字符内部的各个二进制位是同步传送的。收发双方对字符的同步是通过在字符格式中设置起始位和停止位来实现的
11.简述8086CPU对中断的响应和处理过程。
答:8086对各类中断的响应不完全相同,主要区别在于如何获得中断类型码。
A. 可屏蔽中断的响应过程。首先必须满足中断允许标志IF置1,当没有内部中断,非屏蔽
中断(NMI=0)和总线请求(HOLD=0)时,外设向中断控制器8259A发出中断请求,经8259A处理,得到相应的中断类型码,并向CPU申请中断(INTR=1)。 ⑴等待当前指令结束,CPU发出中断响应信号。
⑵8259A连续(两个总周期)接收到两个INTA 的负脉冲的中断响应信号,则通过数据总
线将中断类型码送CPU,CPU把中断类型码乘4作为中断矢量表的地址指针。 ⑶CPU保护断点,将状态标志字PSW及当前的CS和IP内容压栈。 ⑷清IF和TF标志为0。
⑸查中断矢量表,取中断处理程序首地址,将其分别置入IP和CS中,程序转入执行中
断处理程序。
B. 非屏蔽中断的响应过程:非屏蔽中断请求在NMI加入,等待当前指令执行结束,CPU优
先响应NMI中断请求,其中断类型码由硬件决定类型为2,无须从外部引入,其余响应过程与可屏蔽中断相同。
C. 内部中断响应操作:内部中断响应的共同点是:
⑴中断类型码由指令码给定或硬件决定,无须外部逻辑输入; ⑵无INTA 信号响应周期; ⑶不受IF控制; ⑷除单步中断 外,其它内部中断响应优先于外部中断,响应过程与非屏蔽中断类似。 12.8086可引入哪些中断,它们是如何引入的?
答:8086具有256种不同中断类型的能力。中断源可来自CPU内部或外部设备,可由硬件 或软件产生。
A.非屏蔽中断:8086的两条外部中断线是非屏蔽中断NMI和可屏蔽中断INTR。NMI是边缘触发方式,要求高电平有效。一般用在如电源断电等紧急事件中,优先权较高,请求信号不受标志位IF的影响。NMI中断类型码规定为2。
B.INTR可屏蔽中断请求是高电平有效的另一外部硬件中断源,高电平保持时间应维持到当前指令结束。在8086中它不自中断控制器8259A,其外部电路所产生的中断的优先级别由8259A管理产生。CPU只根据标志位IF的状态决定是否响应INTR。
C.内部中断:8086的内部中断产生的过程完全与硬件电路无关,是CPU根据软件中某条指令或软件对PSW中的标志设置而产生的。内部中断可分为两大类型:一类是内部已硬件设置好的类型0~类型4,它们依次为除法出错、单步中断、NMI、断点中断和溢出中断;
另一类是8086的中断系统中有一条两字节的中断指令INT n。n 即为中断类型码,CPU根据中断类型码即可找到中断服务程序入口。
13.中断入口地址表的功能是什么?已知中断类型码分别为84H和FAH,它们的中断入口在中断入口地址表的什么位置上? 答:中断入口地址表又称中断矢量表,它是中断矢量类型码与该中断类型相对应的中断服务程序入口之间的连接表,它设置在系统RAM最底端1024个单元内。中断矢量表共有256种中断类型码,每个类型码占用4个字节。其中低两个字节为中断服务程序入口地址的偏移地址,置入IP;高两位字节为服务程序的段基址置入CS。于是可通过这4个字节的值即可找到该中断类型的中断服务程序入口。
中断类型码84H 中断入口在中断矢量表的210H 中断类型码FAH 中断入口在中断矢量表的368H
14.为什么在主程序和中断服务程序中都要安排开中断指令?如果开中断指令安排在中断服务程序的末尾,那么将产生什么后果。如果要实现中断嵌套,则开中断指令应如何设置? 答: 开中断指明CPU允许中断,主程序中在开中断之前要屏蔽本级和低级中断,预防干扰,而后开中断允许处理高级中断请求。在中断处理之后也要开中断,允许任何中断请求。 如果没有开中断,更高级中断请求无法响应。
在中断服务期间,把该中断的断点保存后在开中断,表示响应更高级中断请求,然后进入中断服务程序,执行中断服务程序,在恢复断点之前关中断,之后又开中断,又可响应更高级中断。
15.简述中断控制器8259A的内部结构和主要功能。
答: 8259芯片内部结构包括八个部分:1、数据总线缓冲器:是一个双向八位三态缓冲器,由它构成8259与CPU之间的数据接口,是8259与CPU交换数据的必经之路。2、读/写控制电路:用来接收来自CPU的读/写控制命令和片选控制信息。3、级联缓冲/比较器:在多片8259级联使用,构成主从关系。4、中断请求寄存器(IRR):是一个八位寄存器,用来存放由外部输入的中断请求信号IR0-IR7。5、中断服务寄存器(ISR):是一个八位寄存器,用来记录正在处理的中断请求。6、中断屏蔽寄存器(IMR):是一个八位寄存器,用来存放各级中断请求的屏蔽信息。7、优先权判别器(PR)用来识别各中断请求的优先级别。8、控制电路:是8259A内部的控制器,根据中断请求寄存器IRR的置位情况和优先权判别器PR与判定结果向8259A 内部其他部件发控制信号,并向CPU 发中断请求信号 INT 和接收中断响应信号INTA 控制8259A 进入中断服务状态。
16.8259A对中断优先权的管理方式有哪几种?各是什么含义? 答: ①完全嵌套方式:ISR寄存器中某位置“1”,表示CPU正在处理这一级中断请求,8259A允许比它级别高的中断请求进入,禁止与它同级或低级中段请求进入。IR引入的中断请求有固定的中断级别,R0最低,R7最高。
②自动循环方式:IRN –IR0优先级别不固定。每当任何一级中断被处理完,它的优先级别就被改变为最低,而将最高级赋给比它低一级的中断请求。
③中断屏蔽方式:由CPU在任何时候都可安排一条清除中断指令。 1) 普通屏蔽方式,将IMR中某一位或某几位置“1”,可将相应级的中断请求屏蔽掉。 2) 特殊屏蔽方式,当CPU正在处理某级中断时,要求仅对本级中断进行屏蔽,而允许其他
优先比它高或低的中断进入系统。
17.某系统中设置三片8259A级联使用,一片为主8259A;两片为从8259A;它们分别接入主8259A的IR2和IR6端。若已知当前主8259A和从8259A的IR3上各接有一个外部中断源,它们的中断类型码分别为A0H,B0H和C0H,已知它们的中断入口均在同一段中,其段基址为2050H,偏移地址分别为11A0H,22B0H和33C0H,所有中断都采用电平触发方式、完全嵌套、普通EOI结束,请(1)画出它们的硬件连接图;(2)编写全部初始化程序。 解答:
初始化程序:
START:MOV AL ,19H
MOV DX,偏移地址(主) OUT DX,AL MOV AL,0A0H