Grupy dyskusyjne Google nie obsługują już nowych postów ani subskrypcji z Usenetu. Treści historyczne nadal będą dostępne.

Program liczący silnie i pierwiastek kwadratowy

18 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

Marchewa

nieprzeczytany,
18 gru 2004, 09:34:1618.12.2004
do
Witam!!!
Czy ktoś ma może gotowe programy :1-liczący silnie ,2-pierwiastek kwadratowy
w asm lub mógłby napisać jak powinny one wyglądać. Potrzebuje pilnie! Z góry
dziękuje.
Pozdrawiam


Filip Zawada

nieprzeczytany,
18 gru 2004, 10:44:1218.12.2004
do
Marchewa napisał(a):

Od gotowych programów jest google.
Jak mają wyglądać?
Silnia: 1*2*...*n - czyli masz jedna zmienna trzymającą aktualny wynik
(startowo równa 1) i w pętli mnożysz przez kolejne liczby aż do n.
Pierwiastek: polecam wzór Herona choć może da się jeszcze łatwiej.

--
pozdrawiam, Filip Zawada
mejl: asyode_WIELKIE...@o2.pl

Bogdan

nieprzeczytany,
18 gru 2004, 11:46:3518.12.2004
do
Marchewa napisał(a):

Gotowców nie mam, ale algorytmy nie są trudne.

1. Silnia.
Tak jak powiedział kolega Filip:

int i;
long wynik=1;
for (i=1; i<=n; i++) wynik *= i;

2. Zapoznaj się z instrukcją koprocesora FSQRT, no chyba że musisz
policzyć ręcznie (ale w tym przypadku nie mam nawet algorytmu...). Coś
mi się obijało o uszy ostatnio o metodzie "Newton-Rhapsod". Kodu
poszukaj na grupie news:comp.lang.asm.x86 (lub jej archiwum).

Ale ogólnie: ty piszesz kod (no, chociaż fragment). Jeśli nie działa,
przysyłasz tu, a my pomagamy.

--
Pozdrawiam, Bogdan
Grupy dyskusyjne o assemblerze: news:alt.pl.asm news:alt.pl.asm.win32
Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro
Forum assemblera: http://assembler.g5.pl

squil

nieprzeczytany,
20 gru 2004, 10:05:3520.12.2004
do
Bogdan wrote:

> Ale ogólnie: ty piszesz kod (no, chociaż fragment). Jeśli nie działa,
> przysyłasz tu, a my pomagamy.

to ja w takim razie z tym samym problemem pierwiastka, kod mam ale
pierwiastek wyswietla zawsze 0. moze ktos wie co sie dzieje?

algorytm polega na tym ze odejmuje kolejne liczby nieparzyste od liczby
podanej. wynikiem jest ilosc odejmowan. docelowo aby zwiekszyc
dokladnosc moglby mnozyc liczbe np. przez 100 i wtedy wyswietlac
przecinek w odpowiednim miejscu, no ale to 'kosmetyka'. kod programu
jest tutaj: http://manta.univ.gda.pl/~hkalinow/pierw.asm

pozdrawiam


Bogdan

nieprzeczytany,
20 gru 2004, 14:11:0320.12.2004
do
squil napisał(a):

Ciekawy algorytm. Popiera go jakaś teoria?

Ale do rzeczy:

[...]
mov ah, 01h
int 21h ;wczytanie liczby (jednocyfrowej!)

Pobierasz znak z klawiatury, czyli jego kod ASCII. Przy założeniu, że
jest to cyfra, dobrze byłoby mieć dalej *wartość* tej cyfry. Brakuje więc:
sub al, '0' ; lub sub al, 48
[...]


Poza tym, wyświetlasz nie te cyfry, które obliczasz. Jest tak:
bufor DW 5 dup(?)
dlaczego wordy?
[...]
mov bufor[bx], dx
add bufor[bx], 48
dec bx
tutaj ok, wkładamy po bajcie przrobionym na cyfrę. Zauważ, że skoro
reszta z dzielenia < 10 < 256, to można zamiast DX użyć DL.
Po pętli bufor wygląda tak:
? ? ? ? ? ? ? ? ? c
c - cyfra. A ty potem wyświetlasz od przodu (i dobrze, tylko że tam nic
nie ma):
[...]
mov bx, 0
mov cx, 5
wyswietl:
mov dx, bufor[bx]
mov ah, 02h
int 21h
loop wyswietl ;wyswietlamy 'liczbe wlasciwa'

Tu jest ok, tylko lepiej chyba użyć DL no i przydałoby się w przyszłości
jakieś "inc bx", bo ciągle wyświetlasz tą samą cyfrę.
Wyświetla zera, bo niezainicjalizowane dane są zazwyczaj zerowane.

squil

nieprzeczytany,
21 gru 2004, 01:40:5521.12.2004
do
Bogdan wrote:

>http://manta.univ.gda.pl/~hkalinow/pierw.asm
>
>
> Ciekawy algorytm. Popiera go jakaś teoria?

pewnie jakas tak..niestety nie mam o niej pojecia,zostala podana na
zajeciach jako algorytm do wykorzystania.


> Poza tym, wyświetlasz nie te cyfry, które obliczasz. Jest tak:
> bufor DW 5 dup(?)
> dlaczego wordy?
> [...]

wordy bo docelowo zeby zwiekszyc dokladnosc obliczonego pierwiastka chce
mnozyc przez 100; czyli musze moc odejmowac liczby np od 900, a to jest
wiecej niz 256. ale tego fragmentu nie rozumiem-dlaczego wyswietlam nie
to co obliczam?

(...czy jezeli pisze taka deklaracje jak wyzej to w pewnym sensie
deklaruje tablice? i czy kazde pole tej tablicy to jedna cyfra czy cala
liczba? a jezeli cala liczba to w takim razie po co mi 5 dup?)

> mov bufor[bx], dx
> add bufor[bx], 48
> dec bx
> tutaj ok, wkładamy po bajcie przrobionym na cyfrę. Zauważ, że skoro
> reszta z dzielenia < 10 < 256, to można zamiast DX użyć DL.
> Po pętli bufor wygląda tak:
> ? ? ? ? ? ? ? ? ? c

no i wlasnie byloby milo jakby ta liczbe wyswietlal...a nie robi tego :(

pozdrawiam

Bogdan

nieprzeczytany,
21 gru 2004, 11:31:3021.12.2004
do
squil napisał(a):

> Bogdan wrote:
>
>> http://manta.univ.gda.pl/~hkalinow/pierw.asm
>>
>>
>> Ciekawy algorytm. Popiera go jakaś teoria?
>
>
> pewnie jakas tak..niestety nie mam o niej pojecia,zostala podana na
> zajeciach jako algorytm do wykorzystania.
>
>
>> Poza tym, wyświetlasz nie te cyfry, które obliczasz. Jest tak:
>> bufor DW 5 dup(?)
>> dlaczego wordy?
>> [...]
>
>
> wordy bo docelowo zeby zwiekszyc dokladnosc obliczonego pierwiastka chce
> mnozyc przez 100; czyli musze moc odejmowac liczby np od 900, a to jest
> wiecej niz 256.

To się zgadza. Ale bufor przechowuje reszty z dzielenia, a nie liczbę,
od której odejmujesz. Każda z reszt jest cyfrą, która mieści się w
bajcie. Na liczbę z SI wystarczy więc 5 bajtów.

> ale tego fragmentu nie rozumiem-dlaczego wyswietlam nie
> to co obliczam?

Tak mi się wydawało. Wkładasz po wordzie, a wyświetlasz po bajcie. No, w
każdym razie tak było jak ostatnio sprawdzałem (chyba). Kodu, który
teraz jest nie uruchamiaj, bo wyświetlanie w pętli zamazuje AX.

>
> (...czy jezeli pisze taka deklaracje jak wyzej to w pewnym sensie
> deklaruje tablice?

Tak.

> i czy kazde pole tej tablicy to jedna cyfra czy cala
> liczba? a jezeli cala liczba to w takim razie po co mi 5 dup?)

Raczej pola tej tablicy mają przechowywać cyfry.

[...]

Nawiasem mówiąc, "cmp bx, cx" wykonuje "bx-cx" bez zachowania wyniku.
Nowy kod na pierwszy rzut oka wydaje się ok. Wywal wyświetlanie z pętli,
uruchom i pokaż, co wyświetla (jeśli ciągle jest nieprawidłowo).

Nowe wiadomości: 0