Добавлен: 20.10.2018
Просмотров: 782
Скачиваний: 6
КОНТРОЛЬНАЯ РАБОТА ПО МДК 01.01.
«Системное программирование»
Цель работы:
приобрести практические навыки в разработке, отладке и выполнении программ на ассемблере;
закрепить теоретические знания по использованию различных методов адресации микропроцессорных систем при программировании на языке системного программирования.
Методические указания
Контрольная работа состоит из 2-х задач. В каждой задаче необходимо разработать и отладить программу на ассемблере в системном отладчике DEBUG. В каждом задании приведен пример решения типовой задачи, который рекомендуется изучить и выполнить в пошаговом режиме (это поможет выполнить основное задание).
При отладке индивидуальных задач рекомендуется первоначально присваивать переменным (параметрам циклов) удобные для контрольных расчетов значения.
После решения задачи рекомендуется ответить на контрольные вопросы для закрепления полученных знаний и подготовке к экзамену.
Результаты решения задач представить в печатном или рукописном варианте. По каждой задаче представить схему алгоритма и текст программы с комментариями. Вариант задачи соответствует номеру обучающегося по классному журналу.
1. Задание
1.1. Выполнить программу линейной структуры, вычисляющую значение функции Y по формуле Y= (2Х + 4Z – V)/2 + W + 5 + L для следующих исходных данных:
Х = 0003; Z = 0002; V = 0004; W = 0005, L = 0005.
MOV AX, 0
MOV BX, 400
MOV AX, [BX]
MOV CL, 2
MUL CL
PUSH AX
MOV AX, [BX + 2]
MOV CL, 4
MUL CL
POP DX
ADD AX, DX
SUB AX, [BX + 4]
MOV CL, 2
DIV CL
MOV AH, 0
ADD AX, [BX + 6]
ADD AX, 5
ADD AX, [BX + 8]
HLT
После выполнения программы в регистре АХ должно храниться число 14h.
1.2. Выполнить программу сложной структуры, вычисляющую значение функции Y = К! для следующих вариантов значений исходных данных:
a) К = 5; б) К = 6.
CS:0300 MOV BX, 600
CS:0303 MOV CX, [BX]
CS:0305 CALL 400
....... ...........
CS:0400 MOV AX, 1
CS:0403 MUL CX
CS:0405 LOOP 403
CS:0407 RET.
В зависимости от используемого варианта исходных данных, в регистре AX после выполнения программы должно храниться число:
а) 0078h; б) 02D0h.
2. Индивидуальные задания на контрольную работу
2.1. Разработать, отладить и выполнить программу линейной структуры, вычисляющую значение функции Y в соответствии с вариантом.
Вариант |
Функция Y |
Адреса (16-ричные номера) ячеек памяти и значения хранящихся в них аргументов X, B, C |
|||||||
X |
B |
C |
|||||||
Адрес |
Значение |
Адрес |
Значение |
Адрес |
Значение |
||||
1 |
(2X + B + 1/C)/3 |
0550 |
5 |
0552 |
BA |
0554 |
8 |
||
2 |
(4X – B + C – 1)/2 |
0560 |
B0 |
0562 |
13 |
0564 |
17 |
||
3 |
8X + B – C/3 + 1 |
0570 |
16 |
0572 |
9A |
0574 |
B2 |
||
4 |
(X + B/2 + C – 1) 3 |
0580 |
3 |
0582 |
8 |
0584 |
8B |
||
5 |
(2X + B – C)/2 |
0590 |
17 |
0592 |
33 |
0594 |
27 |
||
6 |
X/3– B + 2C + 5 |
0600 |
4 |
0602 |
16 |
0604 |
10 |
||
7 |
X/2 – B + 4C + 1 |
0610 |
10 |
0612 |
4D |
0614 |
1F |
||
8 |
2(X – B + C) – 1/X |
0620 |
A |
0622 |
CA |
0624 |
FF |
||
9 |
(X + B – C)/2 |
0630 |
35 |
0632 |
8F |
0634 |
AC |
||
10 |
(X + B – C/2) 5 |
0640 |
43 |
0642 |
2 |
0644 |
18 |
||
11 |
(X + B)/2 – C |
0650 |
15 |
0652 |
FD |
0654 |
5B |
||
12 |
(X – 1)/2 + B – C |
0660 |
1B |
0662 |
3F |
0664 |
32 |
||
13 |
(X/4 – B + C) 2 |
0670 |
14 |
0672 |
18 |
0674 |
EC |
||
14 |
(X + B – C – 1)/3 |
0680 |
11 |
0682 |
96 |
0684 |
5 |
||
15 |
2(X + 1) – C/2 + B |
0690 |
AB |
0692 |
AB |
0694 |
50 |
||
16 |
(X + B – C/2) 6 |
0700 |
B0 |
0702 |
CO |
0704 |
A |
||
17 |
(X – B/2 + C – 1) 7 |
0710 |
14 |
0712 |
10 |
0714 |
3 |
||
18 |
3(C/2 – B + X) |
0720 |
A5 |
0722 |
AD |
0724 |
FA |
||
19 |
4(X – B/3 – C) |
0730 |
AF |
0732 |
5E |
0734 |
3D |
||
20 |
(X – B)/(C – 1) |
0740 |
F1 |
0742 |
A7 |
0744 |
5 |
||
21 |
(В – 1)/3 + С – В |
0750 |
2B |
0752 |
4F |
0754 |
12 |
||
22 |
(С/3 + B – C) 3 |
0760 |
12 |
0762 |
16 |
0764 |
СC |
||
23 |
(В + С – Х + 8)/6 |
0770 |
8 |
0772 |
16 |
0774 |
4 |
||
24 |
3(С – 6) – В/2 + Х |
0780 |
AD |
0782 |
AD |
0784 |
60 |
||
25 |
С – B – Х/2 |
0790 |
B2 |
0792 |
C1 |
0794 |
A5 |
||
26 |
В – Х/4 – C + 7 |
0800 |
28 |
0802 |
16 |
0804 |
31 |
||
27 |
8С + В + X/6 |
0810 |
64 |
0812 |
2A |
0814 |
84 |
||
28 |
(X – C)B/3 + 5 |
0820 |
3F |
0822 |
24 |
0824 |
8 |
||
29 |
3(C + В) + Х/4 |
0830 |
42 |
0832 |
EE |
0834 |
11 |
||
30 |
2X + (B – C)/3 + 7 |
0840 |
BD |
0842 |
25 |
0844 |
2D |
||
31 |
7B – C + X/5 |
0850 |
2 |
0852 |
1A |
0854 |
44 |
||
32 |
(X + C)B/2 – 1 |
0860 |
1F |
0862 |
14 |
0864 |
8 |
||
33 |
2(C + X) – B/3 |
0870 |
21 |
0872 |
DE |
0874 |
F1 |
||
34 |
X/3 – B/2 + C – 1/X |
0890 |
5F |
0892 |
12 |
0894 |
32 |
Примечание. Значения аргументов и их адреса (задающие смещение ячеек с данными от начала сегмента DS) даны в шестнадцатеричной системе счисления.
2.2. Разработать, отладить и выполнить программу сложной структуры, вычисляющую значение функции Y в соответствии с вариантом.
Вариант |
Функция Y |
Вариант |
Функция Y |
1 |
B! Y = 5n + B3 |
2 |
B4 + A3 Y = (B + 1)m |
3 |
Bn – 53 Y = (B + 1)! |
4 |
N! – (2N + K)! Y = K! |
5 |
Bm + 45 Y = K! |
6 |
(2A + 1)m Y = (K+1)! |
7 |
N! + (2 – N)! Y = Bm |
8 |
(A+1)! Y = 2A! |
9 |
A3 – 55 Y = Am |
10 |
-7! + (K + 2)! Y = K! |
11 |
N! – (2N – 2)! Y = (N + 8)! |
12 |
54 – A6 Y = (A – 1)m |
13 |
A5 – 53 Y = Am |
14 |
N! – (2N – 2)! Y = (N + 3)! |
15 |
7! – (K + 2)! Y = K! |
16 |
Bn Y = Bn – 53 |
17 |
(2N)! – (n + 2)! Y = N! + (3 – N) |
18 |
A3 – Bm Y = 5m + B2 |
19 |
A8 + A-8 Y = 2(A + 1)m |
20 |
Bm – A3 Y = 5m + B2 |
21 |
Bm + A5 Y = (A + B)m |
22 |
B3 + A4 Y = Bm |
23 |
57 – A5 Y = (A + 1)m |
24 |
B3 Y = 54 – Bn |
25 |
B4 – Am Y = 53 + Bm |
26 |
A5 – Bm Y = Bm + 55 |
Вариант |
Функция Y |
Вариант |
Функция Y |
27 |
(K – M)! Y = K! + M! |
28 |
A7 – A-7 Y = (2A + 1)m |
29 |
N! – (2N – K)! Y = K! |
30 |
A5 + A-5 Y = 2Am |
31 |
A5 – A-5 Y = 2mA |
32 |
A9 – A-9 Y = (2A + 1)m |
33 |
(K – 2N)! + K! Y = (N – 2K)! + 1 |
34 |
3A4 + (2A)m Y = 3Am+1 |
Примечание. Значениями аргументов и их местом размещения (ячейки оперативной памяти или РОНы процессора) задаться самостоятельно.
3. Справочные материалы по особенностям программирования
и выполнения операций умножения и деления
3.1. При программировании на языке ассемблера операций умножения следует помнить, что в микропроцессоре ВМ86 они выполняются в регистре-аккумуляторе AX и его расширителе DX.
При выполнении данных операций число (множимое, которое может храниться в РОНах или в ячейках памяти), умножается на содержимое (множитель) регистра AL (при операциях над байтами) или на содержимое регистра AX (при операциях над словами). Результат умножения (произведение) будет возвращаться в регистр АХ, если в операции участвовали однобайтные числа. Если же умножались двухбайтные числа, то произведение будет помещено в два регистра – в AX и DX, причем младшие разряды (младший байт) этого произведения запишутся в регистр AX, а старшие разряды (старший байт) – в DX.
Рекомендуемая последовательность действий, которую нужно соблюдать при использовании операции умножения, следующая:
а) при умножении однобайтных слов:
обнулить регистр AX;
заслать множитель в AL;
заслать множимое в младшую или старшую половину любого РОНа, например, в BL (если же множитель находится в ячейке памяти, адресуемой, допустим, через BX, то в этой операции нет необходимости);
выполнить операцию умножения mul BL или (если множимое находилось в ячейке, адресуемой через BX) операцию mul byte ptr [BX];
результат умножения (произведение) прочитать в регистре AX.
Так, например, если множитель (число 3) было записано в AL, а множимое (число 2) – в BL, то после выполнения команды mul BL в регистр AX будет записано произведение 6 (AX = 0006).
б) при умножении двухбайтных слов:
обнулить регистры AX и DX;
заслать множитель в AX;
заслать множимое в любой РОН, например, в СX (если же множимое находится в ячейке памяти, адресуемой, допустим, через BX, то в этой операции нет необходимости);
выполнить операцию умножения mul СX или (если множимое находилось в ячейке, адресуемой через BX) операцию mul word ptr [BX];
результат умножения прочитать: в AX – младшие разряды произведения, а в DX – старшие разряды.
Например, если в AX было записано число 501h (т. е. 1281(10)), а в СX – число 125h (т. е. 293(10)), то после выполнения команды умножения mul СX будет получено произведение 5BA25h (375333(10)). Младшие разряды (с 0 по 15) этого произведения будут помещены в регистр AX (AX = BA25), a старшие разряды (с 16 по 31) – в регистр DX (DX = 0005).
Примечание. Допускается использование команды mul AX для возведения в квадрат содержимого регистра AX. Однако пользоваться такой командой нужно осторожно, не задавая больших чисел, ибо возможны прерывания по переполнению разрядной сетки.
3.2. При программировании на языке ассемблера операций деления следует помнить не только, что они выполняются в регистре-аккумуляторе AX и его расширителе DX, но и то, что микропроцессор ВМ86 оперирует только целыми числами.