生活随笔
收集整理的這篇文章主要介紹了
汇编中断知识之INT 1CH
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近在編寫(xiě)匯編程序遇到一個(gè)使用INT 1CH的程序,INT 1CH是實(shí)現(xiàn)定時(shí)或周期性的工作,難道INT 1CH就像INT 21H一樣直接調(diào)用它里面的功能號(hào)嗎?下面就通過(guò)一個(gè)程序簡(jiǎn)單的看看傳說(shuō)中的INT 1CH的.這個(gè)程序是實(shí)現(xiàn)屏幕背景顏色1秒鐘變換一次的實(shí)驗(yàn).
1.INT 1CH中斷
INT 1CH其實(shí)是調(diào)用INT 21H中的25號(hào)功能:置中斷向量AL=中斷號(hào),DS:DX=入口,同時(shí)INT21H中的35號(hào)功能:取中斷向量,AL=中斷號(hào),ES:BX=中斷程序入口.
2.該程序中的INT1CH
該程序中是調(diào)用子程序設(shè)置背景顏色,子程序中使用STI打開(kāi)中斷,CLI關(guān)中斷,IRET中斷返回.
INT 1CH系統(tǒng)中斷是每秒發(fā)生18.2次,即調(diào)用每秒它18次,所以Count初值賦值為1,先DEC減1,為0執(zhí)行一次背景色輸出,即運(yùn)行程序就輸出背景色.然后Count賦值為18,Count減1,當(dāng)它為0時(shí)變換背景顏色.(1秒)然后繼續(xù)Count賦值為18,繼續(xù)執(zhí)行中斷周期調(diào)用.
3.設(shè)置背景顏色
調(diào)用BIOS INT 10H的06號(hào)功能設(shè)置屏幕初始化或上卷:屬性如下,故背景只有RGB(取0或1)共組合成8種顏色.故Color初值為1FH,每次加8剛好變換成另一種顏色.
詳細(xì)的代碼及注釋如下:
DATAS SEGMENT Color DB 1FH ;定義的背景顏色表Count DW 1 ;Count計(jì)數(shù)1秒是變換背景
DATAS ENDSSTACKS SEGMENT STACK 'S';堆棧段代碼DW 80 DUP(0)
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FARMOV AX,DATASMOV DS,AX ;將數(shù)據(jù)段DATAS存入DS中
;------------------------------------------------------------------ MOV DX,SEG INT_1CH ;SEG標(biāo)號(hào)段地址MOV DS,DXLEA DX,INT_1CH ;調(diào)用子函數(shù)INT_1CH 取偏移地址 ;AH=25H功能:置中斷向量AL=中斷號(hào) DS:DX=入口MOV AH,25H MOV AL,1CH ;設(shè)置新的1CH中斷向量INT 21H;退出程序并返回操作系統(tǒng)MOV AH,4CHINT 21H
MAIN ENDP
;------------------------------------------------------------------
;子程序:顯示背景 FAR(主程序和子程序不在同一代碼段)
INT_1CH PROC FARPUSH AX ;保存寄存器PUSH BXPUSH CXPUSH DXPUSH DSSTI ;開(kāi)中斷MOV AX,DATASMOV DS,AX ;將數(shù)據(jù)段DATAS存入DS中;------------------------------------------;- INT 1CH系統(tǒng)中斷每秒發(fā)生18.2次 -;- Count計(jì)數(shù)至18為1秒變換背景顏色 -;- Count初值為1,先減1執(zhí)行一次顯示藍(lán)色背景 -;- 執(zhí)行時(shí)賦值為18,每次減1,減至0更換背景色 -;------------------------------------------DEC Count ;Count初值為1,先減1JNZ Exit ;JNZ(結(jié)果不為0跳轉(zhuǎn)) 否則Count=0執(zhí)行背景色輸出
;------------------------------------------------------------------ ;調(diào)用BIOS10H的06號(hào)中斷設(shè)置屏幕初始化或上卷;--------------------------------;- AL=上卷行數(shù) AL=0全屏幕為空白 -;- BH=卷入行屬性 -;- CH=左上角行號(hào) CL=左上角列號(hào) -;- DH=右下角行號(hào) DL=右下角列號(hào) -;-------------------------------- ;----------------------------------;- BL的顏色屬性為IRGB|IRGB -;- 高4位是背景色 低4位是前景色 -;- I=高亮 R=紅 G=綠 B=藍(lán) 共8色 -;----------------------------------MOV AH,6 ;清全屏MOV AL,0MOV BH,Color ;起始設(shè)置為藍(lán)底白字 1FH=0001(藍(lán)色)|1111B 詳解見(jiàn)上表MOV CX,0MOV DX,184FH ;(全屏)表示18行4F列INT 10HADD Color,8 ;0001|1111+8=27H=0010(綠色)|0111 同理加8 MOV Count,18 ;計(jì)數(shù)至18(1秒)重新開(kāi)始,賦值為18減至0執(zhí)行變色
;------------------------------------------------------------------
Exit: CLI ;關(guān)中斷POP DSPOP DXPOP CXPOP BXPOP AX ;恢復(fù)寄存器 IRET ;中斷返回
INT_1CH ENDP
;------------------------------------------------------------------
CODES ENDS
END MAIN
它的運(yùn)行結(jié)果是8中背景顏色不斷的變換:
????????
這僅僅是作者自己的一些想法和程序,有錯(cuò)誤或不足的地方希望大家原諒.同時(shí)希望能讓大家更加清楚的認(rèn)識(shí)到匯編中的:INT ICH、周期性中斷變換、背景顏色的設(shè)置等知識(shí).同時(shí)該代碼參考了自己老師的課件知識(shí).
BY:Eastmount原創(chuàng)于2013-5-8
總結(jié)
以上是生活随笔為你收集整理的汇编中断知识之INT 1CH的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。