; 实验九 - 读取时间程序 ; 功能: 使用INT 1AH读取系统时间 ; 模式: 文本模式 80x25 彩色 .MODEL SMALL .DATA TIME_MSG DB 'Current system time: ', '$' HOUR_DB '00', ':', '$' MIN_DB '00', ':', '$' SEC_DB '00', '$' CRLF DB 0DH, 0AH, '$' .CODE .STARTUP MOV AX, @DATA MOV DS, AX MAIN_LOOP: ; 获取系统时间 (INT 1AH, AH=00H) MOV AH, 00H INT 1AH ; CX:DX 中包含时钟滴答数 ; CX = 高位, DX = 低位 ; 将滴答数转换为 时:分:秒 ; 系统时钟每秒约18.2个滴答 ; 或者使用 INT 1AH, AH=02H 读取BCD格式的时间 ; 读取时间 (AH=02H) MOV AH, 02H INT 1AH ; DL = 日, DH = 时, CL = 分, CH = 秒 ; 转换小时 MOV AL, DH CALL BIN_TO_BCD MOV [HOUR_DB], AH MOV [HOUR_DB+1], AL ; 转换分钟 MOV AL, CL CALL BIN_TO_BCD MOV [MIN_DB], AH MOV [MIN_DB+1], AL ; 转换秒 MOV AL, CH CALL BIN_TO_BCD MOV [SEC_DB], AH MOV [SEC_DB+1], AL ; 清除屏幕 MOV AX, 0600H MOV BH, 07H MOV CX, 0000H MOV DX, 184FH INT 10H ; 设置光标位置 MOV AH, 02H MOV BH, 0 MOV DH, 10 MOV DL, 30 INT 10H ; 显示 "Current system time: " LEA DX, TIME_MSG MOV AH, 09H INT 21H ; 显示时间 LEA DX, HOUR_DB MOV AH, 09H INT 21H LEA DX, MIN_DB MOV AH, 09H INT 21H LEA DX, SEC_DB MOV AH, 09H INT 21H ; 延时 MOV CX, 0 MOV DX, 0 MOV AH, 86H INT 15H JMP MAIN_LOOP .EXIT ; 子程序: 将AL中的二进制数转换为BCD码 ; 输入: AL = 二进制数 (0-99) ; 输出: AH = 高位BCD, AL = 低位BCD BIN_TO_BCD PROC PUSH DX MOV AH, 0 MOV DL, 10 DIV DL ; AL = 商 (高位), AH = 余数 (低位) MOV DL, AH MOV AH, AL MOV AL, DL POP DX RET BIN_TO_BCD ENDP END