- •; Програма для визначення поточної дати та місцевого часу
- •Push eax ; наступні параметри з стеку не забираються
- •Виконання роботи:
- •; Програма для визначення поточної дати та місцевого часу
- •Push eax ; наступні параметри з стеку не забираються
- •; Програма для визначення поточної дати та місцевого часу
- •Push eax ; наступні параметри з стеку не забираються
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Львівський Державний Інститут Новітніх Технологій та Управління ім. В.Чорновола
Факультет інформаційних технологій
Звіт по Лабораторній роботі № 2
«Структури даних для використання системних функцій»
з дисципліни
«Системне Програмування»
Виконав
Студент групи КІ-21
Денисюк В.В.
Перевірив
Зербіно Д.Д.
бал «____»
Львів-2010
Мета роботи: навчитися будувати структури даних для використання функцій Win32 API при програмуванні в операційній системі Windows.
Порядок виконання роботи:
Набрати подану нижче програму для визначення поточної дати та місцевого часу, зберегти її у файлі з розширенням “.ASM”.
Відкомпілювати набрану програму та запустити одержаний exe-файл на виконання.
Розглянути текст програми, знайти виклик підпрограми _wsprintfA для перетворення двійкового значення в рядок десяткових цифр.
Додати до виводу значення секунд та мілісекунд.
Змінити текст програми таким чином, щоб функція 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
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
Push eax ; наступні параметри з стеку не забираються
Результат виконання програми:
Замінити виклик функції API GetLocalTime на виклик однієї з наступних функцій (змінивши відповідним чином параметри): GetSystemTime, DeleteFileA, CopyFileA, RemoveDirectoryA, SetCurrentDirectoryA, SetVolumeLabelA, GetTempFileNameA, SetFileAttributesA, GetFileAttributesA, GetLogicalDrives, GetLogicalDriveStringsA. Для кожної функції додати відповідні дані та команди, якщо вони потрібні.
Відкомпілювати та налагодити програму для правильної роботи з кожною функцією, що вказана у попередньому пункті. В звіті відобразити всі зроблені програми.
Виконання роботи:
Додавання до виводу значень: секунд, мілісекунд
Текст програми:
.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
; Програма для визначення поточної дати та місцевого часу