logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

podstawy dzielenia w mikroprocesorach

jacekr 12 Kwi 2004 17:12 1871 1
REKLAMA
  • #1 591635
    jacekr
    Poziom 12  
    Wysłany: 12.04.2004, 10:59 Temat postu: podstawy dzielenia w mikroprocesorach

    --------------------------------------------------------------------------------

    Witam
    Probuje zrozumiec podstawu dzielenia w CPU i nie rozumiem pewnych rzeczy:
    W ksiazce "SZtuka programowania mikrokontrolerow AVR" jest opisane dzielenie /10 liczby 2 bajtowej
    WZOR :

    1/8(X - X/4 + X/16 - X/64 + X/256 - X/1024 + X/4096 - X/16384 )=X/10

    I OK sprawdzilem na piechote i dziala

    ale jezeli chce podzielic np przez 5 ? albo 42
    Moze dlatego nie rozumiem bo nie rozumiem wogole dzielenia w CPU
    Zwykle podzielenia /2 czy wielokrotnosc OK tylko "ror"
    p.s.
    Oczywiscie chodzi o AVR ATMELA

    Przeniesiono z Programowanie Ogólne. - arnoldziq
  • REKLAMA
  • #2 591946
    h-doc
    Poziom 27  
    To jest dosyć ciekawy temat - tradycyjne dzielenie liczb jest czasochłonne bez sprzętowego układu dzielącego. Dlatego ludzie upraszczają sobie życie stosując dodatkowe algorytmy, działające dla określonych dzielników. Dla dzielenia przez kolejne potęgi liczby 2 wystarczy przesuwać rejestr w prawo. Z kolei przytoczona przez Ciebie procedurka dotyczy dzielenia przez 10.
    Ja stosuję własną procedurkę (bo nigdy nie chce mi się implementować pełnej procedury dzielenia). Polega ona na sukcesywnym odejmowaniu dielnika od dzielnej aż do uzyskania wartości ujemnej. Metoda ta świetnie nadaje się do konwersji bin->bcd (najpierw odejmuję tysiące, potem setki, potem dziesiątki). Liczba zliczeń każdego odejmowania daje odpowiednią cyfrę BCD.

    W Twoim przypadku zrobiłbym tak:
    - dzielenie przez 5 to nic innego jak pomnożenie przez 2 (przesów rejestru w lewo) a potem podzielenie przez 10 wg zadanej przez Ciebie procedury
    - do dzielenia przez 42 użyłbym metody z sukcesywnym odejmowaniem liczby 42 od dzielnej.
REKLAMA