
- •2. Команди додавання і віднімання.
- •3. Команди множення й ділення.
- •Індивідуальні завдання:
- •Контрольний приклад
- •Індивідуальні завдання:
- •Контрольний приклад
- •Індивідуальні завдання:
- •Контрольний приклад
- •Команда lea. При використанні регістрів-модифікаторів часто доводиться записувати в них ті чи інші адреси. Нехай, наприклад, нам необхідно занести в регістр вх адресі змінної X:
- •Індивідуальні завдання.
- •Контрольний приклад
- •1. Сегментування адрес у пк
- •1.1. Загальна схема базування адрес
- •1.2. Особливості сегментування адрес у пк
- •Zzzzz - абсолютна адреса
- •1.3. Сегментні регістри за замовчуванням
- •2. Програмні сегменти
- •2.1. Значення імені сегмента
- •2.2. Адресні змінні
- •Bl dw а2 еквівалентно Bl dw offset а2 в2 dd а2 еквівалентно в2 dd вод а2 : offset a2
- •Індивідуальні завдання:
- •Контрольний приклад
- •1. Схема базування адреси в пк?
- •Invoke виpаз [, аpгументи]
- •Invoke ExitProcess, 0
- •Invoke ExitProcess, 0
- •Invoke MessageBox, null, addr MsgBoxText, addr MsgBoxCaption, mb_ok
- •Invoke ExitProcess, null
- •Invoke MessageBox,null, addr MsgBoxText,addr MsgBoxCaption,mb_ok
- •Хід роботи:
- •Написати програму, що створює полнофункціональну Windows пpогpаму, яка виводить повідомлення "Win32 assembly is great!".
- •Контрольні питання:
- •Лабораторна робота n 2
- •Теоретичні відомості.
- •Invoke LoadIcon,null,idi_application
- •Invoke LoadCursor,null,idc_arrow
- •Invoke RegisterClassEx, addr wc ; Регістpація нашого класу вікна
- •Inst:hinstance,hPrevInst:hinstance,CmdLine:lpstr,CmdShow:dword
- •Invoke LoadIcon,null,idi_application
- •Invoke LoadCursor,null,idc_arrow
- •Invoke RegisterClassEx, addr wc
- •Invoke ShowWindow, hwnd,CmdShow
- •Invoke UpdateWindow, hwnd
- •Invoke GetMessage, addr msg,null,0,0
- •Invoke TranslateMessage, addr msg
- •Invoke DispatchMessage, addr msg
- •Invoke PostQuitMessage,null
- •Invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- •Хід роботи:
- •Контрольні питання:
- •Лабораторна робота n 3
- •Теоретичні відомості.
- •Invoke BeginPaint,hWnd, addr ps
- •Invoke GetClientRect,hWnd, addr rect
- •Invoke EndPaint,hWnd, addr ps
- •Лабораторна робота n 4
- •Теоретичні відомості.
- •Invoke InvalidateRect, hWnd,null,true
- •Хід роботи:
- •Контрольні питання:
- •Характеристика повідомлень, що посилають від клавіатури.
- •Лабораторна робота n 5
- •Теоретичні відомості.
- •Invoke lstrlen,addr AppName
- •Invoke TextOut,hdc,hitpoint.X,hitpoint.Y,addr AppName,eax
- •Хід роботи:
- •Контрольні питання:
- •Лабораторна робота n 6
- •Теоретичні відомості.
- •Invoke LoadMenu, hInst, offset MenuName
- •Invoke LoadMenu, hInst, offset MenuName
- •Хід роботи:
- •Контрольні питання:
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Реє.№_______________________
МЕТОДИЧНІ ВКАЗІВКИ
до виконання лабораторних робіт
з дисципліни
„Системне програмування та операційні системи”
для студентів 3 курсу денної форми навчання
спеціальності 6.080403 –
„Програмне забезпечення автоматизованих систем”
Херсон 2008
Методичні вказівки до виконання лабораторних робіт з дисципліни «Системне програмування та операційні системи»/Склали А.А.Григорова, к.т.н., доцент, О.М. Ляшенко, асистент. – Херсон: Херсонський національний технічний університет, 2008. – с. 80.
Рецензент: к.т.н., доцент. Т.Г. Кірюшатова
Затверджено
на засіданні кафедри
інформаційних технологій
Протокол №_______
від „______”_________ р.
Зав.каф.___________________Ходаков В.Є.
Відповідальний за випуск В.Є. Ходаков, д.т.н., професор, завідувач кафедри ІТ
ВСТУП
Матеріал курсу з дисципліни “Системне програмування та операційні системи” розбитий на 2 частини. Частина I «MS-DOS» включає 5 лабораторних робіт, які націлені на роботу у середовищі «MS-DOS». Частина II «WIN 32 API» включає 6 лабораторних робіт, які припускають роботу з діалоговими вікнами, меню і т.і.
Кожна лабораторна робота включає теоретичну частину, яка базується на лекційному матеріалі і може бути пов'язана з іншими дисциплінами навчального плану, що читались раніше, індивідуальні завдання для студентів та контрольний приклад виконання завдання.
Таким чином, метою дисципліни “Системне програмування та операційні системи” є:
формування знань, вмінь та навичок, необхідних для раціонального використання системних ресурсів ЕОМ;
вивчення мови програмування асемблера та методів розробки програм, що взаємодіють з операційною системою;
надбання навичок використання сучасних інформаційних технологій при розв’язанні задач, пов’язаних зі створенням програмного забезпечення прикладного та системного характеру для різних операційних платформ.
У процесі вивчення курсу студенти повинні вміти:
використовувати мову програмування асемблер для вирішення типових системних задач;
застосовувати функції, що експортуються операційним середовищем;
створювати нові прикладні та системні програми за допомогою мови програмування асемблер;
вирішувати питання організації програмного інтерфейсу в системних програмах та модулях;
оптимізувати програмний код.
ЗМІСТ
ВСТУП …………………………………………………………………………………………… |
3 |
ЧАСТИНА I «MS-DOS»………………………………………………………………………… |
5 |
Лабораторна робота N 1 «Програмування лінійних процесів на асемблері» ……………… |
5 |
Лабораторна робота N 2 «Програмування розгалужених процесів на асемблері»………………………………………………………………………………………… |
8 |
Лабораторна робота N 3 «Програмування циклічних процесів на асемблері»……………… |
13 |
Лабораторна робота N 4 «Робота з масивами» ………………………………………………… |
17 |
Лабораторна робота N 5 «Програмні сегменти» ………………………………………………. |
23 |
ЧАСТИНА II «WIN 32 API»…………………………………………………………………….. |
37 |
Лабораторна робота N 1 «MessageBox»………………………………………………………… |
37 |
Лабораторна робота N 2 «Просте вікно»………………………………………………………. |
43 |
Лабораторна робота N 3 «Відрисовка тексту»…………………………………………………. |
55 |
Лабораторна робота N 4 «Клавіатура»………………………………………………………….. |
61 |
Лабораторна робота N 5 «Миша»……………………………………………………………….. |
66 |
Лабораторна робота N 6 «Меню»……………………………………………………………….. |
71 |
ЛІТЕРАТУРА ................................................................................................................................. |
80 |
ЧАСТИНА I
«MS-DOS»
Лабораторна робота N 1
Тема роботи: Програмування лінійних процесів на асемблері.
Мета роботи: Ознайомитись з основними командами мови Асемблер та навчитися програмувати лінійний процес.
Теоретичні відомості.
При організації лінійних процесів на мові Асемблер використовують такі команди, як:
mov – команда передачі значення;
add – команда додавання;
sub – команда віднімання;
mul – команда множення;
div – команда ділення;
xchg – команда обміну значень.
Розглянемо кожну з наведених команд.
1. Команди передачі значень:
1) команда mov (передача): mov op1, op2.
По команді mov на місце першого операнда передається значення іншого операнда: op1:=op2. Команда не впливає на прапорці.
Приклади:
mov AX,500; A:=500
mov BL,DH; BL:=DH
По команді mov можна передавати як байт, так і слово.
2) команда xchg (обмін значень): xchg op1,op2
Ця команда обмінює значення своїх операндів (вони повинні бути байтами, або словами);
op1 <=> op2. Команда не впливає на прапорці.
Приклади:
mov AX,62; AX=62
mov SI,135; SI=135
xchg AX,SI; AX=135, SI=62
2. Команди додавання і віднімання.
Команда add (додавання): add op1,op2
Команда sub (віднімання): sub op1,op2
Команда add додає операнди та заносить їхню суму на місце першого операнда: op1:=op1+op2.
По команді sub від першого операнда віднімається другий операнд, здобута різниця заноситися на місце першого операнда:
op1:=op1-op2.
Приклад:
add AH,12; AH:=AH+12
sub SI,z; SI:=SI-z
add z,-300; z:=z+(-300)
Команди add та sub працюють як з числами розміром у байт, так і з числами розміром у слово. Неможна, щоб один з операндів був байтом, а інший - словом.
3. Команди множення й ділення.
1) команда mul (множення): mul op
Операнд op, зазначений у команді - це лише один зі співмножників; він може знаходитись у регістрі чи в пам'яті, але не може бути безпосереднім операндом. Місцезнаходження іншого співмножника зафіксовано, і тому в команді не вказується. При множенні цілих операндів зі знаком, використовується команда imul op.
2) команда div (ділення): div op
Аналогічно команді множення.
Індивідуальні завдання:
-
1 f=(2x +3y)/4z+5x;
2 f=(8x +9y)/(3z+1);
3 f=(18x+9y-5)/3z+2;
4 f=(4y+2)/(7-4z)+x;
5 f=z/(7y-x)(3-6x);
6 f=x+y+3z/5-4;
7 f=(5z-4x)/(y-8);
8 f=(x+7)/(zy-1);
9 f=(y-7x-2z)/(6y+1);
10 f=(5-z)/(x-3y);
11 f=(77y-8)/(x+6);
12 f=(6z-4y)/(3x-8);
13 f=(12z-5y)/(3x+2)-5z;
14 f=(4x+5y-12z)/(2z-5);
15 f=(3x-2y+1)/(10z-1);
16 f=(5z-4x)/(y+2x);
17 f=(5x+7)/(zy+1);
18 f=(y+7x-2z)/(y+1);
19 f=(5+3z)/(x+3y-1);
20 f=(2x+3y-z)/(4z+5x);
21 f=(8x+2y+z)/(3z+2);
22 f=(18x+9y)/(3z+x+2);
23 f=(4y+2)/(7-4z)+x;
24 f=z(7y-x)/(3-6x)-1;
Контрольний приклад
Завдання: f=(7x+12z)/(y-5)
program Al1; {з тією умовою, що y>5}
uses crt;
var x,y,z:integer;
f:integer;
begin
clrscr;
write('Input x=');
readln(x);
write('Input y=');
readln(y);
write('Input z=');
readln(z);
asm
mov ax,7
imul x
xchg ax,bx
mov ax,12
imul z
add ax,bx
mov cx,y
mov bx,5
sub cx,bx
idiv cx
mov f,ax
end;
writeln('f=',f);
readkey; end.
Порядок виконання роботи
1. Вивчити основні команди, які використовуються при організації лінійних процесів на мові Асемблер.
3. Написати програму.
4. Зробити звіт .
Зміст звіту
1. Опис основних команд, які використовуються при організації лінійних процесів.
2. Текст програми.
3. Результати.
4. Висновки.
5. Відповіді на контрольні питання.
Контрольні питання
1. З якими числами працюють команди add та sub?
2. Для чого потрібна команда xchg?
3. Чим різняться команди mov та xchg?
Лабораторна робота N 2
Тема роботи: Програмування розгалужених процесів на асемблері.
Мета роботи: Вивчити команди умовного та безумовного переходів, навчитися програмувати на мові Асемблер процеси з розгалуженням.
Теоретичні відомості.
Всі команди умовного переходу можна поділити на три групи. У першу групу входять команди, що ставляться після команди порівняння. У їх мнемокодах за допомогою певних символів описується той чи інший результат порівняння, за яким відбувається перехід. Це такі символи:
E – equal (рівно)
N – not (не)
G – greater (більше) - для чисел зі знаком
L – less (менше) - для чисел зі знаком
A – above (вище) - для чисел без знака
B – below (нижче) - для чисел без знака
Далі наведені назви усіх команд умовного переходу, що використовуються
після команди порівняння (через слеш вказані назви-синоніми):
Таблиця 2.1
Команди умовного переходу, що використовуються після команди порівняння
Мнемокод |
Змістовна умова для переходу. після CMP ор1, ор2 |
Стан прапорців для переходу
|
для будь-яких чисел |
||
je jne |
op1=op2 op1<>op2 |
zf=1 zf=0 |
для чисел зі знаком |
||
jl/jnge jle/jng jg/jnle jge/jnl
|
op1<op2 op1<=op2 op1>op2 op1>=op2
|
sf<>of sf<>of або zf=1 sf=of і zf=0 sf=of |
для чисел без знаку
|
||
jb/jnae jbe/jna ja/jnbe jae/jnb
|
op1<op2 op1<=op2 op1>op2 op1>=op2
|
cf=1 cf=1 або zf=1 cf=0 і zf=0 cf=0
|
До другої групи команд входять ті, що ставляться після команд, відмінних від команд порівняння, і ті, які реагують на те чи інше значення якого-небудь визначеного прапорця.
Таблиця 2.2
Команди умовного переходу, які реагують на те чи інше значення прапорця
Мнемокод |
Умова переходу |
Мнемокод |
Умова переходу |
jz js jc jo jp |
zf=1 sf=1 cf=1 of=1 pf=1
|
jnz jns jnc jno jnp
|
zf=0 sf=0 cf=0 of=0 pf=0
|