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

📄 date&timeshow.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 ASM
字号:
;a proc to show date&time
;there is also a TSR.
;********************************************************
;macros
	print_string	macro 	string
			push	ax
			push	dx
			mov	dx,offset string
			mov	ah,9h
			int 21h
			pop	dx
			pop	ax
		endm
	print_char	macro	char
			push	ax
			push	dx
			mov	dl,char
			mov	ah,2h
			int 21h
			pop	dx
			pop	ax
		endm
;********************************************************
	.model	small

	stack	segment	stack
		WORD	100 DUP(?)
	stack	ends

	DATA	segment	para
		msg_date	byte	'Date: ','$'
		msg_time	byte	0dh,0ah,'Time: ','$'
		count_buffer	byte	5 DUP(0),'$'
	DATA	ends

	CODE	segment	para
		assume	cs:code, ds:data, ss:stack
;********************************************************		
	main	proc	far
			mov	ax,data
			mov	ds,ax
			mov	es,ax

			call	show_date
			call	SHOW_TIME

			mov	ax,4c00h
			INT 21H

		RET		
	main	endp
;******************************************************
	show_date	proc	near
			print_string	msg_date
			mov	ah,2ah		;取得系统日期
			int 21h			;AL星期,CX年,DH月,DL日

			xor	ah,ah		
			call	DEAL_NUM	;显示星期几,0-6
			print_char	' '

			mov	ax,cx
			call	DEAL_NUM	;显示year
			print_char	'-'

			xor	ah,ah
			mov	al,dh
			call	deal_Num	;month
			print_char	'-'

			mov	al,dl
			call	DEAL_NUM	;day
			print_char	' '
		
		ret
	show_date	endp
;*******************************************************
	SHOW_TIME	proc	near
			print_string	msg_time
			
			mov	ah,2ch		;取得系统time
			INT 21h		;CH:CL hour:minute,DH:DL second:1/100s

			xor	ah,ah
			mov	al,ch
			call	DEAL_NUM

			print_char	':'

			mov	al,cl
			call	DEAL_NUM

			print_char	':'
			
			mov	al,dh
			call	DEAL_NUM
			
		RET
	SHOW_TIME	ENDP
;*******************************************************
	DEAL_NUM	PROC	NEAR		;将一个字转换成十进制并输出子程序
			push	ax
			push	bx
			push	cx
			push	dx
			push	di
			
			MOV     CX,5
			
		        MOV     BX,10
		        MOV     DI,OFFSET count_buffer+4	;从后往前保存
		next:
			XOR     DX,DX			;将DX清零 
		        DIV     BX
		        OR      DL,30H			;也可用ADD DL,30H	
		        MOV     BYTE PTR [DI],DL	;将16进制的数转换到ASCII中对应的数,0的ASCII码为 30H (48D)
		        CMP	AX,0
		        JZ	PRINT			;当商为0时,直接去打印,可不打印高位的0.
		        DEC     DI
		        LOOP    next
		PRINT:
		        MOV     DX,DI			;从DI开始打印,因为RESULT不一定够5位
		        MOV     AH,9
		        INT     21H			;调用DOS的21号中断的9号功能,将DB输出

			pop	di
			pop	dx
			pop	cx
			pop	bx
			pop	ax
	        RET
	DEAL_NUM	ENDP
;*********************************************************
	code	ends
		end	main

⌨️ 快捷键说明

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