Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт по Лаб. №2.doc
Скачиваний:
6
Добавлен:
27.11.2019
Размер:
286.21 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Львівський Державний Інститут Новітніх Технологій та Управління ім. В.Чорновола

Факультет інформаційних технологій

Звіт по Лабораторній роботі № 2

«Структури даних для використання системних функцій»

з дисципліни

«Системне Програмування»

Виконав

Студент групи КІ-21

Денисюк В.В.

Перевірив

Зербіно Д.Д.

бал «____»

Львів-2010

Мета роботи: навчитися будувати структури даних для використання функцій Win32 API при програмуванні в операційній системі Windows.

Порядок виконання роботи:

  1. Набрати подану нижче програму для визначення поточної дати та місцевого часу, зберегти її у файлі з розширенням “.ASM”.

  2. Відкомпілювати набрану програму та запустити одержаний exe-файл на виконання.

  3. Розглянути текст програми, знайти виклик підпрограми _wsprintfA для перетворення двійкового значення в рядок десяткових цифр.

  4. Додати до виводу значення секунд та мілісекунд.

  5. Змінити текст програми таким чином, щоб функція API MessageBoxA виводила на екран вікно з двома кнопками: <OK> та <Cancel>. При натисненні кнопки <OK> програма повинна знову отримати системний час, а при натисненні кнопки <Cancel> - програма завершує роботу. Для цього треба знайти у файлі win119.inc константу MB_OKCANCEL та вказати її як стиль вікна MessageBoxA. Після відповіді користувача треба порівняти регістр EAX з константою IDOK за допомогою асемблерної команди “cmp eax, IDOK”. Якщо значення однакові, то зробити перехід на початок програми по команді “jz Start”.

Текст програми

; Програма для визначення поточної дати та місцевого часу

.386

.model flat,STDCALL

extrn ExitProcess: proc

extrn GetLocalTime: proc

extrn MessageBoxA: proc

extrn _wsprintfA:Proc

.data

Time_title db ' Лабораторна робота №2',0

TIME_STRING db 2000 dup (0)

_ESP dd 0

FORMAT_STRING:

db ' Системний час:',0dh,0ah,0dh,0ah

db ' Рiк: %ld',0dh,0ah

db ' Мiсяць: %ld',0dh,0ah

db ' День тижня: %ld',0dh,0ah

db ' Число: %ld',0dh,0ah

db ' Година: %ld',0dh,0ah

db ' Хвилин: %ld',0dh,0ah

db 0

Time_struc:

wYear dw 0 ; Рік

wMonth dw 0 ; Місяць

wDayOfWeek dw 0 ; День тиждня

wDay dw 0 ; Число

wHour dw 0 ; Година

wMinute dw 0 ; Хвилина

wSecond dw 0 ; Секунда

wMilliseconds dw 0 ; Мілісекунда

;==============================================================

.code

Start: push offset Time_struc

call GetLocalTime

mov _ESP,esp ; Збереження адреси стеку

xor eax,eax ; EAX=0

mov ax,wMinute

Push eax ; наступні параметри з стеку не забираються

mov ax,wHour

push eax

mov ax,wDay

push eax

mov ax,wDayOfWeek

push eax

mov ax,wMonth

push eax

mov ax,wYear

push eax

push offset FORMAT_STRING

push offset TIME_STRING

call _wsprintfA ; Вивід параметрів

mov esp,_ESP ; та очищення стеку

call MessageBoxA, 0, offset TIME_STRING, offset Time_title, 0

call ExitProcess, 0

end Start

Результат виконання програми:

  1. Замінити виклик функції API GetLocalTime на виклик однієї з наступних функцій (змінивши відповідним чином параметри): GetSystemTime, DeleteFileA, CopyFileA, RemoveDirectoryA, SetCurrentDirectoryA, SetVolumeLabelA, GetTempFileNameA, SetFileAttributesA, GetFileAttributesA, GetLogicalDrives, GetLogicalDriveStringsA. Для кожної функції додати відповідні дані та команди, якщо вони потрібні.

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

Виконання роботи:

Додавання до виводу значень: секунд, мілісекунд

Текст програми:

; Програма для визначення поточної дати та місцевого часу

.386

.model flat,STDCALL

extrn ExitProcess: proc

extrn GetLocalTime: proc

extrn MessageBoxA: proc

extrn _wsprintfA:Proc

.data

Time_title db ' Лаб.№2 Виконав ст.гр.КІ-21 Денисюк В.В.',0

TIME_STRING db 2000 dup (0)

_ESP dd 0