MASM32. Работа со строками
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
prompt db "Введите строку:",0
title db "Палиндромы",0
buffer db 256 dup(0)
message db 256 dup(0)
palindrome db 256 dup(0)
space db " ",0
wordCount dd 0
.code
Winmain proc
start:
; Выводим диалоговое окно для ввода строки
invoke MessageBoxA, NULL, addr prompt, addr title, MB_OKCANCEL
cmp eax, IDCANCEL
je exit
invoke GetDlgItemTextA, eax, 0, addr buffer, 256
; Перебираем слова в строке
lea esi, buffer
mov ebx, 0
mov wordCount, 0
wordLoop:
; Находим длину текущего слова
mov edi, esi
findEndOfWord:
cmp byte ptr [edi], ' '
je endOfWord
cmp byte ptr [edi], 0
je endOfWord
inc edi
jmp findEndOfWord
endOfWord:
mov ecx, edi
sub ecx, esi
; Проверяем, является ли слово палиндромом
mov eax, esi
add edi, -1
palindromeLoop:
cmp eax, edi
jge notPalindrome
mov al, byte ptr [eax]
mov bl, byte ptr [edi]
cmp al, bl
jne notPalindrome
inc eax
dec edi
jmp palindromeLoop
palindrome:
; Если слово является палиндромом, добавляем его в строку результатов
mov eax, esi
mov ecx, edi
sub ecx, esi
mov edi, offset palindrome
copyPalindrome:
cmp eax, esi
je endOfWordLoop
mov al, byte ptr [eax]
mov byte ptr [edi], al
inc edi
inc eax
jmp copyPalindrome
endOfWordLoop:
mov byte ptr [edi], 0
invoke lstrcatA, addr message, offset palindrome
invoke lstrcatA, addr message, addr space
inc wordCount
; Переходим к следующему слову в строке
add esi, ecx
cmp byte ptr [esi], 0
je endOfLine
inc esi
jmp wordLoop
notPalindrome:
add esi, ecx
cmp byte ptr [esi], 0
je endOfLine
inc esi
jmp wordLoop
endOfLine:
; Если не найдено ни одного палиндрома, выводим соответствующее сообщение
cmp wordCount, 0
jne showMessage
invoke lstrcpyA, addr message, "Нет палиндромов в строке"
Winmain endp
End Winmain
Выдает следующие ошибки:
\masm32\include\winextra.inc(11052) : error A2026:constant expected
\masm32\include\winextra.inc(11053) : error A2026:constant expected
laba5.asm(24) : error A2008:syntax error : title
laba5.asm(24) : error A2042:statement too complex
laba5.asm(60) : error A2005:symbol redefinition : palindrome
laba5.asm(98) : error A2084:constant value too large
laba5.asm(98) : error A2114:INVOKE argument type mismatch : argument : 2
laba5.asm(26) : error A2006:undefined symbol : exit
laba5.asm(97) : error A2006:undefined symbol : showMessage