【问题标题】:Creating a timer and a top10创建一个计时器和一个 top10
【发布时间】:2017-06-01 19:19:49
【问题描述】:

我正在使用 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”,这样我就可以获得某人完成迷宫所花费的总时间以及如何将这些值存储在数组中?

【问题讨论】:

    标签: assembly masm x86-16


    【解决方案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.
    

    【讨论】:

    • 我的伙计,非常感谢。我将如何继续显示这个数组?我假设我不能使用 int 09h,因为数组末尾没有“$”。
    • @GabrielSilva,我的下一个答案包括程序number2string,通过此程序,您可以将数组中的数字转换为字符串,然后您可以使用ah=09h 显示字符串:stackoverflow.com/a/30244131/3298930
    • @GabrielSilva,等等,我想我理解错了:你想一个文件读取,而不是一个文件写入,然后存储数组中的字符串,将每个字符串转换为数字(使用我的string2number)并进行比较?好吧,不,我没有任何指向此类特定问题的链接。但是您可以发布另一个问题来做到这一点,问题是,在 StackOverflow 中您必须包含您的代码,否则您的问题将被关闭,因此您必须尝试自己做,然后您使用该代码发布问题。
    • 我会告诉你算法:1-si指向数组,2-di指向数组到一个字符串,3-从文件中逐个字符读取直到文件结束,4-每个字符将存储在[di]并增加di,5- 当读取字符 13 和/或 10 时,字符串将转换为数字并存储在 [si] 中并增加 si6- 使 di 指向到字符串的开头(再次)。
    • 你没有理解错,我想两者都做,这样就可以了。今天我会试一试,如果它不起作用,我会发一个新帖子。非常感谢老兄。
    猜你喜欢
    • 2021-04-09
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多