編寫包含多個功能子程式的中斷例程

2021-08-20 06:52:38 字數 3131 閱讀 5687

mov es,ax ;在0:204存放程式

mov si,offset int7chstart;ds:[si] ;中斷例程首位址

mov di,204h;es:[di]要放中斷例程

mov cx,offset int7chend-offset int7chstart;程式長度

cld;程序程式的拷貝

rep movsb

push es:[7ch*4]

pop es:[200h]

push es:[7ch*4+2]

pop es:[202h];儲存原來的中斷向量表int 7ch的處理程式的位址

mov word ptr es:[7ch*4],204h

mov word ptr es:[7ch*4+2],0

;改變中斷處理程式的位址

mov ah,2

; 設定功能為2,設定背景色

mov al,4

; 設定顏色

int 7ch

push es:[200h]

pop es:[7ch*4]

push es:[202h]

pop es:[7ch*4+2];恢復原來中斷向量的表當中的int7ch 中斷例程的入口位址

mov ax,4c00h

int 21h

org 204h;在組合語言源程式的開始通常都用一條org偽指令來實現規定程式的起始位址,如果這裡不設定執行的時候table的偏移位址就找不對了

int7chstart:

jmp short install

table dw sub1,sub2,sub3,sub4

install:

push bx

cmp ah,3

;判斷功能號是不是大於3

ja installret

mov bl,ah

mov bh,0

add bx,bx ;bx+bx

call word ptr table[bx];根據功能號去尋找尋找程式的偏移

installret:

pop bx

iret

sub1:;清屏對應的功能號為0

push bx

push cx

push es

mov bx,0b800h

mov es,bx

mov bx,0

mov cx,2000

sub1s:

mov byte ptr es:[bx],' '

add bx,2

loop sub1s

pop es

pop cx

pop bx

retsub2:;設定前景子程式對應的功能號為1

push bx

push cx

push es

mov bx,0b800h

mov es,bx

mov bx,1

mov cx,2000

sub2s:

and byte ptr es:[bx],11111000b;因為要設定的是第0,1,2,3位所以與上的相應位為0

or es:[bx],al;al傳送的是顏色值

add bx,2

loop sub2s

pop es

pop cx

pop bx

retsub3:;設定背景色,對應的功能號為2

push bx

push cx

push es

mov cl,4

shl al,cl;將al左移4位,因為要設定的是第4、5、6位,al最大取7,所以要進行移動

mov bx,0b800h

mov es,bx

mov bx,1

mov cx,2000

sub3s:

and byte ptr es:[bx],10001111b;這裡就是要去改變4、5、6位做準備

or es:[bx],al;進行或運算設定

add bx,2

loop sub3s

pop es

pop cx

pop bx

retsub4:

push cx

push si

push di

push es

push ds

mov si,0b800h

mov es,si

mov ds,si

mov si,160

;ds:[si]剛開始指向的是第一行

mov di,0

;es:[di]剛開始指向第0行

cldmov cx,24

;共複製24行

sub4s:

push cx

mov cx,160

;cx是為長度

rep movsb;每次操作si和di遞增,不需要再設定行號和列數

pop cx

loop sub4s

mov cx,80

mov si,0

sub4s1:;最後一行進行清空

mov byte ptr [160*24+si],' '

add si,2

loop sub4s1

pop ds

pop es

pop di

pop si

pop cx

retint7chend:

nopcode ends

end start

執行效果如下所示,背景色為紅色

多個功能子程式的中斷例程測試程式

王爽組合語言 實驗16 編寫包含多個功能子程式的中斷例程 測試程式 一 實驗要求 1 完全測試實驗16中斷例程17ch的所有功能,包含清屏 改變前景色 改變背景色 向上滾動一行 2 用乙個選單來提示使用者輸入 3 通過判斷使用者輸入的命令來呼叫響應的子過程 二 分析 1 輸出選單 定義乙個資料段,存...

子程式與中斷程式的異同 PLC程式設計基礎中斷方式

plc中均內建有中斷功能及脈衝捕捉功能。用於完成一些特定的功能應用。如,訊號捕捉 編碼器訊號中斷 脈衝測量中斷等。程式中斷時不受順控程式 主程式 的運算週期的影響,將中斷源訊號作為觸發訊號,立即執行中斷程式 中斷子程式 的功能。plc的中斷過程如下圖所示 plc程式中斷過程示意圖 現目前市面上的pl...

包含多個段的程式

在前一章我們提到0 200 0 2ff位址空間是相對安全的,但是這段空間的容量只有256個位元組。在作業系統中只要是通過作業系統申請的空間就都是安全的,作業系統負責給程式分配安全的空間。在作業系統允許的情況下,程式可以取得任意數量的空間。按程式獲取所需空間的時間,獲取空間方法可分為兩種 在引導程式的...