großes Problem



  • Hallo,
    ich möchte ein ASM Programm in C++ (MFC) umsetzen.
    Nun habe ich folgendes Problem:
    In dem ASM-Prg. werden zwei zahlen addiert (0xAC36A84F & 0xFCB7CBBD).
    Als Ergebnis kommt in eax-->9049E753 & in edx 112FBC2 raus (Bereichsüberschr.!).
    Diese beiden Zahlen werden dann nochmal addiert.
    Wenn ich in MFC die beiden Zahlen als unsigned long int addiere, komme
    ich nur auf die Zahl 9049E753. Wie komme ich nun aber an die Zahl
    112FBC2 noch ran??

    Für jegliche Hilfe bin ich dankbar!
    Leider eine Mischung aus C- und ASM-Frage.

    Gruss Lieschen Müller



  • wenn 2 Zahlen addiert werden, wird das Ergebnis (beim Intel Syntax) immer nur im 1. Argument der "add" Anweisung gespeichert. Wie kommt es also zu dieser Zahl in edx?
    Weiter: wenn ich in einem DWord zu AC36A84F, FCB7CBBD addiere, komme ich nach dem Overflow in dem 32Bit Register auf A8EE740C und weder auf 9049E753 noch auf 112FBC2.
    Also: was passiert da nun in deinem ASM-Code? Was auch immer das ist, eine einfache Addition ist es ganz sicher nicht. Vielleicht wuerde es helfen, wenn du die codestelle mal postest...



  • Hallo Nobuo T,

    danke für deine schnelle Antwort.
    Es wird nicht addiert, sondern mutliplieziert. Fehler von mir.



  • multipliziert!......lol



  • wenn du beim Multiplizieren von FCB7CBBD und AC36A84F auf 0112FDC2 9049E753 kommst, musst du aber schon eine signed multiplikation ausfuehren, also nix unsigned long. 😉
    Eine Loesung fuer das Problem haette ich da schon... Ist nur leider "etwas" ungenau 😉 Ansonsten fuerchte ich, nicht genug c++-bewandert zu sein. _'

    unsigned long Bla;
    Bla=(~0xFCB7CBBD >> 0x10)*(~0xAC36A84F >> 0x10);
    

    Wenn in 1 Woche keine weiteren Antworten folgen, kannst du wohl davon ausgehen, dass auch sonst niemandem noch was eingefallen ist.


Anmelden zum Antworten