当前位置:文档之家› 汇编显示计算机时间和日期(上午或下午、星期几)

汇编显示计算机时间和日期(上午或下午、星期几)

微机原理与接口技术编程作业
学院:xxxx学院班级:xxxxxxxxxx学号:xxxxxxxxxx姓名:xxx
【题目要求】
根据当前计算机的时间和日期,显示上午(AM)或下午(PM),并显示星期几。

【设计思路】
通过使用软中断指令“INT 21H”进行系统功能调用,获取系统时间和日期。

当AH=2AH时,可获取系统日期,有
CX=year(1980~2099)
DH = month (1~12)
DL = day (1~31)
AL = day of the week (0~6, 0=Sunday, 1=Monday, etc.)
当AH=2CH时,可获取系统时间,有
CH=hours(0~23)
CL = minutes (0~59)
DH = seconds (0~59)
DL = hundredths of seconds (0~99)
将对应的寄存器内容取出,二进制转换为ASCII码,再输出即可获知当前系统时间与日期。

其中,当小时(hours)值小于等于12时为上午(AM),大于12时为下午(PM),大于12时显示的小时数值与12进行作差操作。

星期几可由AH=2AH时系统功能调用所得的AL数值对应得到,选取相符的字符串进行显示即可。

【源码】
.MODEL SMALL
.DA TA
WEEK DB 'Sunday$','Monday$','Tuesday$','Wednesday$','Thursday$','Friday$','Saturday$'
.CODE
START: MOV AX,@DA TA
MOV DS,AX
HOUR:
MOV AH,2CH ; To get system time
INT 21H
MOV AL,CH ; Hour is in CH
MOV CH,1
CMP AL,12 ; To determine AM or PM
JLE NEXT
SUB AL,12
MOV CH,2
NEXT:AAM
MOV BX,AX
CALL DISP
MOV DL,':'
MOV AH,02H
INT 21H
MINUTE:
MOV AL,CL ; Minute is in CL AAM
MOV BX,AX
CALL DISP
MOV DL,':'
MOV AH,02H
INT 21H
SECOND:
MOV AL,DH ; Second is in DH AAM
MOV BX,AX
CALL DISP
MOV DL,' '
MOV AH,02H
INT 21H
MOV DL,'P'
CMP CH,2 ;To determine AM or PM JE PM
MOV DL,'A'
PM:MOV AH,02H
INT 21H
MOV DL,'M'
MOV AH,02H
INT 21H
MOV DL,','
MOV AH,02H
INT 21H
MOV DL,' '
MOV AH,02H
INT 21H
MOV AH,2AH ;To get system date
INT 21H
CMP AL,6 ;Day of the week is in AL (0-6) JE Sat
CMP AL,5
JE Fri
CMP AL,4
JE Thur
CMP AL,3
JE Wed
CMP AL,2
JE Tues
CMP AL,1
JE Mon
CMP AL,0
JE Sun
Sun:LEA DX,WEEK
JMP IFEND
Mon:LEA DX,WEEK+7
JMP IFEND
Tues:LEA DX,WEEK+14
JMP IFEND
Wed:LEA DX,WEEK+22
JMP IFEND
Thur:LEA DX,WEEK+32
JMP IFEND
Fri:LEA DX,WEEK+41
JMP IFEND
Sat: LEA DX,WEEK+48
JMP IFEND
IFEND:MOV AH,09H
INT 21H
MOV DL,','
MOV AH,02H
INT 21H
MOV DL,' '
MOV AH,02H
INT 21H
;Day Part
DAY:
MOV AH,2AH ; To get system date
INT 21H
MOV AL,DL ; Day is in DL
AAM
MOV BX,AX
CALL DISP
MOV DL,'/'
MOV AH,02H
INT 21H
MONTH:
MOV AL,DH ; Month is in DH
AAM
MOV BX,AX
CALL DISP
MOV DL,'/'
MOV AH,02H
INT 21H
YEAR:
ADD CX,0F830H ;To negate the effects of 16bit value
MOV AX,CX ; since AAM is applicable only for AL (YYYY -> YY) AAM
MOV BX,AX
CALL DISP
MOV AH,4CH ; To Terminate the Program
INT 21H
;Display Part
DISP PROC
MOV DL,BH ; BH Part
ADD DL,30H ; ASCII Adjustment
MOV AH,02H ; To print in DOS
INT 21H
MOV DL,BL ; BL Part
ADD DL,30H ; ASCII Adjustment
MOV AH,02H ; To print in DOS
INT 21H
RET
DISP ENDP ; End Disp Procedure
END START
【运行结果】
编译器masm编译结果和连接器连接结果如下图所示。

可执行文件运行结果如下:
从左至右依次为:时间(包含上下午的区分)、星期几和日期(日/月/年),满足题目要求。

相关主题