
有一汇编语言请大家帮忙,拜托各位了,倾家荡产拉!!!! 50
小弟我在学汇编,这程序不知道怎么搞的,把这程序编译成可执行程序,打开之后虽然也能显示,但过几秒钟会出现一个提示:CPU遇到无效指令,CS:018bip:01cfop:3a...
小弟我在学汇编,这程序不知道怎么搞的,把这程序编译成可执行程序,打开之后虽然也能显示,但过几秒钟会出现一个提示:CPU遇到无效指令,CS:018b ip:01cf op:3a 5c 77 69,我晕啊,请大家告诉我怎么回事啊?应该怎么解决,谢谢,补充一点:我用的是赛扬处理器,Windows XP操作系统.还有一点:键盘中断我已经开了,按键怎么没反应,好象延时子程序还不起作用,我以前试过,这个延时子程序在我的电脑上能延时3到4秒钟.请高手耐心回答,谢谢拉~~~~~~~~
程序如下:
data segment
count db 91
message db 'please encourage me',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
main proc far
mov ax,data
mov ds,ax
mov ah,35h ;取原1CH中断向量
mov al,1ch
int 21h
push es ;保存原中断向量
push bx
push ds
mov dx,seg prog ;设置新1CH中断向量
mov ds,dx
lea dx,prog
mov ah,25h
mov al,1ch
int 21h
pop ds
in al,21h ;允许键盘和定时器中断
and al,11111100B
out 21h,al
sti ;开中断
mov ah,6 ;清屏
mov al,0
mov bh,4eh
mov cx,0
mov dx,184fh
int 10h
mov ah,1 ;等待输入
int 21h
cmp al,71h ;若为q字母结束
je val
sum: mov dl,0 ;顺序显示256个字符,
ppp: mov ah,2
int 21h
call delay ;调用延时子程序
inc dl
cmp dl,255 ;若到最后一个字符,从新开始显示
ja sum
jmp ppp
val: pop dx ;恢复原中断向量
pop ds
mov ah,25h
mov al,1ch
int 21h
mov ah,4ch
int 21h
main endp
prog proc far ;新1CH中断处理子程序
push ax ;保存寄存器
push bx
push cx
push dx
push ds
push es
push si
push di
sti ;开中断
mov ax,data
mov ds,ax
dec count ;到5秒了吗?因为定时器中断55毫秒发生一次
jnz exit ;一秒钟18.2次
lea dx,message ;显示message的内容
mov ah,9
int 21h
mov count,91 ;重新初始化count为5秒
exit: cli ;关中断
pop di ;恢复寄存器
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
iret
prog endp
delay proc
push cx
push bx
mov bx,100
slow: mov cx,2801
lop: loop lop
dec bx
jnz slow
pop bx
pop cx
ret
delay endp
code ends
end main
我在实模式下编程的啊 展开
程序如下:
data segment
count db 91
message db 'please encourage me',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
main proc far
mov ax,data
mov ds,ax
mov ah,35h ;取原1CH中断向量
mov al,1ch
int 21h
push es ;保存原中断向量
push bx
push ds
mov dx,seg prog ;设置新1CH中断向量
mov ds,dx
lea dx,prog
mov ah,25h
mov al,1ch
int 21h
pop ds
in al,21h ;允许键盘和定时器中断
and al,11111100B
out 21h,al
sti ;开中断
mov ah,6 ;清屏
mov al,0
mov bh,4eh
mov cx,0
mov dx,184fh
int 10h
mov ah,1 ;等待输入
int 21h
cmp al,71h ;若为q字母结束
je val
sum: mov dl,0 ;顺序显示256个字符,
ppp: mov ah,2
int 21h
call delay ;调用延时子程序
inc dl
cmp dl,255 ;若到最后一个字符,从新开始显示
ja sum
jmp ppp
val: pop dx ;恢复原中断向量
pop ds
mov ah,25h
mov al,1ch
int 21h
mov ah,4ch
int 21h
main endp
prog proc far ;新1CH中断处理子程序
push ax ;保存寄存器
push bx
push cx
push dx
push ds
push es
push si
push di
sti ;开中断
mov ax,data
mov ds,ax
dec count ;到5秒了吗?因为定时器中断55毫秒发生一次
jnz exit ;一秒钟18.2次
lea dx,message ;显示message的内容
mov ah,9
int 21h
mov count,91 ;重新初始化count为5秒
exit: cli ;关中断
pop di ;恢复寄存器
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
iret
prog endp
delay proc
push cx
push bx
mov bx,100
slow: mov cx,2801
lop: loop lop
dec bx
jnz slow
pop bx
pop cx
ret
delay endp
code ends
end main
我在实模式下编程的啊 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询