8. 8259A有哪几种优先级控制方式? 8259A的中断请求有哪两种触发方式?
对请求信号有什么要求? 9. 若8086系统中使用1片8259A,中断请求信号采用边沿触发方式。中断类
型号为08H~0FH,采用完全嵌套、中断非自动结束方式。8259A在系统中的连接采用非缓冲方式,它的端口地址为0FFFEH、0FFFCH。请画出系统连接图及编写初始化8259A的程序段。 答:系统连接图如下图所示。
D7~D0 D7~D0
CAS2~CAS0 IOWC S2 WR IORC S1 RD INTA S0 INTA IR7
+5V INTR INT 74LS30 G2A Y0 8086CPU 八输入 SP/EN IR0 74LS138 74LS00 A15~A8 G2B
G1 8259A A7 C Y6
A6 B
A5
A4
初始化8259A的程序段如下:
CLI
MOV AL, 13H ;初始化ICW1
MOV DX, 0FFFCH ;1片8259A、边沿触发 OUT DX, AL MOV AL, 08H ;初始化ICW2
MOV DX, 0FFFEH ;中断类型号为08H~0FH OUT DX, AL MOV AL, 01H ;初始化ICW4 OUT DX, AL ;全嵌套、中断非自动结束、非缓冲
MOV AL, 00H ;初始化OCW1 OUT DX, AL ;8259A全部开中断 STI ┇ 10. 某系统内有8个INTR 外中断源,用一片8259A管理8级中断源。设8259A
占用地址24H、25H,各中断源的类型码为40H~47H,各级中断对应的服务程序入口地址CS:IP分别为1000H:0000H、2000H:0000H、…、8000H:0000H。试写出初始化程序,并编程向中断向量表中置入各中断向量。
答:程序段如下:
CLI
MOV AL, 13H ;初始化ICW1 OUT 24H, AL ;1片8259A、边沿触发 MOV AL, 40H ;初始化ICW2 OUT 25H AL ;中断类型号为40H~47H MOV AL, 01H ;初始化ICW4 OUT 25H, AL ;全嵌套、中断非自动结束、非缓冲
MOV AL, 00H ;初始化OCW1 OUT 25H, AL ;8259A全部开中断
PUSH ES ;向中断向量表中置入各中断向量 MOV AX, 0000H ;中断向量表在内存的0段 MOV ES, AX MOV BX, 40H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 1000H MOV BX, 41H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 2000H MOV BX, 42H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 3000H MOV BX, 43H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 4000H MOV BX, 44H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 5000H MOV BX, 45H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 6000H MOV BX, 46H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 7000H MOV BX, 47H*4
MOV WORD PTR ES:[BX], 0000H MOV WORD PTR ES:[BX+2], 8000H POP ES STI ┇ 11. 编写程序段,实现如下功能:
(1) 使用INT 21H的5H号功能,打印一个字符?A??
(2) 使用INT 17H的0H号功能,把字符?P?输出给0号打印机? (3) 从通信接口COM1接收一个字符,并放入内存? (4) 通过通信接口COM1向外发送1个字符? 答:(1)、 MOV DL, ?A?
MOV AH, 05H INT 21H
(2)、 MOV DX, 0 ;0号打印机
MOV AL, ?P? MOV AH, 0 INT 17H
(3)、 MOV AH, 03H ;从通信接口COM1接收一个字符
INT 21H
MOV BUF, AL
(4)、 MOV DL, ?C? ;通过通信接口COM1发送字符C
MOV AH, 04H INT 21H 12. 利用DOS 系统功能调用,完成将键盘输入的小写字母转换为大写字母并输
出显示,直到输入?$?字符时停止输出 答:完整程序如下: CODE SEGMENT
ASSUME CS:CODE
START: MOV AH, 02H
MOV DL, 0DH ;显示“回车” INT 21H MOV AH, 02H MOV DL, 0AH ;显示“换行” INT 21H
INPUT: MOV AH, 01H ;键盘输入一个字符回显功能
INT 21H CMP AL, ?$? ;?$?字符? JE INPUT_END CMP AL, ?a? ;?a~z?字符? JB INPUT CMP AL, ?z? JA INPUT
AND AL, 0DFH ;小写字母转换为大写字母 MOV AH, 02H MOV DL, AL ;显示大写字母 INT 21H JMP INPUT
INPUT_END: MOV AX, 4C00H ;返回DOS功能
INT 21H
CODE ENDS
END START
13. 从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为53H、0D8H、
67H、82H、0A6H、9EH、0F4H。编程找出它们的中间值并放入RES单元,且将结果以“(RES)=?”的格式显示在屏幕上。 14. 设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;
2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据0FFH为止。 15. 编程实现以下操作:从键盘输入4个数字,分别作为两个10~99之间的十
进制数。求它们的和,并把结果以三位十进制数的形式显示在屏幕上。要求输入回显的两个加数与送显的和之间有适当的分隔,以示区别。格式自行拟定。
答:完整程序如下: CODE SEGMENT
ASSUME CS:CODE
START: MOV AH, 02H
MOV DL, 0DH ;显示“回车” INT 21H MOV AH, 02H MOV DL, 0AH ;显示“换行” INT 21H CALL INPUT ;输入2数并转换为十进制数送BL MOV AL, BL ;转换的十进制数保存在AL中 CALL INPUT ;输入2数并转换为十进制数送BL ADD AL, BL DAA
MOV BH, 0 ADC BH, 0 ;将进位位保存在BH中 MOV BL, AL ;将求和结果保存在BL中 CALL OUTPUT ;输入显示子程序调用 INT 20H ;结束,返回DOS
INPUT PROC
PUSH AX
MOV AH, 01H ;键盘输入一个字符功能 INT 21H
AND AL, 0FH ;ASCII码转换为二进制数 MOV BL, AL MOV CL, 4 SHL BL, CL ;BL内容左移四位 MOV AH, 01H ;键盘输入一个字符功能 INT 21H
AND AL, 0FH ;ASCII码转换为二进制数 OR BL, AL ;合成为一个两位的十进制数
MOV AH, 02H MOV DL, ' ' INT 21H POP AX RET
INPUT ENDP
OUTPUT PROC
PUSH AX PUSH DX PUSH CX
MOV AH, 02H MOV DL, ' ' INT 21H MOV DL, BH OR DL, 30H MOV AH, 02H INT 21H MOV DL, BL MOV CL, 04H SHR DL, CL OR DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH OR DL, 30H MOV AH, 02H INT 21H POP CX POP DX POP AX RET
OUTPUT ENDP CODE ENDS
END START
;显示空格
;显示空格
;显示进位位
;进位位转换为ASCII码
;显示求和结果高位
;结果高位转换为ASCII码
;显示求和结果低位 ;结果低位转换为ASCII码
16. 比较变量x、y的大小使用16进制的形式在屏幕上输出较大的值,若x=y,
则输出字符串‘EQUAL’。 17. 请用字程序结构编写如下程序:从键盘输入一个二位十进制数的月份数(01~12),然后显示出相应的英文缩写名。 18. 在ARRAY数组中,保存一个从大到小顺序排列的以字为单位的字符数组,数组长度存放于数组的第一个单元中。从键盘接受一个字符,在数组中查找