- •Задание
- •Введение
- •1 Структурная схема мпс
- •Т 20 ша ипичная структура мпс
- •16 Шд шу сш Память Адаптеры в/в
- •2 «0» PrA Структурная схема цп
- •3 Структура памяти и распределения данных
- •4.2 Схема алгоритма вычисления выражения
- •5 Разработка программы вычисления выражения
- •Описание принципиальной схемы
- •7 Основные результаты разработки
- •8 Отладка программы
- •9 Листинг программы
- •10 Заключение
- •11 Список использованной литературы
- •Приложение
8 Отладка программы
При 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 |
При 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 |
При возникновении положительного переполнения 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 |
При возникновении отрицательного переполнения 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