- •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
- •Хід роботи:
- •Контрольні питання:
Команда lea. При використанні регістрів-модифікаторів часто доводиться записувати в них ті чи інші адреси. Нехай, наприклад, нам необхідно занести в регістр вх адресі змінної X:
X DW 88
Щоб зробити це, можна завести ще одну змінну, значенням якої буде адреса X:
Y DW X
а потім передати значення цієї змінної в регістр ВХ:
MOV BX,Y
Алі зрозуміло, що це дещо штучний спосіб завантаження адреси в регістр. Тому в систему команд ПК уведена спеціальна команда такого завантаження:
Завантаження виконуючої адреси (load effective address): LEA r16,A
Ця команда розраховує виконуючу адресу іншого операнда й заносить її в регістр r16: r16:=Авик. Прапорці команда не змінює. У якості першого операнда може бути вказаний будь-який регістр загального призначення, а в якості іншого - будь-який адресний вираз (з модифікаторами чи без них).
Одним з прикладів, де корисна команда LEA, є вивід рядка по операції OUTSTR. Ця операція, нагадаємо, потребує, щоб початкова адреса рядка, що буде виведена знаходилася в регістрі DX. Це доцільно робити по команді LEA:
S DВ 'a+Ь=с','$'
…
LEA DX,S ; DX:=адреси S
OUTSTR ; буде виведено: а+Ь=з
Розглянемо особливості команди LEA. При цьому будемо вважати, що в програмі є наступні описання:
Q DW 45 R DW -8
По-перше відмітимо, що команда LEA дуже схожа на команду MOV, але між ними є й принципова відмінність: якщо LEA заносить в регістр саму адресу, вказану в команді, то MOV заносить вміст комірки з цією адресою:
LEA BX,Q; BX:=адреси Q
MOV BX,Q; BX:=вміст Q (-45)
У команді LEA другий операнд може бути будь-якою адресою - і адресою байта, і адресою слова й т.д. Проте в якості цього операнда неможна вказати константний вираз чи ім'я регістра:
LEA CX.88 ; помилка LEA CX,BX ; помилка
Якщо в якості іншого операнда вказано модифікатор адреси, то спочатку розраховується виконуюча адреса й лише потім відбувається завантаження в регістр: mov si,2
LEA AX,Q[SI]; АХ:=Авик-Q+[SI]=адреси(Q+2)=адреси(R)
Цим можна скористатися для передачі в який-небудь регістр значення регістра-модифікатора, збільшеного чи зменшеного на деяке число:
MOV BX,50
LEA CX,[BX+2] ;CX:=[BX]+2-50+2=52
LEA DI,[DI-3] ;DI:=DI-3 (SUB DI,3)
Індивідуальні завдання.
1. А [10,5]
Знайти суму елементів парних рядків.
2. А [8,8]
Знайти мінімальний елемент верхнього трикутника.
3. А [7,7]
Знайти мінімальний елемент над головною діагоналлю.
4. А [5,5]
Знайти максимальний елемент над побічною діагоналлю.
5. А [10]
Сортування по спаданню.
6. А [10]
Сортування по зростанню.
7. А [3,7]
Знайти номери рядків елементів А[i,j]=C.
8. A [10]
Знайти номер мінімального елемента.
9. А [6,6]
Знайти мінімальний елемент під головною діагоналлю.
10. А [5,5]
Знайти максимальний елемент під побічною діагоналлю.
11. А [3,7]
Знайти номери рядків елементів А[i,j]=A[1,1].
12. А [8,8]
Знайти максимальний елемент верхнього трикутника й визначити номер стовпця, у якому він знаходиться.
13. А [5,5]
Знайти максимальний і мінімальний елементи .
14. А [20]
Знайти суму елементів з індексами кратними трьом.
15. А [10]
Сортування по зростанню перших п'яти елементів масиву.
16. А [3,7]
Знайти номери рядків елементів А[i,j]=min.
17. A [5,3]
Знайти номер рядка, у якому знаходиться мінімальний елемент.
18. А [6,6]
Знайти мінімальний елемент у непарних стовбцях.
19. А [5,5]
Знайти максимальний елемент серед елементів < А[2,3], якщо
таких елементів немає - вивести повідомлення.
20. А [10,5]
Знайти суму елементів непарних рядків, які більше 2.
21. А [8,8]
Знайти мінімальний елемент нижнього трикутника.
22. А [8,8]
Знайти мінімальний елемент над головною діагоналлю й номер рядка,
у якому він знаходиться.
23. А [6,6]
Знайти максимальний елемент над побічною діагоналлю й замінити його
на min.
24. А [10,4] Сортування рядків по спаданню.
