汇编语言调用显示系统时间,不正常,求解
答案:2 悬赏:0 手机版
解决时间 2021-04-14 00:08
- 提问者网友:且恨且铭记
- 2021-04-13 17:26
汇编语言调用显示系统时间,不正常,求解
最佳答案
- 五星知识达人网友:街头电车
- 2021-04-13 17:34
这里只显示秒,不显示其他时间,但显示不正常
因为楼主你调用了2CH取时间的功能调用, 得到的出口参数分别是CH=小时, CL=分, DH=秒
但是楼主, 你这里只运用了DH这个代表'秒'的参数, 没有调用其他两个参数, 所以没有显示小时和分钟。
至于显示不正常是因为这段代码并不能数字正常的表示出来
mov al,ah
mov cx,4
shr ah,cl
add ah,30h
and al,00001111b
add al,30h
换成这样就可以了
mov al, ch或cl或dh
mov ah,0 ;
mov cl,10
div cl
add ah,30h 个位数
add al,30h 十位数
int 21h 。DH,CH,里存的是BCD码?
存放的不是BCD码, 而是十六进制数
怎样隐藏光标?
不好意思, 楼主, 不熟悉这个调用, 无法帮到你
这里是我写的代码, 楼主可以参考一下
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx
mov bx, 60 ;定位列的位置
mov ah, 2ch
int 21h
mov al, ch
call done
mov byte ptr es:[160*12+bx],':'
add bx, 2
mov ah, 2ch
int 21h
mov al, cl
call done
mov byte ptr es:[160*12+bx],':'
add bx, 2
mov ah, 2ch
int 21h
mov al, dh
call done
jmp start
;程序结束
mov ax, 4c00h
int 21h
done: mov ah,0 ;
mov cl,10
div cl
add ah,30h
add al,30h
mov byte ptr es:[160*12+bx],al
mov byte ptr es:[160*12+bx+2],ah
add bx, 4
ret
code ends
end start
效果图:
PS:若有不明白的地方, 请追问
百度排版坑爹, 附件里的会正常
还有我要吐槽一下, 楼主, 你给5分啊, 你还不如不给
因为楼主你调用了2CH取时间的功能调用, 得到的出口参数分别是CH=小时, CL=分, DH=秒
但是楼主, 你这里只运用了DH这个代表'秒'的参数, 没有调用其他两个参数, 所以没有显示小时和分钟。
至于显示不正常是因为这段代码并不能数字正常的表示出来
mov al,ah
mov cx,4
shr ah,cl
add ah,30h
and al,00001111b
add al,30h
换成这样就可以了
mov al, ch或cl或dh
mov ah,0 ;
mov cl,10
div cl
add ah,30h 个位数
add al,30h 十位数
int 21h 。DH,CH,里存的是BCD码?
存放的不是BCD码, 而是十六进制数
怎样隐藏光标?
不好意思, 楼主, 不熟悉这个调用, 无法帮到你
这里是我写的代码, 楼主可以参考一下
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx
mov bx, 60 ;定位列的位置
mov ah, 2ch
int 21h
mov al, ch
call done
mov byte ptr es:[160*12+bx],':'
add bx, 2
mov ah, 2ch
int 21h
mov al, cl
call done
mov byte ptr es:[160*12+bx],':'
add bx, 2
mov ah, 2ch
int 21h
mov al, dh
call done
jmp start
;程序结束
mov ax, 4c00h
int 21h
done: mov ah,0 ;
mov cl,10
div cl
add ah,30h
add al,30h
mov byte ptr es:[160*12+bx],al
mov byte ptr es:[160*12+bx+2],ah
add bx, 4
ret
code ends
end start
效果图:
PS:若有不明白的地方, 请追问
百度排版坑爹, 附件里的会正常
还有我要吐槽一下, 楼主, 你给5分啊, 你还不如不给
全部回答
- 1楼网友:冷風如刀
- 2021-04-13 18:44
1、int 21h 。DH,CH,里存的不是BCD码。 可改成:MOV AH,2 和 INT 1AH
2、光标的问题:可以隐藏光标,但较麻烦。也可以减少显示次数(如下修改),或调用BIOS的显示程序,而不用DOS的9号调用。
以下程序供参考:
;汇编语言调用显示系统时间,不正常,求解
;2013-08-05 19:37 提问者悬赏:5分 | dudu785 | 分类:汇编语言
;这里只显示秒,不显示其他时间,但显示不正常,调用2ch,
; int 21h 。DH,CH,里存的是BCD码?怎样隐藏光标?
data segment
s1 db 'Hello Good morning','$'
s2 equ $-s1
s3 db '00:00:00','$'
s db 0 ;增加一个秒字节判断,有一秒了则显示,否则等待
data ends
code segment
assume cs:code,ds:data
dspt proc near
mov ah,2
mov bh,0
mov dh,2
mov dl,35
int 10h
; mov ah,2ch
; int 21h
mov ah,2
int 1ah
mov ax,0 ;只显示秒数,其他时间不显示
mov ah,dh
mov al,ah
mov cx,4
shr ah,cl
add ah,30h
and al,0000
2、光标的问题:可以隐藏光标,但较麻烦。也可以减少显示次数(如下修改),或调用BIOS的显示程序,而不用DOS的9号调用。
以下程序供参考:
;汇编语言调用显示系统时间,不正常,求解
;2013-08-05 19:37 提问者悬赏:5分 | dudu785 | 分类:汇编语言
;这里只显示秒,不显示其他时间,但显示不正常,调用2ch,
; int 21h 。DH,CH,里存的是BCD码?怎样隐藏光标?
data segment
s1 db 'Hello Good morning','$'
s2 equ $-s1
s3 db '00:00:00','$'
s db 0 ;增加一个秒字节判断,有一秒了则显示,否则等待
data ends
code segment
assume cs:code,ds:data
dspt proc near
mov ah,2
mov bh,0
mov dh,2
mov dl,35
int 10h
; mov ah,2ch
; int 21h
mov ah,2
int 1ah
mov ax,0 ;只显示秒数,其他时间不显示
mov ah,dh
mov al,ah
mov cx,4
shr ah,cl
add ah,30h
and al,0000
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯