85、相对于条件传送方式,中断方式有什么优点?和DMA方式比较,中断传送方式又有什么不足之处?
【解答】中断传送方式下,当外设要求交换数据时,向CPU发中断请求,CPU在执行完当前指令后,即可中断当前任务的执行,并根据中断源转入相应的中断处理服务程序,实现对请求中断外设的管理。CPU与外设实现了并行工作,大大提高了工作效率。
DMA方式是在存储器与外设间开辟一条高速数据通道,使外设与内存之间直接交换数据,不需要CPU的干预。
86.用符号定义语句如下:(4分)
VAR1 DB 2,3,4,60 VAR2 DB 0 VAR3 DW 50 DUP(?) M EQU LENGTH VAR3
L
EQU VAR2 – VAR1
问L 的值是 4 ,M的值是 50 。
87. 当外设需向内存输入时以DMA方式传送数据,试叙述外设提出请求和CPU的响应过程。
HOLD DREQ DMAC CPU
8237 8086
HLDA DACK 硬 盘 ① I/O设备接口向DMA控制器发出请求信号,请求DMA传送。
② DMA控制器接到I/O设备请求后,向CPU发出总线请求信号,请求取得总线控制权。 ③ CPU在执行完当前总线周期后,响应请求,向DMA控制器发出总线响应信号;释放总
线的控制权,暂停执行主程序,处于等待状态。由DMA控制器取得对总线的控制权。 ④ DMA控制器接到CPU总线响应信号后,向I/O设备接口发出DMA响应信号。 ⑤ 由DMA控制器发出DMA传送所需的外设输入和存储器写控制信号。
⑥ DMA控制器内部的地址寄存器值加l,字节计数器值减1,如果计数器值不为0,则继
续下个地址单元的传送。
⑦ 当设定的字节数传送完成,结束DMA传送。DMA控制器释放对总线的控制权。CPU
重新获得总线的控制权,于是主程序从中断了的当前指令的总线周期开始继续执行。
88.描述以下这段子程序中的各语句功能和该子程序的总体功能
16
GETNUM PROC ;定义过程GETNUM
XOR BL, BL ;BL清0
GGG: MOV AH,01H ;1号功能,键盘输入
INT 21H ;执行DOS功能调用
CMP AL,0DH ;是回车吗? JZ PPP ;是结束
SUB AL,30H ;把ASCII码变成数字 CMP AL,0AH ;是A~F吗?
JB GETS ;是0~9直接送入寄存器
SUB AL,07H ;是A~F则减7 GETS: MOV CL,04H ;设置移位次数 SAL BL,CL ;左移4位
OR BL,AL ;高低4位拼成8位 JMP GGG ;继续键盘输入
PPP: RET ;子程序返回 GETNUM ENDP ;子程序结束
此子程序的总体功能是:从键盘输入8位二进制数放BL中。
89、程序阅读和分析 源程序如下: DATA SEGMENT
DA DB 2AH,6FH,33H,54H,15H,76H,4DH,38H
5CH,0AH,45H,10H,61H,38H,24H,65H
SDZ DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START : MOV AX,DATA MOV DS,AX LEA SI,DA MOV CX,15
MOV DL,[SI] ; 1) ADD SI,01H ; 2)
LP : CMP DL,[SI]
JNC NEXT ; 3) MOV DL,[SI] ; 4) NEXT: INC SI
LOOP LP ; 5) MOV SDZ,DL
17
MOV AH,4CH
INT 21H CODE ENDS
END START
(1) 结合本程序的具体功能,在划线处写出可执行指令的执行目的。 1)将第一个数据送到DL中
2)地址指针SI增1,指向第二个数据 3)DL大于等于(SI),程序转 NEXT 处 4)DL 小于(SI),则将(SI)中的大数送到DL 中 5)16个数据没有比较完,返回到 LP处,继续比较 (2)简述本程序段的功能。(5分)
从指定数据区中的16个字节数据中找出最大的数76H,并将最大数76H存放到内存单元 SDZ
中,即( SDZ ) = 76H。
90、程序阅读和分析 源程序如下:
DATA SEGMENT DAT1 DB 2,-1,7,-5,8,-3,9 COUNT EQU $-DAT1 RS DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV BX,OFFSET DAT1 MOV CX,COUNT
XOR DL,DL ;1) LOOP1: MOV AL,[BX] ;2) CMP AL,0
JGE NEXT ;3)
18
INC DL
NEXT: INC BX
LOOP LOOP1 ;4) MOV RS,DL ;5) MOV AH, 4CH INT 21H CODE ENDS
END START
(1)结合本程序的具体功能,在划线处写出指令性语句的执行目的。
1)DL清零
2)将内存数据送到AL中
3)AL大于等于0,程序转 NEXT 处
4)10个数据没有比较完,返回到 LOOP1处,继续比较 5)小于0的个数存入RS
(2)简述整个程序的功能。(3分)
统计指定数据区中的10个字节数据中的负数个数,并将其存放到RS中。
(3)程序执行完以后,RS= 3 。(2分)
91.编写一段完整的、运行后返回DOS的源程序,要求能够从键盘读入一行长度不超过80的字符串STRING。在该字符串中寻找空格符,若找到则显示‘FOUND’,若找不到则显示‘NO FOUND’。
(要求写出完整的数据段,代码段和算法源程序)
完整的源程序如下:
data segment
String db 80
db ?
db 80 dup( ?)
B1 db ‘FOUND$’ B2 db ‘NO FOUND$’ data ends
19
code segment assume cs:code,ds:data start: mov ax,data mov ds,ax
mov dx,offset string mov ah,0ah int 21h mov bx,offset string+2 mov cx,[offset string+1] lop: mov al,[bx]
cmp al,’ ’ jz fd inc bx loop lop jmp nofd
fd: mov dx,offset B1 mov ah,9 int 21h jmp end
nofd:mov dx,offset B2 mov ah,9 int 21h end: mov ah,4ch int 21h code ends end start
92 . 编制程序:打印用“*”号组成的三角形
题目要求:从键盘输入3至9之间的数字,用“*”号组成一个三角形图案。如输入数字6,屏幕上应显示如下图案。 ****** ***** **** *** ** *
20