私はアセンブリのプログラミングの初心者です。グラフィックモードでf(x)= x * sin(1 / x)曲線を描きたい。f(x)= sin(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 * sin(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)曲線ではなく、1本の線のみを描画します。何が問題なのかを理解するのを手伝ってくれませんか。