如何实时显示系统时间,用汇编语言,我的程序可以显示时间,但是一扫描就是乱码怎么回事

DATAS SEGMENT
YEAR DB 4 DUP (?),2DH
MON DB 2 DUP (?),2DH
DAY DB 2 DUP (?),2CH
HOUR DB 2 DUP (?),3AH
MIN DB 2 DUP (?),3AH
SEC DB 2 DUP (?),0DH,'$' ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

LP1: MOV AH,2AH
INT 21H
H: CMP CX,1000
JAE NEXT
H1: CMP CX,100
JAE NEXT1
H2:CMP CX,10
JAE NEXT2
H3:CMP CX,0
JA NEXT3
JMP JIE
NEXT:SUB CX,1000
INC [YEAR]

JMP H
NEXT1:SUB CX,100
INC [YEAR+1]

JMP H1
NEXT2:SUB CX,10
INC [YEAR+2]
JMP H2
NEXT3:SUB CX,1
INC [YEAR+3]
JMP H3
JIE:HLT
ADD [YEAR],30H
ADD [YEAR+1],30H
ADD [YEAR+2],30H
ADD [YEAR+3],30H
U: CMP DH,10
JAE M
U1: CMP DH,0
JA M1
JMP GUO
M:SUB DH,10
INC [MON]
JMP U
M1:SUB DH,1
INC [MON+1]
JMP U1
GUO:HLT
ADD [MON],30H
ADD [MON+1],30H
N: CMP DL,10
JAE D
N1: CMP DL,0
JA D1
JMP G
D:SUB DL,10
INC [DAY]
JMP N
D1:SUB DL,1
INC [DAY+1]
JMP N1
G:HLT
ADD [DAY],30H
ADD [DAY+1],30H

MOV AH,2CH
INT 21H
T: CMP CH,10
JAE Y
T1:CMP CH,0
JA Y1
JMP Q
Y:SUB CH,10
INC [HOUR]
JMP T
Y1:SUB CH,1
INC [HOUR+1]
JMP T1
Q:HLT
ADD [HOUR],30H
ADD [HOUR+1],30H

MI: CMP CL,10
JAE MI1
MI3: CMP CL,0
JA MI2
JMP M4
MI1:SUB CL,10
INC [MIN]
JMP MI
MI2:SUB CL,1
INC [MIN+1]
JMP MI3
M4:HLT
ADD [MIN],30H
ADD [MIN+1],30H

SE: CMP DH,10
JAE SE1
SE3: CMP DH,0
JA SE2
JMP SE4
SE1:SUB DH,10
INC [SEC]
JMP SE
SE2:SUB DH,1
INC [SEC+1]
JMP SE3
SE4:HLT
ADD [SEC],30H
ADD [SEC+1],30H

MOV AX,DATAS
MOV DS,AX
LEA DX,YEAR
MOV AH,09H
INT 21H
MOV AH,0BH
INT 21H
CMP AL,01H
JZ EXIT
JMP LP1
;此处输入代码段代码
EXIT: MOV AH,4CH
INT 21H
CODES ENDS
END START

第1个回答  2012-12-26

我用模拟器运行了下你的源程序,没啥大问题,我不知道你要把系统时间显示在哪儿,我也没出现你说的乱码,不过时间好像不对

追问

就是在运行时直接把时间显示在屏幕上,没有扫描时间,只显示一个固定时间的时候,时间显示的是对的

来自:求助得到的回答
第1个回答  2012-12-26
哈…你的数字转换做的很有创意:)
有两个问题
(1)你显示完后,应该将放各时间的单元清零!
(2)0BH调用返回-1的时候表示按下键了,而不是1
没看出来有别的问题。本回答被网友采纳

汇编语言程序输出的一直是乱码,求高手找错
INT 21H ;显示键入的字符串.EXIT_MAIN:mov ah, 4ch int 21h ;返回DOS MAIN ENDP ;主程序的末尾.;--- SORT PROC ;排序子程序.XOR CX, CX MOV CL, ACTLEN ;取得输入的字符数.DEC CX mov si, offset CHARS s: push cx mov di, si inc di s1: mov ...

单片机编程 汇编语言 就是简单的一个定时一个计数,为什么数码管一直显 ...
你用的是共阳的数码管,你用三极管做位控,对于仿真电路,这样控制电路,在显示时容易出现这种乱码的现象。就是仿真吗,也不是实物,不用考虑驱动的问题,也不用串联限流电阻,都简化。所以,不必用三极管,直接控制数码的公共端就行。见下图这样接。这个电路,共阳,共阴数码管都适用。

我用单片机汇编语言让4个数码管同时显示1234,结果显示的是乱码?
ORG 00H AJMP MAIN ORG 30H MAIN: LCALL DISP MOV 00H,#1 MOV 01H,#2 MOV 02H,#3 MOV 03H,#4 AJMP MAIN DISP: MOV A,00H ACALL SEG7 MOV P1,A MOV P0,#01H ACALL DLY MOV A,01H ACALL SEG7 MOV P1,A MOV P0,#02H ACALL DLY MOV A,02H ACALL SEG7 MOV P1,A MOV ...

北京时间精确到毫秒显示到桌面
要实现北京时间精确到毫秒并显示到桌面,可以通过编程或使用专门的时间显示软件来完成。对于Windows操作系统,一个简单的方法是利用一些现成的桌面小工具或者通过编写一个简单的程序,如使用Python等编程语言,来获取并显示当前的北京时间,且精确到毫秒。首先,我们需要明确的是,显示时间到桌面通常涉及到桌面小...

用汇编语言编写一个时钟程序,能显示时分秒的,还要有秒表就是计时器的...
CALL TIME ;显示系统时间 B: CMP AL,51H ;AL='Q'?JNE START MOV AH,4CH ;返回dos状态 INT 21H DATE PROC NEAR ;显示日期子程序 dis:MOV AH,2AH ;取日期 INT 21H MOV SI,0 MOV AX,CX MOV BX,100 DIV BL MOV BL,AH CALL BCDASC1 ;日期数值转换成相应的AS...

我用单片机汇编语言让4个数码管同时显示1234,结果显示的是乱码?
ORG 00H AJMP MAIN ORG 30H MAIN: LCALL DISP MOV 00H,#1 MOV 01H,#2 MOV 02H,#3 MOV 03H,#4 AJMP MAIN DISP: MOV A,00H ACALL SEG7 MOV P1,A MOV P0,#01H ACALL DLY MOV A,01H ACALL SEG7 MOV P1,A MOV P0,#02H ACALL DLY MOV A,02H ACALL SEG7 MOV P1,A MOV ...

用汇编语言写一个LCD1602驱动显示程序
在显示时间的函数中,首先清空LCD屏幕,然后将当前的时间值转换为显示字符,并通过LCD控制函数写入LCD。同时,考虑到了显示时间格式和时间单位的特殊性,如小时、分钟、秒以及分隔符的处理。整个程序实现了LCD1602的驱动显示,通过汇编语言编程,灵活地控制了硬件接口,实现了时间和日期的实时显示。程序逻辑清晰...

怎样用汇编语言输出中文字符串
用汇编语言输出中文字符串和输出普通字符串是一样的,定义字符串时,看到的是中文,实际存储的是中文内码,一个汉字占两个字节;当输出到屏幕上时,只要是中文系统平台,显示的就是汉字,在不是中文系统的平台上,则显示乱码。

...再打开之后只有数字,文字全变成了乱码,怎么办
"??"乱码:这种情况一般是用不支持中文的编码去编码中文字符,例如ISO-8859-1 仅能编码非英文字符,所以非英文字符被其编码时会被转换为 0x3F(即?的 ASCII 编码),这时 编码已经真被转成不可逆的乱码了。之后无论用兼容 ASCII 的哪种编码方案解码还原出的字符串都是"?"。

汇编语言 最后加的是end start 如果加end 则显示的是乱码 这两个有什么...
end指的是程序结束。end start 指是是程序结束,并指明程序的入口(也就是程序执行的第一条指令)在start处。

相似回答