單步中斷即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