DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт до лабораторної роботи № 1 з дисципліни «Системне програмування»

Оригінальна назва роботи

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

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

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

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

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

Про що ця робота

У звіті розглянуто ознайомлення із середовищем MASM32 та структуру програми на асемблері. Описано програмування введення і виведення символьних даних за допомогою Win32 API.

У роботі розглядаються

  • Системне програмування
  • Мова асемблера
  • MASM32
  • Структура програми на асемблері
  • Секції даних та коду
  • Введення і виведення даних
  • Win32 API

Зміст і розділи

  1. Мета
  2. Теоретичні відомості
  3. Завдання
  4. Виконання роботи
  5. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Очерклевич

Ключові поняття

MASM32Секція данихСекція кодуДирективаWin32 APIКонсольПсевдографікаКомпіляція

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра ЕОМ  Звіт до лабораторної роботи № 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 ‘[ім’я автора приховано]',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. Навчилася реалізовувати ввід з клавіатури та вивід на екран символьних даних.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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