
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Львівський Державний Інститут Новітніх Технологій та Управління ім. В.Чорновола
Факультет інформаційних технологій
Звіт по Лабораторній роботі №1
«Загальна організація операційної системи та програмування на асемблері»
з дисципліни
«Системне Програмування»
Виконав
Студент групи КІ-21
Денисюк В.В.
Перевірив
Зербіно Д.Д.
бал «____»
Львів-2010
Мета роботи: Зрозуміти загальні принципи побудови операційної системи та вивчити методи складання програм на асемблері для операційних систем “WINDOWS”.
Порядок виконання роботи:
1. Створити файл tasm32.bat для компіляції програм для 32х-бітного режиму:
@echo off
del %1.exe
TASM\tasm32.exe /x /m /ml %1.asm
TASM\tlink32.exe /Tpe /aa /c
%1.obj,,,TASM\Import32.LIB
del %1.obj
del %1.map
%1.exe
2. Набрати подану нижче програму для визначення імені комп’ютера (яке задається системним адміністратором при установці операційної системи), зберегти її у файлі з розширенням “.ASM ”.
3. Відкомпілювати набрану програму за допомогою командного рядка:
4. Запустити одержаний exe-файл на виконання. Записати ім’я комп’ютера, яке отримала програма.
5. Розглянути текст програми, вивчити загальну структуру програми із застосуванням функцій Win32 API. Переписати в зошит текст програми з відповідними коментарями.
6. Замінити виклик функції API GetComputerNameA на виклик однієї з наступних функцій, змінивши відповідним чином параметри:
GetUserNameA, GetWindowsDirectoryA, GetSystemDirectoryA, GetTempPathA, GetCurrentDirectoryA, GetDriveTypeA, після чого відкомпілювати і запустити програму.
Текст програми
«Computer name»
.386 ;
Для процесора не нижче INTEL-386
.model
flat, STDCALL ;
компілювати як програму для WIN32;
;
Визначення
зовнішніх процедур:
extrn
ExitProcess :proc ;
Ліквідація
процесу,
extrn
MessageBoxA :proc ;
Вивід
вікна з повідомленням,
extrn
GetComputerNameA :proc ;
Отримання
імені комп’ютера.
.data ;
Вміст сегменту даних:
buflen
dd 256 ;
Визначення комірки пам’яті
hello_title
db ' Лаб.
№ 1 Виконав:
ст.гр.КІ-21 Денисюк В.В.',
0
hello_message
db 'Computer Name: ' ;
Рядок байтів
user_name
db 256 dup (0) ;
Буфер заповнений нулями
.code
;
Вміст сегменту коду:
Start:
call
GetComputerNameA,
offset
user_name,
offset
buflen
call
MessageBoxA,
0,
offset
hello_message,
offset
hello_title,
40h
call
ExitProcess,
0
end Start
Результат виконання програми «Computer name»
Текст програми
«User Name»
.386 ;
Для процесора не нижче INTEL-386
.model
flat, STDCALL ;
компілювати як програму для WIN32;
;
Визначення
зовнішніх процедур:
extrn
ExitProcess :proc ;
Ліквідація
процесу,
extrn
MessageBoxA :proc ;
Вивід
вікна з повідомленням,
extrn
GetUserNameA
:proc
;
Отримання
імені
користувача
.data ;
Вміст сегменту даних:
buflen
dd 256 ;
Визначення комірки пам’яті
hello_title
db ' Лаб.
№ 1 Виконав:
ст.гр.КІ-21 Денисюк В.В.',
0
hello_message
db ' UserName:
' ;
Рядок байтів
user_name
db 256 dup (0) ;
Буфер заповнений нулями
.code
;
Вміст сегменту коду:
Start:
call
GetUserNameA,
offset
user_name,
offset
buflen
call
MessageBoxA,
0,
offset
hello_message,
offset
hello_title,
40h
call
ExitProcess,
0
end Start
Результат виконання програми «User Name»
Текст програми
«WindowsDirectory»
.386 ;
Для процесора не нижче INTEL-386
.model
flat, STDCALL ;
компілювати як програму для WIN32;
;
Визначення
зовнішніх процедур:
extrn
ExitProcess :proc ;
Ліквідація
процесу,
extrn
MessageBoxA :proc ;
Вивід
вікна з повідомленням,
extrn
GetWindowsDirectoryA
:proc
;
Отримання
шляху
до каталогу Windows
.data ;
Вміст сегменту даних:
buflen
dd 256 ;
Визначення комірки пам’яті
hello_title
db ' Лаб.
№ 1 Виконав:
ст.гр.КІ-21 Денисюк В.В.',
0
hello_message
db 'Windows
Directory:
' ;
Рядок байтів
user_name
db 256 dup (0) ;
Буфер заповнений нулями
.code
;
Вміст сегменту коду:
Start:
call
GetWindowsDirectoryA,
offset
user_name,
offset
buflen
call
MessageBoxA,
0,
offset
hello_message,
offset
hello_title,
40h
call
ExitProcess,
0
end Start
Результат виконання програми «WindowsDirectory»