我想在win11系统 emu8086(4.08版本)环境下实现模拟运行后在屏幕中生成当前的年:月:日,但是我现在这个代码运行后一直显示00:00:00,求大佬指点修改(能给孩子来份修改后的嘛各位大佬们,一个大学生在宿舍已经碎掉了)
org 100h
start:
; 设置光标位置
mov dh, 0ah ; 行数
mov dl, 35 ; 列数
mov bh, 0 ; 页数
mov ah, 2
int 10h ; 确定光标位置,使其居中
; 隐藏光标
mov cx, 2000h
mov ah, 01h
int 10h
get_date:
; 清除屏幕防止重复显示
mov ah, 06h
mov al, 00h
mov bh, 07h
mov cx, 0000h
mov dx, 184fh
int 10h
; 获取当前日期
mov ah, 2ah
int 21h ; 调用DOS功能获取当前日期
; 年存储在CX,月存储在DH,日存储在DL
; 打印年
mov dh, 0ah ; 行数
mov dl, 35 ; 列数
mov bh, 0
mov ah, 2
int 10h ; 确定光标位置
; 年处理
mov ax, cx ; 年存储在CX
call PrintYear
; 打印分隔符 -
mov dl, '-'
mov ah, 02h
int 21h
; 打印月
mov al, dh ; 月存储在DH
call PrintMonth
; 打印分隔符 -
mov dl, '-'
mov ah, 02h
int 21h
; 打印日
mov al, dl ; 日存储在DL
call PrintDay
; 检测键盘输入
a1:
mov ah, 0bh ; 检测键盘是否有输入
int 21h
cmp al, 00h
jne a2 ; 如果有输入,跳转到a2
jmp get_date ; 如果没有输入,跳转到get_date
a2:
mov ah, 08h
int 21h ; 获取按键
cmp al, 1bh ; 判断是否按下ESC
je exit ; 如果按下ESC,退出程序
jmp get_date ; 返回重新获取日期
exit:
mov ah, 4ch ; 退出程序
int 21h
; 子程序:打印年
PrintYear:
; 打印年份,年份是一个四位数
mov bl, 10
xor dx, dx ; 清空dx(用来存储高位)
div bl ; ax / 10
add dl, '0' ; 将低位数字转为ASCII
mov ah, 02h
int 21h ; 打印高位
mov dl, dh ; 打印低位
add dl, '0' ; 将低位数字转为ASCII
int 21h
ret
; 子程序:打印月
PrintMonth:
; 打印月,月份是1到12,确保是两位数格式
mov bl, 10
xor dx, dx
div bl ; ax / 10
add dl, '0'
mov ah, 02h
int 21h
mov dl, dh
add dl, '0'
int 21h
ret
; 子程序:打印日
PrintDay:
; 打印日,日是1到31,确保是两位数格式
mov bl, 10
xor dx, dx
div bl ; ax / 10
add dl, '0'
mov ah, 02h
int 21h
mov dl, dh
add dl, '0'
int 21h
ret
org 100h
start:
; 设置光标位置
mov dh, 0ah ; 行数
mov dl, 35 ; 列数
mov bh, 0 ; 页数
mov ah, 2
int 10h ; 确定光标位置,使其居中
; 隐藏光标
mov cx, 2000h
mov ah, 01h
int 10h
get_date:
; 清除屏幕防止重复显示
mov ah, 06h
mov al, 00h
mov bh, 07h
mov cx, 0000h
mov dx, 184fh
int 10h
; 获取当前日期
mov ah, 2ah
int 21h ; 调用DOS功能获取当前日期
; 年存储在CX,月存储在DH,日存储在DL
; 打印年
mov dh, 0ah ; 行数
mov dl, 35 ; 列数
mov bh, 0
mov ah, 2
int 10h ; 确定光标位置
; 年处理
mov ax, cx ; 年存储在CX
call PrintYear
; 打印分隔符 -
mov dl, '-'
mov ah, 02h
int 21h
; 打印月
mov al, dh ; 月存储在DH
call PrintMonth
; 打印分隔符 -
mov dl, '-'
mov ah, 02h
int 21h
; 打印日
mov al, dl ; 日存储在DL
call PrintDay
; 检测键盘输入
a1:
mov ah, 0bh ; 检测键盘是否有输入
int 21h
cmp al, 00h
jne a2 ; 如果有输入,跳转到a2
jmp get_date ; 如果没有输入,跳转到get_date
a2:
mov ah, 08h
int 21h ; 获取按键
cmp al, 1bh ; 判断是否按下ESC
je exit ; 如果按下ESC,退出程序
jmp get_date ; 返回重新获取日期
exit:
mov ah, 4ch ; 退出程序
int 21h
; 子程序:打印年
PrintYear:
; 打印年份,年份是一个四位数
mov bl, 10
xor dx, dx ; 清空dx(用来存储高位)
div bl ; ax / 10
add dl, '0' ; 将低位数字转为ASCII
mov ah, 02h
int 21h ; 打印高位
mov dl, dh ; 打印低位
add dl, '0' ; 将低位数字转为ASCII
int 21h
ret
; 子程序:打印月
PrintMonth:
; 打印月,月份是1到12,确保是两位数格式
mov bl, 10
xor dx, dx
div bl ; ax / 10
add dl, '0'
mov ah, 02h
int 21h
mov dl, dh
add dl, '0'
int 21h
ret
; 子程序:打印日
PrintDay:
; 打印日,日是1到31,确保是两位数格式
mov bl, 10
xor dx, dx
div bl ; ax / 10
add dl, '0'
mov ah, 02h
int 21h
mov dl, dh
add dl, '0'
int 21h
ret