Исходный код программы. Call AllocConsole ;вызов консоли




 

На этапе постановки задачи были поставлены следующие условия:

Создать Windows-приложение на языке Ассемблер.

Далее нужно было выбрать номер варианта задания:

Номер задания равен: (N % 43) + 1, где N – номер зачетки (в данном случае 100046).

Сделав приведенные выше вычисления, получили вариант №29.

Текст варианта задания: Сделать программу преобразователь текста.

 

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

.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

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

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

len_mes1 EQU $-mes1

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

len_mes2 EQU $-mes2

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

LS1 EQU $-S1

charBuf DB " ",0

len_charBuf DD $-charBuf

ReadBuf DB?

LenReadBuf DD 1

HStdIn DD 0

HStdOut DD 0

ChrsRead DD 0

ChrsWritten DD 0

STD_INP_HNDL DD -10

STD_OUTP_HNDL DD -11

Code

start:

Call AllocConsole;вызов консоли

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

Jz ex;переход на ex

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

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

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

Jz ex;переход на ex

Call getout_hndl;вызов getout_hndl

Call getinp_hndl;вызов getinp_hndl

Push EBX;задаем EBX

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

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

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

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

Push EBX;изменяем EBX

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

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

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

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

Push EBX;изменяем EBX

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

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

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

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

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

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

next:

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

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

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

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

Ja next_addr

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

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

next_addr:

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

Loop next;повторить next

Push EBX;изменяем EBX

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

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

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

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

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

ex:

Push 0

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

;------ functions ----

Getout_hndl proc;getout_hndl процесс

Push STD_OUTP_HNDL;изменяем STD_OUTP_HNDL

Call GetStdHandle;добавляем GetStdHandle

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

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

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

Getinp_hndl proc

Push STD_INP_HNDL

Call GetStdHandle

Mov hStdIn, eax

Ret

Getinp_hndl endp

Write_con proc

push 0;lpReserved = NULL

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

Push ECX

Push EBX

Push hStdOut

Call WriteConsoleA

Ret

Write_con endp

Read_con proc

push 0;lpReserved = NULL

Push chrsRead

Push lenReadBuf

Push offset readBuf

Push hStdIn

Call ReadConsoleA

Ret

Read_con endp

;-------------------

End start

Выводы

В ходе выполнения курсовой работы было получено работоспособное Windows-приложение в результате выполнения которого программа, по вводу строки может изменять буквы нижнего регистра в буквы верхнего регистра. Данная программа может быть использована, как уже указывалось ранее, для преобразования текста. Разработанная программа соответствует всем условиям, поставленным на этапе постановки задачи.


 

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

 

1. Ю. С. Магда «Ассемблер. Разработка и оптимизация Windows-приложений», СПб, 2003 г.

2. В. В. Пирогов «Ассемблер на примерах», СПб, 2005 г.

3. В. И. Юров «Assembler» 2-е, 3-е издания, СПб, 2003, 2010 гг.

4. Уроки по Ассемблеру. https://bitfry.narod.ru/

5. Юров В.И. «Assembler. Учебник для вузов», Питер, 2-е издание, 2003 г.

6. О. А. Калашников «Ассемблер — это просто. Учимся программировать», БХВ-Петербург, 2011 г.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-04-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: