Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи 1-5.doc
Скачиваний:
3
Добавлен:
28.08.2019
Размер:
188.42 Кб
Скачать

Команда 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. Індивідуальне завдання:

1 Розрахувати значення функції (значення змінної "а" задати на власний розсуд), використовуючи команди:

а) умовного переходу

б) циклів

1.

f = 3x +4y -5

x [ 1..10], крок 2

y [1..20], крок 4

Якщо f > a розрахунки припинити

2.

f = 4x +3y -2z

x [ 1.. 5], крок 1

y [10..20], крок 2

3.

f = 7x +3y

x [ 1..20], крок 4

Якщо xy > a розрахунки припинити

4.

f = 3/y +4z -20

y [-1..10], крок 1, y <> 0

z [ 3.. 9], крок 3

5.

f = 3y -4x -2z

y [ 2..10], крок 2

z [ 1..15], крок 3

Якщо yz > a розрахунки припинити

6.

f = 7x +3y -10z

x [10.. 1], крок -1

z [ 5..20], крок 5

Якщо x = y розрахунки припинити

7.

f = 7(x +y) -3y +5z

y [ 1..20], крок 2

Якщо y^2 > z розрахунки припинити

8.

f = 7x^2 -3y^2 +y

x [10.. 5], крок -1

Якщо x^2 > y^2 розрахунки припинити

9.

f = (7y -3z)x

y [20.. 2], крок -2

Якщо yz > x розрахунки припинити

10.

f = 10(y -z)x

y [ 1.. 5], крок 1

x [ 2..10], крок 2

11.

f = 6x +4y -5z

x [ 1..10], крок 1

y [1..20], крок 4

Якщо f => a розрахунки припинити

12.

f = 4x +8y -2z

x [ 1.. 15], крок 5

y [10..20], крок 2

13.

f = 3/y +4z -2x

y [1..10], крок 1

z [ 3.. 9], крок 3

14.

f = 3y +4x -6z

y [ 2..10], крок 2

z [ 1..15], крок 3

Якщо yz > a розрахунки припинити

15.

f = (7x +3y)/4+z-1

x [1.. 10], крок 1

z [ 5..20], крок 5

Якщо xy=a розрахунки припинити

16.

f = 7(x +y)+5z

y [ 1..20], крок 2

z [ 5..20], крок 5

Якщо y^2 > z розрахунки припинити

17.

f =(7x -3y)z+y-1

x [10.. 5], крок -1

z [ 1..20], крок 4

Якщо x^2 > y^2 розрахунки припинити

18.

f = (7y+3z)x-3y

y [20.. 2], крок -2

z [ 1..20], крок 5

Якщо yz > x розрахунки припинити

19.

f = 10(y+z)x-5

y [ 1.. 5], крок 1

x [ 2..10], крок 2

20.

f = 3x +4y -5z

x [ 1..10], крок 2

y [1..20], крок 4

Якщо f= a розрахунки припинити

21.

f = (4x +3y)/2-2z

x [ 1.. 5], крок 1

y [10..20], крок 2

22.

f = 7x +3y+4xy

x [ 1..20], крок 4

Якщо xy=a розрахунки припинити

23.

f = 3y +4z+2x

y [-1..10], крок 1

z [ 3.. 9], крок 3

24.

f = 3y+4x+2z-1

y [ 2..10], крок 2

z [ 1..15], крок 3

Якщо yz=a розрахунки припинити

  1. Порядок виконання роботи

1. Вивчити команди циклу.

2. Написати програму.

3. Зробити звіт .

  1. Зміст звіту

1. Опис команд циклу.

2. Текст програми.

3. Результати.

4. Висновки.

  1. Рекомендована література:

  1. Сваи Т. Освоение Turbo Assembler. – Киев: Диалектика, 1996.

  2. П. Абель. Язык ассемблера для IBM PC и программирования.-М.:Высшая школа,1992.

  3. Лебедев В.Н. Введение в системы программирования. – М.: Статистика, 1975.

  4. Юров В. Assembler. Учебник.-СПб: Питер, 2000