求救:下面程序为何进不了Ring中断子程序
DATA SEGMENTCOUNTDW 1
MSGDB 'The bell is ring!',0DH,0AH, '$'
BEEPDB 07H,'$'
DATA ENDS
CODE SEGMENT
MAINPROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AL,1CH
MOV AH,35H
INT 21H
PUSH ES
PUSH BX
PUSH DS
MOV DX,OFFSET RING ;取中断向量
MOV AX,SEG RING
MOV DS, AX
MOV AL,1CH
MOV AH,25H
INT 21H
POP DS
IN AL,21H
AND AL,11111110B
OUT 21H,AL
STI
MOV DI,2
DELAY:MOV SI,3
DELAY1:DEC DI ;产生中断位置
JNZ DELAY1
DEC DI
JNZ DELAY1
POP DX
POP DS
MOV AL,1CH
MOV AH,25H
INT 21H
;DEBUG T时无法进入RING中断子程序,下一条为NOP
RET
MAINENDP
RINGPROC NEAR
PUSH DS
PUSH AX
PUSH CX
PUSH DX
MOV AX,@DATA
MOV DS,AX
STI
DEC COUNT
JNZ EXIT
MOV DX ,OFFSET MSG ;显示
MOV AH,09H
INT 21H
MOV DX,10
IN AL,61H
AND AL,0FCH
SOUND:
XOR AL,02
OUT 61H,AL
MOV CX,1400H
WAIT1:
LOOP WAIT1
DEC DX
JNE SOUND
MOV COUNT ,182;18.2 1秒
EXIT: ;断续执行中断
CLI
POP DX
POP CX
POP AX
POP DS
IRET
RINGENDP
END START 建议LZ先把环境描述清楚. 在什么CPU? X86? 什么OS? LINUX? 如果是LINUX X86-32. 那么你的程序应该要在内核态才可以用INT 21 之类的指令. 另外,还有一点,贴代码的时候请用
....代码
把代码包起来
或者用所见即所得模式
所见即所得模式好象我也没用过:em17:
[ 本帖最后由 cjaizss 于 2009-12-18 09:24 编辑 ]
X86
X86 的汇编语言“标准”程序,正常在WINDOWS 或 DOS 或 LINUX下需可调试。我是用WINDOWS 或 DOS 下用masm用LINK后使用 DEBUG工具进行调试的。
DEBUG工具应该为汇编语言自带的调试工具。
回复 #4 khan99 的帖子
不要使用 debug,debug 状态下不会产生 时钟中断的。编译成 exe 或 com 文件执行。 我用是先用Link 生成EXE或COM文件之后(如Ring.exe). 在DOS 下用 Debug Ring.exe 在们-下 用T跟踪至 INT 21H,正确进入中断RING程序继续使用 T,但无法进入Ring中断程序,而是产生NOP的指令。
页:
[1]