Государственный комитет Российской Федерации
по высшему образованию
Санкт-Петербургский государственный электротехнический университет
Кафедра ИИСТ
Лабораторная работа №3
Студенты: Виноградов К. ãð. 6561
Евдокимов С.
Преподаватель: Королев П.Г.
Санкт-Петербург
Задание.
Сгенерировать массив из 10 элементов:
-
Вычислить математическое ожижание
-
Вычислить дисперсию.
Алгоритм
-
Заполнение массива данными. В качестве механизма заполнения используем косвенную адресацию с автоинкрементированием, специально предназначенную для работы с массивами данных. Присвоение значений элементам массива производится в цикле loop1. В качестве значений мы приняли числа от 10 до 1 с шагом, равным единице.
-
Вычисление математического ожидания. Т. к. математическое ожидание находится как отношение суммы всех элементов массива к количеству элементов, мы в цикле loop2 суммируем все элементы и затем по выходу из цикла делим полученную сумму на 10.
-
Вычисление дисперсии. Дисперсия ищется как отношение суммы квадратов разностей элементов массива и математического ожидания к количеству элементов. Математические операции, стоящие до операции деления выполняются в цикле loop3 с учетом типа данных, т. к. при использовании команд для работы с беззнаковыми числами могут возникнуть нелепые ошибки. По выходу из цикла выполняется операция деления, которая и завершает нахождение дисперсии.
-
В достоверности результатов убедимся при дальнейшем анализе работы программы.
Листинг программы:
MCS-96 MACRO ASSEMBLER F_LAB 05/09/10
19:23:54 PAGE 1
DOS D.40 (046-N) MCS-96 MACRO ASSEMBLER, V1.3
SOURCE FILE: lab_3_4.a96
OBJECT FILE: lab_3_4.obj
CONTROLS SPECIFIED IN INVOCATION COMMAND: <none>
LOC OBJECT STMT SOURCE STATEMENT
1 F_lab MODULE main
2 ; Бригада і4:
3 ; Виноградов К.Ю. & Евдокимов С.Н.
4 ;
5 $nolist ; подавление листинга
71
8100 72 dseg at 8100h
000A 73 num equ 10 ; количество элементов массива (10)
8100 74 array: dsb num ; выделяем память под массив
0030 75 rseg at 30h
0030 76 count: dsb 1 ; сч±тчик для реализации цикла
0032 77 ptr: dsw 1 ; указатель на массив
0034 78 sum: dsw 1 ; сумма элементов массива
0036 79 m: dsb 1 ; математическое ожидание
0037 80 b: dsb 1 ; доп. байт для получения C
0038 81 c: dsw 1 ; квадрат разности элемента массива и мат.
ожидания
003A 82 d: dsb 1 ; дисперсия
9000 83 cseg at 9000h
9000 B10A30 84 ldb count, #num
9003 A1008132 85 ld ptr, #array
9007 C63330 86 loop1: stb count, [ptr]+ ; заполняем массив значениями от 10
до 1
900A E030FA 87 djnz count, loop1 ; счетчик сравнивается с 0,
вычитается 1 и выполняется loop1.
900D A1008132 88 ld ptr, #array ; указатель на первый элемент массива
9011 0134 89 clr sum
9013 B10A30 90 ldb count, #num
9016 763334 91 loop2: addb sum, [ptr]+ ; суммируем элементы массива
9019 E030FA 92 djnz count, loop2 ; счетчик сравнивается с 0, вычитается
1 и выполняется loop2.
901C 9D0A34 93 divub sum, #num ; получаем мат. ожидание
901F B03436 94 ldb m, sum
9022 A1008132 95 ld ptr, #array ; указатель на первый элемент массива
9026 B10A30 96 ldb count, #num
9029 0134 97 clr sum
902B B23337 98 loop3: ldb b, [ptr]+ ; получаем дисперсия
902E 783637 99 subb b, m
9031 FE5C373738 100 mulb c, b, b
9036 643834 101 add sum, c
9039 E030EF 102 djnz count, loop3 ; счетчик сравнивается с 0,
вычитается 1 и выполняется loop3.
903C 9D0A34 103 divub sum, #num
903F A0343A 104 ld d, sum
105
106
9042 F0 107 ret ; необходима для корректного завершения
108 ; пользователя
109 ;****************************************************************************
9043 110 END
MCS-96 MACRO ASSEMBLER F_LAB 05/09/10
19:23:54 PAGE 2
SYMBOL TABLE LISTING
--------------------
N A M E VALUE ATTRIBUTES
AD_COMMAND. . . . . . . . . . . 0002H NULL ABS BYTE
AD_RESULT . . . . . . . . . . . 0002H NULL ABS BYTE
AD_RESULT_HI. . . . . . . . . . 0003H NULL ABS BYTE
AD_RESULT_LO. . . . . . . . . . 0002H NULL ABS BYTE
AD_TIME . . . . . . . . . . . . 0003H NULL ABS BYTE
ARRAY . . . . . . . . . . . . . 8100H DATA ABS BYTE
B . . . . . . . . . . . . . . . 0037H REG ABS BYTE
BAUD_RATE . . . . . . . . . . . 000EH NULL ABS BYTE
C . . . . . . . . . . . . . . . 0038H REG ABS WORD
COUNT . . . . . . . . . . . . . 0030H REG ABS BYTE
D . . . . . . . . . . . . . . . 003AH REG ABS BYTE
F_LAB . . . . . . . . . . . . . ----- MODULE MAIN STACKSIZE(0)
HSI_MODE. . . . . . . . . . . . 0003H NULL ABS BYTE
HSI_STATUS. . . . . . . . . . . 0006H NULL ABS BYTE
HSI_TIME. . . . . . . . . . . . 0004H NULL ABS WORD
HSO_COMMAND . . . . . . . . . . 0006H NULL ABS BYTE
HSO_TIME. . . . . . . . . . . . 0004H NULL ABS WORD
IMASK1. . . . . . . . . . . . . 0013H NULL ABS BYTE
INT_MASK. . . . . . . . . . . . 0008H NULL ABS BYTE
INT_MASK1 . . . . . . . . . . . 0013H NULL ABS BYTE
INT_PEND. . . . . . . . . . . . 0009H NULL ABS BYTE
INT_PEND1 . . . . . . . . . . . 0012H NULL ABS BYTE
INT_PENDING . . . . . . . . . . 0009H NULL ABS BYTE
IOC0. . . . . . . . . . . . . . 0015H NULL ABS BYTE
IOC1. . . . . . . . . . . . . . 0016H NULL ABS BYTE
IOC2. . . . . . . . . . . . . . 000BH NULL ABS BYTE
IOC3. . . . . . . . . . . . . . 000CH NULL ABS BYTE
IOPORT0 . . . . . . . . . . . . 000EH NULL ABS BYTE
IOPORT1 . . . . . . . . . . . . 000FH NULL ABS BYTE
IOPORT2 . . . . . . . . . . . . 0010H NULL ABS BYTE
IOS0. . . . . . . . . . . . . . 0015H NULL ABS BYTE
IOS1. . . . . . . . . . . . . . 0016H NULL ABS BYTE
IOS2. . . . . . . . . . . . . . 0017H NULL ABS BYTE
IPEND1. . . . . . . . . . . . . 0012H NULL ABS BYTE
LOOP1 . . . . . . . . . . . . . 9007H CODE ABS ENTRY
LOOP2 . . . . . . . . . . . . . 9016H CODE ABS ENTRY
LOOP3 . . . . . . . . . . . . . 902BH CODE ABS ENTRY
M . . . . . . . . . . . . . . . 0036H REG ABS BYTE
NUM . . . . . . . . . . . . . . 000AH NULL ABS
PTR . . . . . . . . . . . . . . 0032H REG ABS WORD
PTSSEL. . . . . . . . . . . . . 0004H NULL ABS WORD
PTSSRV. . . . . . . . . . . . . 0006H NULL ABS WORD
PWM_CONTROL . . . . . . . . . . 0017H NULL ABS BYTE
PWM1_CONTROL. . . . . . . . . . 0016H NULL ABS BYTE
PWM2_CONTROL. . . . . . . . . . 0017H NULL ABS BYTE
R0. . . . . . . . . . . . . . . 0000H NULL ABS WORD
SBUF. . . . . . . . . . . . . . 0007H NULL ABS BYTE
SP. . . . . . . . . . . . . . . 0018H NULL ABS WORD
SP_CON. . . . . . . . . . . . . 0011H NULL ABS BYTE
SP_STAT . . . . . . . . . . . . 0011H NULL ABS BYTE
SUM . . . . . . . . . . . . . . 0034H REG ABS WORD
T2CAPTURE . . . . . . . . . . . 000CH NULL ABS WORD
T2CONTROL . . . . . . . . . . . 000CH NULL ABS BYTE
MCS-96 MACRO ASSEMBLER F_LAB 05/09/10
19:23:54 PAGE 3
N A M E VALUE ATTRIBUTES
TIMER1. . . . . . . . . . . . . 000AH NULL ABS WORD
TIMER2. . . . . . . . . . . . . 000CH NULL ABS WORD
WATCHDOG. . . . . . . . . . . . 000AH NULL ABS BYTE
WSR . . . . . . . . . . . . . . 0014H NULL ABS BYTE
ASSEMBLY COMPLETED, NO ERROR(S) FOUND.