【发布时间】:2017-06-04 11:50:41
【问题描述】:
我不能使用这个声明,因为 selectedWords 可以是任何字符串。
.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
但是在这个函数之后,我得到了guessWords什么是字符串-------并且and上没有0。那么如何使字符串guessWords=--------0?
由于代码中的一些其他比较,字符串末尾有 0 对我来说很重要..
【问题讨论】:
-
自己把 0 放在那里?另请注意,
stosw是字,而不是字节。 -
如果我放 stosb 我会得到这样的东西prntscr.com/ffqvdf 然后我不明白我是如何得到更多的信的..然后我想要.. :(
-
关于缓冲区...是的,这就是汇编语言的故事,你必须自己处理动态大小,语言提供的帮助很少。对于hangman游戏,假设要猜测的单词/句子的最大长度是合理的,例如200 ...然后简单地为数据段中选择和猜测的单词分配200B,仅使用该缓冲区的第一部分来获取较短的单词/句子(确保正确清除它)。对于不同的任务,动态数据可能以公斤、兆或千兆为单位,您必须处理动态内存分配。这里200就够了
标签: arrays string assembly masm irvine32