2017-06-04 79 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

相关问题