汇编程序设计 时钟

2025-02-24 14:04:08
推荐回答(5个)
回答1:

.286
; CLOCK program
; by Ren Sha-Pu

DISPLAY_COLOR EQU 0EH ;init color
LF EQU 0AH
CR EQU 0DH
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 2CH
ENVSEG DW 0
org 80h
long db 0
sbuf db 70h dup (0)
ORG 0C0H

CLOCK DB 0
MINU DB 0
SECOND DB 0
OLD1C DD ?
OLD09 DD ?
DISPLAY_DATA DB 0,0,':',0,0,':',0,0

ORG 100H
start:
jmp install
int1c:
pushf
push es
push ds
pusha

push cs
pop ds

calu:
mov al,0
out 70h,al
in al,71h
mov second,al
mov al,2
out 70h,al
in al,71h
mov minu,al
mov al,4
out 70h,al
in al,71h
mov clock,al

disp_clock:
mov al,clock
mov si,offset display_data
push si
call hex_to_asc ;turn HEX to ASC II code
mov al,minu
call hex_to_asc
mov al,second
call hex_to_asc
pop si
; cmp byte ptr [si],'0'
; jnz mov_data

; mov byte ptr [si],' '
mov_data:
mov ax,0b800h ;buffer segment
v_buffer:
mov es,ax
mov di,72*2 ;72*2
clock_place:
mov cx,8
cld
mov ah,display_color ;the color is yellow
code3:
is_vga:
lodsb
stosw
loop is_vga
i1cquit:
popa
pop ds
pop es
popf
iret

HEX_TO_ASC PROC NEAR
cbw
mov cl,16
div cl

add ax,'00'
mov ds:[si],ax
mov byte ptr ds:[si+2],':'
add si,3

ret

HEX_TO_ASC ENDP
INT1CEND:

install:
PUSH CS
POP DS
push cs
pop es
mov al,LONG
and al,al
jz zulu
; CMP AL,1
; Jbe HELP
MOV SI,OFFSET SBUF
AGIN1:
mov al,[SI]
INC SI
CMP AL,20H
JZ AGIN1
CMP AL,'/'
JZ AGIN1
cmp al,'q'
jz zlquit
cmp al,'Q'
JZ ZLQUIT
HELP:
MOV DX,OFFSET HELP$
EXIT:
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H

ZULU:
CALL CHKMEM
JZ EXSIT
; MOV DX,OFFSET ZULU$
; JMP EXIT
CALL ZULUMEM

EXSIT:
MOV DX,OFFSET ERRR$
JMP EXIT
ZLQUIT:
CALL CHKMEM
JZ RESEL
REERR:
LEA DX,DERR$
JMP EXIT
RESEL:
CALL UNLOAD
JC REERR
LEA DX,REL$
JMP EXIT
ZULUMEM PROC
MOV DX,offset INT1CEND
ADD DX,0FH
MOV CL,4
SHR DX,CL
push dx ; get str long

MOV AX,351CH
INT 21H
MOV WORD PTR [OLD1C],BX
MOV WORD PTR [OLD1C+2],ES
; MOV AX,3509H
; INT 21H
; MOV WORD PTR [OLD09],BX
; MOV WORD PTR [OLD09+2],ES
; CLI
MOV DX,OFFSET INT1C
MOV AX,251CH
INT 21H
; MOV DX,OFFSET INT09
; MOV AX,2509H
; INT 21H
; STI
MOV ES,CS:[ENVSEG] ;RELEASE ENVSEG
MOV AH,49H
INT 21H
MOV CS:[ENVSEG],0
POP DX ;dx= RESIDENT long

MOV AX,3100H
INT 21H
ZULUMEM ENDP

UNLOAD PROC
PUSH DS

LDS DX,ES:[OLD1C]
MOV AX,251CH
INT 21H

; LDS DX,ES:[OLD09]
; MOV AX,2509H
; INT 21H
POP DS

MOV AH,49H
INT 21H
RET
UNLOAD ENDP

chkmem proc ;OUT ZF=1: EXIST ZF=0:NOT EXIST
; push es
PUSHA
mov ax,351Ch
int 21h
mov si,offset int1C
mov di,si
mov cx,(offset INT1CEND-offset int1C)
repe cmpsb
POPA
; pop es
ret
chkmem endp

HELP$ db " ",CR,LF
DB " ",CR,LF
db " ",CR,LF
DB " ",CR,LF
db " ",CR,LF
DB " ",CR,LF
DB " CLOCK RESIDENT PROGRAME",CR,LF
DB " Copyright (C) R.S.P. 2001. right reserved." ,CR,LF
DB " Usage:>CLOCK [/h][/q]",CR,LF
DB " H:Command help ",CR,LF
DB " Q:Release of Resident Memory",CR,LF
DB " ",CR,LF
db " ",CR,LF
DB " ",CR,LF
db "$"
;
rel$ db " ",CR,LF
DB " ",CR,LF
db " Resident Memory has been release.",CR,LF,"$"
DERR$ DB " Release Resident Memory Failure.",CR,LF,"$"
ERRR$ DB " CLOCK Resident Memory Installed Failure.",CR,LF,"$"
ZULU$ db " ",CR,LF
DB " ",CR,LF
DB " CLOCK Resident Memory Installed SUCCESS ",CR,LF
DB " Copyright (C) R.S.P. 2001. right reserved." ,CR,LF,"$"

CODE ENDS
END start

回答2:

编程,以“年/月/日 时:分:秒”的格式显示当前的日期,时间。
在CMOS RAM中,存放着当前时间,这六个信息长度为1个字节,存放单元:
秒:0 分:2时:4 日:7 月:8 年:9
这些数据以BCD码方式存放
参考资料:王爽 《汇编语言》
网站:http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1015&qkSg=2&qID=37938&readSg=1
我就不粘贴了!

回答3:

;.COM文件格式
;按任一键返回DOS
code segment
assume cs:code,ds:code

main proc far
org 100h
czr:
mov ah,2 ;光标定位
mov dh,01
mov dl,72
int 10h

mov ah,2ch ;取系统时间
int 21h
mov al,ch
mov ah,0

call disp
mov ah,2h
mov dl,':'
int 21h
mov ah,0
mov al,cl

call disp
mov ah,2h
mov dl,':'
int 21h
mov ah,0
mov al,dh

call disp
mov ah,0bh ;检测是否有键盘任一键..
int 21h
cmp al,0
jnz finish
jmp czr

finish:

int 20h
main endp

disp proc;显示ax中的数字
push ax
push bx
push cx
push dx

mov cx,0
mov bx,10
cmp ax,0
jge p0
push ax
mov ah,2h
mov dl,'-'
int 21h
pop ax
neg ax
p0:
mov dx,0
div bx
push dx
inc cx
cmp ax,0
jnz p0

mov ah,2
cmp cx,2
jae p1
mov dx,0
push dx
inc cx
p1:
pop dx
add dx,30h
int 21h
loop p1

pop dx
pop cx
pop bx
pop ax

ret
disp endp

code ends
end main

回答4:

本问题在

求汇编语言的钟表源程序?
悬赏分:0 - 解决时间:2008-11-28 17:54
系统时间显示,在显示器上显示圆形的钟表图形,并显示系统时钟。(有时针、分针、秒针)
hp-64已经回答过了 我试了一下超级棒 出的画面和用的钟表一样 可惜不能把图片传上来 你搜索一下

回答5:

楼上给的链接代码基本上是最优化的。