
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
' Multiplikaton von zwei Word Variablen (0 bis 65535) ' Ergebniswert steht in zwei Word Variablen (0 bis 4294836225) ' Eine präsise Division ist hiermit auch möglich, wenn ' das höherwetige Ergebnisword alleine betrachtet wird. define A word[1] 'Multiplikator, 16 Bit Zahl define B word[2] 'Multiplikator 16 Bit Zahl define C word[3] 'Produkt High-Word (16 Bit) vom 32 bit Ergebnis define D word[4] 'Produkt Low-Word (16 Bit) vom 32 bit Ergebnis define Tempbyte byte[9] 'Zwischenpuffer 'folgende Definitionen treffen das High- bzw. Low- Byte 'der oben definierten Word Variablen Stefan Wesenberg define Ah byte[1] ' High Byte von der Word Variable A define Al byte[2] ' Low Byte von der Word Variable A define Bh byte[3] ' High Byte von der Word Variable B define Bl byte[4] ' Low Byte von der Word Variable B define Ch byte[5] ' High Byte von der Word Variable C define Cl byte[6] ' Low Byte von der Word Variable C define Dh byte[7] ' High Byte von der Word Variable D define Dl byte[8] ' Low Byte von der Word Variable D ' Um Überläufe bei der Multiplikation auszuschliessen werden ' zwei Bytewerte multipliziert und das Produkt als Wordwert erfasst. ' folgende Rechenregel wird angewendet: ' (Ah+Al)*(Bh+Bl) = Al*Bl + Al*Bh + Ah*Bl + Ah*Bh ' das vier Byte große Ergebnis steht in den zwei Wordvariablen C und D. ' Um nur ein Byte als Zwischenpuffer zu benötigen werden Teilergebnisse ' zwischen verschiedenen Variablen verschoben und das Teilergebnis Al*Bl ' zwei mal berechnet. A = 12345 ' Multiplikator A B = 23456 ' Multiplikator B gosub MULTIPLIKATION Print A;" * ";B;" = ";C;" * 65536 + ";D; if C<0 then print " negativ dann 65536";C; if D<0 then print " negativ dann 65536";D else print end #MULTIPLIKATION C = Al * Bl D = Ah * Bl Dh = Ch C = Dl + Dh D = Al * Bh C = C + D Tempbyte = Cl D = Ah * Bl Dl = Ch C = Dl + Dh D = Ah * Bh C = C + D D = Al * Bl Dh = Tempbyte return |
| Antwort schreiben |