Разработка ассемблерной программы вычисления специальной функцииРефераты >> Программирование и компьютеры >> Разработка ассемблерной программы вычисления специальной функции
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 ;обнуляем значение курсора для вывода значения функции