2017-06-01 28 views
1

我使用MASM和DOSBox中創建一個定時器和一個TOP10

基本上我有基於時間有人拿了完成一個迷宮創建一個前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

分鐘進來字節大小(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. 
+0

我的人,謝謝你這麼多。我將如何繼續顯示這個數組?我假設我不能使用int 09h,因爲數組末尾沒有「$」。 –

+1

@GabrielSilva,我的下一個答案包括程序'number2string',用這個程序你可以將數組中的數字轉換爲字符串,然後你可以用'ah = 09h'顯示字符串:https://stackoverflow.com/ a/30244131/3298930 –

+0

你是一個救命的人。 –