Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР_Степанова(735).docx
Скачиваний:
1
Добавлен:
07.09.2019
Размер:
877.38 Кб
Скачать

8 Отладка программы

  1. При Xn > 0, Xn = 1016

Xn

10

10

10

10

Xn-1

0

10

10

10

Xn-2

0

0

10

10

Xn-3

0

0

0

10

Yn

24

18

4

10

  1. При Xn < 0, Xn = -1016

Xn

FFF0

FFF0

FFF0

FFF0

Xn-1

0

FFF0

FFF0

FFF0

Xn-2

0

0

FFF0

FFF0

Xn-3

0

0

0

FFF0

Yn

FFDC

FFE8

FFFC

FFF0

  1. При возникновении положительного переполнения Xn = Xmax = 215-1 = 7FFF16

Xn

7FFF

7FFF

7FFF

7FFF

Xn-1

0

7FFF

7FFF

7FFF

Xn-2

0

0

7FFF

7FFF

Xn-3

0

0

0

7FFF

Yn

7FFF

7FFF

1FFF

7FFF

  1. При возникновении отрицательного переполнения Xn = Xmax = -215 = 800016

Xn

8000

8000

8000

8000

Xn-1

0

8000

8000

8000

Xn-2

0

0

8000

8000

Xn-3

0

0

0

8000

Yn

8000

8000

E000

8000

9 Листинг программы

Turbo Assembler Version 4.1 07/05/11 21:18:33 Page 1

progr6.asm

1 ;Программа вычисления Yn=(9*Xn-3*Xn_1-5*Xn_2+3*Xn_3)/4 ст. Степанова Наталья Викторовна

2 0000 .MODEL small ;модель памяти small

3 0000 .STACK 64 ;модель стека 64

4 0000 .DATA ;начало сегмента данных

5 org 500h

6 0500 0000 XN dw 0 ;Резервирование места в памяти

7 0502 0000 XN1 dw 0 ;для переменных

8 0504 0000 XN2 dw 0 ;Xn, Xn_1, Xn_2

9 0506 0000 XN3 dw 0 ;Xn_3 и

10 0508 0000 YN dw 0 ;результата Yn

11

12 ;******************************************************************

13

14 ;Константы для деления и выявления переполнения

15 =0004 K EQU 4 ;Делитель

16 =FFFC R1ML EQU 0FFFCh ;константе R1ML присвоить значение мл. части

17 ;4*(+Ymax)

18 =0001 R1CT EQU 0001h ;константе R1CT присвоить значение ст. части

19 ;4*(+Ymax)

20 =0000 R2ML EQU 0000h ;константе R2ML присвоить значение мл. части

21 ;4*(-Ymax)

22 =FFFE R2CT EQU 0FFFEh ;константе R2CT присвоить значение ст. части

23 ;4*(-Ymax)

24

25 ;******************************************************************

26

27 050A .CODE ;начало сегмента кодов

28 0000 FILTP proc ;начало процедуры с именем FILTP

29 0000 B8 0000s mov ax,@data ;перемещение указателя ds на

30 0003 8E D8 mov ds,ax ;сегмент данных

31

32 ;******************************************************************

33

34 ;Сброс очереди Xn,Xn-1,Xn-2,Xn-3,Y в нуль

35 0005 2B C0 sub ax,ax ;сброс аккумулятора ax в нуль

36 0007 A3 0500r mov xn,ax ;сброс xn в нуль

37 000A A3 0502r mov xn1,ax ;сброс xn1 в нуль

38 000D A3 0504r mov xn2,ax ;сброс xn2 в нуль

39 0010 A3 0506r mov xn3,ax ;сброс xn3 в нуль

40 0013 A3 0508r mov yn,ax ;сброс yn в нуль

41

42 ;******************************************************************

43

44 ;Вычисление w1=9*xn

45 0016 M1:

46 0016 A1 0500r mov ax,xn ;запись xn в аккумулятор ax

47 0019 99 cwd ;расширение ax в dx, т.е. xn в формате двойного слова

48 001A 8B F2 mov si,dx ;сохранение xn в si:di

49 001C 8B F8 mov di,ax ;

50 001E 03 C0 add ax,ax ;вычисление 2*xn (xn+xn)

51 0020 13 D2 adc dx,dx ;

52 0022 03 C0 add ax,ax ;вычисление 4*xn (2*xn+2*xn)

53 0024 13 D2 adc dx,dx ;

54 0026 03 C0 add ax,ax ;вычисление 8*xn (4*xn+4*xn)

55 0028 13 D2 adc dx,dx ;

56 002A 03 C7 add ax,di ;вычисление 9*xn (8*xn+xn)

57 002C 13 D6 adc dx,si ;

Turbo Assembler Version 4.1 07/05/11 21:18:33 Page 2

progr6.asm

58 002E 8B D8 mov bx,ax ;сохранение w1 в bp:bx

59 0030 8B EA mov bp,dx ;

60

61 ;******************************************************************

62

63 ;Вычисление w2=w1-3*xn1

64 0032 A1 0502r mov ax,xn1 ;запись xn1 в аккумулятор ax

65 0035 99 cwd ;расширение ax в dx, т.е. xn1 в формате двойного слова

66 0036 8B F2 mov si,dx ;сохранение xn1 в si:di

67 0038 8B F8 mov di,ax ;

68 003A 03 C0 add ax,ax ;вычисление 2*xn1 (xn1+xn1)

69 003C 13 D2 adc dx,dx ;

70 003E 03 C7 add ax,di ;вычисление 3*xn1 (2*xn1+xn1)

71 0040 13 D6 adc dx,si ;

72 0042 2B D8 sub bx,ax ;вычитание w1-3*xn1 и сохранение w2 в bp:bx

73 0044 1B EA sbb bp,dx ;

74

75 ;******************************************************************

76

77 ;Вычисление w3=w2-5*xn2

78 0046 A1 0504r mov ax,xn2 ;запись xn2 в аккумулятор ax

79 0049 99 cwd ;расширение ax в dx, т.е. xn2 в формате двойного слова

80 004A 8B F2 mov si,dx ;сохранение xn2 в si:di

81 004C 8B F8 mov di,ax ;

82 004E 03 C0 add ax,ax ;вычисление 2*xn2 (xn2+xn2)

83 0050 13 D2 adc dx,dx ;

84 0052 03 C0 add ax,ax ;вычисление 4*xn2 (2*xn2+2*xn2)

85 0054 13 D2 adc dx,dx ;

86 0056 03 C7 add ax,di ;вычисление 5*xn2 (4*xn2+xn2)

87 0058 13 D6 adc dx,si ;

88 005A 2B D8 sub bx,ax ;вычитание w2-5*xn2 и сохранение w3 в bp:bx

89 005C 1B EA sbb bp,dx ;

90

91 ;******************************************************************

92

93 ;Вычисление w4=w3+3*xn3

94 005E A1 0506r mov ax,xn3 ;запись xn3 в аккумулятор ax

95 0061 99 cwd ;расширение ax в dx, т.е. xn3 в формате двойного слова

96 0062 8B F2 mov si,dx ;сохранение xn3 в si:di

97 0064 8B F8 mov di,ax ;

98 0066 03 C0 add ax,ax ;вычисление 2*xn3 (xn3+xn3)

99 0068 13 D2 adc dx,dx ;

100 006A 03 C7 add ax,di ;вычисление 3*xn3 (2*xn3+xn3)

101 006C 13 D6 adc dx,si ;

102 006E 03 D8 add bx,ax ;сложение w3+3*xn3 и сохранение w4 в bp:bx

103 0070 13 EA adc bp,dx ;

104

105 ;******************************************************************

106

107 ;Выявление переполнения

108 0072 8B C3 mov ax,bx ;запись w4 в dx:ax в

109 0074 8B D5 mov dx,bp ;формате двойного слова

110 0076 BE 0004 mov si,K ;запись K в si

111

112 0079 3D FFFC cmp ax,R1ML ;сравнение ax с R1ML (формируется заём)

113 007C 83 DA 01 sbb dx,R1CT ;сравнение dx с R1CT (вычитается заём)

114 007F 79 11 jns M2 ;переход на метку M2, если w4>4*(+Ymax)

Turbo Assembler Version 4.1 07/05/11 21:18:33 Page 3

progr6.asm

115

116 0081 8B D5 mov dx,bp ;запись ст. части w4 в dx

117 0083 3D 0000 cmp ax,R2ML ;сравнение ax с R2ML (формируется заём)

118 0086 83 DA FE sbb dx,R2CT ;сравнение ax с R2CT (вычитается заём)

119 0089 78 0D js M3 ;переход на метку M3, если w4<4*(-Ymax)

120

121 ;******************************************************************

122

123 ;Деление dx:ax/si

124 008B 8B D5 mov dx,bp ;запись ст. части w4 в dx

125 008D F7 FE idiv si ;деление на si (частное в ax) dx:ax/si=ax

126 008F EB 0A 90 jmp M4 ;переход на метку M4

127

128 0092 M2:

129 0092 B8 7FFF mov ax,7FFFh ;yn<(+Ymax)

130 0095 EB 04 90 jmp M4 ;переход на метку M4

131

132 0098 M3:

133 0098 B8 8000 mov ax,8000h ;yn<(-Ymax)

134

135 009B M4:

136 009B A3 0508r mov yn,ax ;запись результатов в yn

137

138 ;******************************************************************

139

140 ;Формирование очереди

141 009E A1 0504r mov ax,xn2 ;перенос xn2 в ax и запись xn2

142 00A1 A3 0506r mov xn3,ax ;через ax в xn3

143 00A4 A1 0502r mov ax,xn1 ;перенос xn1 в ax и запись xn1

144 00A7 A3 0504r mov xn2,ax ;через ax в xn2

145 00AA A1 0500r mov ax,xn ;перенос xn в ax и запись xn

146 00AD A3 0502r mov xn1,ax ;через ax в xn1

147 00B0 E9 FF63 jmp M1 ;переход на метку M1

148

149 ;******************************************************************

150

151 ;Окончание программы

152 00B3 B4 4C mov ah,4ch ;функция DOS

153 00B5 CD 21 int 21h ;выхода из программы

154 00B7 FILTP endp ;конец процедуры FILTP

155 end FILTP ;конец программы

Turbo Assembler Version 4.1 07/05/11 21:18:33 Page 4

Symbol Table

Symbol Name Type Value

??DATE Text "07/05/11"

??FILENAME Text "progr6 "

??TIME Text "21:18:33"

??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 PROGR6

@INTERFACE Text 000H

@MODEL Text 2

@STACK Text DGROUP

@WORDSIZE Text 2

FILTP Near _TEXT:0000

K Number 0004

M1 Near _TEXT:0016

M2 Near _TEXT:0092

M3 Near _TEXT:0098

M4 Near _TEXT:009B

R1CT Number 0001

R1ML Number FFFC

R2CT Number FFFE

R2ML Number 0000

XN Word DGROUP:0500

XN1 Word DGROUP:0502

XN2 Word DGROUP:0504

XN3 Word DGROUP:0506

YN Word DGROUP:0508

Groups & Segments Bit Size Align Combine Class

DGROUP Group

STACK 16 0040 Para Stack STACK

_DATA 16 050A Word Public DATA

_TEXT 16 00B7 Word Public CODE

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]