首先,忘記所謂的字符串指令(scas,comps,movs)。其次,你需要一個帶有索引的固定指針(dispkacement),例如[esi+ebx]
。你認爲WriteString
需要一個以空字符結尾的字符串嗎?
INCLUDE Irvine32.inc
.DATA
selectedWords BYTE "BICYCLE"
guessWords BYTE SIZEOF selectedWords DUP ('-'), 0 ; With null-termination for WriteString
inputLetter BYTE 'C'
.CODE
main PROC
mov esi, offset selectedWords ; Source
mov edi, offset guessWords ; Destination
mov ecx, LENGTHOF selectedWords ; Number of bytes to check
mov al, inputLetter ; Search for that character
xor ebx, ebx ; Index EBX = 0
ride_hard_loop:
cmp [esi+ebx], al ; Compare memory/register
jne @F ; Skip next line if no match
mov [edi+ebx], al ; Hang 'em lower
@@:
inc ebx ; Increment pointer
dec ecx ; Decrement counter
jne ride_hard_loop ; Jump if ECX != 0
mov edx, edi
call WriteString ; Irvine32: Write a null-terminated string pointed to by EDX
exit ; Irvine32: ExitProcess
main ENDP
END main
順便說一句,與hang子手你也可以使用不同的方法,有布爾陣列的字母大小,要記住,哪個字符已經被猜到了。然後,在輸出當前已知的單詞部分時,可以逐字逐句瀏覽「選定單詞」,並根據字母布爾數組的狀態輸出「 - 」或字母本身。所以你根本不需要「猜詞」。在格式化輸出之後,您可以保留多少字母顯示爲'''',這樣您就可以使用它來確定是否有更多字母需要猜測,或者單詞是否完整。 – Ped7g