创建计时器和top10

时间:2017-06-01 19:19:50

标签: assembly masm x86-16

我使用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"所以我可以得到有人用来完成迷宫的总时间以及如何将这些值存储在一个数组中?

1 个答案:

答案 0 :(得分:1)

分钟以字节大小(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.