Hallo zusammen, vielleicht kann mir jemand helfen: Ich habe hier einen Cypress PSoC auf dem Tisch dessen Firmware einen etwas doofen Bug hat und der Hersteller hat kein Interesse ihn zu beheben. Ich habe den Code ausgelesen und desassembliert. Nun bin ich ca. 50% durch den Code und habe dessen Funktion kommentiert. Die Anwendung ist wohl in C geschrieben und ruft eine Funktion auf deren Funktion ich nicht begreife: ==== Schnipp ==== func_364C: ; SP-4 : b ; SP-5 : a ; Globals ; 0.0x9B global1 ; 0.0x9C global2 ; Looks handwritten... And wierd, WTF??? 364C 55 9C 00 MOV [0x9C],0x00 ; LCALL @ 35D9 364F 55 9B 08 MOV [0x9B],0x08 ; [0x9B] = 0x08 -> Loop eight times, see ; below 3652 66 FC ASL [X+0xFC];\JNZ @ 3662 <----------------------| 3654 6B 9C RLC [0x9C];/Shift bit from [SP-4] into [0x9C] | 3656 51 9C MOV A,[0x9C];\\-----------v-------------/ | 3658 1B FB SBB A,[X+0xFB];/[0x9C] - Carry - [SP-5] < 0 | 365A C0 05 JC 0x3660;--If ( ^^^^^^^^^^ ) skip---| | 365C 53 9C MOV [0x9C],A;[0x9C]=Result from above | | 365E 77 FC INC [X+0xFC];[SP-4]++; | | 3660 7A 9B DEC [0x9B];JC @ 365A <----------------| | 3662 BF EF JNZ 0x3652;-------------------------------------| 3664 7F RET === Schnappp === In C transkribiert sieht das Ganze etwa so aus: === Schnipp === char global1; char global2; func_364C(a,b) { char tmp; // Fuer Carry-Emulation char i; for (global1=8; global1>0; global1--) { tmp= b & 0x80; global2=global2<<1 | tmp; tmp= global2 - tmp - a; if (tmp>0) { global2=tmp; b++; } } } === Schnapp === Aus der PSoC-Standardbibliothek kommt es wohl nicht, die hab' ich schon durchsucht. Nur die Mathebibliothek für Modulo/Multiplikation von größeren (>8 bit) Zahlen hab' ich noch nicht durchforstet/gefunden. Hat jemand von Euch soetwas schon einmal gesehen oder eine Idee was das tun soll? Wenn ja wäre ich um jeden Tip dankbar. Danke, ein Suchender
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.