大家帮我看看,怎么老是出现“遇到无效指令”的窗口
e16a.asm 这个是编写和安装中断程序的文件
;author:dpjf
;date:2008-07-16
;编写并安装int 7ch中断例程
;包含多个功能子程序的中断例程
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:code
code segment
start:
;;;;;;;;;;;;;;;;;;;
;中断程序安装
;;;;;;;;;;;;;;;;;;;
mov ax,cs
mov ds,ax
mov si,offset setscreen
mov ax,0
mov es,ax
mov di,200h
mov cx,offset setscreenend-setscreen
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 ah,4ch
int 21h
;;;;;;;;;;;;;;;;;;;
;中断处理程序
;;;;;;;;;;;;;;;;;;;
setscreen:
jmp short set
table:dw sub1,sub2,sub3,sub4
set:push bx
cmp ah,3
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr table[bx]
sret:pop bx
iret
sub1:
push bx
push cx
push es
mov bx,0b800h
mov es,bx
mov bx,0
mov cx,2000
sub1s:
mov byte ptr es:[bx],' '
add bx,2
loop sub1s
pop es
pop cx
pop bx
ret
sub2:
push bx
push cx
push es
mov bx,0b800h
mov es,bx
mov bx,1
mov cx,2000
sub2s:and byte ptr es:[bx],11111000b
or es:[bx],al
add bx,2
loop sub2s
pop es
pop cx
pop bx
ret
sub3:
push bx
push cx
push es
mov cl,4
shl al,cl
mov bx,0b800h
mov es,bx
mov bx,1
mov cx,2000
sub3s:and byte ptr es:[bx],10001111b
or es:[bx],al
add bx,2
loop sub3s
pop es
pop cx
pop bx
ret
sub4:
push cx
push si
push di
push es
push ds
mov si,0b800h
mov es,si
mov ds,si
mov si,160
mov di,0
cld
mov cx,24
sub4s:push cx
mov cx,160
rep movsb
pop cx
loop sub4s
mov cx,80
mov si,0
sub4s1:
mov byte ptr [160*24+si],' '
add si,2
loop sub4s1
pop ds
pop es
pop di
pop si
pop cx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
setscreenend:nop
code ends
end start
e16.asm 这是调用int 7ch中断的程序
assume cs:code
code segment
start:
mov ah,3
mov al,7
int 7ch
mov ah,4ch
int 21h
code ends
end start
![学习动态](images/model1/b8.gif)
![最新评论](images/model1/b1.gif)
- [wuzy] 恭喜,恭喜, 11/24 13:56
- [wuzy] 1.c 2.b 3. b 4.b 5.b 6. a 11/24 13:56
- [nfh_china] 装虚拟磁盘吧 09/27 22:45
- [sbx2000_0] 楼主这样做非常清晰! 07/30 20:48
- [wuerlang] 支持支持. 07/24 10:36
- [游客] 顶 07/24 10:26
- [游客] 我也找到一个 呵呵 http://www.luocong.com/articles/show_art 07/24 09:24
- [游客] 计算机做不到真正的随机,所有的计算机随机都是“伪随机”,算法不同而已,绝大部分都是用时间作随机种子。 07/24 09:05
- [malachi] 恭喜 07/24 08:23
- [mess] 不错不错 ,支持一下o(∩_∩)o... 07/23 17:52
[2008-07-18 11:43] 实验16 编写包含多个子程序的中断例程 大家帮我看看,怎么老是出现“遇到无效指令”的窗口
评论次数(1) |
浏览次数(818) |
类型(汇编作业) |
收藏此文 |
[ 游客 发表于 2008-07-18 18:10 ]
;中断处理程序
;;;;;;;;;;;;;;;;;;;
setscreen:
jmp short set
table:dw sub1,sub2,sub3,sub4
------------------------------
table:dw 中的sub1,sub2,sub3,sub4 ,在编译时就确定地址了,所以当把在加载程序中的地址,在中断程序中去找加载程序中子函数的地址,肯定就会出错了!
博主如果不明白的话,可以在debug下查看一下,table中的地址,然后在调用int7ch的函数跟踪,int7ch中的子函数地址,就明白了......