Wita, mam taki kod liczący wzór newtona. Proszę o poradę w jaki sposób go zmodyfikować aby liczył kilka wartości np dla n=7 i k od 3-6, myślałem, aby zapisywał do "tablicy" a poźniej po kolei je wyświetlał np tak:
n=x k=x wynik =xxx
n=x k=x wynik =xxx
n=x k=x wynik =xxx
n=x k=x wynik =xxx
.....
itd. Oto kod programu:
argN = 10
argK = 7
.data
BuforN:
.skip 10
Buf_sizeN =.- BuforN
BuforK:
.skip 10
Buf_sizeK =.- BuforK
BuforWynikowy:
.skip 100
Buf_size =.- BuforWynikowy
BuforWynikowyP:
.skip 100
Buf_sizeP =.- BuforWynikowyP
SilniaN: #; silnia N
.skip 10
SilniaN_size =.- SilniaN
SilniaK: #; #; silnia K
.skip 10
SilniaK_size =.- SilniaK
SilniaNMK: #; tu bedzie silnia (n-k)!
.skip 10
SilniaNMK_size =.- SilniaNMK
Przerwa:
.ascii "\n"
WynikTo:
.ascii "Wynik to: "
WynikTo_size =.- WynikTo
.text
.globl _start
.globl silnia
.globl licznik
_start:
jmp Start
.type licznik, @function #; ECX = argument, EAX = wynik
licznik:
inc %ecx
mull %ecx
cmpl $argN, %ecx
jb licznik
ret
.type silnia, @function #; ECX = argument, EAX = wynik
silnia:
mull %ecx
cmpl $0, %ecx
decl %ecx
jne silnia
ret
Start:
movl $argN, %eax
movl $argK, %ebx
subl %ebx, %eax
inc %eax #; n-k+1,
movl %eax, %ecx
call licznik
movl %eax, %ebx #;licznik w %ebx
movl $1, %eax
movl $argK, %ecx
call silnia #;mianownik w %eax
movl %eax, %ecx
movl %ebx, %eax
divl %ecx, %eax
print: #; Wyswietlanie wyniku , wynik podany jako EAX
xorl %edx, %edx
xorl %ecx, %ecx
movl $0, %edi
dziel:
movl $10, %ebx
xorl %edx, %edx
divl %ebx
pushl %eax
movl %edx, %eax
addl $48, %eax
movb %al, BuforWynikowy(,%ecx,1)
incl %ecx
popl %eax
cmpl $0, %eax
jne dziel
movl $0, %edx
incl %ecx
poprawnyNapis:
decl %ecx
movb BuforWynikowy(,%ecx, 1), %al
movb %al, BuforWynikowyP(, %edx, 1)
incl %edx
cmpl $0, %ecx
jnz poprawnyNapis
movl $4, %eax
movl $1, %ebx
movl $WynikTo , %ecx
movl $WynikTo_size , %edx
int $0x80
movl $4, %eax
movl $1, %ebx
movl $BuforWynikowyP , %ecx
movl $Buf_sizeP , %edx
int $0x80
movl $4, %eax
movl $1, %ebx
movl $Przerwa , %ecx
movl $1 , %edx
int $0x80
movl %eax, %ebx
movl $1, %eax
int $0x80