Dzielenie w asemblerze

0

Mam problem otórze napisałem kalkulator we Free Pascalu, a obliczeniami zajmuja sie wstawki asemblerowskie. Problem sprawia fragment kodu odpowiedzialny za dzielenie. U mnie wyglada on nastepujaco:

'/': begin
     repeat
     licznik:=licznik+1;
     asm
     shr liczba1, 1
     end;
     until licznik=liczba2-1;
     wynik:=liczba1;
     licznik:=0;
     end;

Bład pojawia sie podczas dzielenie 8:4, wychodzi że równa sie to 1. Wiem że dzieje sie to dlatego że 8 w postaci binarnej to 1000 a po czterokrotnum przesunieciu bitu w prawo zostaje samo 1. Czy da sie jakoś temo zaradzić?

Pozdrawiam.

0

Hmm może źle to zrealizowałeś..

asm
  shr liczba1, 1 // podzielić przez 2
  shr liczba1, 2 // podzielić przez 4
  shr liczba1, 3 // podzielić przez 8
...
end;

Pamiętaj, że wynik np. shr 9, 1 da w rezultacie 4..

0

Wiem, że tak należy zrobić ale jak mamy

shr, x, y

to w miejscy y nie można wstawić zmiennej :/

0

Chyba masz błąd w pętli, a racej interpretacji wyniku. Jeśli wejdziesz do pętli przy 8/4 i na wyniku uzyskasz 1 - to tak naprawdę znaczy że powinieneś mieć 10 czyli 2. Warunek masz sprawdzany po wykonaniu pętli a nie przed wejsciem. Czy ten program dobrze dzieli np 8/8?

0

Nie, wychodzi 0 :/

0

Co właściwie chciałeś zrobić tym programem, wydaje mi się że źle matematycznie podszedłeś do tego.

0

Tak jak juz pisałem miał to byc kalkulator. Chetnie dowiem sie co zrobiłem źle.

0

Źle zrozumiałeś znaczenie przesunięcia bitowego w prawo .. - to nie działa tak jak napisałeś, że tyle razy robisz shr ile razy chcesz podzielić.. - spójrz na przykłady które ci napisałem - dzieli tylko przez 2^n..

0

Rozumiem , ale tak jak napisałem drugim operandem shr nie może być zmienna co uniemożliwia napisanie aplikacji takiej jak kalkulator, która przeciez bazuje na zmiennych.

0

Za długo by tłumaczyć, jeśli to ma być kalkulator to kicha. A co jeśli będę chciał podzielić przez 3? Albo 6? Twój przykład po naprawieniu będzie tylko dzielił przez 2,4,8,16,32 ,... .
Propozycja jest taka - najpierw usiądż weż kartkę i sam wykoanj działania 8/2, 8/4 itd. Zobacz co otrzymujesz zinterpretuj wyniki by wychodziło - na samej kartce. Najpierw musisz wiedzzeć jak matematycznie ma to działać a potem dopiero możesz pisać algorytm. Z twoich postów wynika że nie amsz za abrdzo pojęcia jak to zrobic. Najpierw naucz się dzielić liczby bitowo na kartce, zobacz co z resztą, co zostaje - proponuję książkę poczytać.
Jak to zrobisz zobacz co trzeba zrobić by podzielić przez np 3...
Jak to będziesz umiał, to dopiero możesz pisać algorytm kalkulatora.
Andrzej Dąbrowski

1 użytkowników online, w tym zalogowanych: 0, gości: 1