Assembly 创建计时器和top10
我用的是MASM和dosBOX 基本上,我必须根据某人完成迷宫所花的时间来创建前10名 当用户通过迷宫的初始字符时,我首先将系统时间重置为0: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 现在我的问题是,我如何将
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-makesi
指向数组,2-makedi
指向字符串,3-从文件中逐字符读取直到文件结束,4-每个字符将存储在[di]
中并增加di
,5-读取字符13和/或10时,字符串将转换为数字并存储在[si]
中,并增加si
,6-使di
指向字符串的开头(再次).你没看错我的意思,我想两者都做,这样就行了。我今天会试试看,如果它不起作用,我会写一篇新的帖子。非常感谢你,伙计。