Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2018, 17:43   #1
Alexey3191
Новичок
Джуниор
 
Регистрация: 16.09.2018
Сообщений: 1
По умолчанию [Assembler] преобразование строчных букв в прописные на assembler

Здравствуйте у меня проблема. Нужно написать программу в MASM32 которая преобразует строчные буквы в прописные.


Код:
Код:
.386
.model flat, stdcall
option casemap :none


include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

; —---- Прототипы функций —----------

WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data
szDisplayName db "ПРЕОБРАЗОВАНИЕ СТРОЧНЫХ СИМВОЛОВ В ПРОПИСНЫЕ",0
CommandLine dd 0
hWnd dd 0
hInstance dd 0
szClassName db "Demo_Class",0
s1 db "Введенный символ: ",0
ls equ $-s1-1
d1 db "Преобразованный символ: ",0
ld equ $-d1-1

.code

start:
push NULL
call GetModuleHandle
mov hInstance, EAX

call GetCommandLine
mov CommandLine, EAX

push SW_SHOWDEFAULT
push CommandLine
push NULL
push hInstance
call WinMain

push EAX
call ExitProcess

WinMain proc hInst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD

; Локальные переменные процедуры

LOCAL wc :WNDCLASSEX
LOCAL msg :MSG

; Заполнение структуры WNDCLASSEX требуемыми параметрами

mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW

mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL

push hInst
pop wc.hInstance

mov wc.hbrBackground, COLOR_BTNFACE+5
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
invoke LoadIcon, NULL, IDI_APPLICATION

mov wc.hIcon, eax
invoke LoadCursor, NULL, IDC_ARROW

mov wc.hCursor, eax
mov wc.hIconSm, 0
invoke RegisterClassEx, ADDR wc

invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,ADDR szClassName,
ADDR szDisplayName, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, hInst, NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd

; цикл обработки сообщений

StartLoop:
push 0
push 0
push NULL
lea eax, msg
push eax
call GetMessage

cmp eax, 0
je ExitLoop

lea eax, msg
push eax
call TranslateMessage

lea eax, msg
push eax
call DispatchMessage

jmp StartLoop
ExitLoop:

mov eax, msg.wParam
ret

WinMain endp

WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD

LOCAL hdc :HDC
LOCAL ps :PAINTSTRUCT
LOCAL rect :RECT
LOCAL x, y :DWORD

cmp uMsg, WM_PAINT
jne next_1

invoke BeginPaint, hWnd, ADDR ps
mov hdc, EAX

invoke GetClientRect, hWin, ADDR rect
mov EAX, rect.right
sub EAX, rect.left
shr EAX, 2
mov x, EAX

mov EAX, rect.bottom
sub EAX, rect.top
shr EAX, 1
mov y, EAX

invoke TextOut, hdc, x, y, ADDR s1,ls
add y, 20
invoke TextOut, hdc, x, y, ADDR d1,ld

lea EDX, ps
push EDX
push hWnd
call EndPaint
ret
next_1:
cmp uMsg, WM_CHAR
jne next_2

invoke GetDC, hWin
mov hdc, EAX
invoke GetClientRect, hWin, ADDR rect

mov EAX, wParam
lea EDI, s1
add EDI, ls
sub EDI, 2
mov [EDI], AL

lea EDI, d1
add EDI, ld
sub EDI, 2
mov [EDI], AL

push dword ptr [EDI]
call IsCharUpper
cmp EAX, 1
je next
push EDI
exit:
int 	21h 
WndProc endp 
end start
Запускаю через консольку и выдает две ошибки:
21.asm<159> : error A2006: underfined symbol : next_2
21.asm<179> : error A2006: underfined symbol : next

Последний раз редактировалось Alexey3191; 16.09.2018 в 18:49.
Alexey3191 вне форума Ответить с цитированием
Старый 16.09.2018, 19:21   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

переходишь на метки, которых нет в коде
и приложение гибридное: не-то консоль, не-то окно
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена строчных букв на прописные, повторить цифру дважды Tris0606 Помощь студентам 1 12.10.2017 09:30
Дан файл f,компоненты которого являются символами.Получить файл g,образованный из файла f заменой всех строчных букв на прописные qaguero11 Общие вопросы Delphi 1 05.07.2016 17:01
Ошибка при переводе строчных букв в прописные и обратно kakawkaization Общие вопросы C/C++ 8 15.10.2015 12:19
преобразование латинских заглавных букв в строчные на assembler lastochka Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 19.05.2013 11:58