Разработка ассемблерной программы вычисления специальной функции
Рефераты >> Программирование и компьютеры >> Разработка ассемблерной программы вычисления специальной функции

dal: ;метка

mov ax,Xni

mul xni;X^2

mov rez1,ax

mov ax,Yk

mul ax

mov rez2,ax

mov ax,rez1

mov bx,rez2

add ax,bx

mov bx,ax

mov ax,Ak

mul bx

mov rez3,ax

mov ax,rez1

mov bx,rez2

sub ax,bx

mov bx,Bk

mul bx

mov cx,ax

mov ax,rez3

cwd

div cx

mov rez3,ax

mov ax,Xni

mov bx,Yk

sub ax,bx

mov bx,ax

mov ax,Ck

cwd ;преобразование байта в слово dx:ax

div bx

mov bx,ax

mov ax,rez3

sub ax,bx

mov rezf,ax ;сохраняем результат

mov ax,cur ;в ax заносим координаты курсора

add ax,0100h ;смещение координаты на строку вниз

mov cur,ax ;сохраняем новые координаты

call zf ;процедура для вывода значения f(x)

mov ax,xni ;пишем обновлённый х

cmp ax,Xnk ;ставниваем с последним значением итервала

jg exit ;если x > xn то exit

jmp dal ;иначе продолжаем считать

exit: ;метка

mov ah,0ah ;считываем ввод

lea dx,pause ;записываем в регистр

int 21h

mov ah,4ch ;переносим в регистр AH 4ch (код для выхода)

int 21h ;прерывание DOS

;----------------------------------------------------------------------------------------------------------

t0 DB 'Курсовая работа по СПО','$'

t1 DB 'Выполнил ст.гр. 02В3 Grinin Igor','$'

t2 DB 'Программа вычисления функции:','$'

t3 DB ' A*(X^2+Y^2) C','$'

t4 DB 'F(x)= --------------- - ---','$'

t5 DB ' B*(X^2-Y^2) X+Y','$'

t6 DB 'Ввод данных:','$'

t7 DB 'Введите A : ','$' ;подсказка о том что следует ввести значение A

t8 DB 'Введите B : ','$' ;подсказка о том что следует ввести значение B

t9 DB 'Введите C : ','$' ;подсказка о том что следует ввести значение B

t10 DB 'Введите y : ','$' ;подсказка о том что следует ввести значение Y

t11 DB 'Введите X1 : ','$' ;подсказка о том что следует ввести значение x1

t12 DB 'Введите Xn : ','$' ;подсказка о том что следует ввести значение xn

t13 DB 'Введите шаг H : ','$' ;подсказка о том что следует ввести значение H

t14 DB 'Значение функции Y= ','$'

t15 DB 'Ошибка - B-Y=0 невозможно выполнить деление','$'

t16 DB 'Значение функции Y= ','$'

pause DB 1 dup (" "),'$' ;дляпаузы

A DB 1 dup (" "),'$'

B DB 1 dup (" "),'$'

C DB 1 dup (" "),'$'

Y DB 1 dup (" "),'$'

X1 DB 1 dup (" "),'$'

Xn DB 1 dup (" "),'$'

h DB 1 dup (" "),'$'

ascii DW 4 dup (?),'$' ;памятьдля ASCII-кодов

Ak DW ? ;переменные для перевода введёного значения с клавиатуры

Bk DW ? ;в соответствующий ей по номеру порядковый символ ASCII

Ck DW ?

Yk DW ? ;для удобства вычислений

X1k DW ?

Xnk DW ?

hk DW ?

xni DW ? ;изменяющееся значение х

cur DW ? ;координаты для курсора

cuy DW ? ;координаты курсора для вывода F(x)

rez1 DW ? ;промежуточный результат

rez2 DW ? ;промежуточный результат

rez3 DW ? ;промежуточный результат

rez4 DW ? ;промежуточный результат

rezf DW ? ;результат функции

codsDW ?

mn DW 1

start endp

;----------------------------------------------------------------------------------------------------------

;Процедуры

;----------------------------------------------------------------------------------------------------------

clear proc ;процедура очистки экрана

mov AH,6h ;переносим в регистр AH 06h

mov BH,07h ;переносим в регистр BH 07h

mov CX,0000h ;переносим в регистр CX 0000h

mov DX,184fh ;переносим в регистр DX 184fh

int 10h ;прерывание BIOS

ret ;выход из процедуры

clear endp

;----------------------------------------------------------------------------------------------------------

cursor proc ;процедура установки курсора

mov AH,2h ;переносим в регистр AH 2h

mov BH,0 ;переносим в регистр BH 0

int 10h ;прерывание BIOS

ret ;выход из процедуры

cursor endp

;----------------------------------------------------------------------------------------------------------

oput proc ;процедура вывода

mov AH,09h ;переносим в регистр AH 09h

int 21h ;прерывание DOS

ret ;выход из процедуры

oput endp

;----------------------------------------------------------------------------------------------------------

inp proc ;процедура ввода

mov AH,0ah ;переносим в регистр AH 0ah

int 21h ;прерывание DOS

ret ;выход из процедуры

inp endp

;----------------------------------------------------------------------------------------------------------

error proc ;ошибка при делении на 0

mov dx,0D00h ;указываем координаты курсора

call cursor ;вызов процедуры установки курсора

lea dx,t15 ;указыкаем ссылку на сообшение

call oput ;вызываем поцедуру вывода

mov ah,0ah ;считываем ввод

lea dx,pause ;записываем в регистр

int 21h

jmp exit

ret

error endp

;----------------------------------------------------------------------------------------------------------

zf proc

mov dx,cur ;устанавливаемкоординатыкурсора

call cursor ;вызов процедуры установки курсора

lea dx,t14 ;указыкаем ссылку на сообшение

call oput ;вызываем поцедуру вывода

mov ax,rezf ;записываем в ax результат функции

call decod ;вызов процедуры обратного перевода

mov ax,cur ;записываем в ах координаты курсора

add ax,0015h ;смещаем в право на 15

mov cuy,ax ;сохраняем новое значение курсора для вывода значения функции

mov dx,cuy ;записываем в dх координаты курсора

call cursor ;вызов процедуры установки курсора

lea dx,ascii ;заносим в dx адрес значения функции

call oput ;вызываем поцедуру вывода

mov cuy,0 ;обнуляем значение курсора для вывода значения функции


Страница: