
labs&konspeckts / SP_ukr / asm_12
.docЗавдання
Написати підпрограму на асемблері, котра покладе в АХ номер варіанту, якщо (СХ) = 0 або виконає задане варіантом перетворення, якщо (СХ) = 1.
Таблиця варіантів:
Примітка:
div - цілочисельне
ділення
mod - остача від
ділення
shr - зсув
вправо
shl - зсув
вліво
and - логічне
«І»
or - логічне
«АБО»
xor - сума
по модулю 2
1: AX := (((BX + 100) xor 8) shr 1);
2: AX := (((BX - 100) and 80) shl 1);
3: AX := (((BX or 500) + 100) shr 2);
4: AX := (((BX xor 50) * 4) shr 2);
5: AX := (((BX div 50) and 4) shl 5);
6: AX := (((BX mod 50) or 45) + 5);
7: AX := (((BX and 50) xor 4) shl 3);
8: AX := (((BX div 3) + 4) shl 3);
9: AX := (((BX * 7) and 10) or 20);
10: AX := (((BX - 70) mod 25) or 100);
11: AX := (((BX + 12) mod 45) or 100);
12: AX := (((BX xor 200) - 5) and 127);
13: AX := (BX xor (BX and 1) * 3);
14: AX := (BX or (BX + 15) xor 10);
15: AX := (BX xor (BX - 5)or 100);
16: AX := ((BX mod 90) + (BX and 34));
17: AX := (BX xor (BX mod 5) - 100);
18: AX := (BX and (BX - 50) - 60);
19: AX := (BX xor (BX - 5) - 100);
20: AX := (BX or (BX + 50) shl 300);
21: AX := ((BX mod 310) and BX - 10);
22: AX := ((BX xor 31) shr 10 - BX);
23: AX := ((BX and 4) xor (BX - 220));
24: AX := (((BX and 70) + BX) shl 5);
25: AX := (((BX or 13) and BX) shl 9);
26: AX := (((BX or 18) shl 4) + 7);
27: AX := (((BX div 38) mod 130) or 19);
28: AX := (((213 and BX) - 14) xor 70);
29: AX := (((98 xor BX) shl 4) or 7);
30: AX := (((BX * 30) xor BX ) shr 2);
31: AX := (((BX - 58) * 89) or 6);
32: AX := (BX mod ((190 or BX) xor 32));
33: AX := ((BX + 675) or 7 - BX);
34: AX := (BX + (45 or BX)) * 67;
35: AX := ((BX mod 450 * 2) shr 1);
36: AX := ((BX mod 50 and BX) shl 2);
37: AX := (((BX xor 927) shr 3) - 43) ;
38: AX := ((BX * 70) + (BX xor 85)) + 49;
39: AX := ((BX * 7) + (BX xor 85) shr 3) + (90 - BX);
40: AX := ((BX xor (300 - (BX or 85)) - BX));
41: AX := (BX xor (30 - BX mod 120)) + BX;
42: AX := ((BX * 331 - BX mod 654) - 98 or BX);
43: AX := ((BX xor 881) shl 6) - ((BX mod 54) + BX);
44: AX := (BX xor (26 * BX) - (BX + 194));
45: AX := ((BX + 2) and BX) shl 2 xor (BX - 478);
46: AX := ((778 - BX) and 23 + (BX - 56) or 20 and BX);
47: AX := (BX - 19 * 23 xor BX) and (500 or BX);
48: AX := ((76 or BX) - (13 and BX) xor (45 + BX)) shl 4;
49: AX := (((BX and 60) - BX) xor (BX * 30));
50: AX := ((BX * 60) xor BX + (200 xor BX) shr 2);
51: AX := (BX or (BX div 100 - 50 * BX));
52: AX := (50 xor BX + (BX -20 * BX)) shr 3;
53: AX := (BX * (5 xor BX) shl 2 - BX);
54: AX := (BX - 40) xor (30 and BX) shl 3;
55: AX := (BX and 58 xor BX div 60);
56: AX := (BX mod 5) + 50 * BX shr 2;
57: AX := ((BX div 100) mod 120 * BX);
58: AX := (250 xor (BX - 70) shl 2);
59: AX := (BX and (650 xor BX) div 30);
60: AX := (BX - 400) or (20 * BX);
Виконання роботи
Разом із завданням надані всі засоби, необхідні для компіляції програми – транслятор, компонувальник, бібліотеки, командний файл make.bat для виконання збірки програми, а також початковий код прикладу у файлі g.asm.
Задача зводиться до модифікації підпрограми func у файлі g.asm, виходячи з варіанту завдання. Після внесення змін, запустіть make.bat. В результаті повинен створитись виконавчий файл g.exe. Якщо це не відбувається, дивіться помилки у файлі output.txt.
Для перевірки достатньо запустити отриманий після компіляції файл. На екрані з’явиться зображення, яке характеризує роботу підпрограми func (графік у полярних координатах). Після натискання будь-якої клавіші зображення доповниться правильним графіком для вказаного варіанту. Якщо два малюнки співпадуть, то завдання виконано вірно.
Приклад підпрограми
В якості прикладу розглянемо реалізацію 60-го варіанту:
func proc
cmp cx, 0 ; якщо АХ = 0 , то функцію запитали про варіант
jz var
push bx ; зберігаємо у стеку вміст регістрів,
push cx ; які змінюються під час обчислень
mov ax, bx ; AX := (BX - 400) | (20 * BX)
sub bx, 400
mov cx, 20
mul cx
or ax, bx
pop cx ; встановлюємо регістри
pop bx
jmp ex ; стрибок на вихід
var: mov ax, 60 ; повертаємо в АХ номер варіанту
ex: ret ; вихід
func endp