Читайте также:
|
|
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;конец программы
Дата добавления: 2015-08-18; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Схема алгоритма выявления переполнения и деления на 4 и регистровая модель этой операции | | | Основные результаты разработки |