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

Jak mnożyć liczby 8-bitowe z przecinkiem w ASM 51?

bolek 05 Mar 2006 19:54 2126 4
REKLAMA
  • #1 2378844
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    chłopaki, wytłumaczcie jak to zrobić, potrzebuje wymnożyć 8 bitową wartosć przez liczbe 8 bitową, która dodatkowo będzie miała jedno miejsce po przecinku.
  • REKLAMA
  • #2 2379592
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    To w końcu ile bitowe są te liczby ? 8 czy więcej bitowe ?
  • REKLAMA
  • #3 2379648
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    liczba mnożona jest 8 bitowa, nawet zastanawiam się czy po operacji wynik mnożenie też sie zmieści w 8 bitach. A mnożyć będe przez liczbe, której wartość będzie się zawierać pomiędzy 1 a 2.5

    nie no, taki przypadek to prosty, trzeba by było dwa mnożenia i jedno doadawanie. dla bezpieczeństwa przyjmijmy że liczba mnożona może maksymalnie wynosić 255
  • REKLAMA
  • #4 2382988
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Jeżeli mnożysz liczby 8 bitowe to wynik na pewno się zmieści w 16 bitach. To jest chyba oczywiste. A 255 * 2.5 na pewno nie zmieści się w 8 bitach. To też oczywiste.
  • Pomocny post
    #5 2383049
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    No więc jest na to prosty sposób i zwie się fixed-point math.
    Zakładasz, że liczba jest zapisana w formacie np. 4:4 bity , gdzie 4 wysokie bity to liczba całkowita w przedziale 0-15 , a 4 niższe to ułamek w przedziale 0/16-15/16

    Jeżeli mnożysz liczbe 8:0 przez 4:4 to masz wynik 12:4 i wszystko cacy - masz swój wynik i wartość ułamkową.

    Jeżeli chciałbyś pomnożyc dwie liczby ułamkowe przez siebie , to masz 4:4 * 4:4 i wynik 8:8, żeby wrócić do zapisu ułamka jako 0/16-15/16 musisz przesunąc wynik o 4 bity w prawo - żeby mieć 8:4.

    Jeżeli okaże się, że w 8 bitach się nie zmieścisz to będziesz musiał użyc procedurki mnożącej 16bitowe liczby.
REKLAMA