2022年完整word版,MCS_习题_答案 3.pdf
习题 7 答案1.请编写完整 8086汇编语言程序统计08010803班计算机原理考试成绩:假设成绩存放在数据段0000H 开始的 85 个字节单元中;将成绩从高到低进行排序;统计最高成绩和最低成绩,分别存放在字节变量max 和 min 单元中;统计不及格人数,存放在字节变量var1中;统计 9099分人数,存放在字节变量var2 中;计算 85 人平均成绩,存放在字节变量avg中;data segment para org 0056H max db 0 min db 0 var1 db 0 var2 db 0 avg db 0 sum dw 0 cnt equ 85 data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment para assume cs:code, ds:data, ss:ss_seg main proc far mov ax, data mov ds, ax mov cx, cnt-1 circle1: ; sort the score push cx mov bx, 0 mov dx, 0 circle2: mov al, bx cmp al, bx + 1 jae next xchg al, bx + 1 mov bx, al mov dx, 1 next: inc bx loop circle2 pop cx cmp dx, 1 jz main1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - loop circle1 main1: mov max, 0000H ; get the max mov max, 0054H ; get the min mov cx, cnt ; calculate var1, var2 and avg mov bx, 0 circle3: mov al, bx mov ah, 0 add sum, ax ; get the sum of score cmp al, 90 jae main2 cmp al, 60 jb main3 jmp main4 main2: inc var2 ; 9099 number jmp main4 main3: inc var1 ; 60 number main4: inc bx loop circle3 mov dl, cnt mov ax, sum div dl mov avg, al ; get the average score mov ax, 4c00h int 21h ; return OS main endp code ends end main 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 2 如图 6-1 所示,以 IBM-PC/XT 计算机为核心构成的炉温控制系统。其中 8255的 A 组与 B 组工作在方式 0, 8253 定时器 0 工作在方式 3 方波发生器方式,8253输入计数频率为 100KHz。1)试说明 8259、8253、8255 使用的端口地址;(3分)2)芯片初始化( 10 分)单片 8259工作在完全嵌套方式,中断非自动结束,中断申请输入 IR0IR7为边沿触发, IR7 对应中断类型码为0FH,编写 8259初始化子程序,命名为 INIT_8259;8253每定时 500ms向 8259申请中断,计算 8253定时常数,并编写 8253初始化子程序,命名为INIT_8253;8255的 A 口和 C 口上半部作输出,B 口及 C 口下半部作输入,编写 8255初始化子程序,命名为INIT_8255;3)编写汇编程序,实现炉温的连续控制,要求包括主程序与中断服务程序:主程序完成中断向量的安装,8259、8253、8255初始化,以及开中断,并要求 1 个小时后,停止控温; (假设系统已经提供中断向量安装子程序INIT_INT ,初始化时可直接调用INIT_INT 、INIT_8259、INIT_8253 、INIT_8255)中断服务程序完成保护现场、中断处理、发EOI 命令、恢复现场、中断返回等操作; 其中,中断处理要求每500ms通过 8255的 PA 口读入一次A/D 数据,并启动下一次A/D 转换,PC4 平时为高电平,输出负脉冲到START 端,则启动 A/D ,转换结束时 EOC 端由低电平变为高电平,要求每 3 秒通过 PB 口输出控制量给 D/A 转换器进行一次调节。 (假设系统已提供控制算法子程序PROC_CTRL,该子程返回参数为AL,返回参数即是 D/A 需要输出的数字量)答案:1) 8259 端口地址范围 20H 3FH 8253 端口地址范围 80H 9FH 8255 端口地址范围 0A0H 0BFH 2)INIT_8259 proc mov al, 13h ;ICW1 out 20h, al mov al, 08h ;ICW2 out 21h, al mov al, 09h ;ICW4 out 21h, al ret INIT_8259 endp 3)INIT_8253 proc mov al, 36h out 83h, al mov ax, 50000 out 80h, al mov al, ah 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - out 80h, al ret INIT_8253 endp INIT_8255 proc mov al, 83h out 0A3h, al ;初始化 8255 ret INIT_8255 endp 4)data segment para T_Value db 0 ;记录 AD 数据CNT dw 0 ;用于 1 小时定时CNT_DA dw 0 ;用于 3 秒定时P8259_A0 EQU 20H PORT_A EQU 0A0H PORT_B EQU 0A1H PORT_C EQU 0A2H PCTRL EQU 0A3H data ends ss_seg segment stack dw 100 dup(0) ss_seg ends code segment assume cs:code, ds:data, ss:ss_seg ISR_CTRL_T proc far ;中断服务程序push ax ;保护现场in al, PORT_A ;读 A/D 转换数据mov T_Value, al inc CNT call START_ADC ;启动 A/D 转换inc CNT_DA cmp CNT_DA, 6 ;判断 3 秒是否到jb ISR_1 call PROC_CTRL ;DA 输出进行控制out PORT_B, al mov CNT_DA, 0 ISR_1: mov al, 20h ;发 EOI 命令out 20h, al pop ax ;恢复现场iret ;中断返回ISR_CTRL_T endp START_ADC proc ;启动 A/D 转换名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - mov al, 08h out PCTRL, al ;PC4 = 0 nop nop nop nop mov al, 09h ;PC4=1 out PCTRL, al ret START_ADC endp main proc far mov ax, data mov ds, ax cli call INIT_8259 call INIT_8253 call INIT_8255 call INIT_INT ;安装中断向量sti main1: cmp CNT, 7200 jb main1 cli mov ax, 4c00h int 21h code ends end main 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 3. 如图 6-1 所示ADC0809 与 IBM-PC/XT机相连完成数据采集。 ADC0809 为 8 通道的 8 位逐次比较 ADC , D7 D0为三态输出数据线, OE为高电平时打开三态门读取数据; START为高电平时启动 ADC 开始工作; ADDC 、ADDB 、ADDA 为 8 路模拟输入选择,由ALE锁存; ADC 转换结束时 EOC 输出高电平, ADC0809 的转换时间为 100 微秒。系统设计中, 由 8253定时器 0 定时,每隔 10 毫秒启动 ADC0809 工作,转换结束后, 由 EOC 向 8259发出中断请求,在中断服务程序中读取转换结果。 ADC0809的 ADDC 、ADDB 、ADDA 全部接地, 总是选择第 0 通道,其余输入通道均接地。 8259工作在普通全嵌套方式,中断申请输入IR0IR7 为边沿触发, IR0 的中断类型码为 08H,中断为非自动结束。图中 AEN 为地址允许信号,低电平时选中端口,地址总线经译码后,8259占用端口地址 20H 和 21H,8253 占用端口地址 40H43H,ADC0809 占用端口地址 160H。1)8253定时器0工作在方式 2, 即分频模式,定时时间为 10毫秒,请编写 8253初始化程序段。(4分)2)读取ADC0809转换结果的中断服务程序为New_Int0A,请编写程序段将New_Int0A 的入口地址安装到中断向量表中,并且要求在双字变量OldIntVect中保存原来的中断向量。 (4分)3)请编写一段程序设置 IF以允许可屏蔽中断请求,并设置8259的中断屏蔽寄存器 IMR以允许 IR2引脚上的中断请求。(2分)4)以下为读取 ADC0809的中断服务程序 New_Int0A ,请根据注释在横线处补充8086汇编语句,使得程序完整。 (10分)答案:1)mov al, 34h ;设置 8253 控制字out 43h, al mov ax, 10000 ;设置计数初值,定时 10ms, Fclk = 1MHz out 40h, al mov al, ah out 40h, al 2) mov al, 0Ah ;保存原来 IRQ2 对应中断向量mov ah, 35h int 21h mov word ptr OldIntVect, bx mov word ptr OldIntVect+2, es mov dx, offset New_Int0A ;安装新的 IRQ2 中断向量mov bx, seg New_Int0A mov ds, bx mov ah, 25h mov al, 0Ah int 21h 3)in al, 21h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - and al, 0FBh out 21h, al sti 4) New_Int0A proc far push ds push dx ;保护现场push ax mov ax, DataSeg2 mov ds, ax ;使 DS 指向新的数据段mov dx, 160h ;读取 ADC0809 转换结果in al, dx mov AdcData, al ;将转换结果保存在内存变量AdcData中mov al, 20h ;发 EOI 命令out 20h, 20h pop ax ;恢复现场pop dx pop ds iret ;中断返回New_Int0A endp 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 4. 利用PC 机现有的硬件和软件资源设计程序,以实现在显示器上显示 (选做题)XX (时) :XX (分) :XX (秒)(1)设计思路PC 机系统板上使用一片 8253,其地址为 40H 43H ,其通道 0以方式 3工作,每55ms 向中断控制器 8259A IRQ0端发一次中断请求。本设计题要求借用原有电路,重新设置 8253的计数器 0每10ms 产生一次中断, 100次中断后加 1秒,然后调整时、分、秒并示在屏幕上。(2) 实时时钟的功能按下任意键开始显示时间值, 并且每秒更新一次, 运行中按下空格键则停止运行并返回 DOS 。程序应保护原系统的 08H 中断向量以便退出时恢复原系统设置。(3) 题目要求请采用中断服务程序在屏幕右上角实现时钟时、分、秒显示支持键盘输入字符功能,可通过对时、分、秒的数字修改,实现实时时钟的时间校准。时钟显示方式应美观注:中断服务程序中不要使用DOS 功能调用 , 因为 DOS 功能调用不可重入名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -