DOS.GetSystemTime函数2Ch精度不足,如何获取0.01秒级精准读数?
获取真正的0.01秒级时间读数问题
DOS.GetSystemTime函数(功能号2Ch)会以小时(CH)、分钟(CL)、秒(DH)和百分秒(DL)的形式返回当前时间,但实际返回的“百分秒”精度仅接近二十分秒,达不到0.01秒的要求。
我编写了一个持续调用该DOS函数的程序,只显示变化的时间戳,但结果精度不足,请问如何获取真正的0.01秒级读数?
ORG 256 Begin: mov bh, -1 Main: mov ah, 01h ; BIOS.CheckKeystroke int 16h ; -> AX ZF jz Work mov ah, 00h ; BIOS.GetKeystroke int 16h ; -> AX Pause: mov ah, 00h ; BIOS.GetKeystroke int 16h ; -> AX cmp al, 27 ; ESC jne Work ret ; TerminateProgram Work: call DOSTime ; -> CX DX cmp bh, dl je Main ; Hundredths didn't change mov bh, dl push dx ; (1) mov bl, ':' mov al, ch ; Hours call PrintTrio ; -> (AX DX) mov al, cl ; Minutes call PrintTrio ; -> (AX DX) pop cx ; (1) mov bl, '.' mov al, ch ; Seconds call PrintTrio ; -> (AX DX) mov bl, 13 mov al, cl ; Hundredths call PrintTrio ; -> (AX DX) mov dl, 10 mov ah, 02h ; DOS.PrintCharacter int 21h jmp Main ; ---------------------- ; IN (al,bl) OUT () MOD (ax,dx) PrintTrio: aam add ax, '00' push ax ; (1) mov dl, ah mov ah, 02h ; DOS.PrintCharacter int 21h pop dx ; (1) mov ah, 02h ; DOS.PrintCharacter int 21h mov dl, bl mov ah, 02h ; DOS.PrintCharacter int 21h ret ; ---------------------- ; IN () OUT (cx,dx) DOSTime: push ax mov ah, 2Ch ; DOS.GetSystemTime int 21h ; -> CX DX pop ax ret ; ----------------------
程序典型输出:
17:15:25.84 17:15:25.89 17:15:25.95 17:15:26.00 17:15:26.06 17:15:26.11 17:15:26.17 17:15:26.22 17:15:26.28 17:15:26.33 17:15:26.39 17:15:26.44 17:15:26.50 17:15:26.55 17:15:26.60 17:15:26.66 17:15:26.71 17:15:26.77 17:15:26.82 17:15:26.88 17:15:26.93 17:15:26.99 17:15:27.04 17:15:27.10
另外有其他开发者也遇到过类似问题——想用DOS函数2Ch实现延时,却因精度不足受阻。
内容的提问来源于Stack Exchange,提问作者Sep Roland
相关产品推荐
相关产品推荐

