You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:55:20