小弟初学汇编,请教大牛一个有关中断驻留问题
时间:2011-07-01
来源:互联网
我想问下,
1:int 21h中ah=31h中dx驻留大小一般是怎么取的啊?我的做法也不知道对不对,下面程序有
2:驻留程序是不是将整个asm文件中代码都驻留么?还是说驻留的程序有确定的某一部分?
3:其次是我下面这个程序一个简单的中断驻留编译后运行却先产生一大堆乱码后再恢复正常:每隔五秒显示一个字符串。
并且注释掉一段看似没有任何联系的代码函数就无法再实现相应功能了,就只剩一大堆乱码。
谢谢各位大牛了...
;------------------数据段数据-----------------
data segment
ok_msg db 'It is now running!',0dh,0ah,'$'
ok_msg1 db 'Main running',0dh,0ah,'$'
num db 0 ;由中断次数决定发生时间
flag db 0 ;标志位,防止同级中断发生
data ends
;------------数据段结束---------------------
code segment
assume cs:code,ds:data
start:
;-----------Main program------------------
main proc far
mov ax,data
mov ds,ax
;重置中断向量
lea dx,baohu
mov ax,seg baohu
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
;打印成功指令,!!而且我发现把这个显示功能去掉以后程序就无法运行了!!
xor ax,ax
lea dx,ok_msg1
mov ah,9
int 21h
;驻留中断程序
mov ah,31h
mov al,0
mov dx,prog_len/16 ;???????这是我从网上看到的,我也不知道怎么取这个驻留区大小
int 21h
main endp
;-----------中断程序调用-----------------
baohu proc far
sti ;开中断
push ax
push bx
push cx
push dx
push di
push si
mov ax,data
mov ds,ax
mov al,num
inc al
mov num,al
cmp al,90 ;等待大约5s
jne godown ;不相等则不进入屏保画图程序
mov al,flag ;与0比较,若不是0,说明中断已经开始,这次就不运行程序
cmp al,0
jne godown
;中断程序,打印字符串
mov al,0
mov num,al
mov dx,offset ok_msg
mov ah,9
int 21h
godown:
;cli
pop si
pop di
pop dx
pop cx
pop bx
pop ax
prog_len equ $-main
iret ;中断退出
baohu endp
code ends
end start
1:int 21h中ah=31h中dx驻留大小一般是怎么取的啊?我的做法也不知道对不对,下面程序有
2:驻留程序是不是将整个asm文件中代码都驻留么?还是说驻留的程序有确定的某一部分?
3:其次是我下面这个程序一个简单的中断驻留编译后运行却先产生一大堆乱码后再恢复正常:每隔五秒显示一个字符串。
并且注释掉一段看似没有任何联系的代码函数就无法再实现相应功能了,就只剩一大堆乱码。
谢谢各位大牛了...
;------------------数据段数据-----------------
data segment
ok_msg db 'It is now running!',0dh,0ah,'$'
ok_msg1 db 'Main running',0dh,0ah,'$'
num db 0 ;由中断次数决定发生时间
flag db 0 ;标志位,防止同级中断发生
data ends
;------------数据段结束---------------------
code segment
assume cs:code,ds:data
start:
;-----------Main program------------------
main proc far
mov ax,data
mov ds,ax
;重置中断向量
lea dx,baohu
mov ax,seg baohu
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
;打印成功指令,!!而且我发现把这个显示功能去掉以后程序就无法运行了!!
xor ax,ax
lea dx,ok_msg1
mov ah,9
int 21h
;驻留中断程序
mov ah,31h
mov al,0
mov dx,prog_len/16 ;???????这是我从网上看到的,我也不知道怎么取这个驻留区大小
int 21h
main endp
;-----------中断程序调用-----------------
baohu proc far
sti ;开中断
push ax
push bx
push cx
push dx
push di
push si
mov ax,data
mov ds,ax
mov al,num
inc al
mov num,al
cmp al,90 ;等待大约5s
jne godown ;不相等则不进入屏保画图程序
mov al,flag ;与0比较,若不是0,说明中断已经开始,这次就不运行程序
cmp al,0
jne godown
;中断程序,打印字符串
mov al,0
mov num,al
mov dx,offset ok_msg
mov ah,9
int 21h
godown:
;cli
pop si
pop di
pop dx
pop cx
pop bx
pop ax
prog_len equ $-main
iret ;中断退出
baohu endp
code ends
end start
作者: qieguo 发布时间: 2011-07-01
睡前顶一个...
作者: qieguo 发布时间: 2011-07-01
点点滴滴地对地导弹点点滴滴订单点点滴滴点点滴滴的
作者: aaseh 发布时间: 2011-07-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28