Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки до лабораторних робіт.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
464 Кб
Скачать
☆

Команда 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] Сортування рядків по спаданню.