assume cs:codesg
codesg segment
start:
mov ax,cs
mov ds,ax ;程式段位址
mov si,offset div_s
mov ax,0
mov es,ax
mov di,0200h ;保持中斷處理程式的記憶體位址
mov cx,offset div_ok - offset div_s ;得到中斷處理程式的長度
cld ;正向傳送
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[0*4],0200h
mov word ptr es:[0*4+2],0000h ;設定中斷向量表
mov ax,4c00h
int 21h
div_s: jmp short div_s1
db "divide error!"
div_s1: mov ax,0b800h
mov es,ax ;視訊記憶體緩衝區
mov di,12*160+38*2 ;視訊記憶體緩衝區大約中間位置
;25/2=12(取整行數)*160(每行的位元組數)+80/2=40(這裡取用38列)*2(每列字元所佔2位,低位存放ascii碼.高位存放屬性)
mov ax,cs
mov ds,ax ;當中斷處理程式載入時,cs必然等於該處理程式的段位址0000:0200,
;而字串"divide error!"的段位址也是它
mov si,202h ;jmp short div_s1 佔位2個機器碼,所以偏移位址是0200+2
mov cx,12 ;字串"divide error!"的長度
div_s2: mov al,ds:[si] ;讀取字串
mov es:[di],al ;顯示字串
inc si
add di,2 ;乙個字元佔兩個位元組,低位存放ascii碼.高位存放屬性
loop div_s2
mov ax,4c00h
int 21h
div_ok: nop
codesg ends
end start
王爽《組合語言》實驗12 編寫0號中斷的處理程式
assume cs code code segment start 將do0程式 複製至0 200處 mov ax,cs mov ds,ax mov si,offset do0 mov ax,0 mov es,ax mov di,200h mov cx,offset do0end offset do...
實驗12 編寫0號中斷的處理程式
編寫0號中斷處理程式,使得在除法溢位時,在螢幕中間顯示字串 divide error 然後返回dos。前面講到,記憶體0000 0000 0000 03ff,大小為1kb的空間是系統存放中斷處理程式入口位址的中斷向量表。8086支援256個中斷,但是,實際上,系統要處理的中斷事件遠沒有達到256個,...
王爽彙編 實驗13編寫int 7cH中斷例程 1
assume cs codesg codesg segment start mov ax,cs mov ds,ax 程式段位址 mov si,offset div s mov ax,0 mov es,ax mov di,0200h 儲存中斷處理程式的記憶體位址 mov cx,offset div o...