第8?章?中斷習題
8.1 80x86?的中斷系統(tǒng)有哪幾種類型中斷?其優(yōu)先次序如何?
80x86?的中斷系統(tǒng)可處理256?種個中斷源。這些中斷源可分為兩大類:外部中斷(硬件
中斷)、內(nèi)部中斷(軟件中斷)。軟件中斷包括:除法中斷、單步中斷、指令中斷、溢出中斷。
硬件中斷包括:INTR?和NMI。
中斷優(yōu)先級的次序是:內(nèi)部中斷(高)_非屏蔽中斷_可屏蔽中斷_單步中斷(低)
8.3?已知中斷向量表表中地址0020H ~ 0023H?的單元中依次是40H,00H,00H,01H,
并知INT 08H?指令本身所在的地址為9000H:00A0H。若SP=0100H,SS=0300H,標志寄
存器內(nèi)容為0240H,試指出在執(zhí)行INT 08H?指令,剛進入它的中斷服務(wù)程序時,SP,SS,
IP,CS?和堆棧頂上三個字的內(nèi)容(用圖表示)。
執(zhí)行后?SS=0300H SP=00FAH
CS=0100H IP=0040H?,堆棧頂上三個字的內(nèi)容如下所示:
0 0 F AH
0 0 F CH
執(zhí)行后:0300H:00FEH
初始:?0300H:01000H
8.4?某一用戶中斷源的中斷類型號為40H,其中斷服務(wù)程序名為INTR40,請用兩種不
同的方法設(shè)置它的中斷向量。
法一:MOV AX,0000H
MOV DS,AX
MOV SI,0100H
MOV AX,OFFSET INTR40
MOV [SI],AX
MOV AX,SEG INTR40
MOV [SI+2],AX
法二:MOV BX,SEG INTR40
MOV DS,BX
MOV DX,OFFSET INTR40
MOV AH,25H
INT 21H
8.5?試編寫一段將8259A?中IRR、ISR、IMR?的內(nèi)容讀出,存入到BUFFER?開始的數(shù)
據(jù)緩沖區(qū)去的程序。8259A?的端口地址為30H、31H。
START: MOV AX,DATA?;取BUFFER?所在數(shù)據(jù)段的段基址DS
MOV DS,AX
LEA SI,BUFFER?;取BUFFER?所在數(shù)據(jù)段的偏移地址SI
MOV AL,0AH?;讀出命令字OCW,P=0,RR=1,RIS=0,選IRR
棧區(qū)
A2H
00H
00H
90H
40H
02H
XX
OUT 30H,AL
IN AL,30H?;讀出IRR?的內(nèi)容
MOV [SI],AL?;IRR?內(nèi)容送內(nèi)存
MOV AL,0BH?;讀出命令字OCW,P=0,RR=1,RIS=1,選ISR
OUT 30H,AL
IN AL,30H?;讀出ISR?的內(nèi)容
MOV [SI+1],AL?;ISR?內(nèi)容送內(nèi)存
IN AL,31H?;讀IMR?的內(nèi)容
MOV [SI+2],AL?;IMR?的內(nèi)容送內(nèi)存
8.6?某一8086CPU?系統(tǒng)中,采用一片8259A?進行中斷管理。設(shè)8259A?工作在全嵌套
方式,發(fā)送EIO?命令結(jié)束中斷,邊沿觸發(fā)方式,IR0?對應(yīng)的中斷向量號為90H,8259A?在系
統(tǒng)中的端口地址為FFDCH(A0=0)和FFDDH(A0=1),試編寫8259A?的初始化程序段。
初試化程序段為:
MOV AX,0FFDCH ;取8259A?的偶地址端口
MOV DX,AX
MOV AL,13H ;控制初始化命令字ICW1?設(shè)為13H,中斷請求為邊沿觸
;發(fā)方式,單片8259A,需寫入ICW4
OUT DX,AL ;設(shè)置ICW1
MOV AX,0FFDDH ;取8259A?的奇地址端口
MOV DX,AX
MOV AL,90H ;中斷類型碼初始化命令字ICW2?設(shè)為90H,對應(yīng)于
;IR0?~IR7?的中斷類型碼為90H~97H
OUT DX,AL ;設(shè)置ICW2
MOV AL,01H ;方式控制初始化命令字ICW4?設(shè)為01H,全嵌套方式,
;非緩沖方式,非自動中斷結(jié)束方式,工作于8086?系統(tǒng)中
OUT DX,AL ;設(shè)置ICW4
第九章?可編程接口芯片及應(yīng)用習題
9.1?試按如下要求分別編寫初始化程序,已知計數(shù)器0 ~ 2?和控制字寄存器的端口地址
依次為204H ~ 207H。
(1)使計數(shù)器1?工作在方式0,僅用8?位二進制計數(shù),計數(shù)初值為128。
(2)使計數(shù)器0?工作在方式1,按BCD?碼計數(shù),計數(shù)值為3000。
(3)使計數(shù)器2?工作在方式2,按二進制計數(shù),計數(shù)值為02F0H。
初始化程序為:
(1)?MOV DX,207H
MOV AL,50H
OUT DX,AL
MOV DX,205H
MOV AL,80H
OUT DX,AL
(2)?MOV DX,207H
MOV AL,33H
OUT DX,AL
MOV DX,204H
MOV AX,3000H ;注意,不是3000
OUT DX,AL
MOV AL,AH
OUT DX,AL
(3)?MOV DX,207H
MOV AL,0B4H
OUT DX,AL
MOV DX,206H
MOV AL,0F0H
OUT DX,AL
MOV AL,02
OUT DX,AL
9.2?硬件如題9.2?圖,利用PC?內(nèi)部8253?定時器0,并用中斷方式實現(xiàn)每隔1s?使發(fā)光
二極管亮暗交替顯示。(PC?內(nèi)部8253?輸入時鐘頻率為1.1932MHz,8253?定時器0?端口地址
為40H,控制寄存器端口地址為43H。Y0?為350H)。
定時器計數(shù)值=1.1932MHz÷5=32864=83D5H
軟件計數(shù)值:50
程序為:(硬件圖見教材P345?題9.2?圖)
MOV AL,34H
OUT 43H,AL
MOV AL,0D5H
OUT 40H,AL
MOV AL,83H
OUT 40H,AL
MOV BL,50
┇
T0?中斷服務(wù)程序為:
DEC BL
JNZ EXIT1
MOV BL,50
MOV AL,BUF
NOT AL
MOV BUF,AL
MOV DX,350H
OUT DX,AL
EXIT1:MOV AL,20H
OUT 20H,AL;(設(shè)8259A?的端口地址為20H,21H)
IRET
9.3?硬件如題9.3?圖,8253?采用方式0,BCD?碼計數(shù)方式,初始值為1000,每按一次
按鈕S,計數(shù)器值減1。試編程實現(xiàn)顯示8253?當前計數(shù)值,直至計數(shù)值為0。8253?端口地
址范圍為80H ~ 83H。
(略。在何處顯示---屏幕/LED/液晶?)
9.4?圖9.4?為一簡化的鍵盤/數(shù)碼管顯示接口電路,假設(shè)端口線a’ ~ h’及1、2?腳送“1”
電平,可使顯示點亮并能實現(xiàn)掃描,試問U1、U2?及數(shù)碼顯示器的選用。
(1)U1?為?(同相驅(qū)動器?/?反相驅(qū)動器)。
(2)U2?為?(同相驅(qū)動器?/?反相驅(qū)動器)。
(3)數(shù)碼顯示器為?(共陰?/?共陽)數(shù)碼管。
(4)若A?鍵閉合,則端口線3,4?的電平為?。
圖9.4?見教材P295
選用同相驅(qū)動器
選用反相驅(qū)動器
選用共陰數(shù)碼管
若A?鍵閉合,則端口線3,4?的電平為0,1
9.5?硬件如題?9.5?圖,試編程實現(xiàn)循環(huán)檢測S0、S1,當S0?按下,數(shù)碼管顯示0,當
S1?按下,數(shù)碼管顯示1,S0、S1?同時按下,則結(jié)束程序。8255?的端口地址范圍為80H83H。
程序為:
MOV AL,82H
OUT 83H,AL
AGAIN:?IN AL,81H
TEST AL,03
JZ EXIT
TEST AL,01
JZ NEXT
MOV AL,3FH
OUT 80H,AL
JMP AGAIN
NEXT:?TEST AL,02
JZ NEXT1
MOV AL,06
OUT 80H,AL
JMP AGAIN
NEXT1:?MOV AL,00
OUT 80H,AL
JMP AGAIN
EXIT:?MOV AH,4CH
INT 21H__