-
-
[旧帖] [求助]求助一个8086的小程序 0.00雪花
-
发表于: 2010-4-8 11:18 926
-
各位大虾好,小弟是新手 ,在8086设计小程序时 ,设置新中断老是遇到硬件错误,下面就是一个例子
;通过编写一个TRS程序的方法,改变bios的键盘i/o程序,使得dos平台上的应用程序无法获得大写字母。当按大写字母建时,应用程序只能获得对应的小写字母
code segment
old_16h dw ?
assume cs:code,ds:code
new_int16h: sti
cmp ah,0
je cmp_0
cmp ah,10h
je cmp_0
cmp ah,1
je cmp_1
cmp ah,11h
je cmp_1
jmp cs:old_16h
cmp_0: pushf
call cs:old_16h;调用原int16h中断
cmp al,'A'
jb over0
cmp al,'Z'
ja over0
or al,20h
over0: iret
cmp_1: pushf
call cs:old_16h
jz over1
cmp al,'A'
jb over1
cmp al,'Z'
ja over1
or al,20h
over1: iret
main: push cs
pop ds
mov ax,3516h
int 21h ;获取原16h中断向量
mov word ptr old_16h,bx
mov word ptr old_16h+2,es ;保存
mov ax,2516h
mov dx,offset new_int16h
int 21h ;初始化新的16h中断
mov dx,offset main
add dx,15
mov cl,4
shr dx,cl ;转换成节
add dx,10h
mov ah,31h
int 21h ;驻留退出
code ends
end main
各位帮我看看。,谢谢啦
;通过编写一个TRS程序的方法,改变bios的键盘i/o程序,使得dos平台上的应用程序无法获得大写字母。当按大写字母建时,应用程序只能获得对应的小写字母
code segment
old_16h dw ?
assume cs:code,ds:code
new_int16h: sti
cmp ah,0
je cmp_0
cmp ah,10h
je cmp_0
cmp ah,1
je cmp_1
cmp ah,11h
je cmp_1
jmp cs:old_16h
cmp_0: pushf
call cs:old_16h;调用原int16h中断
cmp al,'A'
jb over0
cmp al,'Z'
ja over0
or al,20h
over0: iret
cmp_1: pushf
call cs:old_16h
jz over1
cmp al,'A'
jb over1
cmp al,'Z'
ja over1
or al,20h
over1: iret
main: push cs
pop ds
mov ax,3516h
int 21h ;获取原16h中断向量
mov word ptr old_16h,bx
mov word ptr old_16h+2,es ;保存
mov ax,2516h
mov dx,offset new_int16h
int 21h ;初始化新的16h中断
mov dx,offset main
add dx,15
mov cl,4
shr dx,cl ;转换成节
add dx,10h
mov ah,31h
int 21h ;驻留退出
code ends
end main
各位帮我看看。,谢谢啦
赞赏
看原图
赞赏
雪币:
留言: