王爽彙編 實驗12編寫0號中斷處理程式

2021-05-23 01:19:59 字數 1385 閱讀 2013

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...