Ознайомлення з середовищем MASM32. Структура програми на асемблері. Програмування вводу та виводу

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Кафедра КСА

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра ЕОМ  Звіт до лабораторної роботи № 1 з дисципліни: «Системне програмування» на тему: «Ознайомлення з середовищем MASM32. Структура програми на асемблері. Програмування вводу та виводу.» Мета: освоїти послідовність дій для компіляції програм, написаних на мові Assembler за допомогою cсередовищ MASM32 і Visual Studio 2019. Навчитися реалізовувати ввід з клавіатури та вивід на екран символьних даних. Теоретичні відомості Програма мовою асемблера має таку структуру: .686 .model flat, stdcall option casemap: none .data <ініціалізовані дані> .data? <неініціалізовані дані> .const <константи> .code <мітка> <код> end <мітка> Директива .686 вказує компілятору асемблера, що необхідно використовувати набір операцій процесора певного покоління. Директива .model дозволяє вказувати модель пам'яті та угоду про виклики. Архітектура Win32 використовує лише одну модель пам'яті – flat, що й зазначено у наведеному прикладі. Угоди про виклики визначають порядок передачі параметрів та порядок очищення стека. Директива option casemap: none змушує компілятор мови асемблера розрізняти великі та маленькі літери у мітках та іменах процедур. Директиви .data, .data?, .const та .code визначають те, що називається секціями. У Win32 немає сегментів, але адресний простір можна розділити на логічні секції. Початок однієї секції відзначає кінець попередньої. Є дві групи секцій: даних та коду. Секція .data містить ініціалізовані дані програми. Секція .data? містить неініціалізовані дані програми. Іноді потрібно лише попередньо виділити пам'ять, не ініціалізуючи її. Ця секція при цьому і призначається. Перевага неініціалізованих даних у тому, що вони не займають місця у файлі. Ви лише повідомляєте компілятору, скільки місця вам знадобиться, коли програма завантажиться в пам'ять. Секція .const містить оголошення констант, що використовуються програмою. Константи не можуть бути змінені. Спроба змінити константу викликає аварійне завершення програми. Задіяти усі три секції не обов'язково. Є лише одна секція для коду: .code. У ньому міститься весь код. <мітка> та end <мітка> встановлюють межі коду. Обидві мітки мають бути ідентичними. Весь код повинен розташовуватись між цими рядками. Будь-яка програма під Windows має, як мінімум, коректно завершитись. Для цього потрібно викликати функцію Win32 API ExitProcess. ЗАВДАННЯ: 1. За допомогою текстового редактора створити файл <прізвище>.asm , який містить програму, приведену нижче. (Параметр <прізвище> повинен містити Ваше прізвище в англійській транслітерації і мати довжину до 8 символів). 2. В тексті програми змінити повідомлення, що міститься за міткою HelloMessage так, щоб воно відображало Ваше прізвище. Зберегти внесені зміни. 3. Створити <прізвище>.exe-файл засобами системи MASM32 або Visual Studio 2019. 4. Виконати створену програму і переконатися, що вона працює коректно, тобто виводить Ваше прізвище на екран. .686 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data hConsoleOutput dd 0 NumberOfCharsWritten dd 0 HelloMessage db 'Hello, world', 10, 13 NumberOfCharsToWrite dd $-HelloMessage .code start: push -11 call GetStdHandle mov hConsoleOutput, eax push 0 push offset NumberOfCharsWritten push NumberOfCharsToWrite push offset HelloMessage push hConsoleOutput call WriteConsoleA push 0 call ExitProcess end start 5. Створити програму, яка в текстовому режимі виводить за допомогою псевдографіки зображення заданого варіантом символу. 6. Перевірити роботу створеної програми і продемонструвати її виконання. 7. Скласти звіт про виконану роботу (з приведенням тексту програми). Виконання роботи 1-4 Завдання: Код програми: .686 .model flat, stdcall option casemap:none GetStdHandle proto STDCALL, nStdHandle : DWORD WriteConsoleA proto STDCALL, hConsoleOutput : DWORD, lpBuffert : DWORD, nNumberOfCharsToWrite : DWORD, lpNumberOfCharsWritten : DWORD, lpReserved : DWORD ExitProcess proto STDCALL, uExitCode : DWORD .data hConsoleOutput dd 0 NumberOfCharsWritten dd 0 HelloMessage db ‘Bokhonok',10, 13 NumberOfCharsToWrite dd $-HelloMessage .code start: push -11 call GetStdHandle mov hConsoleOutput, eax push 0 push offset NumberOfCharsWritten push NumberOfCharsToWrite push offset HelloMessage push hConsoleOutput call WriteConsoleA push 0 call ExitProcess end start Результат виконання програми: / 5-6 Завдання: Код програми: .686 .model flat, stdcall option casemap:none AllocConsole proto STDCALL GetStdHandle proto STDCALL, nStdHandle : DWORD WriteConsoleA proto STDCALL, hConsoleOutput : DWORD, lpBuffert : DWORD, nNumberOfCharsToWrite : DWORD, lpNumberOfCharsWritten : DWORD, lpReserved : DWORD ExitProcess proto STDCALL, uExitCode : DWORD ReadConsoleA proto STDCALL, hConsoleInput : DWORD, lpBuffer : DWORD, nNumberOfCharsToRead : DWORD, lpNumberOfCharsRead : DWORD, pInputControl : DWORD .data hConsoleOutput dd 0 NumberOfCharsWritten dd 0 Symbol db 60 dup (32),10,13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10, 13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10, 13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10,13 db 9 dup (32),10 dup(219),0 dup(32),2 dup(219), 10,13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10,13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10,13 db 9 dup (32),2 dup(219),8 dup(32),2 dup(219), 10, 13 NumberOfCharsToWrite dd $-Symbol ReadBuf db 128 dup(?) hConsoleInput dd 0 .code start: call AllocConsole push -11 call GetStdHandle mov hConsoleOutput, eax push 0 push offset NumberOfCharsWritten push NumberOfCharsToWrite push offset Symbol push hConsoleOutput call WriteConsoleA push -10 call GetStdHandle mov hConsoleInput, eax push 0 push offset NumberOfCharsWritten push 128 push offset ReadBuf push hConsoleInput call ReadConsoleA push 0 call ExitProcess end start Результат виконання програми: Висновок: на даній лабораторній роботі я освоїла послідовність дій для компіляції програм, написаних на мові Assembler за допомогою cсередовищ MASM32 і Visual Studio 2019. Навчилася реалізовувати ввід з клавіатури та вивід на екран символьних даних.
Антиботан аватар за замовчуванням

16.09.2024 21:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!