创建计时器和 top10

Creating a timer and a top10

我正在使用 MASM 和 dosBOX

基本上,我必须根据某人完成迷宫所花费的时间来创建前 10 名。

当用户通过迷宫的初始字符时,我首先将系统时间重置为 0:

mov   ah, 2Dh
mov   ch, 00
mov   cl, 00
mov   dh, 00
int   21h

然后当用户到达迷宫的尽头时,我再次获取系统时间并将时间存储在 2 个变量中。

mov   ah, 2Ch
int   21h
mov   Final_Min, cl
mov   Final_Sec, dh

现在我的问题是,我如何将这些 "Final_Min" 转换为秒并将它们添加到 "Final_Sec" 以便我可以获得某人完成迷宫所花费的总时间以及如何存储这些数组中的值 ?

分钟以字节大小表示 (cl),但一旦转换为秒,一个字节就放不下了,因此我们必须使用字大小变量:

Final_Min  dw ?           ;WORD SIZE VARIABLES.
Final_Sec  dw ?
Total_Time dw ?
array      dw 10 dup(?)

  mov  ah, 2Ch
  int  21h                ;GET TIME.

;▼ MOVE BYTE SIZE MINUTES INTO WORD SIZE VARIABLE.  

  xor  ch, ch
  mov  Final_Min, cx      ;MINUTES FROM CL.

;▼ MOVE BYTE SIZE SECONDS INTO WORD SIZE VARIABLE.  

  mov  dl, dh
  xor  dh, dh
  mov  Final_Sec, dx      ;SECONDS FROM DH.

;▼ CONVERT MINUTES TO SECONDS AND ADD THEM.

  mov  ax, Final_Min
  mov  bx, 60
  mul  bx                 ;AX * BX = DX:AX.   
  add  ax, Final_Sec
  mov  Total_Time, ax

;▼ MOVE TOTAL TIME TO FOURTH POSITION IN ARRAY.

  mov  ax, Total_Time
  lea  si, array
  mov  si + 6, ax         ;0=FIRST, 2=SECOND, 4=THIRD, 6=FOURTH.