1
我是编程汇编的初学者。我想在图形模式下绘制f(x)= x * sin(1/x)曲线。 我可以画f(x)= sin(x)曲线,但我无法绘制f(x)= x * sin(1/x)。我怎么能这样做?协处理器命令故障(我想在图形模式下绘制f(x)= x * sin(1/x)曲线)
下面你可以看到我的工作f(x)= sin(x)代码。它的工作,完美绘制正弦曲线:
org 100h
mov al,13h
int 10h
xor bx,bx
loopage:
inc word [angle]
fld dword [pie]
fimul word [angle]
fsin
fimul word [xradius]
fistp word [x]
fimul word [yradius]
fistp word [y]
mov al,15
mov dx,[x]
add dx,ax
mov cx,[y]
add cx,bx
;xor ax,ax
;int 16h
inc bl
mov ah,0Ch
mov al,bl
int 10h
cmp word [angle],360
je endage
jb loopage
mov ax,0a000h
mov es,ax
xor ax,ax
mov cx,32000
rep stosw
endage:
xor ax,ax
int 16h
ret
y dw 0
x dw 0
angle dw 0
a dw -1
pie dd 0.01756
yradius dw 50
one dw 1
xradius dw 50
float dd 0
我想改变这种代码绘制F(X)= X *罪(1/x)的曲线。到目前为止
...
fld dword [pie]
fimul word [angle]
fsin
fimul word [xradius]
fistp word [x]
fimul word [yradius]
fistp word [y]
...
但是没有任何结果:
我已经试过几件事情改变以下部分在上面的代码。
请问您能帮我吗?
===========编辑:====================
我尝试了你的代码。现在我的代码如下所示:
...
loopage:
;inc word [angle]
; FP0 <- 1
fld1
; FP0 = FP0/[pie]/[angle], is equal to FP0/([pie] * [angle])
fidiv dword [pie]
fidiv word [angle]
fsin
fimul dword [pie]
fimul word [angle]
fimul word [yradius]
fistp word [y]
mov al,15
mov dx,[angle]
add dx,ax
mov cx,[y]
add cx,bx
...
但是,此代码仅绘制一条线而不是预期的x * sin(1/x)曲线。你能帮我弄清楚可能是什么问题?
我更新根据您的建议我的代码,但它只能绘制一条线而不是预期的X *罪(1/x)的曲线。请看看我的问题的编辑部分。 – Fract
我错了。 fidiv,fimul将source转换为Integer,但[pie](这个整数表示为0)是一个浮点数,在[pie]存在的行中尝试'fdiv dword [pie]'和'fmul dword [pie]'。对不起,我无法检查代码给你100%正确的答案。 – clover
Yeahh,这是解决方案! :-) 非常感谢您的帮助! – Fract