www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Cypress PSoC: Denksport: Unbekannter Code


Autor: suchender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.