Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Практична робота N 3
Тема роботи: Програмування циклічних процесів на асемблері.
Мета роботи: Вивчити команди циклу та навчитися застосовувати їх на практиці.
Теоретичні відомості.
Серед циклів на практиці найчастіше зустрічаються цикли з попередньо відомою кількістю повторень, до них відносяться:
1. LOOP - перехід по лічильнику
Ознаки не змінюються.
LOOP short-label.
Логіка: CX = CX - 1; if (CX <> 0)
JMP short-label.
Команда LOOP зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює 0. Операнд short-label повинен знаходитись у межах від -128 до +127 байт від наступної команди.
2. LOOPE - перехід доки рівно
Ознаки не змінюються.
Команда: LOOPE short-label.
Логіка: CX = CX - 1; if (CX <> 0) and (ZF = 1)
JMP short-label.
Команда LOOPE використовується після команд CMP чи SUB. Вона зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює нулю та якщо перший операнд команд CMP або SUB дорівнював іншому операнду. Операнд short-label повинен знаходитись у межах від -128 до +127 байт від наступної команди.
Примітка: Команда LOOPZ, перехід доку нуль, - це та ж команда, що й LOOPE.
3. LOOPNE - перехід доку не рівно
Ознаки не змінюються.
Команда: LOOPNE short-label.
Логіка: CX = CX - 1 if (CX <> 0) and (ZF = 0)
JMP short-label.
Команда LOOPNE використовується після команд CMP або SUB. Вона зменшує CX на 1, потім передає керування на мітку short-label, якщо CX не дорівнює нулю, та якщо перший операнд команд CMP або SUB не дорівнює іншому операнду. Операнд short-label мусить знаходитися в межах від -128 до +127 байт від наступної команди.
Примітка: Команда LOOPNZ, перехід доку не нуль, - це та ж команда, що й LOOPNE.
4. LOOPNZ - перехід доки не нуль
Ознаки не змінюються.
Команда: LOOPNZ short-label.
LOOPNZ - синонім LOOPNE. Дів. пояснення LOOPNE.
5. LOOPZ - перехід доки нуль
Ознаки не змінюються.
Команда: LOOPZ short-label.
LOOPZ - синонім LOOPE. Дів. пояснення LOOPE.
Індивідуальні завдання:
Розрахувати значення функції (значення змінної "а" задати на власний розсуд), використовуючи команди:
а) умовного переходу
б) циклів
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 {x=1}
a2: mov y,10 {Мітка 2, в якій у=10}
a1: mov ax,7 {Мітка 1 в якій х=7}
imul x {ах=7x}
mov bx,3 {bx=3}
xchg ax,by {ax=3, bx=7x}
imul y {ax=3y}
add ax,bx {ax=7x+3y}
sub ax,3 { ax=7x+3y-3}
add y,2 {y=y+2}
mov cx,x {cx=x}
xchg cx,ax {cx=7x+3y-3, ax=x}
imul y {ax=xy}
xchg cx,ax { ax=7x+3y-3, cx=xy }
cmp cx,a
jg stop {xy>a stop}
cmp y,20
jle a1 {y<=20 a1}
add x,4 {x=x+4}
cmp x,20
jle a2 {x<=20 a2}
stop:
mov f,ax {f=ax=7x+3y-3}
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?