Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Variant_3.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
32.42 Кб
Скачать

Содержание

Содержание 1

Введение 8

Глава 1. Теоретическая часть 9

Использование Ассемблера для разработки Windows-приложений 9

Глава 2. Практическая часть 12

Исходный код программы 13

.386 13

.model flat, stdcall 13

option casemap :none 13

13

include \masm32\include\windows.inc 13

include \masm32\include\user32.inc 13

include \masm32\include\kernel32.inc 13

includelib \masm32\lib\user32.lib 13

includelib \masm32\lib\kernel32.lib 13

13

.data 13

conTitle DB " Convert to program", 0 ;задаем текст окна 13

mes1 DB " Before: ",0 ;в mes1 переменую записуем слово 13

len_mes1 EQU $-mes1 13

mes2 DB " After: ", 0 ;в переменую mes2 записуем слово 13

len_mes2 EQU $-mes2 13

S1 DB "hello word!",0dh,0ah,0 ;вводим строку для конвертирования 13

LS1 EQU $-S1 13

13

charBuf DB " ",0 13

len_charBuf DD $-charBuf 14

14

readBuf DB ? 14

lenReadBuf DD 1 14

14

hStdIn DD 0 14

hStdOut DD 0 14

14

chrsRead DD 0 14

chrsWritten DD 0 14

14

STD_INP_HNDL DD -10 14

STD_OUTP_HNDL DD -11 14

.code 14

start: 14

call AllocConsole ;вызов консоли 14

test eax, eax ;логическая И с eax 14

jz ex ;переход на ex 14

14

push offset conTitle ;задаем титульное заглавие 14

call SetConsoleTitleA ;изменяем название консоли 14

test eax, eax ;логическая И 14

jz ex ;переход на ex 14

15

call getout_hndl ;вызов getout_hndl 15

call getinp_hndl ;вызов getinp_hndl 15

push EBX ;задаем EBX 15

mov EBX, offset mes1 ;записуем в EBX mes1 15

mov ECX, len_mes1 ;в ECX записуем длину mes1 15

call write_con ;добавляем консоль 15

pop EBX ;меняем значение EBX старое знач. утрачиваеться 15

push EBX ;изменяем EBX 15

mov EBX, offset S1 ;записуем в EBX строку которую будем конвертировать 15

mov ECX, LS1 ;в ECX записуем длину строки S1 15

call write_con ;добавляем в консоль 15

pop EBX ;меняем значение EBX старое знач. утрачиваеться 15

push EBX ;изменяем EBX 15

mov EBX, offset mes2 ;записуем в EBX строку mes2 15

mov ECX, len_mes2 ;записуем в ECX длину mes2 15

call write_con ;добавляем в консоль 15

pop EBX ;меняем значение EBX старое знач. утрачиваеться 15

15

lea ESI, dword ptr S1 ;в ESI содержит указатель на S1 15

mov ECX, dword ptr LS1 ;в ECX помещаем длину S1 16

next: 16

mov AL, BYTE PTR [ESI] ;записуем в AL байтовое значение ESI 16

cmp al, 'a' ;сравниваем AL с буквой 16

jb next_addr ;переход на метку next_addr 16

cmp AL, 'z' ;сравниваем AL с буквой 16

ja next_addr 16

and AL, 0dfh ;логическое умножение между AL и 0dfh строчные в заглавные 16

mov BYTE PTR [ESI], AL ;записуем баутовое значение ESI в AL 16

next_addr: 16

Inc esi ;esi увеличим на 1 16

loop next ;повторить next 16

16

push EBX ;изменяем EBX 16

mov EBX, offset S1 ;записуем в EBX S1 16

mov ECX, LS1 ;записуем в ECX длину S1 16

call write_con ;добавляем в сонсоль 16

pop EBX ;меняем значение EBX старое знач. утрачиваеться 16

16

call read_con ;редактируем консоль 16

ex: 16

push 0 16

call ExitProcess ;закрываем процес 16

;------ functions ---- 17

getout_hndl proc ;getout_hndl процесс 17

push STD_OUTP_HNDL ;изменяем STD_OUTP_HNDL 17

call GetStdHandle ;добавляем GetStdHandle 17

mov hStdOut, eax ;в hStdOut записуем eax 17

ret ;уменьшение указателя стека на 2 17

getout_hndl endp ;закрываем процесс 17

17

getinp_hndl proc 17

push STD_INP_HNDL 17

call GetStdHandle 17

mov hStdIn, eax 17

ret 17

getinp_hndl endp 17

17

write_con proc 17

push 0 ;lpReserved = NULL 17

push chrsWritten ;число байтов написаны на StdOut 17

17

push ECX 17

push EBX 17

push hStdOut 17

call WriteConsoleA 18

ret 18

write_con endp 18

18

read_con proc 18

push 0 ;lpReserved = NULL 18

push chrsRead 18

push lenReadBuf 18

push offset readBuf 18

push hStdIn 18

call ReadConsoleA 18

ret 18

read_con endp 18

;------------------- 18

18

end start 18

Выводы 19

Список использованных источников 20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]