
- •Інструкційна картка до проведення лабораторного заняття № 1
- •Короткі відомості з теоретичної частини роботи
- •Інструкційна картка до проведення лабораторного заняття № 2
- •Команда lea. При використанні регістрів-модифікаторів часто доводиться записувати в них ті чи інші адреси. Нехай, наприклад, нам необхідно занести в регістр вх адресі змінної X:
- •Інструкційна картка до проведення лабораторного заняття № 3
- •Короткі відомості з теоретичної частини роботи
- •Зміст і послідовність виконання
- •Методичні рекомендації з виконання та оформлення роботи
- •Рекомендована література:
- •Інструкційна картка до проведення лабораторного заняття № 4
- •Короткі відомості з теоретичної частини роботи
- •Зміст і послідовність виконання
- •Методичні рекомендації з виконання та оформлення роботи
- •9 Рекомендована література:
- •Інструкційна картка до проведення лабораторного заняття № 5
- •Короткі відомості з теоретичної частини роботи
- •Зміст і послідовність виконання
- •Методичні рекомендації з виконання та оформлення роботи
- •Рекомендована література:
Команда 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.
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. Вивчити команди циклу.
2. Написати програму.
3. Зробити звіт .
Зміст звіту
1. Опис команд циклу.
2. Текст програми.
3. Результати.
4. Висновки.
Рекомендована література:
Сваи Т. Освоение Turbo Assembler. – Киев: Диалектика, 1996.
П. Абель. Язык ассемблера для IBM PC и программирования.-М.:Высшая школа,1992.
Лебедев В.Н. Введение в системы программирования. – М.: Статистика, 1975.
Юров В. Assembler. Учебник.-СПб: Питер, 2000