《組合語言》第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內部有下面的情況發生的時候,將產生響應的中斷資訊。而中斷資訊中必...