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

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 ;конец программы