2017-06-04 119 views
1

我無法使用此聲明,因爲selectedWords可以是任何字符串。使字符串---以0結尾

.DATA 
guessWords BYTE SIZEOF selectedWords DUP ('-'), 0 

所以我嘗試這樣做:

;Wordls what we select by rundom code 
selectedWords BYTE ? 
lengthSelectedWorld DWORD ? 

;Letter what we guess, input from keyboard 
guessLetter BYTE ? 
guessWords BYTE ? 
;Letter what are unknows, change with - 
letterUnknown BYTE "-", 0 

而且我寫這個功能

make_array1 PROC  

    mov edx,OFFSET selectedWords 
    call StrLength 
    mov lengthSelectedWorld,eax 
    mov lengthSelectedWorld1 ,eax 
    inc lengthSelectedWorld 

    loop_add_more: 
     cmp lengthSelectedWorld, 1 
     je done 
     dec lengthSelectedWorld  
     mov eax, '-' 
     mov ecx, lengthSelectedWorld1 
     mov edi, offset guessWords 
     rep stosw 

     mov edx, offset guessWords 
     call WriteString 
     call Crlf ;stampamo enter novi red 

     jmp loop_add_more  

    done: 
     mov eax, '0' 
     mov ecx, lengthSelectedWorld1 
     mov edi, offset guessWords 
     rep stosw 

     mov edx, offset guessWords 
     call WriteString 
     call Crlf ;stampamo enter novi red 

     ret 

make_array1 ENDP 

但這funcion後,我得到guessWords什麼是字符串----- - 並且沒有0和。那麼如何讓字串guessWords = ------- 0?

它非常重要,我對字符串的,因爲在代碼中的一些其他比較學結束0 ..

enter image description here

+0

只要自己把0放在那裏?還要注意'stosw'是單詞,而不是字節。 – Jester

+0

如果我把stosb我得到這樣的http://prntscr.com/ffqvdf然後我不知道我如何得到更多的信..然後我想.. :( – SakaSerbia

+0

關於緩衝區...是的,這是故事彙編語言,你必須自己處理動態大小,這種語言幾乎沒有任何幫助。對於hangman遊戲,假設某些最大長度的單詞/句子被猜測是合理的,例如200 ...然後簡單地分配200B對於數據段中的被選擇和猜測的字,僅使用該緩衝區的第一部分用於較短的單詞/句子(確保將其正確地清除)。對於不同的任務,其中動態數據可能以千克或兆字節或千兆字節爲單位,你必須處理動態內存分配,這裏有200個就足夠了 – Ped7g

回答

1

selectedWords BYTE ?儲量只有我一個selectedWords字節。與guessWords BYTE ?相同的問題。不要使用動態分配的內存作爲新手。在任何情況下預留足夠的空間:guessWords BYTE 50 DUP (?)。問號表示MASM可以決定將其視爲未初始化的內存(不存儲在.exe文件中,但在程序啓動時分配)。

STOSW存儲WORD(=兩個字符)。但Irvine的StrLength返回字符串的字節數。改爲使用STOSB。在STOSB之後,EDI指向最後存儲的AL之後的字符。您可以在那裏存儲空值。如果你想看到它,暫時將0改爲'0'。

INCLUDE Irvine32.inc 

.DATA 

;Wordls what we select by rundom code 
selectedWords BYTE "WEIGHTLIFTING", 0 
lengthSelectedWord DWORD ? 

;Letter what we guess, input from keyboard 
guessLetter BYTE ? 
guessWords BYTE 50 DUP (?) 

;Letter what are unknows, change with - 
letterUnknown BYTE "-", 0 

.CODE 

make_array1 PROC 

    mov edx,OFFSET selectedWords 
    call StrLength      ; Irvine32: Length of a null-terminated string pointed to by EDX 
    mov lengthSelectedWord,eax 

    loop_add_more: 
     mov al, '-'      ; Default charcter for guessWords 
     mov ecx, lengthSelectedWord  ; REP counter 
     mov edi, offset guessWords  ; Destination 
     rep stosb      ; Build guessWords 
     mov BYTE PTR [edi], 0   ; Store the null termination 

     mov edx, offset guessWords 
     call WriteString    ; Irvine32: write a string pointed to by EDX 
     call Crlf      ; Irvine32: new line 

     ret 

make_array1 ENDP 

main PROC 

    call make_array1 
    exit        ; Irvine32: ExitProcess 

main ENDP 

END main 
+0

它的工作.. http://prntscr.com/ffsyza問題是我玩動態分配的內存,我得到了一些奇怪的東西..當我寫入selectedWords BYTE 「舉重「,0全部湊在一起.. – SakaSerbia

+1

@SakaSerbia:非常好。而現在的圖形 - 我不想失去我的鵝,奠定金蛋(upvotes,接受):-) :-) – rkhb

相關問題