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