|
主题 : : 时间程序显示问题 [已解决] |
回复[ 3次 ]
点击[ 485次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-12-10 12:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:14
信誉值:2
注册日期:2009-11-30 11:46 |
要求在DEBUG屏幕中间以“年/月/日 时:分:秒”显示CMOS时间?
程序如下:
assume cs:code ds:data
data segment
db9,8,7,4,2,0 将时间程序地址定义到内存
data ends
Code segment
Start:
Mov ax,data
Mov ds,ax
Mov si,0
Mov cx,6
Push cx
s:
Mov al,[si] 将地址放入Al中
Out 70h,al
In al,71h 取得时间程序数据并保存在al中
Mov ah,al
Mov cl,4
Shr ah,cl
And al,00001111b
Add ah,30h
Add al,30h 将时间以十进制形式显式
Mov dx,0b800h
Mov es,dx
Mov di,160*12+16*4+8
Mov byte ptr es:[di],ah
Mov byte ptr es:[di+2],al 将其放入显存
Inc si
Add di,5
Pop cx
Loop s
Mov byte ptr es:[di+4],'/'
Mov byte ptr es:[di+9],'/'
Mov byte ptr es:[di+19],':'
Mov byte ptr es:[di+24],':' 将符号放入显存
Mov ax,4c00h
Int 21h 程序返回
Code ends
End start
我帮它加载入内存调式,可为什么数据送入不了显存,难道是程序哪儿出了问题?麻烦各位帮我看看,不甚感激! | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-12-18 13:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:0
注册日期:2009-03-29 12:00 |
assume cs:code ;这里去掉 ds:data
data segment
db 9,8,7,4,2,0 ;(db后面要空格) 将时间程序地址定义到内存
data ends
Code segment
start:
Mov ax,data
Mov ds,ax
Mov si,0
Mov cx,6
Mov dx,0b800h
Mov es,dx
Mov di,160*12+40*2
push di ;di要入栈
s: Push cx ;s循环在这里开始
Mov al,[si] ;将地址放入Al中
Out 70h,al
In al,71h ; 取得时间程序数据并保存在al中
Mov ah,al
Mov cl,4
Shr ah,cl
And al,00001111b
Add ah,30h
Add al,30h ;将时间以十进制形式显式
Mov byte ptr es:[di],ah
Mov byte ptr es:[di+2],al ;将其放入显存
Inc si
Add di,6 ;这里改为6
Pop cx
Loop s
pop di
Mov byte ptr es:[di+4],'/'
Mov byte ptr es:[di+10],'/' ;改为10
Mov byte ptr es:[di+22],':' ; 改为22
Mov byte ptr es:[di+28],':' ;(改为28) 将符号放入显存
Mov ax,4c00h
Int 21h ; 程序返回
code ends
End start
调式通过 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-03-05 00:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:14
信誉值:2
注册日期:2009-11-30 11:46 |
|
|
|
|
|
[第3楼]
[ 回复时间:2010-03-05 00:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:14
信誉值:2
注册日期:2009-11-30 11:46 |
此贴由 贴主 于 [ 2010-03-05 00:09 ] 结贴。 结贴原因:问题已解决 | | |
|