12.《匯編語言》-王爽第三版學(xué)習(xí)筆記 內(nèi)中斷

1. 中斷

CPU 不再接著(剛執(zhí)行完的指令)向下執(zhí)行,而是轉(zhuǎn)去處理這個特殊信息。

2. 8086CPU 產(chǎn)生中斷的4種情況

(1)出發(fā)錯誤 比如 div指令產(chǎn)生的除法溢出 中斷類型碼:0
(2)單步執(zhí)行 中斷類型碼:1
(3)執(zhí)行 into 指令 中斷類型碼:4
(4)執(zhí)行 int 指令 該指令的格式位 int n ,指令中的n為立即數(shù),是提供給 CPU的 中斷類型碼

3. 中斷向量表

  • CPU 通過中斷向量表找到中斷程序的入口地址。
  • 8086CPU 中 中斷向量表就必須存放在 0000:0000 ~ 0000:03FF 中。
  • 中斷向量表中 一個表項存放一個中斷向量,包括段地址 和 偏移地址。占兩個字,高地址字存放段地址 低地址字存放偏移地址。

4. 8086CPU 收到中斷信息后,引發(fā)的中斷過程

(1)從中斷信息中,取得中斷類型碼 取得中斷類型碼 N
(2)標(biāo)志寄存器的值入棧(因為在中斷過程中要改變標(biāo)志寄存器的值,所以先將其值保存在棧中) pushf
(3)設(shè)置標(biāo)志寄存器的第8為 TF 和 第9為 IF 的值為 0 TF=0 IF=0
(4)CS 的內(nèi)容入棧 push cs
(5)IP 的內(nèi)容入棧 push ip
(6)從內(nèi)存地址為 中斷類型碼 4 和 中斷類型碼4+2 的兩個字單元中讀取中斷處理程序的入口地址設(shè)置 IP 和 CS。 (ip)=(N4), (cs)=(N4+2)**

4. 中斷處理程序 和 iret 指令

  • 中斷處理的常規(guī)步驟
    (1)保存用到的寄存器
    (2)處理中斷
    (3)恢復(fù)用到的寄存器
    (4)用 iret 指令返回

  • iret指令執(zhí)行的操作是:
    pop IP
    pop CS
    popf
    在中斷過程中 寄存器入棧的順序是 標(biāo)志寄存器 cs ip
    iret的出棧順序是 ip cs 標(biāo)志寄存器 正好一一對應(yīng)。

5. 編寫 0 號中斷處理程序,在除法溢出發(fā)生時,在屏幕中間顯式字符串 “divide error??!”,然后返回到 dos

assume cs:codesg

codesg segment

    start: ;do0 安裝程序
           mov ax,cs     ;設(shè)置 ds:si 指向源地址
           mov ds,ax
           mov si,offset do0

           mov ax,0     ;設(shè)置 es:di 指向目的地址   
           mov es,ax
           mov di,200h

           mov cx,offset do0end - offset do0   ;設(shè)置 cx 傳輸長度

           cld   ;設(shè)置 傳輸方向為正
           rep movsb

           ;設(shè)置中斷向量表
           mov ax,0
           mov es,ax
           mov word ptr es:[0*4],200h
           mov word ptr es:[0*4+2],0

           mov ax,1000h
           mov bh,1
           div bh

           mov ax,4c00h
           int 21h

      do0: jmp short do0start
           db "divide error!!"

 do0start: ;顯示字符串"divide error!!"
           mov ax,cs
           mov ds,ax
           mov si,202h    ;設(shè)置 ds:si 指向字符串

           mov ax,0b800h
           mov es,ax
           mov di,12*160+36*2 ;設(shè)置 es:di 指向顯存空間的中間位置

           mov cx,14
        s: mov al,[si]
           mov es:[di],al
           mov byte ptr es:[di+1],2
           inc si
           add di,2
           loop s

           mov ax,4c00h
           int 21h

   do0end: nop

codesg ends

end start
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容