49971 (Текстовий редактор під Windows)

2016-07-30СтудИзба

Описание файла

Документ из архива "Текстовий редактор під Windows", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49971"

Текст из документа "49971"

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

Курсова робота

з дисципліни “Програмування на мові ASM-86” на тему:

Текстовий редактор під Windows

Зміст

1. Вступ

2. Постановка задачі

3. Обґрунтування вибору методів розв’язку задачі

4. Алгоритм програми

5. Реалізація програми

6. Системні вимоги

7. Інструкція для користувача

8. Висновки

9. Використана література

Додаток


1. Вступ

Тепер комп’ютери відіграють у житті людини все більшу та більш роль. Раніше, коли ще не було комп’ютерів, чи вони були мало розповсюдженні, все робилося вручну. Коли комп’ютери одержали широке розповсюдження, комп’ютер став допомагати людині, бо він може багато операцій робити набагато швидше, ніж людина.

Інформація - цінна річ, тому для її збереження в сучасному суспільстві використовують все частіше персональний комп‘ютер. При перегляді текстових файлів виникає потреба в зручних в користуванні та розумінні програм переглядачів текстових файлів.


2. Постановка задачі

Розробити текстовий редактор під Windows (типу Notepad) на мові програмування ASM-86. Програма повинна виконувати основні дії над введеним текстом.

3. Обґрунтування вибору методів розв’язку задачі

Отже, необхідно написати текстовий редактор під Windows. Дана програма призначена для перегляду текстових файлів різного розміру. Програма може бути використана будь яким користувачем ЕОМ для перегляду потрібної інформації. При виборі алгоритму програми у мене не виникло варіантів. Тут все дуже просто. В Windows вже є функції API для роботи з текстом, іх тільки потрібно правильно викликати. Ще потрібно правильно написати обробники повідомлень.

4. Алгоритм програми

Читаємо командний рядок.

Читаємо іконку та курсор з ресурсів.

Будування головного вікна.

Ініціалізація акселераторів.

Отримання повідомлення

Якщо це WM_QUIT, то перехід до пункту 11.

Перетворимо акселератори в IDM*

Перетворимо повідомлення від клавіш

Відішлемо назад.

Перехід до пункту 5.

Закінчити програму.


5. Реалізація програми

Програма написана на мові ASM-86 з використанням команд процесора 386. Вона складається з головної програми, яка читає командний рядок, будує головне вікно, та організує головний цикл програми. Та з обробників повідомлень вікна, які і викликають функції для роботи з текстом.

Вона працює на будь якій машині де WINDOWS. При написанні програми для реалізації роботи з текстом та файлом були використані функції API WINDOWS.

Програма компілюється Turbo Assembler, зв’язується за допомогою TLINK32, та компілюються ресурси за допомогою brcc32.

tasm /m /ml /D_TASM_ winpad. asm

brcc32 winpad. rc

tlink32 /Tpe /aa /c /x winpad. obj,,,,,winpad. res

6. Системні вимоги

IBM сумісний комп’ютер із мікропроцесором Intel 80386 або старшим.

Операційна система - Windows 3.1 або старша

Пам’ять - 2M і вище

7. Інструкція для користувача

Для запуску текстового редактора під Windows, потрібно зайти в меню “Пуск", вибрати “Выполнить” та в командному рядку набрати Notepad. Exe та натиснути Enter. Також можна набрати ім’я файлу, який потрібно редагувати.

Після запуску програми з’являється оболонка, в якій вже можна набирати текст, причому, можна використовувати операції з блоком. Також, в програмі є меню, в якому є опції для читання файлу, для запису файлу, для операцій з буфером, та вивід інформації про програму.


8. Висновки

Отже, на мові ASM-86 створено текстовий редактор під Windows (типу Notepad). При постійній роботі з комп‘ютером досить часто потрібно переглянути файл. Тому дана програма є незамінною в роботі. Вона є простою в користуванні та розумінні. Під час написання цієї програми був розібраний метод писання програм під Windows.


9. Використана література

1) “Програмування на мові Асемблера ЕС ЕВМ" З.С. Брич, В.I. Воющ Москва 1989 р. ст. 166

2).“Програмування на сучасних мовах програмування”. Москва 1990 р. ст. 206

3) “Основи мови” Асемблер” В.I. Криволап. Москва 1997р. ст.309

4) “Ассемблер для початкiвцiв” М.П. Шукiн. Київ 1980р. ст.155

5) “Турбо Асемблер” Л.В. Захаров. Харків 1995 р ст.178

6) “Макро Асемблер” К.С. Кропiйко, О.Д. Богатирова. Київ - “Наука” 1991р.

7) Електронний довідник BOOK.


Додаток

Лістинг програми

; winpad. asm

; Графическое win32-приложение - текстовый редактор

;

; Компиляция TASM

; tasm /m /ml /D_TASM_ winpad. asm

; brcc32 winpad. rc

; tlink32 /Tpe /aa /c /x winpad. obj,,,,,winpad. res

include def32. inc

include user32. inc

include kernel32. inc

include comdlg32. inc

ID_MENUequ700h

ID_ACCELequ701h

ID_ABOUTequ702h

MAXSIZE equ 260; максимальное имя файла

MEMSIZEequ 65535; максимальный размер временного буфера в памяти

EditIDequ 1

.386

. model flat

. const

c_w_namedb 'Asmpad95',0; это и имя класса и имя основного окна

edit_classdb 'edit',0; предопределённое имя класса для редактора

changes_msgdb 'Save changes? ',0

filter_stringdb 'All Files',0,'*. *',0; маски для Get*FileName

db 'Text Files',0,'*. txt',0,0

. data

; структура, использующаяся Get*FileName

ofnOPENFILENAME

; стурктура, описывающая наш основной класс

wcWNDCLASSEX

flag_untitleddb1; = 1 если имя файла не определено (новый файл)

. data?

h_editwindowdd? ; идентификатор окна редактора

h_acceldd? ; идентификатор массива акселераторов

p_memorydd? ; адрес буфера в памяти

SizeReadWritedd?

msg_MSG<>

recRECT<>

bufferdbMAXSIZE dup (?) ; имя файла

window_titledbMAXSIZE dup (?), 12 dup (?)

. code

_start:

callGetCommandLine; получим нашу командную строку

movedi,eax

moval,' '

movecx,MAXSIZE

repnescasb; найдём конец имени нашей программы

cmpbyte ptr [edi],0

jecmdline_empty

movesi,edi

movedi,offset buffer

repmovsb

movflag_untitled,0

cmdline_empty:

; подготовим и зарегистрируем класс

xorebx,ebx

callGetModuleHandle; определим наш идентификатор

movesi,eax

movwc. hInstance,eax; и сохраним его в wc. hInstance

movofn. _hInstance,eax

pushIDI_APPLICATION; или IDI_ICON если иконка есть в ресурсах

pushebx; или esi если иконка есть в ресурсах

callLoadIcon

movwc. hIcon,eax

pushIDC_ARROW; предопределённый курсор (стрелка)

pushebx

callLoadCursor

movwc. hCursor,eax

pushoffset wc

callRegisterClassEx

; создадим основное окно

pushebx

pushesi

pushebx

pushebx

push400

push600

pushCW_USEDEFAULT

pushCW_USEDEFAULT

pushWS_OVERLAPPEDWINDOW

pushoffset c_w_name

pushoffset c_w_name

pushWS_EX_CLIENTEDGE

callCreateWindowEx

pusheax; для pop esi перед message_loop

pusheax

pushSW_SHOWNORMAL

pusheax

callShowWindow

callUpdateWindow

; инициализируем акселераторы

pushID_ACCEL

pushesi

callLoadAccelerators

movh_accel,eax

; цикл ожидания сообщения

popesi; ESI - идентификатор основного окна

movedi,offset msg_; EDI - структура с сообщением от него

message_loop:

pushebx

pushebx

pushebx

pushedi

callGetMessage; получим сообщение

testeax,eax; если это WM_QUIT

jzexit_msg_loop; выйти из цикла

pushedi

pushh_accel

pushesi; hWnd

callTranslateAccelerator; преобразуем акселераторы в IDM*

testeax,eax

jnzmessage_loop

pushedi

callTranslateMessage; преобразуем сообщения от клавиш

pushedi

callDispatchMessage; и отошлём обратно

jmp short message_loop

exit_msg_loop:

pushmsg_. wParam

callExitProcess; конец программы

; процедура win_proc

;

; процедура не должна изменять регистры EBP,EDI,ESI и EBX!

win_proc proc near

; параметры (с учётом push ebp)

wp_hWnd equ dword ptr [ebp+08h]

wp_uMsg equ dword ptr [ebp+0Ch]

wp_wParam equ dword ptr [ebp+10h]

wp_lParam equ dword ptr [ebp+14h]

; инициализируем стековый кадр

pushebp

movebp,esp; создадим стековый кадр

pusha; сохраним все регистры

xorebx,ebx; 0 для команд push 0

movesi,wp_hWnd; для команд push hWnd

moveax,wp_uMsg

; обработаем пришедшее сообщение

cmpeax,WM_CREATE

jeh_wm_create

cmpeax,WM_SIZE

jeh_wm_size

cmpeax,WM_DESTROY

jeh_wm_destroy

cmpeax,WM_COMMAND

jeh_wm_command

cmpeax,WM_ACTIVATE

jeh_wm_activate

cmpeax,WM_CLOSE

jeh_wm_close

def_proc:

popa

leave; если это ненужное сообщение

jmpDefWindowProc; оставить его обработчику по умолчанию

;

; обработчик WM_CLOSE

; если нужно, спрашивает, сохранить ли файл

h_wm_close:

callsave_contents

jmp short def_proc

;

; обработчик WM_CREATE

;

h_wm_create:

; здесь также можно создать toolbar и statusbar

; создадим окно редактора

pushebx

pushwc. hInstance; идентификатор основной программы

pushEditID

pushesi; hWnd

pushebx; 0

pushebx; 0

pushebx; 0

pushebx; 0

pushWS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL

pushebx; 0

pushoffset edit_class

pushebx; 0

callCreateWindowEx

movh_editwindow,eax

; передадим ему фокус

pusheax

callSetFocus

cmpflag_untitled,1

jecontinue_create

callskip_getopen; откроем файл, указанный в командной строке

continue_create:

callset_title

jmp end_wm_check

;

; обработчик WM_COMMAND

;

h_wm_command:

moveax,wp_wParam

cwde; low word contains IDM_*

subeax,100h

jbdef_proc

; обработаем сообщения от пунктов меню

call dword ptr menu_handlers [eax*4]

jmp end_wm_check

menu_handlersdd offset h_idm_new,offset h_idm_open,offset h_idm_save

dd offset h_idm_saveas,offset h_idm_exit,offset h_idm_about

dd offset h_idm_undo, offset h_idm_cut, offset h_idm_copy

dd offset h_idm_paste, offset h_idm_clear, offset h_idm_setsel

; сообщения от пунктов меню должны быть описаны в win95pad. rc именно в таком

; порядке - от IDM_NEW 100h до IDM_CLEAR 10Ah

h_idm_setsel:

push-1; - 1

pushebx; 0

pushEM_SETSEL; выделить весь текст

pushh_editwindow

callSendMessage

ret

; обработчики сообщений из меню EDIT:

h_idm_clear:

moveax,WM_CLEAR

jmp short send_to_editor

h_idm_paste:

moveax,WM_PASTE

jmp short send_to_editor

h_idm_copy:

moveax,WM_COPY

jmp short send_to_editor

h_idm_cut:

moveax,WM_CUT

jmp short send_to_editor

h_idm_undo:

moveax,EM_UNDO

send_to_editor:

pushebx; 0

pushebx; 0

pusheax

pushh_editwindow

callSendMessage

ret

; обработчик IDM_NEW

h_idm_new:

callsave_contents; запишем файл если нужно

movbyte ptr flag_untitled,1

callset_title; отметим что файл не назван

pushebx

pushebx

pushWM_SETTEXT

pushh_editwindow

callSendMessage; пошлём пустой WM_SETTEXT редактору

ret

; обработчик IDM_ABOUT

h_idm_about:

pushebx; 0

pushoffset about_proc

pushesi; hWnd

pushID_ABOUT

pushwc. hInstance

callDialogBoxParam

ret

; обработчик IDM_SAVEAS и IDM_SAVE

h_idm_save:

cmpflag_untitled,1; если файл назван

jneskip_getsave; пропустим вызов GetSaveFileName

h_idm_saveas:

; спросим имя файла

movofn. Flags,OFN_EXPLORER or OFN_OVERWRITEPROMPT

pushoffset ofn

callGetSaveFileName

testeax,eax

jzfile_save_failed

skip_getsave:

; создадим его

pushebx

pushFILE_ATTRIBUTE_ARCHIVE

pushCREATE_ALWAYS

pushebx

pushFILE_SHARE_READ or FILE_SHARE_WRITE

pushGENERIC_READ or GENERIC_WRITE

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5119
Авторов
на СтудИзбе
445
Средний доход
с одного платного файла
Обучение Подробнее