單步中斷

單步中斷即1號中斷。微處理器執行一條指令前,如果檢測到單步標誌位TF為1,則在該條指令執行後立即停止,引起1號中斷,在1號中斷的中斷服務子程式內程式設計師可以安排自己想實現的功能。
單步中斷的一個典型的套用就是在Debug中的套用了。單步執行後會顯示個暫存器的值以及下一條將要執行的指令。方便程式設計師的調試工作。
附單步中斷程式一段:
執行後的結果是顯示4個Y,從中可以了解下單步中斷的功能,其實與其他中斷無異,都可由程式設計師改變。
initint equ 1h
data segment
addr dw ?,?
data ends
sseg segment stack
dw 512 dup (?)
sseg ends
code segment
assume cs:code,ds:data,ss:sseg
start:
mov ax,data
mov ds,ax
mov ax,sseg
mov ss,ax
mov ax,0
mov es,ax
;保存1h中斷的原始地址
mov ax,es:[initint*4]
mov addr,ax
mov ax,es:[initint*4+2]
mov addr[2],ax
;加入新中斷服務程式地址
cli
lea ax,isr
mov es:[initint*4],ax
mov ax,seg isr
mov es:[initint*4+2],ax
sti
pushf
mov bp,sp
or word ptr [bp],0100h ;TF置1
popf
mov ax,0
mov bx,0
;恢復原中斷地址
exit:
cli
mov ax,addr
mov es:[initint*4],ax
mov ax,addr[2]
mov es:[initint*4+2],ax
sti
mov ah,4ch
int 21h
isr proc far
push ax
push dx
mov ah,2
mov dl,'Y'
int 21h
pop dx
pop ax
iret
isr endp
code ends
end start

相關詞條

熱門詞條

聯絡我們