Лабы 1-3 / 2_Laba3
.docМинистерство образования и науки Российской Федерации
Федеральное агентство по образованию
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» имени В. И. Ульянова (Ленина)
Кафедра ИИСТ
Отчет по лабораторной работе № 3 по дисциплине «Микропроцессорные средства в ИИТ»
ИЗУЧЕНИЕ ЦИКЛИЧЕСКИХ ПРОГРАММ ОБРАБОТКИ ДАННЫХ
Выполнили ст. гр. 6587
Мазур С.С.
Шундрина Ю.А.
Бригада № 7
Проверил: Королев П. Г.
Санкт-Петербург
2010
Цель работы: Изучение основ программирования циклических измерительных алгоритмов и приобретение навыков их отладки на МПС.
Задание (вариант № 7):
В массиве из 16 слов, расположенном во внешней памяти, посчитать количество положительных и отрицательных чисел и вычислить отдельно их математические ожидания.
Распределение памяти
0030 ax : dsw 1
0032 mass_ptr : dsw 1
0034 kp : dsb 1
0035 kn : dsb 1
0036 spol : dsw 1
0038 sneg : dsw 1
003A mop : dsw 1
003C mon : dsw 1
003E n_loop : dsb 1
Листинг программы
MCS-96 MACRO ASSEMBLER THIRD_LAB 03/19/11 10:46:45 PAGE 1
DOS 7.10 (046-N) MCS-96 MACRO ASSEMBLER, V1.3
SOURCE FILE: d:\mcs96\6587_7\g6587l3.a96
OBJECT FILE: d:\mcs96\6587_7\g6587l3.obj
CONTROLS SPECIFIED IN INVOCATION COMMAND: <none>
LOC OBJECT STMT SOURCE STATEMENT
1 third_lab MODULE main
2 ;Мазур С.С.
3 ;Шундрина Ю.А.
4 $nolist
0030 70 rseg at (30h)
0030 71 ax : dsw 1 ;рабочий регистр
0032 72 mass_ptr : dsw 1 ;массив данных
0034 73 kp : dsb 1 ;счетчик положительных чисел
0035 74 kn : dsb 1 ;счетчик отрицательных чисел
0036 75 spol : dsw 1 ;сумма положительных чисел
0038 76 sneg : dsw 1 ;сумма отрицательных чисел
003A 77 mop : dsw 1 ;математическое ожидание положительных чисел
003C 78 mon : dsw 1 ;математическое ожидание отрицательных чисел
003E 79 n_loop : dsb 1 ;счетчик цикла
8100 80 cseg at 8100h
8100 113E 81 clrb n_loop ; очистка счетчика цикла
8102 1134 82 clrb kp ; очистка счетчика положительных чисел
8104 1135 83 clrb kn ; очистка счетчика отрицательных чисел
8106 0136 84 clr spol ;
8108 0138 85 clr sneg ;
810A 013C 86 clr mon ;
810C 013A 87 clr mop ;
810E 0132 88 clr mass_ptr ;
8110 B1103E 89 ldb n_loop, #16 ;
8113 90 schet:
8113 A333408130 91 ld ax, mass[mass_ptr] ;
8118 89000030 92 cmp ax, #0 ;
811C DE07 93 jlt minus ;
811E 1734 94 incb kp ;
8120 643036 95 add spol, ax ;
8123 2005 96 sjmp metka ;
8125 97 minus:
8125 1735 98 incb kn ;
8127 643038 99 add sneg, ax ;
812A 100 metka:
812A 65020032 101 add mass_ptr, #2 ;
812E E03EE2 102 djnz n_loop, schet ;
8131 A0363A 103 ld mop, spol ;
8134 A0383C 104 ld mon, sneg ;
8137 FE9C353C 105 divb mon, kn ;
813B FE9C343A 106 divb mop, kp ;
107
813F F0 108 ret
8140 109 mass:
8140 0200 110 dcw 2d
8142 0300 111 dcw 3d
8144 0600 112 dcw 6d
8146 FCFF 113 dcw -4d
8148 FBFF 114 dcw -5d
814A 0700 115 dcw 7d
814C 0900 116 dcw 9d
MCS-96 MACRO ASSEMBLER THIRD_LAB 03/19/11 10:46:45 PAGE 2
LOC OBJECT STMT SOURCE STATEMENT
814E F8FF 117 dcw -8d
8150 0400 118 dcw 4d
8152 FBFF 119 dcw -5d
8154 0300 120 dcw 3d
8156 FEFF 121 dcw -2d
8158 FAFF 122 dcw -6d
815A 0700 123 dcw 7d
815C 0400 124 dcw 4d
815E FBFF 125 dcw -5d
8160 126 end
MCS-96 MACRO ASSEMBLER THIRD_LAB 03/19/11 10:46:45 PAGE 3
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
AX. . . . . . . . . . . . . . . 0030H REG ABS WORD
BAUD_RATE . . . . . . . . . . . 000EH NULL ABS BYTE
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
KN. . . . . . . . . . . . . . . 0035H REG ABS BYTE
KP. . . . . . . . . . . . . . . 0034H REG ABS BYTE
MASS. . . . . . . . . . . . . . 8140H CODE ABS WORD
MASS_PTR. . . . . . . . . . . . 0032H REG ABS WORD
METKA . . . . . . . . . . . . . 812AH CODE ABS ENTRY
MINUS . . . . . . . . . . . . . 8125H CODE ABS ENTRY
MON . . . . . . . . . . . . . . 003CH REG ABS WORD
MOP . . . . . . . . . . . . . . 003AH REG ABS WORD
N_LOOP. . . . . . . . . . . . . 003EH REG ABS BYTE
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
SCHET . . . . . . . . . . . . . 8113H CODE ABS ENTRY
SNEG. . . . . . . . . . . . . . 0038H REG ABS WORD
SP. . . . . . . . . . . . . . . 0018H NULL ABS WORD
SP_CON. . . . . . . . . . . . . 0011H NULL ABS BYTE
SP_STAT . . . . . . . . . . . . 0011H NULL ABS BYTE
SPOL. . . . . . . . . . . . . . 0036H REG ABS WORD
T2CAPTURE . . . . . . . . . . . 000CH NULL ABS WORD
T2CONTROL . . . . . . . . . . . 000CH NULL ABS BYTE
MCS-96 MACRO ASSEMBLER THIRD_LAB 03/19/11 10:46:45 PAGE 4
N A M E VALUE ATTRIBUTES
THIRD_LAB . . . . . . . . . . . ----- MODULE MAIN STACKSIZE(0)
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.
Проверка срабатывания условных переходов
ldb n_loop, #16
metka:
<..тело цикла..>
djnz n_loop, schet ;
Цикл переходит по метке некоторое количество раз, которое мы первоначально задаем в счетчике n_loop. В нашем случае 16. Каждый последующий раз он уменьшается на 1, а дойдя до значения 0 переход по метке не совершается.
Адрес команды |
Мнемоника |
Адрес операнда назначения |
Значение операнда до операции |
Осуществление перехода |
Слово состояния процессора PSW |
|||
Z |
N |
V |
C |
|||||
812Eh |
DJNZ |
3Eh |
3Eh: 0Fh |
Переход на команду с адресом 8113h |
0 |
0 |
0 |
0 |
812Eh |
DJNZ |
3Eh |
3Eh: 01h |
Нет перехода |
0 |
0 |
0 |
0 |
Проверка срабатывания команды JLT – «переход, если меньше нуля». Мы производим сравнение числа с нулем. После выполнения команды CMP ax, #0 флаг N слова состояния процессора (PSW) принимает значение 1, если значение ax меньше нуля и 0, если ax больше нуля. Этот флаг является определяющим при выполнении команды JLT.
Адрес команды |
Мнемоника |
Адрес операнда назначения |
Результат операции |
Осуществление перехода |
Слово состояния процессора PSW |
|||
Z |
N |
V |
C |
|||||
8118h |
CMP |
30h |
Значение операнда не меняется |
- |
0 |
1 |
0 |
1 |
811Сh |
JLT |
8125h |
Флаг N=1. Переход на команду с адресом 8125h |
|||||
Следующая команда |
||||||||
8125h |
INCB |
35h |
35h: 01 |
- |
0 |
0 |
0 |
0 |
8118h |
CMP |
30h |
Значение операнда не меняется |
- |
0 |
0 |
0 |
1 |
811Сh |
JLT |
8125h |
Флаг N=0. Перехода нет |
|||||
Следующая команда |
||||||||
811Eh |
INCB |
34h |
34h: 02 |
- |
0 |
0 |
0 |
0 |
Проверка правильности работы программы:
По итогам работы программы в ячейке с адресом 34h (адрес счетчика положительных чисел) мы видим значение 09h. В ячейке с адресом 35h (адрес счетчика отрицательных чисел) – значение 07h. Аналогично, в ячейке с адресом 3Сh (адрес регистра мат. ожидания отрицательных чисел) – значение FBh. В ячейке с адресом 3Ah (адрес регистра мат. ожидания положительных чисел) – значение 05h. .
Выводы:
В ходе выполнения лабораторной работы мы научились использовать циклы при обработке данных. В массиве из 16 слов, расположенном во внешней памяти, посчитали количество положительных и отрицательных чисел и вычислили их математические ожидания.