〔解答〕
again:
next1:
next11:
next2:
next21:
mov dx,8000h in al,dx cmp al,0feh jz next1 cmp al,0fdh jz next2 jmp again mov cx,8 mov al,1 out dx,al call delay shl al,1 loop next11 jmp again mov cx,8 mov al,80h out dx,al call delay shr al,1 loop next21 jmp again
; D7~D0=11111110B ? ; 单独按下K0,转移到next1 ; D7~D0=11111101B ? ; 单独按下K1,转移到next2 ; 其它情况不点亮 ; 从K0开始 ; 某个LED电亮 ; 延时200ms ; rol al,1
; 从K7开始 ; 某个LED电亮 ; 延时200ms ; ror al,1
〔习题7.8〕
现有一个输入设备,其数据端口地址为FFE0H,状态端口地址为FFE2H。当状态标志D0=1时,表明一个字节的输入数据就绪。请编写利用查询方式进行数据传送的程序段,要求从该设备读取100个字节保存到BUFFER缓冲区。 〔解答〕
again: status:
mov bx, offset buffer mov cx,100 mov dx,0ffe2h in al,dx ; 查询一次 test al,01h jz status
mov dx,0ffe0h in al,dx ; 输入一个字节 mov [bx],al inc bx
loop again ; 循环,输入100个字节
〔习题7.9〕
某个字符输出设备,其数据端口和状态端口的地址均为80H。在读取状态时,当标志
位D7=0时,表明该设备闲,可以接收一个字符。请编写利用查询方式进行数据传送的程序段,要求将存放于缓冲区ADDR处的一串字符(以0为结束标志)输出给该设备。 〔解答〕
again:
status:
mov bx,offset addr cmp byte ptr [bx],0 jz done in al,80h ; 查询
- -49
done:
test al,80h jnz status mov al,[bx] out 80h,al inc bx jmp again
; 输出一个字节 ; 循环
〔习题7.10〕
以可屏蔽中断为例,说明一次完整的中断过程主要包括哪些环节? 〔解答〕
中断请求:外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:在满足一定条件时,处理器进入中断响应总线周期。 关中断:处理器在响应中断后会自动关闭中断。
断点保护:处理器在响应中断后将自动保护断点地址。
中断源识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。
现场保护:对处理器执行程序有影响的工作环境(主要是寄存器)进行保护。 中断服务:处理器执行相应的中断服务程序,进行数据传送等处理工作。 恢复现场:完成中断服务后,恢复处理器原来的工作环境。 开中断:处理器允许新的可屏蔽中断。
中断返回:处理器执行中断返回指令,程序返回断点继续执行原来的程序。 〔习题7.11〕
什么是中断源?为什么要安排中断优先级?什么是中断嵌套?什么情况下程序会发生中断嵌套? 〔解答〕
计算机系统中,凡是能引起中断的事件或原因,被称为中断源。
处理器随时可能会收到多个中断源提出的中断请求,因此,为每个中断源分配一级中断优先权,根据它们的高低顺序决定响应的先后。
一个中断处理过程中又有一个中断请求、并被响应处理,被称为中断嵌套。 必须在中断服务程序中打开中断,程序才会发生中断嵌套。 〔习题7.12〕
明确如下中断有关的概念:中断源、中断请求、中断响应、关中断、开中断、中断返回、中断识别、中断优先权、中断嵌套、中断处理、中断服务。 〔解答〕
中断源:能引起中断的事件或原因。
中断请求:是外设通过硬件信号的形式、向处理器引脚发送有效请求信号。 中断响应:中断响应是在满足一定条件时,处理器进入中断响应总线周期。 关中断:禁止处理器响应可屏蔽中断。 开中断:允许处理器响应可屏蔽中断。
中断返回:处理器执行中断返回指令,将断点地址从堆栈中弹出,程序返回断点继续执行原来的程序。
中断识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。
- -50