《組合語言》學習(十二)內中斷

2021-07-24 10:48:11 字數 1682 閱讀 5487

《組合語言》第12章主要介紹8086cpu的內中斷的機制,包括:4種型別的內中斷、中斷型別碼(byte-256)、中斷向量表(ivt)、中斷過程、中斷處理函式的基本模型和iret中斷返回指令。文中以「除0」中斷為例,演示了中斷的處理過程和如何編寫及安裝中斷處理函式。本文將以一張思維導圖總結內中斷的知識點,並給出文中的所有習題答案。

一、知識圖譜

三個經典問題

1,如何讓乙個記憶體單元成為棧頂?

將它的位址放入ss、sp中

2,如何讓乙個記憶體單元中的資訊被cpu當作指令來執行?

將它的位址放入cs、ip中

3,如何讓一段程式成為n號中斷處理程式?

將它的入口位址放入中斷向量表的n號表項中

二、習題答案

檢測點12.1

(1)用dubug檢視記憶體,情況如下:

0000:0000    68 10 a7 00 8b 01 70 00-16 00 9d 03 8b 01 70 00

實驗12

編寫0號中斷的處理程式,使得在除法溢位發生時,在螢幕中間顯示字串「divide error!」,然後返回dos

1,測試方法:

1)進入debug模式

2)使用「a」命令輸入如下**(assembly)

mov ax,1000

mov bh,1

div bh

3)使用「u」命令檢視是否輸入正確

4)使用「t」命令單步執行(step through)

2,源**

assume cs:code

code segment

start:mov ax,0000h

mov es,ax

mov di,0200h

mov ax,cs

mov ds,ax

mov si,offset do0

mov cx,offset do0end - offset do0

cldrep movsb

mov ax,0

mov es,ax

mov word ptr es:[0*4],200h

mov word ptr es:[0*4+2],0

mov ax,4c00h

int 21h

do0:jmp short do0start

db "overflow!"

do0start:mov ax,cs

mov ds,ax

mov si,202h

mov ax,0b800h

mov es,ax

mov di,12*160+36*2

mov cx,9

s:mov al,[si]

mov ah,0cah

mov es:[di],ax

inc si

add di,2

loop s

mov ax,4c00h

int 21h

do0end:nop

code ends

end start

注意,可以直接執行該程式,然後通過debug測試即可。

待顯示的字串需要放在do0**段內定義。

組合語言學習筆記(十二)內中斷

中斷 是cpu處理外部突發事件的乙個重要技術。外部中斷 可以遮蔽的中斷 鍵盤中斷 印表機中斷等 內部中斷 因硬體的出錯或運算出錯等 根據中斷型別碼,定位中斷處理程式,需要知道它的段位址和偏移位址 可以通過中斷向量表找到中斷處理程式的入口 中斷向量表指定存放在記憶體位址0處 256 4 1024個位元...

組合語言 內中斷

內中斷 在執行完當前正在執行的指令之後,檢測到從cpu內部發過來的或內部產生的一種特殊資訊,並且可以立即對所接收到的資訊進行處理 中斷資訊可以 於cpu外部和內部 內中斷的產生 1除法錯誤 0 2單步執行 1 3執行into指令 4 into 溢位中斷 4執行int指令,該指令格式 int n 指令...

組合語言 內中斷

中斷的意思是指cpu不在接著 剛執行的指令 向下執行,而是轉去處理這個特殊資訊,而這個特殊的資訊我們可以稱其為中斷資訊。中斷資訊是要求cpu馬上進行某種處理,並向所要進行的該種處理提供了必備的引數的通知資訊。對於8086cpu,當cpu內部有下面的情況發生的時候,將產生響應的中斷資訊。而中斷資訊中必...