Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач_ассемблер.doc
Скачиваний:
5
Добавлен:
07.09.2019
Размер:
3.15 Mб
Скачать
  1. Листинг программы

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. Характеристики ЦФ исследованы в режиме отладки. Рассчитано время выполнения программы в числе тактов. Приведена функциональная схема МПС.

Разработанная МПС удовлетворяет требованиям задания, в частности, условию минимализации длины программы и времени вычисления.