基本信息
函式名: intr
功 能: 改變軟中斷接口
用 法: void intr(int intr_num, struct REGPACK *preg);
程式例:
#include
#include
#include
#include
#define CF 1 /* Carry flag */
int main(void)
{
char directory[80];
struct REGPACK reg;
printf("Enter directory to change to: ");
gets(directory);
reg.r_ax = 0x3B << 8; /* shift 3Bh into AH */
reg.r_dx = FP_OFF(directory);
reg.r_ds = FP_SEG(directory);
intr(0x21, ®);
if (reg.r_flags & CF)
printf("Directory change failed\n");
getcwd(directory, 80);
printf("The current directory is: %s\n", directory);
return 0;
}
INTR
INTR接受可禁止中斷請求。輸入,電平觸發,高電平有效。在8086中,標誌暫存器EFLAGS中的IF標誌決定是否禁止可禁止中斷請求。
外部硬體在通過INTR發出中斷請求信號的同時,還要向處理器給出一個8位的中斷向量。處理器在 回響可禁止中斷請求時,讀取這個由外部硬體給出的中斷向量號。處理器對這箇中斷向量號並沒有 規定。但在具體的微機系統中,系統必須通過軟體和硬體的配合設定,使得給出的這箇中斷向量號 不僅與外部中斷源對應,而且要避免中斷向量號使用衝突情況的出現。可程式中斷控制器晶片8259A可 配合80386工作,能夠根據設定向處理器提供上述中斷向量號,還能處理中斷請求的優先權。每 個8259A晶片可以支持8路中斷請求信號,如果使用9個8259A晶片(一個主片,8個從片),就可使80386在 單個引腳INTR上接受多達64箇中斷源的中斷請求信號。
處理器不禁止來自NMI的中斷請求。處理器在回響NMI中斷時,不從外部硬體接收中斷向量號。與8086/8088一樣,在80386中,不可禁止中斷所對應的中斷向量號固定為2。為了不可禁止中斷的 嵌套,每當接受一個NMI中斷,處理器就在內部禁止了再次回響NMI,這一禁止過程直到執行中斷返回指令IRET後才結束。所以,NMI處理程式應以IRET指令結束。