- •Содержание
- •Задание.
- •Введение
- •Структурная схема мпс
- •Структурная схема цп
- •Структура памяти, распределение данных
- •Разработка схемы алгоритма функционирования мпс, реализующей операцию цифровой фильтрации.
- •Укрупнённая схема алгоритма функционирования мпс.
- •4.2. Схема алгоритма вычисления выражения для цф
- •6. Описание принципиальной схемы
- •Основные результаты разработки.
- •8. Отладка программы.
- •Листинг программы
- •10.Список используемых источников
Листинг программы
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 1
filter.ASM
1 ;Программа вычисления Yn=(10Xn+7Xn-1+4Xn-2+Xn-3-2Xn-4-5Xn-5)/15
2 0000 .model small ;модель памяти SMALL
3 0000 .stack 64 ;модель стека 64
4 0000 .data ;начало сегманта данных
5 0000 0000 xn dw 0 ;резервирование
6 0002 0000 xn1 dw 0 ;места в памяти
7 0004 0000 xn2 dw 0 ;под переменные
8 0006 0000 xn3 dw 0 ;xn,xn1,xn2,xn3
9 0008 0000 xn4 dw 0 ;xn4
10 000A 0000 xn5 dw 0 ;xn5
11 000C 0000 yn dw 0 ;yn
12 ;******************************************************************************
13 ;
14 ;Константы для деления и выявления переполнения
15 ;
16 =7FF1 r1m equ 7ff1h ;константа r1m примет значение k(+ymax)мл
17 =0007 r1c equ 0007h ;константа r1c примет значение k(+ymax)ст
18 =8000 r2m equ 8000h ;константа r2m примет значение k(-ymax)мл
19 =FFF8 r2c equ 0fff8h ;константа r2c примет значение k(-ymax)ст
20 =000F k equ 15 ;делитель
21 ;******************************************************************************
22 ;
23 ;Программа вычисления выражения
24 ;
25 000E .code ;начало кодового сегмента
26 0000 filtr proc ;начало процедуры filtr
27 0000 B8 0000s mov ax,@data ;указание регистра DS
28 0003 8E D8 mov ds,ax ;сегмент двнных
29 ;******************************************************************************
30 ;
31 ;Сброс переменных xn,xn1,xn2,xn3,xn4,xn5,yn
32 0005 2B C0 sub ax,ax ;сброс аккумулятора AX
33 0007 A3 0000r mov xn,ax ;сброс xn
34 000A A3 0002r mov xn1,ax ;сброс xn1
35 000D A3 0004r mov xn2,ax ;сброс xn2
36 0010 A3 0006r mov xn3,ax ;сброс xn3
37 0013 A3 0008r mov xn4,ax ;сброс xn4
38 0016 A3 000Ar mov xn5,ax ;сброс xn5
39 0019 A3 000Cr mov yn,ax ;сброс yn
40 ;******************************************************************************
41 ;
42 ;Вычисление W1=10xn
43 001C A1 0000r M1: mov ax,xn ;запись xn в AX
44 001F 99 cwd ;расширение слова до двойного слова
45 0020 03 C0 add ax,ax ;получим 2Xnмл и сохраним в AX
46 0022 13 D2 adc dx,dx ;получим 2Xnст и сохраним в DX
47 0024 8B F8 mov di,ax ;запомним 2Xnмл в DI
48 0026 8B F2 mov si,dx ;запомним 2Xnст в SI
49 0028 03 C0 add ax,ax ;вычисление 4Xnмл и запись в AX
50 002A 13 D2 adc dx,dx ;вычисление 4Xnст и запись в DX
51 002C 03 C0 add ax,ax ;вычисление 8Xnмл и запись в AX
52 002E 13 D2 adc dx,dx ;вычисление 8Xnст и запись в DX
53 0030 03 C7 add ax,di ;вычисление 10Xnмл и запись в AX
54 0032 13 D6 adc dx,si ;вычисление 10Xnст и запись в DX
55 0034 8B D8 mov bx,ax ;сохранение
56 0036 8B EA mov bp,dx ;результатов в BP:BX
57 ;******************************************************************************
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 2
filter.ASM
58 ;
59 ;Вычисление W2=W1+7xn1
60 0038 A1 0002r mov ax,xn1 ;запись xn1 в аккумулятора
61 003B 99 cwd ;расширение xn1 до двойного слова
62 003C 8B F8 mov di,ax ;запомним Xn1мл в DI
63 003E 8B F2 mov si,dx ;запомним Xn1ст в SI
64 0040 03 C0 add ax,ax ;вычисление 2Xn1мл и сохраним в AX
65 0042 13 D2 adc dx,dx ;вычисление 2Xn1ст и сохраним в DX
66 0044 03 C0 add ax,ax ;вычисление 4Xn1мл и запись в AX
67 0046 13 D2 adc dx,dx ;вычисление 4Xn1ст и запись в DX
68 0048 03 C0 add ax,ax ;вычисление 8Xn1мл и запись в AX
69 004A 13 D2 adc dx,dx ;вычисление 8Xn1ст и запись в DX
70 004C 2B C7 sub ax,di ;вычисление 7Xn1мл и запись в AX
71 004E 1B D6 sbb dx,si ;вычисление 7Xn1ст и запись в DX
72 0050 03 D8 add bx,ax ;вычисление младшей части 10xn+7xn1
73 0052 13 EA adc bp,dx ;вычисление старшей части 10xn+7xn1
74 ;******************************************************************************
75 ;
76 ;Вычисление W3=W2+4xn2
77 0054 A1 0004r mov ax,xn2 ;запись xn2 в аккумулятора
78 0057 99 cwd ;расширение xn2 до двойного слова
79 0058 03 C0 add ax,ax ;вычисление 2Xn2мл и сохраним в AX
80 005A 13 D2 adc dx,dx ;вычисление 2Xn2ст и сохраним в DX
81 005C 03 C0 add ax,ax ;вычисление 4Xn2мл и запись в AX
82 005E 13 D2 adc dx,dx ;вычисление 4Xn2ст и запись в DX
83 0060 03 D8 add bx,ax ;вычисление младшей части 10xn+7xn1+4xn2
84 0062 13 EA adc bp,dx ;вычисление старшей части 10xn+7xn1+4xn2
85 ;******************************************************************************
86 ;
87 ;Вычисление W4=W3+1xn3
88 0064 A1 0006r mov ax,xn3 ;запись xn3 в аккумулятора
89 0067 99 cwd ;расширение xn3 до двойного слова
90 0068 03 D8 add bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3
91 006A 13 EA adc bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3
92 ;******************************************************************************
93 ;
94 ;Вычисление W5=W3-2xn4
95 006C A1 0008r mov ax,xn4 ;запись xn4 в аккумулятора
96 006F 99 cwd ;расширение xn4 до двойного слова
97 0070 03 C0 add ax,ax ;вычисление 2Xn4мл и сохраним в AX
98 0072 13 D2 adc dx,dx ;вычисление 2Xn4ст и сохраним в DX
99 0074 2B D8 sub bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3-2xn4
100 0076 1B EA sbb bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3-2xn4
101 ;******************************************************************************
102 ;
103 ;Вычисление W6=W5-5xn5
104 0078 A1 000Ar mov ax,xn5 ;запись xn5 в аккумулятора
105 007B 99 cwd ;расширение xn5 до двойного слова
106 007C 8B F8 mov di,ax ;запомним Xn5мл в DI
107 007E 8B F2 mov si,dx ;запомним Xn5ст в SI
108 0080 03 C0 add ax,ax ;вычисление 2Xn5мл и сохраним в AX
109 0082 13 D2 adc dx,dx ;вычисление 2Xn5ст и сохраним в DX
110 0084 03 C0 add ax,ax ;вычисление 4Xn5мл и запись в AX
111 0086 13 D2 adc dx,dx ;вычисление 4Xn5ст и запись в DX
112 0088 03 C7 add ax,di ;вычисление 5Xn5мл и запись в AX
113 008A 13 D6 adc dx,si ;вычисление 5Xn5ст и запись в DX
114 008C 2B D8 sub bx,ax ;вычисление младшей части 10xn+7xn1+4xn2+1xn3-2xn4-5xn5
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 3
filter.ASM
115 008E 1B EA sbb bp,dx ;вычисление старшей части 10xn+7xn1+4xn2+1xn3-2xn4-5xn5
116 ;******************************************************************************
117 ;
118 0090 8B C3 mov ax,bx ;передача делимого W6
119 0092 8B D5 mov dx,bp ;в DX:AX
120 0094 3D 7FF1 cmp ax,r1m ;сравнение ax с r1m
121 0097 83 DA 07 sbb dx,r1c ;сравнение dx с r1c
122 009A 79 17 jns m2 ;переход на метку m2 если W5>15(+ymax)
123 009C 8B D5 mov dx,bp ;восстановить DX
124 009E 3D 8000 cmp ax,r2m ;сравнить ax c r2m
125 00A1 83 DA F8 sbb dx,r2c ;сравнить dx с r2c
126 00A4 78 16 js m3 ;переход на метку m3 если W5<15(-ymax)
127 ;******************************************************************************
128 ;
129 ;Деление DX:AX на k=15
130 00A6 8B D5 mov dx,bp ;восстановить dx
131 00A8 BE 000F mov si,k ;запись делителя k в si
132 00AB F7 FE idiv si ;ax <- dx:ax/si
133 00AD A3 000Cr mov yn,ax ;запись результата деления в yn
134 00B0 EB 13 90 jmp m4 ;перход на метку m4
135 00B3 C7 06 000Cr 7FFF m2: mov yn,7FFFh ;запись в yn константы 7FFFh
136 00B9 EB 0A 90 jmp m4 ;перход на метку m4
137 00BC C7 06 000Cr 8000 m3: mov yn,8000h ;запись в yn константы 8000h
138 00C2 EB 01 90 jmp m4 ;перход на метку m4
139 ;******************************************************************************
140 ;
141 ;Формирование очереди
142 00C5 m4:
143 00C5 A1 0008r mov ax,xn4 ;передать xn4
144 00C8 A3 000Ar mov xn5,ax ;на место xn5
145 00CB A1 0006r mov ax,xn3 ;передать xn3
146 00CE A3 0008r mov xn4,ax ;на место xn4
147 00D1 A1 0004r mov ax,xn2 ;передать xn2
148 00D4 A3 0006r mov xn3,ax ;на место xn3
149 00D7 A1 0002r mov ax,xn1 ;передать xn1
150 00DA A3 0004r mov xn2,ax ;на место xn2
151 00DD A1 0000r mov ax,xn ;передать xn
152 00E0 A3 0002r mov xn1,ax ;на место xn1
153 00E3 E9 FF36 jmp M1 ;переход на метку M1
154 ;******************************************************************************
155 ;
156 ;Окончание программы
157 00E6 B4 4C mov AH,4CH ;функция DOS
158 00E8 CD 21 int 21H ;выход из программы
159 00EA filtr ENDP ;конец процедуры filtr
160 END filtr ;конец программы
Turbo Assembler Version 4.1 13/05/11 19:04:49 Page 4
Symbol Table
Symbol Name Type Value
??DATE Text "13/05/11"
??FILENAME Text "filter "
??TIME Text "19:04:49"
??VERSION Number 040A
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text FILTER
@INTERFACE Text 000H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
FILTR Near _TEXT:0000
K Number 000F
M1 Near _TEXT:001C
M2 Near _TEXT:00B3
M3 Near _TEXT:00BC
M4 Near _TEXT:00C5
R1C Number 0007
R1M Number 7FF1
R2C Number FFF8
R2M Number 8000
XN Word DGROUP:0000
XN1 Word DGROUP:0002
XN2 Word DGROUP:0004
XN3 Word DGROUP:0006
XN4 Word DGROUP:0008
XN5 Word DGROUP:000A
YN Word DGROUP:000C
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0040 Para Stack STACK
_DATA 16 000E Word Public DATA
_TEXT 16 00EA Word Public CODE
Заключение
В результате выполнения курсовой работы на основе МП 1810ВМ88, работающего в максимальном режиме, произведена разработка микропроцессорной системы, выполняющей функцию цифровой фильтрации.
Построен алгоритм выполнения ЦФ и реализован на языке Assembler. Характеристики ЦФ исследованы в режиме отладки. Рассчитано время выполнения программы в числе тактов. Приведена функциональная схема МПС.
Разработанная МПС удовлетворяет требованиям задания, в частности, условию минимализации длины программы и времени вычисления.