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個位元組。在作業系統中只要是通過作業系統申請的空間就都是安全的,作業系統負責給程式分配安全的空間。在作業系統允許的情況下,程式可以取得任意數量的空間。按程式獲取所需空間的時間,獲取空間方法可分為兩種 在引導程式的...