CH364-ISL測(cè)試卡在采用匯編編寫中斷時(shí)INT 1CH,如: MOV WORD PTR ES:[1CH*4],OFFSET MAIN_ENTRY2 MOV WORD PTR ES:[1CH*4+2], SEG MAIN_ENTRY2 結(jié)果卻不執(zhí)行 MAIN_ENTRY2 標(biāo)號(hào)相應(yīng)的程序,而是系統(tǒng)直接死機(jī)。 請(qǐng)問 1、如何處理?是否能提供詳細(xì)的代碼及說明。 2、在MAIN_ENTRY2 最后采用IRET是否能退出相應(yīng)中斷? 謝謝。
把整個(gè)代碼結(jié)構(gòu)說清楚,你的代碼是以什么方式啟動(dòng),如果是以擴(kuò)展ROM方式啟動(dòng),要確定,定時(shí)中斷INT 1CH這個(gè)時(shí)候是否已經(jīng)初始化好了,一般INT 8這個(gè)時(shí)候是初始化好的,在DOS系統(tǒng)里我記的是INT8里面調(diào)用了INT 1C.還有MAIN_ENTRY2里面執(zhí)行完了,最好JMP 到原INT1CH處,要注意代碼有沒有放在壓縮的段里。
該代碼是擴(kuò)展ROM方式啟動(dòng)的,通過在MAIN_ENTRY2前增加: ORG 0100H MAIN_ENTRY2: NOP pusha ;略每16次執(zhí)行一下兩條代碼一次 MOV BX,OFFSET STR_ROM_INIT3 CALL _PUT_TEXT popa IRET
后,相應(yīng)中斷入口修改為 MOV WORD PTR ES:[1CH*4],0100H MOV AX,CS MOV WORD PTR ES:[1CH*4+2],AX 系統(tǒng)可進(jìn)入中斷并打印提示信息,但無法退出INT 1C 中斷執(zhí)行后續(xù)的代碼。如果保存1CH的內(nèi)容為INT1C_IP_OLD,并通過將IRET 替換為 JMP INT1C_IP_OLD 也無法退出, 請(qǐng)問該中斷如何退出。謝謝
INT1C_IP_OLD 應(yīng)該定義成4字節(jié)變量
;ORG 0100H這個(gè)去掉,放在SYSTEM段,你為什么要用ORG 0100H呢? MAIN_ENTRY2: NOP pushf pusha push ds push cs pop ds sti ;略每16次執(zhí)行一下兩條代碼一次 MOV BX,OFFSET STR_ROM_INIT3 CALL _PUT_TEXT cli pop ds popa popf IRET ;或JMP INT1C_IP_OLD
相應(yīng)中斷入口修改為 MOV AX,OFFSET MAIN_ENTRY2 MOV WORD PTR ES:[1CH*4],AX MOV AX,CS MOV WORD PTR ES:[1CH*4+2],AX
1、采用ORG 0100H或不采用均可進(jìn)入1CH中斷; 2、但無論采用IRET ;或JMP INT1C_IP_OLD,中斷均無法退出繼續(xù)執(zhí)行后續(xù)代碼(啟動(dòng)WINDOW,直接黑屏,鍵盤Ctrl+ALT+Del也無法重啟),不知是否漏了其它部分嗎?
在進(jìn)入MAIN_ENTRY之后最好把中斷1C取消,啟動(dòng)操作系統(tǒng)時(shí)很可能會(huì)破壞你的擴(kuò)展ROM代碼。
該程序的目的主要是1C中斷在WINODOWS運(yùn)行時(shí)必須保持,是不能取消的,請(qǐng)問如何處理才能解決。
你這樣做是比較復(fù)雜的,可能行不通!WIN 2K以上是不會(huì)調(diào)用你的INT 1C的,WIN 2K以上系統(tǒng)運(yùn)行時(shí)是不依賴與BIOS。
給你發(fā)個(gè)網(wǎng)上的一個(gè)相似的例子,沒有測(cè)試過! UploadImages/201063014292180.rar