Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра «Електронні обчислювальні машини»
Лабораторна робота №2
“ОСОБЛИВОСТІ ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ ФУНКЦІЙ АРІ”
з дисципліни:
“Системного програмування”
Мета роботи:
Ознайомитись з можливостями програмування на Асемблері під Windows та засвоїти навики використання функцій АРІ.
Порядок виконання роботи:
Набрати подану нижче програму для визначення імені комп'ютера (яке задається системним адміністратором при установці операційної системи), зберегти її у файлі з розширенням ".ASM ".
Відкомпілювати за допомогою MASM32 набрану програму та запустити одержаний exe-файл на виконання. Записати ім'я комп'ютера, яке отримала програма.
Розглянути текст програми, вивчити загальну структуру програми із застосуванням функцій Win32 API.
Замінити виклик функції API GetComputerNameA на виклик однієї з функцій (згідно варіанту), змінивши відповідним чином параметри.
Створити ехе-файл модифікованої програми та продемонструвати його роботу.
Підготувати та захистити звіт. В звіті обов’язково мають бути описані параметри виклику функції.
19
CharLowerA
Виконання роботи:
Лістинг програми
.586 ;для процесора не нижче INTEL-586
.model flat, STDCALL ;компілювати як програму для WIN32
option casemap :none ;код чутливий до регістру літер
;Визначення зовнішніх процедур:
include \masm32\include\windows.inc ;завжди першим
include \masm32\macros\macros.asm ;підтримка макросів MASM
;-------------------------------підключення файлів з форматами прототипів виклику функцій
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
;-------------------------------підключення заголовків бібліотек експортованих функцій
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data ;вміст сегменту даних
_title db ' Лабораторна робота № 5 ', 0 ;текст заголовку
_message_ConvertToLower db ' ConvertToLowerCase character ', 0 ;текст повідомлення
_message_ERROR db ' ERROR: illegal characters ',0 ;текст повідомлення
_Symbol db 'Program',0 ;текст, який перевіряємо
.code ;вміст сегменту коду
Start:
;формування параметрів для виклику заданої функції
xor eax, eax
mov al, _Symbol
push eax ;завантаження даного символу
.IF ( EAX >= 'A' && EAX <= 'Z' ) || ( EAX >= 'a' && EAX <= 'z' )
.ELSE
mov EBX, 0
jmp error ;перехід, якщо не виконується умова
.ENDIF
call CharLowerA ;виклик функції API
error:
;формування параметрів вікна для відображення результату
push 40h ;стиль вікна - одна кнопка "ОК"
push offset _title ;адреса рядка із заголовком
.IF EBX == 0 ;адреса потрібного повідомлення
push offset _message_ERROR
jmp go_error ;перехід, якщо помилка
.ENDIF
.IF EAX
push offset _message_ConvertToLower
.ENDIF
go_error:
push 0 ;хендл програми-власника вікна
call MessageBoxA ;виклик функції API
push 0 ;код виходу з програми
call ExitProcess ;завершення програми
end Start ;закінчення сегменту коду
Параметри виклику функції:
Функція CharLower конвертує рядок символів або одиничний символ у нижній регістр. Якщо операнд - рядок символів, функція перетворює символи на місці.
LPTSTR CharLower (
LPTSTR lpsz
);
Результати виконання програми:
/ /
а) б)
Рис.1 Результат виконання програми. Повідомлення, що перший символ даного рядка а) відконвертувало у нижній регістрі; б) помилковий і не є літерою англійської абетки.
Висновки:
Під час виконання даної лабораторної роботи, я ознайомився з можливостями програмування на ассемблерній мові під Windows та засвоїв навики використання функцій АРІ.