Построение графика функции. - Assembler
Формулировка задачи:
Дорогие знатоки, можете ли вы, по возможности, указать ссылкой на программу с построением графиков в Assembler. Заранее благодарен.
Решение задачи: «Построение графика функции.»
textual
Листинг программы
- .286
- .model small
- .stack 100h
- .data
- sAmp db 'A = $'
- sOmega db 13,10,'w = $'
- sFi db 13,10,'fi = $'
- sSin db "y = Asin(wt + fi)", 13, 10, "$"
- Mx dd 21.0
- My dd 21.0
- Amp dq 2.0
- omega dq 1.0
- faza dq 0.0
- Tx dd -15.0
- delta dd 0.001
- midx dd 320.0
- midy dd 240.0
- xr dw 0
- yr dw 0
- sNum db 10
- sLen db ?
- sString db 10 dup (?)
- .code
- .486
- start: mov ax, @DATA
- mov ds, ax
- enters: finit
- mov ax,12h;устанавливаю графический режим 640х480х16 цветов
- int 10h
- lea dx, sSin;вывожу на экран приглашение "y = Asin(wt + fi)"
- mov ah, 09h
- int 21h
- lea dx, sAmp;вывожу на экран приглашение 'A = '
- int 21h
- lea di, Amp
- call StrToFloat ;перевожу строку в вещественное число
- lea dx, sOmega
- mov ah, 9
- int 21h
- lea di, omega
- call StrToFloat;перевожу строку в вещественное число
- lea dx, sFi
- mov ah, 9
- int 21h
- lea di, faza
- call StrToFloat ;перевожу строку в вещественное число
- mov cx,30000 ;буду выводить точку 30000 раз
- finit
- fld Tx
- l1: fld st
- fld st
- fmul Mx ;st(0)=Tx*Mx
- frndint ; выделили целую часть из Tx*Mx
- fadd midx
- fistp word ptr xr; xr:=midx + целая часть(Tx*Mx)
- fmul omega ;st(0)=Tx*omega
- fadd faza ;st(0)=Tx*omega+faza
- fsin ;st(0)=Sin(Tx*omega+faza)
- fmul My
- fmul Amp
- frndint ; выделили целую часть из Amp*My*Sin(Tx*omega+faza)
- fsubr midy
- fistp word ptr yr;yr:=midy - (целая часть (Amp*My*Sin(Tx*omega+faza)))
- pusha
- mov ax, 0C0Ah ;вывожу точку на экран
- mov bh, 0h
- mov cx, xr; в указанные координаты
- mov dx, yr
- int 10h
- popa
- fadd delta;Tx:=Tx+deltа
- loop l1
- mov ah,1h ;жду нажатия на клавиатуру
- int 21h
- mov ax,3; устанавливаю текстовый режим
- int 10h
- exit: mov ah,4Ch ;выхожу из программы
- int 21h
- ;процедура для перевода строки в вещественное число
- StrToFloat proc
- local Sign:word, Digit:word, C10:word, Base:word
- lea dx, sNum
- mov ah, 0Ah;ввод с клавиатуры
- int 21h
- lea si, sString
- finit
- mov Sign, 1
- mov C10, 10
- mov Base, 10
- fldz
- xor cx, cx
- SearchStart: lodsb
- cmp al, '-'
- je NegativeNum
- cmp al, '+'
- je NextDigit
- jmp CmpDigit
- NegativeNum: mov Sign,-1
- NextDigit: lodsb
- CmpDigit: cmp al, '.'
- je Point
- cmp al, ','
- je Point
- cmp al, '0'
- jb StrToFloatRet
- cmp al, '9'
- ja StrToFloatRet
- and ax, 0fh
- mov Digit, ax
- jcxz PartInteger
- cmp cx,3
- je StrToFloatRet
- fild Digit
- fidiv Base
- faddp st(1),st
- mov ax, Base
- imul c10
- mov Base, ax
- inc cx
- jmp NextDigit
- PartInteger: fimul c10
- fiadd Digit
- jmp NextDigit
- Point: test cx,cx
- jnz StrToFloatRet
- inc cx
- jmp NextDigit
- StrToFloatRet: fimul Sign
- fstp qword ptr [di]
- ret
- StrToFloat endp
- END start
Объяснение кода листинга программы
- Объявление и инициализация переменных:
sAmp
- строкаA = $
sOmega
- строка с символами перевода строки иw = $
sFi
- строка с символами перевода строки иfi = $
sSin
- строкаy = Asin(wt + fi)
Mx
- вещественное число 21.0My
- вещественное число 21.0Amp
- вещественное число 2.0omega
- вещественное число 1.0faza
- вещественное число 0.0Tx
- вещественное число -15.0delta
- вещественное число 0.001midx
- вещественное число 320.0midy
- вещественное число 240.0xr
- двоичное слово 0yr
- двоичное слово 0sNum
- байт 10sLen
- байт ?sString
- массив байтов, 10 элементов
- Устанавливается графический режим 640x480x16 цветов.
- Выводится на экран строка
y = Asin(wt + fi)
. - Выводится строка
A =
. - Происходит считывание вещественного числа в переменную
Amp
. - Выводится строка с
w =
. - Происходит считывание вещественного числа в переменную
omega
. - Выводится строка с
fi =
. - Происходит считывание вещественного числа в переменную
faza
. - Инициализация цикла вывода точек.
- Вычисления для построения графика функции.
- Вывод точки на экран.
- Увеличение значения
Tx
наdelta
. - Ожидание нажатия клавиши на клавиатуре.
- Установка текстового режима.
- Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д