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

Індивідуальні завдання:

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

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

б) циклів

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 розрахунки припинити

Контрольний приклад

f = 7x +3y-3

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

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

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

program al1;

uses crt;

var x,y,f,a:integer;

label a1,a2,stop;

begin

clrscr;

write('Input a=');

readln(a);

asm

mov x,1

a2: mov y,10

a1: mov ax,7

imul x

mov bx,3

xchg ax,bx

imul y

add ax,bx

sub ax,3

add y,2

mov cx,x

xchg cx,ax

imul y

xchg cx,ax

cmp cx,a

jg stop

cmp y,20

jle a1

add x,4

cmp x,20

jle a2

stop:

mov f,ax

end;

writeln('x=',x);

writeln('y=',y);

writeln('f=',f);

readkey;

end.

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

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

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

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

Зміст звіту

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

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

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

4. Висновки.

5. Відповіді на контрольні питання.

Контрольні питання

1. Коли використовується команда LOOPNE?

2. Коли використовується команда LOOPE?

3. Коли використовується команда LOOPNZ?

Лабораторна робота N 4

Тема роботи: Робота з масивами.

Мета роботи: Навчитися працювати з масивами.

Теоретичні відомості.

При описі масиву вказується кількість елементів у ньому та їх тип:

x dw 30 dup(?),

проте не вказується як нумеруються (індексуються) його елементи.

Описанню може відповідати масив:

x [0..29]

x [1..30]

x [k..29+k]

Автор програми може накладати на масив різноманітні діапазони зміни індекса. Іноді діапазон індексів суворо визначено в умові задачі. Якщо нумерація строго не визначена, тоді краще почати нумерацію з нуля.

Як залежить адреса елемента від індексу цього елемента:

x dw 30 dup(?); x [k..29+k] =>

адреси (x[i])=x+2*(i-k)

адреси (x[i])=x+(type x)*(i-k)

при k =0

адреси (x[i])=x+(type x)*i

Тому зазвичай вважають , що елементи в асемблері нумеруються з 0:

x dw 30 dup(?); x [0..29]

Для багатомірних масивів ситуація аналогічна:

А [ N * M ]

N,M - const

N - кількість рядків

M - кількість стовбців

Припустимо, що елементи матриці розміщені в пам'яті по рядках (можна розміщувати й по стовбцям):

адреси (A [i,j])=A+M*(type A)*(i-k*M)+(type A)*(i-k*N)

Найбільш доступний вигляд ця залежність приймає при нумерації з 0.

Як здійснюється доступ до елементів масиву?

До цього моменту ми працювали з командами, у яких для операндів вказувалися їх точні адреси.

Приклад 1. Розрахунок суми елементів масиву.

prog segment

assume cs:prog, ds:prog

data_array dw 10 dup(?)

sum dw ?

start:

mov ax,cs

mov ds,ax

xor ax,ax

mov bx,ax

mov cx,10

next:

add ax,data_array [bx]

add bx,2

loop next

mov sum,ax

ret

prog ends

end start

Проте команда може працювати й з виконавчою(ефективною) адресою:

А вик = (А+[рег]) mod 2^16, де

[рег] - зміст регістра

Спершу ніж виконати команду, ЦП додасть до адреси А (вказаній у команді) поточний зміст регістра - отримає нову адресу й буде працювати з операндом за цією адресою.