关于键盘中断的问题~ 这个问题困扰我两周了 还请知道的大神不吝赐教

轩智 2014-06-04 08:39:56

assume cs:code
code segment
start:
call empty
clock:

mov ax,0
mov es,ax

push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]

mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs

mov ax,0b800h
mov es,ax

begincoloc:
mov al,'2'
mov es:[0],al
mov al,'0'
mov es:[2],al
mov bx,4

mov cx,3
mov dl,9
c0:
push cx
mov al,dl
out 70h,al
in al,71h

mov ah,al
mov cl,4
shr ah,cl
and al,00001111b

add ah,30h
add al,30h

mov byte ptr es:[bx],ah
add bx,2
mov byte ptr es:[bx],al

call slash

pop cx
dec dl
loop c0

mov cx,3
mov dl,4
c1:
push cx
mov al,dl
out 70h,al
in al,71h

mov ah,al
mov cl,4
shr ah,cl
and al,00001111b

add ah,30h
add al,30h

mov byte ptr es:[bx],ah
add bx,2
mov byte ptr es:[bx],al

call colon

pop cx
sub dl,2
loop c1

call delay

jmp begincoloc

mov ax,0
mov es,ax

push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]

mov ax,4c00h
int 21h


;*************函数*************;
empty:
mov ax,0b800h
mov es,ax
mov cx,2000
mov di,0
mov al,' '
e:
mov es:[di],al
add di,2
loop e
mov bx,0
mov cx,0
mov di,0
mov si,0
ret

slash:
cmp dl,7
je blank
add bx,2
mov al,'/'
mov es:[bx],al
add bx,2
jmp short sret
blank:
add bx,2
mov al,' '
mov es:[bx],al
add bx,2
jmp short sret
sret:
ret

colon:
cmp dl,0
je blanks
add bx,2
mov al,':'
mov es:[bx],al
add bx,2
jmp short srets
blanks:
add bx,2
mov al,' '
mov es:[bx],al
add bx,2
jmp short srets
srets:
ret

delay:
mov dx,5h
mov ax,0
d:
sub ax,1
sbb dx,0
cmp ax,0
jne d
cmp dx,0
jne d
ret




;*************中断例程************;
int9:
push ax
push bx
push es

in al,60h
pushf
call dword ptr ds:[200h]

cmp al,1
jne int9ret

mov ax,0b800h
mov es,ax
mov cx,12
mov di,1
i:
inc byte ptr es:[di]
inc di
loop i

int9ret:
pop es
pop bx
pop ax
iret

int9end:
nop

code ends
end start

这是 王爽的汇编语言一书 我想要实现 在不断更新的系统时间 时按下esc键 实现变色效果 但一按esc键 整个程序就卡住了
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
轩智 2014-06-08
  • 打赏
  • 举报
回复
引用 9 楼 zara 的回复:
int9 上的问题吧,你保存原向量时 pop ds:[0] 之类的,ds 设置了吗,ds:[0] 在哪里?而在 int9: 里又是 call dword ptr ds:[200h] 这又是在哪里,前后还不一致,也都没见过设置 ds 的? 另外,改变颜色的话,每次应该给 di 增 2 因为一个字节是显示字符,再一个字节是显示的属性;再,你的需要修改的也不止 12 个字符吧。
谢谢您的回复 我已经解决这个问题了 虽然您的回答并不是我的最终解决办法 感谢你
zara 2014-06-06
  • 打赏
  • 举报
回复
int9 上的问题吧,你保存原向量时 pop ds:[0] 之类的,ds 设置了吗,ds:[0] 在哪里?而在 int9: 里又是 call dword ptr ds:[200h] 这又是在哪里,前后还不一致,也都没见过设置 ds 的?
另外,改变颜色的话,每次应该给 di 增 2 因为一个字节是显示字符,再一个字节是显示的属性;再,你的需要修改的也不止 12 个字符吧。
Guilty 2014-06-05
  • 打赏
  • 举报
回复
DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
轩智 2014-06-05
  • 打赏
  • 举报
回复
为什么没人啊
轩智 2014-06-05
  • 打赏
  • 举报
回复
引用 7 楼 Guilty 的回复:
[quote=引用 6 楼 a6731489 的回复:] [quote=引用 5 楼 Guilty 的回复:] [quote=引用 4 楼 a6731489 的回复:] [quote=引用 3 楼 Guilty 的回复:] DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
我用的是Masm for Windows 集成实验环境 2012.5[/quote] 不太了解,不过我感觉够呛,会模拟有BIOS中断向量给你改? 如果你没敲错,应该是环境不及格,只能DOS下玩。[/quote] 可是有类似的代码可运行啊。。。。。[/quote] 不要较真这些过时的东西了。 以前我上班是无聊,写过一个DOS驻留程序,在任何程序运行的时候按一个组合键把键盘变成可以弹音乐。 现在早忘光了,DOS没用。[/quote] 我真的是想知道为什么啊
Guilty 2014-06-05
  • 打赏
  • 举报
回复
引用 6 楼 a6731489 的回复:
[quote=引用 5 楼 Guilty 的回复:] [quote=引用 4 楼 a6731489 的回复:] [quote=引用 3 楼 Guilty 的回复:] DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
我用的是Masm for Windows 集成实验环境 2012.5[/quote] 不太了解,不过我感觉够呛,会模拟有BIOS中断向量给你改? 如果你没敲错,应该是环境不及格,只能DOS下玩。[/quote] 可是有类似的代码可运行啊。。。。。[/quote] 不要较真这些过时的东西了。 以前我上班是无聊,写过一个DOS驻留程序,在任何程序运行的时候按一个组合键把键盘变成可以弹音乐。 现在早忘光了,DOS没用。
轩智 2014-06-05
  • 打赏
  • 举报
回复
引用 5 楼 Guilty 的回复:
[quote=引用 4 楼 a6731489 的回复:] [quote=引用 3 楼 Guilty 的回复:] DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
我用的是Masm for Windows 集成实验环境 2012.5[/quote] 不太了解,不过我感觉够呛,会模拟有BIOS中断向量给你改? 如果你没敲错,应该是环境不及格,只能DOS下玩。[/quote] 可是有类似的代码可运行啊。。。。。
Guilty 2014-06-05
  • 打赏
  • 举报
回复
引用 4 楼 a6731489 的回复:
[quote=引用 3 楼 Guilty 的回复:] DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
我用的是Masm for Windows 集成实验环境 2012.5[/quote] 不太了解,不过我感觉够呛,会模拟有BIOS中断向量给你改? 如果你没敲错,应该是环境不及格,只能DOS下玩。
轩智 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 Guilty 的回复:
DOS的玩意儿太高端了,只能仰望。请教你有专门的PC装DOS吗?
我用的是Masm for Windows 集成实验环境 2012.5
轩智 2014-06-04
  • 打赏
  • 举报
回复
大家帮帮忙吧~

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧