瘋狂暑期學習 彙編入門學習筆記 (十一)—— 內中段
參考: 《組合語言》 王爽 第12章
中斷是指cpu在執行完當前指令後收到某種資訊(中斷資訊),就不在接向下執行。而去對接收到的資訊進行處理。中斷資訊能夠來自cpu內部和外部,分內中斷,外中斷。
以下4中情況會產生內中斷:(1)除法錯誤。如:div除法溢位
(2)單步執行。如debug中的單步除錯
(3)執行into指令。
(4)執行int指令
中斷資訊中包括8位的中斷型別嗎,用來表示要執行的中斷程式。可是,乙個程式入口要cs和ip,8位不夠。這樣。系統中就有乙個中斷向量表儲存中斷程式的cs和ip,8位中斷型別嗎表示是中斷向量表中的第幾個。而且中斷向量表存放在 0000:0000到0000:03ff的1024個單元中。
比如:div除法溢位 的中斷型別是0,產生div除法溢位後。cpu知道中斷型別位0,cpu先儲存標誌位。cs、ip,設定tf=0、if=0,然後去到中斷向量表取出相應中斷處理程式的cs和ip(ip=(0*4),cs=(0*4+2)) 然後執行中斷程式。
即:(1)取得中斷型別嗎n
(2)pushf
(3)tf=0,if=0
(4)push cs
(5)push ip
(6)(ip)=(n*4),(cs)=(n*4+2)
iret指令相當於:pop ip
pop cs
pop f
一般中斷處理程式的步驟:(1)儲存到暫存器
(2)處理中斷
(3)恢復到暫存器
(4)iret
0中斷是div除法溢位比如以下程式debug中就會產生overflow錯誤,在螢幕上顯示「divide overflow」
assume cs:code
code segment
start:
mov ax,1000h
mov bl,1
div bl
code ends
end start
以下就改動0中斷的中斷程式。讓產生div除法溢位時,在螢幕上顯示「welcome to masm!」
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end - offset do0 ;計算寫入大小
cldrep movsb ;把do0~do0end的**寫到0:200開始的記憶體空間中去
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h ;改變0中斷的中斷向量表,是0中斷指向我們要的中斷處理程式的位置
mov word ptr es:[0*4+2],0
mov ax,4c00h
int 21h
do0:
jmp short do0start
db 'welcome to masm!' ;儲存要顯示的資訊
do0start:
mov ax,cs
mov ds,ax
mov si,202h ;設定要顯示資訊在**中的位置
mov ax,0b800h
mov es,ax
mov di,12*160+36*2 ;顯示的位置
mov cx,16
s: mov al,[si]
mov es:[di],al
inc si
add di,1
mov al,02h ;顯示的顏色等資訊
mov es:[di],al
add di,1
loop s
mov ax,4c00h
int 21h
do0end:
nopcode ends
end start
先執行上面**生成的程式,把中斷程式複製到安全的記憶體中。改變中斷向量表。然後debug會發生div除法溢位的程式。就會看到螢幕中間顯示綠色 的「welcome to masm!」。
cpu每執行完一條指令後。假設檢測到標誌暫存器的tf為1,則會產生單步中斷,引發中斷過程。單步中斷的中斷型別嗎位1。
過程:(1)取得中斷型別嗎1。
(2)標誌暫存器入棧,tf,if設定為0
(3)cs,ip入棧
(4)(ip)=(1*4),(cs)=(1*4+2)
普通情況,假設cpu檢測到中斷資訊。就會響應中斷。但有特殊情況。當在執行完向ss暫存器傳送的指令後,假設發現中斷,cpu不會響應。由於假設ss改變,sp沒有改變。ss:sp就不是指向正確的棧頂了。
所以改變ss於改變sp的命令要寫在一起
如:
mov ax,1000h
mov ss,ax
mov sp,0
Android學習筆記(十一)
最後在ondestroy 方法中分別呼叫stop 和release 方法,將與mediaplayer相關的資源釋放掉。方法名功能描述 setdatasource prepare start pause reset 將mediaplayer物件重置到剛剛建立的狀態 seekto stop releas...
opencv python學習筆記十一
14 幾何變換 移動,旋轉 仿射變換 常用函式 cv2.getperspectivetransform 函式原型 defgetperspectivetransform src,dst cv2.warpaffine 函式原型,接收 2 3的矩陣 defwarpaffine src,輸入源影象 m,透視...
python cookbook學習筆記十一
csv檔案讀取 csv檔案格式如下 分別有2行三列。訪問 如下 f open r e py prj test.csv rb f csv csv.reader f forf inf csv printf 在這裡f是乙個元組,為了訪問某個字段,需要用索引來訪問對應的值,如f 0 訪問的是first,f ...