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

Bit przeniesienia w C '51 lub inaczej 64 bit arytmetyka

zagwizdow 09 Sie 2005 21:14 1733 4
REKLAMA
  • #1 1720751
    zagwizdow
    Poziom 17  
    Posty: 177
    Pomógł: 21
    Ocena: 7
    witam
    jak mozna zrobic w c 64-bitowa arytmetyke ( dodawanie ,mnozenie).
    Zmienny przecine raczej odpada bo ( 24bitowa matysa czy cos) nie bedzie reagowal na dane pod koniec bufora . Próbowałem zrobic to na 40bitach w asm ale jednak gdzies sie pomotalem ( chyba w znakach) i doszedłem ze chyba najprościej bedzie jakby jakos dostać sie do przeniesienia w C i zrobic to na dwóch intach 32bit - robil to ktoś moze - albo są jakieś gotowe biblioteki do C ? Czasowo obliczenia nie są ktrytyczne ( i chyba nie beda szybkie jak zobaczyłem ile wyszlo w asmie kodu :) )
  • REKLAMA
  • Pomocny post
    #2 1720853
    ko_rex
    Poziom 19  
    Posty: 253
    Pomógł: 38
    Ocena: 2
    Możesz sie dostać do bitu przeniesiena z poziomu C stosując predefiniowaną zmienną PSW. 7 bit w tym rejestrze to wlaśnie bit CY, więc możesz zrobić tak:

    long al,ah,bl,bh;
    al+=bl;
    if (PSW&0x80) ah++;
    ah+=bh;

    W ten sposób do zmiennej a (rozbitej na ah i al) dodałeś zmienną b.
  • REKLAMA
  • Pomocny post
    #3 1721474
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    a nie mozna w C zadeklarowac zmiennej jako 64 bit? long long zmienna;

    W asm wykonywana operacja to: A = A + B, bo tak najprościej i najczęściej się stosuje :]
    Dodajesz po kolei bajty zaczynając od najmniej znaczącego. Pierwsze dodawanie wykonujesz jako ADD, każde następne jako ADC (z przeniesieniem z poprzedniego)

    Mnozenie, hmm...
    Wiesz, jak wygląda mnożenie pisemne?
    No. To dokładnie tak samo wygląda algorytm na procu, tylko, że zamiast mnożyć pojedyncze cyfry mnożysz całe bajty. :)
  • REKLAMA
  • #4 1721674
    zagwizdow
    Poziom 17  
    Posty: 177
    Pomógł: 21
    Ocena: 7
    Dobre cos z tym wyciaganiem na chama cy if (PSW&0x80) ah++;
    ah+=bh;
    . Tylko jeszcze musze posprawdzac czy c czegos po drodze nie dorzuci .
    A jak jest jeszcze z mnozeniem liczb u2 - zawsze trzeba na moduł czy jest jakis sprytny sposób?
  • Pomocny post
    #5 1722666
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    w u2 zawsze moduły mnożysz, może i by się dało mnożyć bez zamiany na moduł, ale na pewno ani prościej, ani szybciej niż na modułach by nie było.
REKLAMA