Citat:
lord Vader: _str_
ajde daj neki primer. Na taj način ako treba da pomnožim recimo 0.0450 i 2,2 *10 na -6 trebaju mi operandi od 5 bajtova, znači rezultat dobijam u 10 bajtova!!!? Da li sam u pravu. Tu je problem i skaliranja tako da množim sa dva jer je samo to jednostavno, ne znam kako bi množio sa brojem koji nema osnovu 2. Takvo množenje se ne svodi na šiftovanje.
Možeš li malo konkretnije?
Ovde pričam o realnim stvarima a ne o fantaziranju tipa "2.2 *10^-6". Kakav je to projekat koji zahteva ovoliku tačnost ili možda praviš kalkukator? U čemu je problem uzeti byte ili word za celobrojnu vrednost a ono iza zareza, zavisno od potrebe, isto tako byte ili word. U ovim slučajevima ćeš imati max vrednosti 255.99, 255.9999, 65535.99 i 65535.9999. Osnovne operacije sa binarnim brojevima (+-*/) bi trbalo da si učio u osnovnoj školi, predmet -matematika. Šiftovanjem broja u levo vrši se množenje u koracima 2,4,8,16,32,64,128 (1 byte).
Evo ti primera:
25*11=275
(byte1) (byte0)
00011001*00001011=00000001,00010011
manipulaciju radiš sa većim brojem, u ovom slučaju 25
Code:
x=25, y=25
lsl x ; x*2 (x=00000000,00110010)(50)
lsl x ; x*4 (x=00000000,01100100)(100)
lsl x ; x*8 (x=00000000,11001000)(200)
add x,y ; x+25 (x=00000000,11100001)(225)
add x,y ; x+25 (x=00000000,11111010)(250)
add x,y ; x+25 (x=00000001,00010011)(275)
Tvoje pitanje je bilo 0.0450 * 2.2*10^-6 ili 0.0450*0.000022. Da bi pomnožio ova dva broja logično bi bilo da oba broja iza zareza imaju 3 bajta. Tako bi imao x.9999999 ili 0.0450000 i 0.0000220. Dali ti predstavlja problem da sada pomnožiš 450000 i 220. Kod šiftovanja (množenja) sa više bajtova podrazumeva se da vodiš računa o carry flag-u u statusnom registru.
Ako ti opet nije jasno, razmisli o prelasku na C ili BASIC.
PS
Nemoj da mešaš
. i
, .
__*__
*___*