DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Ознайомлення з середовищем 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:17

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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