- •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
- •Хід роботи:
- •Контрольні питання:
Індивідуальні завдання:
1) (2X+3Y)Z, Y<2 та X>5
F= (3XX-Z)/Y, Y>0 або z<8
3Z, в інших випадках
2) 5/y+3x, x=>5 та y<>0
F= 4x-3z, z<2 або x<3
x+y+z в інших випадках
3) (4xx-3)/5+7y, x>5 або в>0
F=(y-3)/z, z<>0 та x<=5
5y+7, в інших випадках
4) (3x+9y)/(2+3z), z<>3 та в>10
F=7y+5x-z, y<8 або x<5
zz-3, в інших випадках
5) 6x+2y, x=5 або z>0
F=z-3/5y, y<>0 та x=0
4x+5y-z, в інших випадках
6) (7x-5)/7, y>0 або z=0
F= y-3+z, y<=10 та x=0
x+z+zz-2, в інших випадках
7) 4x+z, y=0 або x<5
F= 5y-3+6z/(z-1), x=0 та z<>1
x+y, в інших випадках
8) 3x+5, x>5 або y=0
F= 7y-7+6x/z, x<3 та z<>0
zz, в інших випадках
9) 4x/5y, y<>0 та x>5
F= 6y-3z, z>3 або x<3
6xx, в інших випадках
10) 7x+xx-1, x<10 та z=0
F= 5y/z, x>5 або y=0
5x+3y+3, в інших випадках
11) (2X+3Y)Z, Y<2 та X>5
F= (3XX-Z)/Y-1, x>0 або z<8
3Z, в інших випадках
12) 5/y+3x, x=5 або y<>0
F= 4x-3z, y<2 та x>3
x+y+z в інших випадках
13) (3xx+9y)/2+3*в, z<>3 та в>0
F=7y+5x-6z, z>1 або x<5
zz-5x, в інших випадках
14) 6x+2y+1, x=5 або z=0
F=z-3+4x, y=0 та z>10
4x+5y-z, в інших випадках
15) (3x-5)/7+1, y>15 або z=0
F= y-3+z, y<10 та x=0
x+z+2y, в інших випадках
16) 4x+z/7, y=0 або x<5
F= 5y+6z/(z-1), x=0 та z<>1
x+y-z, в інших випадках
17) 3x+2z+5, x>5 або y=0
F= 7y-7+6x/z, x<3 та z<>0
z+3x, в інших випадках
18) 4x/5y+3z, y<>0 та x>15
F= 8y-3z-1, z>3 або x<3
6x+y, в інших випадках
19) 7x+yx-1, x<12 та z=0
F= 5y/z+2, x>5 або y>=10
4x+3y+7, в інших випадках
20) (2XY+3Y)Z, Y<2 та X>5
F= (3XX-Z)/3+Y, Y>0 або z<=8
3Z+1, в інших випадках
21) y/2+3x, x>=5 або y<>0
F= (4x-3z)/(2x+1), z<2 та x>3
x+y+z в інших випадках
22) (4x-3)/5+7yz, x>=5 або в>0
F=(y-3)/z+x, z<>0 та x<=5
5y+7, в інших випадках
23) (3x+9)/(3+3z), z<>-1 та в>10
F=7y+5x-z, z>3 або x<5
(z-3)x, в інших випадках
24) 6x+2y-1, x<=5 або z>6
F=z-3/5y, y<>0 та x=0
4x+5y-z, в інших випадках
Контрольний приклад
(4xx-3)/5y, x>5 або в=5, додаткова умова - в<>0
F=(y-3)/z+2, z<>0 та x<=5
y*y-3, в інших випадках
program al1;
uses crt;
var x,y,z,f:integer;
label m1,m2,stop;
begin
clrscr;
write('Input x=');
readln(x);
write('Input y=');
readln(y);
write('Input z=');
readln(z);
asm
cmp y,5
je m1
cmp x,5
jg m1
cmp z,0
jne m2
mov ax,y
imul y
sub ax,3
jmp stop
m1: mov ax,4
imul x
imul x
sub ax,3
mov bx,5
xchg ax,bx
imul y
xchg ax,bx
idiv bx
jmp stop
m2: mov ax,y
sub ax,3
idiv z
add ax,2
stop:
mov f,ax
end;
writeln('f=',f);
readkey;
end.
Порядок виконання роботи
1. Вивчити команди умовного та безумовного переходів.
3. Написати програму.
4. Зробити звіт .
Зміст звіту
1. Опис команд умовного та безумовного переходів.
2. Текст програми.
3. Результати.
4. Висновки.
5. Відповіді на контрольні питання.
Контрольні питання
1. Назвіть команди умовного переходу?
2. Назвіть команди безумовного переходу?
Лабораторна робота N 3
Тема роботи: Програмування циклічних процесів на асемблері.
Мета роботи: Вивчити команди циклу та навчитися застосовувати їх на практиці.
Теоретичні відомості.
Серед циклів на практиці найчастіше зустрічаються цикли з попередньо відомою кількістю повторень, до них відносяться:
1. LOOP - перехід по лічильнику
Ознаки не змінюються.
LOOP short-label.
Логіка: CX = CX - 1; if (CX <> 0)
JMP short-label.
Команда LOOP зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює 0. Операнд short-label повинен знаходитись у межах від -128 до +127 байт від наступної команди.
2. LOOPE - перехід доки рівно
Ознаки не змінюються.
Команда: LOOPE short-label.
Логіка: CX = CX - 1; if (CX <> 0) and (ZF = 1)
JMP short-label.
Команда LOOPE використовується після команд CMP чи SUB. Вона зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює нулю та якщо перший операнд команд CMP або SUB дорівнював іншому операнду. Операнд short-label повинен знаходитись у межах від -128 до +127 байт від наступної команди.
Примітка: Команда LOOPZ, перехід доку нуль, - це та ж команда, що й LOOPE.
3. LOOPNE - перехід доку не рівно
Ознаки не змінюються.
Команда: LOOPNE short-label.
Логіка: CX = CX - 1 if (CX <> 0) and (ZF = 0)
JMP short-label.
Команда LOOPNE використовується після команд CMP або SUB. Вона зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює нулю, та якщо перший операнд команд CMP або SUB не дорівнює іншому операнду. Операнд short-label мусить знаходитися в межах від -128 до +127 байт від наступної команди.
Примітка: Команда LOOPNZ, перехід доку не нуль, - це та ж команда, що й LOOPNE.
4. LOOPNZ - перехід доки не нуль
Ознаки не змінюються.
Команда: LOOPNZ short-label.
LOOPNZ - синонім LOOPNE. Дів. пояснення LOOPNE.
5. LOOPZ - перехід доки нуль
Ознаки не змінюються.
Команда: LOOPZ short-label.
LOOPZ - синонім LOOPE. Дів. пояснення LOOPE.
