⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system_clock.txt

📁 可以选择显示时间或日期
💻 TXT
字号:
				page	60, 132
			TITLE	;DATE&TIME
;-------堆栈段-----------------------------------
STACKSEG	SEGMENT PARA STACK 'Stack'
		DB	100h DUP (?)
STACKSEG	ENDS
;-------数据段-----------------------------------
DATASEG		SEGMENT PARA 'Data'
        list0	db	13,10,"----------------------------------------",13,10,'$'
		list1	db	"input 1----print data on screen.",13,10,'$'
		list2	db	"input 2----print time on screen.",13,10,'$'
		list3	db	"input 3----print data&time on screen.",13,10,'$'
		list4	db	"input 4----change data&time.",13,10,'$'
		list5	db	"input 0----quite the programe",13,10,'$'
		print1	db	"please select :",13,10,'$'
		mes0	db	13,10,"-------------------------------------------",'$'
		mesdate	db	13,10,"year\month\day\week :",'$'
		mestime	db	13,10,"hour\minute\second :",'$'
		
		inputdate	db	13,10,"Change the date--------------------------",'$'
		inputtime	db	13,10,"Change the time--------------------------",'$'
		yearmes		db	13,10,"Please input the year (XXXX) :",'$'
		monthmes	db	13,10,"Please input the month (XX) :",'$'
		daymes		db	13,10,"Please input the day (XX) :",'$'
		hourmes		db	13,10,"Please input the hour (XX) :",'$'
		minutemes	db	13,10,"Please input the minute (XX) :",'$'

		branch_table	dw	routine_0
						dw	routine_1						;程序跳转表
						dw	routine_2
						dw	routine_3
						dw	routine_4
		year	dw  0
        month	dw	0
		day		dw	0
		week	dw	0	
		hour	dw	0
		minute 	dw	0
		second	dw	0
		
		buffer 	db 6 dup (' ')
		bn		db '$'
		
DATASEG		ENDS
;-------代码段-----------------------------------
CODESEG 	SEGMENT PARA  'Code'
	assume	cs:codeseg
	assume	ds:DATASEG	
	assume	ss:stackseg
MAIN	PROC	FAR
	push	ds		
	sub		ax,ax
	push	ax
	
	mov ax,STACKSEG
	mov	ss,ax

	mov	ax,DATASEG	
	mov	ds,ax
	sub	ax,ax

next:				
	mov		dx,offset list0 
	mov		ah,09H
	int		21H
	
	mov		dx,offset list1
	mov		ah,09H
	int		21H
	
	mov		dx,offset list2	
	mov		ah,09H
	int		21H
	
	mov		dx,offset list3 
	mov		ah,09H
	int		21H
	
	mov		dx,offset list4 
	mov		ah,09H
	int		21H
	
	mov		dx,offset list5 
	mov		ah,09H
	int		21H
	
	mov		dx,offset print1 
	mov		ah,09H
	int		21H

	mov 	ax,0
	mov		ah,01H		;用户键入所要执行的功能
	int		21H	
	sub		al,30H		;转换为所需的功能号
	shl		al,1		;al=al*2
	sub		bx,bx
	mov		bl,al
	jmp		branch_table[bx];利用跳转表跳转到相应功能

routine_0:			;功能0退出
	jmp		exit

routine_1:			;功能1
	call   	getdate
	jmp		next

routine_2:			;功能2
	call	gettime
	jmp		next

routine_3:			;功能3
	call   	getdate
	call	gettime
	jmp 	next

routine_4:			;功能4
	call	near ptr change
	jmp		next

exit:				;退出程序
	mov		ah,4cH
	int		21H
	
MAIN	ENDP
;-------------------------------------------
getdate	PROC	near
		
		push	ax
		push	cx
		push	dx
		sub		ax,ax
		
		mov		ax,2A00H
		int		21H
		sub		ah,ah
		mov 	week,ax
		mov		al,dl
		mov		day,ax
		mov		al,dh
		mov		month,ax
		mov		ax,cx
		mov		year,ax
		
		call	near ptr printdata
		
		pop		dx
		pop		cx
		pop		ax
		ret
		
getdate	ENDP
;------------------------------------------------
gettime	PROC	near
		
		push	ax
		push	cx
		push	dx
		sub		ax,ax
		
		mov		ax,2C00H
		int		21H
		sub		ah,ah
		mov 	al,ch
		mov		hour,ax
		mov		al,cl
		mov		minute,ax
		mov		al,dh
		mov		second,ax
		
		call	near ptr printtime
		
		pop		dx
		pop		cx
		pop		ax
		ret
		
gettime	ENDP
;------------------------------------------------
change	PROC	near
		
		push	ax
		push	bx
		push	cx
		push	dx
		sub		ax,ax
		
		mov		dx,offset inputdate
		mov		ah,09H
		int		21H
		
		mov		dx,offset yearmes
		mov		ah,09H
		int		21H	
		
		mov		bx,4
		mov		cx,4
yernum:
		mov		ax,0100H
		int		21H
		dec		bx
		mov		buffer[bx],al
		loop	yernum
		
		call	asc2bin
		mov		year,ax
		
		mov		bx,6
		mov		cx,6
setbu0:
		dec		bx
		mov		buffer[bx],0
		loop	setbu0
		
		mov		dx,offset monthmes
		mov		ah,09H
		int		21H	
		
		mov		bx,2
		mov		cx,2
monnum:
		mov		ax,0100H
		int		21H
		dec		bx
		mov		buffer[bx],al
		loop	monnum
		
		call	asc2bin
		mov		month,ax
		
		mov		dx,offset daymes
		mov		ah,09H
		int		21H	
		
		mov		bx,2
		mov		cx,2
daynum:
		mov		ax,0100H
		int		21H
		dec		bx
		mov		buffer[bx],al
		loop	daynum
		
		call	asc2bin
		mov		day,ax
		
		mov		dx,offset inputtime
		mov		ah,09H
		int		21H	
		
		mov		dx,offset hourmes
		mov		ah,09H
		int		21H	
		
		mov		bx,2
		mov		cx,2
hournum:
		mov		ax,0100H
		int		21H
		dec		bx
		mov		buffer[bx],al
		loop	hournum
		
		call	asc2bin
		mov		hour,ax
		
		mov		dx,offset minutemes
		mov		ah,09H
		int		21H	
		
		mov		bx,2
		mov		cx,2
minnum:
		mov		ax,0100H
		int		21H
		dec  	bx
		mov		buffer[bx],al
		loop	minnum
		
		call	asc2bin
		mov		minute,ax
		
		mov		cx,year
		mov		ax,month
		mov		dh,al
		mov		ax,day
		mov		dl,al
		
		mov		ax,2B00H
		int		21H
		
		mov		ax,hour
		mov		ch,al
		mov		ax,minute
		mov		cl,al
		mov		dx,0
		
		mov		ax,2D00H
		int		21H
		
		pop		dx
		pop		cx
		pop		bx
		pop		ax
		ret
		
change	ENDP
;------------------------------------------------
printtime	PROC	NEAR
		push ax
		push bx
		push cx
		push dx
		
		mov dx,offset mes0
		mov	ah,09h
		int	21H
		
		mov dx,offset mestime
		mov	ah,09h
		int	21H
		
		mov cx,3
		mov bx,offset hour

printt:		
		mov	ax,[bx]
		call  	near ptr bin2asc	
		mov dx,offset buffer
		mov	ah,09H
		int	21H
		inc bx
		inc bx
		mov dl,'\'
		mov	ah,02H
		int 21H
		loop printt
		
		pop dx
		pop cx
		pop bx
		pop ax
		ret
printtime	ENDP
;------------------------------------------------
printdata	PROC	NEAR
		push ax
		push bx
		push cx
		push dx
		
		mov dx,offset mes0
		mov	ah,09h
		int	21H
		
		mov dx,offset mesdate
		mov	ah,09h
		int	21H
		
		mov cx,4
		mov bx,offset year

pd:		
		mov	ax,[bx]
		call  	near ptr bin2asc	
		mov dx,offset buffer
		mov	ah,09H
		int	21H
		inc bx
		inc bx
		mov dl,'\'
		mov	ah,02H
		int 21H
		loop pd
		
		pop dx
		pop cx
		pop bx
		pop ax
		ret
printdata	ENDP
;------------------------------------------------
asc2bin	proc near

	push 	bx
	push	cx
	push	dx
	mov		ax,0
	
	mov		bx,3

	
	mov		dx,0
	mov		dl,buffer[bx]
	sub		dl,30H
	add		ax,dx


	mov		cx,3
	
lo:	
	mov		dx,10
	mul		dx
	mov		dx,0
	dec		bx
	mov		dl,buffer[bx]
	sub		dl,30
	add		ax,dx
	loop	lo
	
	pop		dx
	pop		cx
	pop		bx

asc2bin	endp
;------------------------------------------------
bin2asc proc near	
	push bx
	push cx
	push dx
	
	;---------先将缓冲区全部清除为空格------------------------
	mov bx, offset buffer
	mov cx, 6
blankagain:	
	mov byte ptr [bx],' '
	inc bx
	loop blankagain
	
	;---------为写入值定位到最后一位------------------------
	mov bx, offset bn-1	
	cmp ax,0	; 如果初值为0,直接写入0到缓冲区
	jz IsZero
	xor dx,dx
	mov cx,10	;采用循环除以10,得到余数的方式来进行计算
DivAgain:	
	div cx		;余数在dx中,商在Ax中
	add dl,30h
	mov [bx], dl;将余数转换乘ASCII码保存到缓冲区中
	xor dx,dx	;清除DX
	
	dec	bx		;为下一次写入做准备
	cmp ax,0
	jnz DivAgain	
	jmp bin2asc_exit

IsZero:			; 如果初值为0,直接写入0到缓冲区
	mov byte ptr[bx],'0'	

bin2asc_exit:
	pop dx
	pop cx
	pop bx
	ret
bin2asc endp
CODESEG	ENDS
		END MAIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -