Lineares Schieberegister
lima-city → Forum → Programmiersprachen → C/C++ und D
assembler
bit
buffer
byte
code
container
dank
eins
frage
linear feedback
register
sekunde
set
speichern
speicherung
start
support
switch
teil
umsetzung
-
Jap, an meinem 32Bit Sys wirds wohl dann liegen. Wie schauts mit dem Einbinden von den Assembler-Befehlen bei C++ und den entsprechenden Fehlermeldungen aus?
Achja, wieso hast du bei deinem C-, und ASM-Code das LFSR in 3 Teile eingeteilt?
Edit:
Ups, hab ich glatt übersehen. Ich gestehe ich hab das ganze nur schnell durch nen online-rechner gejagt
Beitrag zuletzt geändert: 18.8.2009 22:04:19 von sw1tch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
sw1tch schrieb:
Jap, an meinem 32Bit Sys wirds wohl dann liegen. Wie schauts mit dem Einbinden von den Assembler-Befehlen bei C++ und den entsprechenden Fehlermeldungen aus?
Achja, wieso hast du bei deinem C-, und ASM-Code das LFSR in 3 Teile eingeteilt?
Ad1: Ich nehme mal stark an, dass der Fehler kommt, weil dein Proz im 32-bit Modus läuft und deshalb die R-Register gar nicht kennt. Installier dir mal ein 64-bit Betriebssystem.
Ad2: Weil ich 160 bit schlecht in ein einziges 64 bit Register reinbekomme. Dafür brauch ich 3 Register: eins mit 32 gültigen Stellen, und zwei mit 64 gültigen Stellen. 32 + 2 * 64 = 160.
EDIT:
Ad3: Wenn du unbedingt im 32-bit Mode arbeiten musst, dann musst du eben ein LFSR jeweils in 5 Register reinschieben, aber dann gehen dir schnell die Register aus: EAX als Rückgaberegister, EDI und ESI zum zählen vom Buffer und Zähler, da bleiben als general-purpose nur EBX, ECX und EDX übrig und 3 < 5.
Beitrag zuletzt geändert: 18.8.2009 22:06:29 von census -
Ich bin auch ein Genie, heute nachmittag war mir das klar und jetzt hatte ichs wieder vergessen, Schande über mich.
Ich werde dann mal nen neuen Versuch starten das zu programmieren, wird wohl dann nicht so performant werden wie deine Assembly Version
Vielleicht kann ich das ja in etwa der Performance von der C-Version realisieren, da ich das Programm schon für 32Bit kompatibel haben wollte.
MfG Switch.
Edit:
Deine Assembler-Version dementsprechend zu editieren trau ich mir erstmal nicht zu, da ich mich da auch noch gut reinarbeiten müsste ;)
Beitrag zuletzt geändert: 18.8.2009 22:12:33 von sw1tch -
Hmm, gerade für so eine Anwendung, die man am besten sehr hardwarenah umsetzt, ist es eigentlich eine Schande 90% der Prozessorleistung wegzuschmeißen, weil man ein 32-bit Betriebssystem benutzt. Niemand hat heute mehr einen 32-bit Prozessor, aber 90% haben noch ein 32-bit Betriebssystem. Das ist mir unverständlich.
Linux 64-bit gibt es kostenlos in zig Varianten (ich persönlich hab ubuntu 9.04 auf kernel 2.6.28.15)
Windows 7 64-bit gibt es kostenlos bei Microsoft.
Was will man mehr. . . -
Ich hab auch schon drüber nachgedacht, doch die meisten Programme sind nunmal nicht auf 64Bit optimiert und unter Umständen kommt es sogar zu einer schlechteren Performance (wie Tests zeigen). Deswegen warte ich noch ein wenig...
Windows 7 64-bit gibt es kostenlos bei Microsoft.
Hab ich was verpasst?
Das gibt es kostenlos, aber nicht bei M$
MfG Switch.
Beitrag zuletzt geändert: 18.8.2009 22:42:27 von sw1tch -
sw1tch schrieb:
Ich hab auch schon drüber nachgedacht, doch die meisten Programme sind nunmal nicht auf 64Bit optimiert und unter Umständen kommt es sogar zu einer schlechteren Performance (wie Tests zeigen). Deswegen warte ich noch ein wenig...
Windows 7 64-bit gibt es kostenlos bei Microsoft.
Hab ich was verpasst?
Das gibt es kostenlos, aber nicht bei M$
MfG Switch.
http://www.microsoft.com/germany/windows/windows-7/beta-download.aspx
Kannst dir ja zwei OS auf einer Maschine installieren, ein 32 bit und ein 64 bit. Oder du installierst dir nativ Windows 7 und in eine VM dein altes 32-bit System.
==============================================
EDIT:
Falls ich morgen Lust und Laune habe, schreib ich das ganze mal für 32-bit. Was willst du denn? Intel oder AMD?
Beitrag zuletzt geändert: 18.8.2009 22:58:01 von census -
census schrieb:
http://www.microsoft.com/germany/windows/windows-7/beta-download.aspx
Kannst dir ja zwei OS auf einer Maschine installieren, ein 32 bit und ein 64 bit. Oder du installierst dir nativ Windows 7 und in eine VM dein altes 32-bit System.
==============================================
EDIT:
Falls ich morgen Lust und Laune habe, schreib ich das ganze mal für 32-bit. Was willst du denn? Intel oder AMD?
Der Download der Beta-Version von Windows 7 ist leider nicht mehr möglich. Anwender, die im Besitz von Windows 7 Beta sind (z. B. über verteilte Presse-DVDs) und bisher noch keinen Product-Key erhalten haben können sich weiterhin über die unten aufgeführten Auswahlmöglichkeiten für einen Product-Key 32-Bit oder 64-Bit registrieren.
-
nikic schrieb:
census schrieb:
http://www.microsoft.com/germany/windows/windows-7/beta-download.aspx
Kannst dir ja zwei OS auf einer Maschine installieren, ein 32 bit und ein 64 bit. Oder du installierst dir nativ Windows 7 und in eine VM dein altes 32-bit System.
==============================================
EDIT:
Falls ich morgen Lust und Laune habe, schreib ich das ganze mal für 32-bit. Was willst du denn? Intel oder AMD?
Der Download der Beta-Version von Windows 7 ist leider nicht mehr möglich. Anwender, die im Besitz von Windows 7 Beta sind (z. B. über verteilte Presse-DVDs) und bisher noch keinen Product-Key erhalten haben können sich weiterhin über die unten aufgeführten Auswahlmöglichkeiten für einen Product-Key 32-Bit oder 64-Bit registrieren.
Ja, sorry, war der falsche Link: Hier ist der richtige:
http://www.microsoft.com/germany/windows/windows-7/download.aspx -
Okay, ich dachte Vollversion. Habe eh schon Seven 32Bit .
Wenn du Lust und Laune hättest würde ich mich sehr freuen!
Ich habe allerdings auch schon einen Ansatz um 64Bit-Ints zu verwenden:
void LFSR(string Hash) { stringstream ss; unsigned __int64 LFSR1_L = 0; unsigned __int64 LFSR1_C = 0; unsigned __int64 LFSR1_R = 0; ss << hex << Hash.substr(0,16); cout << ss.str() << endl; ss >> LFSR1_L; ss.str(""); ss.clear(); ss << hex << Hash.substr(16,32); cout << ss.str() << endl; ss >> LFSR1_C; cout << LFSR1_C << endl; printf ("Terminated in %d ms.\n",(int)(clock()/(CLOCKS_PER_SEC/1000)));
Habe nur die ersten beiden Teile gemacht, dass funzt aber soweit bestens. Am Besten wäre es, wenn du probierst den ASM-Code unter 32Bit lauffähig zu bekommen :-)
Edit:
Jetzt hab ich doch glatt vergessen auf die Frage zu antworten: Intel
Beitrag zuletzt geändert: 18.8.2009 23:11:30 von sw1tch -
Voilà 32-bit Version mit 3 Registern:
LFSR schiebt immer,
LFSR_1 nur, falls LFSR 1 liefert,
LFSR_2 nur, falls LFSR 0 liefert.
mov esi,buffer mov edi,length dec edi start: mov ebx,right shr ebx,1 jc eins jmp zwei done: mov ebx,right mov edx,right shr ebx,1 mov ecx,ebx xor edx,ebx shr ebx,17 xor edx,ebx shr ebx,1 xor edx,ebx mov ebx,halfright shl ebx,31 or ecx,ebx mov right,ecx mov ecx,halfright shr ecx,1 mov ebx,center shl ebx,31 or ecx,ebx mov halfright,ecx mov ecx,center shr ecx,1 mov ebx,halfleft shl ebx,31 or ecx,ebx mov center,ecx mov ecx,halfleft shr ecx,1 mov ebx,left shl ebx,31 or ecx,ebx mov halfleft,ecx mov ecx,left shr ecx,1 shl edx,31 or ecx,edx mov left,ecx dec edi jnz start jmp end eins: mov ebx,right_1 mov edx,right_1 shr ebx,1 setc al mov byte ptr [esi],al inc esi mov ecx,ebx xor edx,ebx shr ebx,17 xor edx,ebx shr ebx,1 xor edx,ebx mov ebx,halfright_1 shl ebx,31 or ecx,ebx mov right_1,ecx mov ecx,halfright_1 shr ecx,1 mov ebx,center_1 shl ebx,31 or ecx,ebx mov halfright_1,ecx mov ecx,center_1 shr ecx,1 mov ebx,halfleft_1 shl ebx,31 or ecx,ebx mov center_1,ecx mov ecx,halfleft_1 shr ecx,1 mov ebx,left_1 shl ebx,31 or ecx,ebx mov halfleft_1,ecx mov ecx,left_1 shr ecx,1 shl edx,31 or ecx,edx mov left_1,ecx jmp done zwei: mov ebx,right_2 mov edx,right_2 shr ebx,1 setc al mov byte ptr [esi],al inc esi mov ecx,ebx xor edx,ebx shr ebx,17 xor edx,ebx shr ebx,1 xor edx,ebx mov ebx,halfright_2 shl ebx,31 or ecx,ebx mov right_2,ecx mov ecx,halfright_2 shr ecx,1 mov ebx,center_2 shl ebx,31 or ecx,ebx mov halfright_2,ecx mov ecx,center_2 shr ecx,1 mov ebx,halfleft_2 shl ebx,31 or ecx,ebx mov center_2,ecx mov ecx,halfleft_2 shr ecx,1 mov ebx,left_2 shl ebx,31 or ecx,ebx mov halfleft_2,ecx mov ecx,left_2 shr ecx,1 shl edx,31 or ecx,edx mov left_2,ecx jmp done end:
Beitrag zuletzt geändert: 19.8.2009 20:23:09 von census -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage