
- •Задание
- •Введение
- •1 Структурная схема мпс
- •Т 20 ша ипичная структура мпс
- •16 Шд шу сш Память Адаптеры в/в
- •2 «0» PrA Структурная схема цп
- •3 Структура памяти и распределения данных
- •4.2 Схема алгоритма вычисления выражения
- •5 Разработка программы вычисления выражения
- •Описание принципиальной схемы
- •7 Основные результаты разработки
- •8 Отладка программы
- •9 Листинг программы
- •10 Заключение
- •11 Список использованной литературы
- •Приложение
5 Разработка программы вычисления выражения
Yn = (9Xn−3Xn-1−5Xn-2+3Xn-3)∕4
;Программа вычисления Yn=(9*Xn-3*Xn_1-5*Xn_2+3*Xn_3)/4 ст. Степанова ;Наталья Викторовна
.MODEL small ;модель памяти small
.STACK 64 ;модель стека 64
.DATA ;начало сегмента данных
org 500h
XN dw 0 ;Резервирование места в памяти
XN1 dw 0 ;для переменных
XN2 dw 0 ;Xn, Xn_1, Xn_2
XN3 dw 0 ;Xn_3 и
YN dw 0 ;результата Yn
;******************************************************************
;Константы для деления и выявления переполнения
K EQU 4 ;Делитель
R1ML EQU 0FFFCh ;константе R1ML присвоить значение мл. части
;4*(+Ymax)
R1CT EQU 0001h ;константе R1CT присвоить значение ст. части
;4*(+Ymax)
R2ML EQU 0000h ;константе R2ML присвоить значение мл. части
;4*(-Ymax)
R2CT EQU 0FFFEh ;константе R2CT присвоить значение ст. части
;4*(-Ymax)
;******************************************************************
.CODE ;начало сегмента кодов
FILTP proc ;начало процедуры с именем FILTP
mov ax,@data ;перемещение указателя ds на
mov ds,ax ;сегмент данных
;******************************************************************
;Сброс очереди Xn,Xn-1,Xn-2,Xn-3,Y в нуль
sub ax,ax ;сброс аккумулятора ax в нуль
mov xn,ax ;сброс xn в нуль
mov xn1,ax ;сброс xn1 в нуль
mov xn2,ax ;сброс xn2 в нуль
mov xn3,ax ;сброс xn3 в нуль
mov yn,ax ;сброс yn в нуль
;******************************************************************
;Вычисление w1=9*xn
M1:
mov ax,xn ;запись xn в аккумулятор ax
cwd ;расширение ax в dx, т.е. xn в формате двойного слова
mov si,dx ;сохранение xn в si:di
mov di,ax ;
add ax,ax ;вычисление 2*xn (xn+xn)
adc dx,dx ;
add ax,ax ;вычисление 4*xn (2*xn+2*xn)
adc dx,dx ;
add ax,ax ;вычисление 8*xn (4*xn+4*xn)
adc dx,dx ;
add ax,di ;вычисление 9*xn (8*xn+xn)
adc dx,si ;
mov bx,ax ;сохранение w1 в bp:bx
mov bp,dx ;
;******************************************************************
;Вычисление w2=w1-3*xn1
mov ax,xn1 ;запись xn1 в аккумулятор ax
cwd ;расширение ax в dx, т.е. xn1 в формате двойного слова
mov si,dx ;сохранение xn1 в si:di
mov di,ax ;
add ax,ax ;вычисление 2*xn1 (xn1+xn1)
adc dx,dx ;
add ax,di ;вычисление 3*xn1 (2*xn1+xn1)
adc dx,si ;
sub bx,ax ;вычитание w1-3*xn1 и сохранение w2 в bp:bx
sbb bp,dx ;
;******************************************************************
;Вычисление w3=w2-5*xn2
mov ax,xn2 ;запись xn2 в аккумулятор ax
cwd ;расширение ax в dx, т.е. xn2 в формате двойного слова
mov si,dx ;сохранение xn2 в si:di
mov di,ax ;
add ax,ax ;вычисление 2*xn2 (xn2+xn2)
adc dx,dx ;
add ax,ax ;вычисление 4*xn2 (2*xn2+2*xn2)
adc dx,dx ;
add ax,di ;вычисление 5*xn2 (4*xn2+xn2)
adc dx,si ;
sub bx,ax ;вычитание w2-5*xn2 и сохранение w3 в bp:bx
sbb bp,dx ;
;*****************************************************************
;Вычисление w4=w3+3*xn3
mov ax,xn3 ;запись xn3 в аккумулятор ax
cwd ;расширение ax в dx, т.е. xn3 в формате двойного слова
mov si,dx ;сохранение xn3 в si:di
mov di,ax ;
add ax,ax ;вычисление 2*xn3 (xn3+xn3)
adc dx,dx ;
add ax,di ;вычисление 3*xn3 (2*xn3+xn3)
adc dx,si ;
add bx,ax ;сложение w3+3*xn3 и сохранение w4 в bp:bx
adc bp,dx ;
;******************************************************************
;Выявление переполнения
mov ax,bx ;запись w4 в dx:ax в
mov dx,bp ;формате двойного слова
mov si,K ;запись K в si
cmp ax,R1ML ;сравнение ax с R1ML (формируется заём)
sbb dx,R1CT ;сравнение dx с R1CT (вычитается заём)
jns M2 ;переход на метку M2, если w4>4*(+Ymax)
mov dx,bp ;запись ст. части w4 в dx
cmp ax,R2ML ;сравнение ax с R2ML (формируется заём)
sbb dx,R2CT ;сравнение ax с R2CT (вычитается заём)
js M3 ;переход на метку M3, если w4<4*(-Ymax)
;*****************************************************************
;Деление dx:ax/si
mov dx,bp ;запись ст. части w4 в dx
idiv si ;деление на si (частное в ax) dx:ax/si=ax
jmp M4 ;переход на метку M4
M2:
mov ax,7FFFh ;yn<(+Ymax)
jmp M4 ;переход на метку M4
M3:
mov ax,8000h ;yn<(-Ymax)
M4:
mov yn,ax ;запись результатов в yn
;******************************************************************
;Формирование очереди
mov ax,xn2 ;перенос xn2 в ax и запись xn2
mov xn3,ax ;через ax в xn3
mov ax,xn1 ;перенос xn1 в ax и запись xn1
mov xn2,ax ;через ax в xn2
mov ax,xn ;перенос xn в ax и запись xn
mov xn1,ax ;через ax в xn1
jmp M1 ;переход на метку M1
;******************************************************************
;Окончание программы
mov ah,4ch ;функция DOS
int 21h ;выхода из программы
FILTP endp ;конец процедуры FILTP
end FILTP ;конец программы