Assembly 创建计时器和top10

Assembly 创建计时器和top10,assembly,masm,x86-16,Assembly,Masm,X86 16,我用的是MASM和dosBOX 基本上,我必须根据某人完成迷宫所花的时间来创建前10名 当用户通过迷宫的初始字符时,我首先将系统时间重置为0: mov ah, 2Dh mov ch, 00 mov cl, 00 mov dh, 00 int 21h 然后当用户到达迷宫的末端时,我再次获得系统时间,并将时间存储在两个变量中 mov ah, 2Ch int 21h mov Final_Min, cl mov Final_Sec, dh 现在我的问题是,我如何将

我用的是MASM和dosBOX

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

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

mov   ah, 2Dh
mov   ch, 00
mov   cl, 00
mov   dh, 00
int   21h
然后当用户到达迷宫的末端时,我再次获得系统时间,并将时间存储在两个变量中

mov   ah, 2Ch
int   21h
mov   Final_Min, cl
mov   Final_Sec, dh
现在我的问题是,我如何将这些“最终分钟”转换为秒,并将它们添加到“最终秒”,这样我就可以得到某人完成迷宫所花费的总时间,以及如何将这些值存储在数组中?

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

伙计,非常感谢你。我将如何继续显示此阵列?我假设我不能使用int 09h,因为数组末尾没有“$”。@GabrielSilva,我的下一个答案包括过程
number2string
,通过这个过程,你可以将数组中的数字转换成字符串,然后你可以用
ah=09h
显示字符串:@GabrielSilva,等等,我想我理解错了:您想从文件中读取而不是写入文件,并将字符串存储在数组中,将每个字符串转换为数字(使用我的
string2number
)并进行比较吗?嗯,不,我与这样一个具体的问题没有任何联系。但是你可以发布另一个问题来做这件事,问题是,在StackOverflow中,你必须包含你的代码,否则你的问题将被关闭,所以你必须自己尝试,然后用代码发布一个问题。我将告诉你算法:1-make
si
指向数组,2-make
di
指向字符串,3-从文件中逐字符读取直到文件结束,4-每个字符将存储在
[di]
中并增加
di
,5-读取字符13和/或10时,字符串将转换为数字并存储在
[si]
中,并增加
si
,6-使
di
指向字符串的开头(再次).你没看错我的意思,我想两者都做,这样就行了。我今天会试试看,如果它不起作用,我会写一篇新的帖子。非常感谢你,伙计。