|
主题 : : 程序哪里出了问题 [待解决] |
回复[ 2次 ]
点击[ 353次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2013-06-17 17:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54 |
中断例程如下:
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset int7cend-offset int7c
;复制中断例程
cld
rep movsb
;设置入口
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
mov ax,4c00h
int 21h
;中断例程
int7c:
push si
push cx
change:mov cl,[si]
mov ch,0
jcxz ok
and byte ptr [si],11011111b
inc si
jmp short change
ok:pop cx
pop si
iret
int7cend:nop
code ends
end start
主程序如下:
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
code ends
end start
问题如下:当我安装完中断例程后,运行主程序调用中断例程,调用的不是中断例程,请问问题出在了哪里? | | |
|
|
|
|
[第1楼]
[ 回复时间:2013-10-21 18:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-10-21 18:27 |
你把调用中断例程的主函数写在安装中断例程的程序后面,也就是把两个程序写在一起,如下:
assume cs:code
;把;data写在这里
data segment
db 'conversation',0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset int7cend-offset int7c
;复制中断例程
cld
rep movsb
;设置入口
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
;主程序写在这里
mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
;中断例程
int7c:
push si
push cx
change:mov cl,[si]
mov ch,0
jcxz ok
and byte ptr [si],11011111b
inc si
jmp short change
ok:pop cx
pop si
iret
int7cend:nop
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2013-10-21 18:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-10-21 18:27 |
这样就可以测试你的程序了,不知道你是不是把cmd完全关闭之后重新打开再调用的主程序,如果是那样的话,你写入中断向量表中的信息可能已经修改了 | | |
|