Файл: Контрольная работа 2018.docx

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Системное программирование

Добавлен: 20.10.2018

Просмотров: 688

Скачиваний: 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 = 

5+ 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 оперирует только целыми числами.