永发信息网

汇编语言调用显示系统时间,不正常,求解

答案: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分啊, 你还不如不给
全部回答
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯