Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 16.09.2018, 18:43   #1
Alexey3191
Новичок
 
Регистрация: 16.09.2018
Сообщений: 1
Репутация: 10
По умолчанию [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 в 19:49.
Alexey3191 вне форума   Ответить с цитированием
Старый 16.09.2018, 20:21   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,230
Репутация: 1048
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена строчных букв на прописные, повторить цифру дважды Tris0606 Помощь студентам 1 12.10.2017 10:30
Дан файл f,компоненты которого являются символами.Получить файл g,образованный из файла f заменой всех строчных букв на прописные qaguero11 Общие вопросы Delphi 1 05.07.2016 18:01
Ошибка при переводе строчных букв в прописные и обратно kakawkaization Общие вопросы C/C++ 8 15.10.2015 13:19
преобразование латинских заглавных букв в строчные на assembler lastochka Assembler 6 19.05.2013 11:58


22:49.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru