汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2011-08-09 18:26] 一个另类的时间小程序

不是我原创的,当时看到别人写的时候我都不知in是什么指令,只是把别人的东西改动了一些。
code segmemt
assume cs:code
db "9,8,7,4,2,0"
 db "// :: "
aaaa db 80 dup (0);定义80个符,正好一行
 Db "$" 
sta:mov ds,cs
mov dx,offset aaaa
xor si,si
mov di,0ch
mov cx,6
lp:mov al,[si]
out 70h,al
in al,71h
mov ah,al
shr ah,1
shr ah,1
shr ah,1
shr ah,1
and al,0fh
mov [di],ah
mov [di+1],al
mov al,[si+6]
mov [di+2],al
Add di,3
inc si
Loop lp
in al,60h
cmp al,"q";按q键退出
jz q
mov ax,900h;因为当时我没有弄明白字符属性,所以就用中断代替了
int 21h
jmp sta
q:mov ax,4c00h
int 21h
code ends
end sta
大家别丢砖呀
评论次数(8)  |  浏览次数(378)  |  类型(默认类型) |  收藏此文  | 

[  chinatree   发表于  2011-08-09 19:09  ]

有个错误,那一句应该是:Db 80 dup ( );应该是空格不是零,另外可能还有错误,不知道代码段是不是可写的

[  chinatree   发表于  2011-08-09 22:22  ]

哦,还忘了在第二十一行把时间转成ascii了,要加一句add ax,3030h

[  tily   发表于  2011-08-10 00:28  ]

code segmemt mov ds,cs 
这个程序从哪看来的 不对劲啊 错误挺多的 调试也是死循环 有空好好研究研究

[  tily   发表于  2011-08-10 00:34  ]

有点像是想用21号中断例程9号子程序输出显示出来

[  tily   发表于  2011-08-10 01:23  ]

花了我一个小时 改了代码的几个错误,调试后达到你的要求啦,按Q退出。
code segment 
assume cs:code 
db 9,8,7,4,2,0
 db "// :: " 
aaaa db 80 dup (0);定义80个符,正好一行 
 Db "$"  
sta: mov ax,cs
mov ds,ax 
mov dx,offset aaaa 
xor si,si 
mov di,0ch ;mov di,0ch 这个看了半天才知道是aaaa 的偏移地址 可以写成: mov di,offset aaa
mov cx,6 
lp:mov al,[si] 
out 70h,al 
in al,71h 
mov ah,al 
shr ah,1 ;此处还不如用mov cl,4  shr ah,cl  不过CX要先保护起来(压栈) 因后面LOOP循环要用
shr ah,1 
shr ah,1 
shr ah,1 
and al,0fh 
add ah,30h
add al,30h
mov [di],ah ;将十位数字节放入aaaa定义的数据段处
mov [di+1],al ;将个位数字节放入aaaa定义的数据段处
mov al,[si+6] 
mov [di+2],al ;将分隔符放入aaaa定义的数据段处
add di,3 
inc si 
Loop lp 
in al,60h 
cmp al,10h;按q键退出 
je q 
mov ax,900h;利用21号中断例程9号子程序输出offset aaa 下的字符串,以$结束,ds:dx指向第一个字符 。
int 21h 
jmp sta 
q:mov ax,4c00h 
int 21h 
code ends 
end sta

[  chinatree   发表于  2011-08-10 08:08  ]

[ tily 发表于  2011-08-10 00:28  ] [删除评论 ]
code segmemt mov ds,cs
这个程序从哪看来的 不对劲啊 错误挺多的 调试也是死循环 有空好好研究研究
这句是错了,应该用通用寄存器中转下,但是不是死循环。楼上说的我都在后面跟贴改了

[  tily   发表于  2011-08-10 08:34  ]

你想让程序在按Q退出来,但直接写cmp al,"q"好像不行,我写的cmp al,10h;因为Q的扫描码是10H

[  chinatree   发表于  2011-08-10 13:09  ]

可以的,我试过,我记得书里也讲过这种用法,要么你是说从60h端口读出的不是ascii?

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码