Erklärt mir mal bitte jemand den Code? ehemals: Empfehlungen, um Programmieren in Assemblersprache zu lernen

  • Das Buch ist generell zwar brauchbar, aber es ist primär für Windows ab 32 Bit gedacht und schießt auch etwas übers Ziel hinaus, Assembler zu lernen und eine Einsteigerlektüre ist das auch nicht grad :D aber auf jeden Fall interessant

  • Soweit ich das nun seit Donnerstag beurteilen kann, funktioniert der kompliziertere und wichtigere Teil des Patches im BIOS perfekt. Es gab bislang keine Probleme, weder beim Ausführen während des Bootvorgangs noch unter Win98SE in der Benchmarkschleife, so daß ich die Sicherheitsvorkehrungen bei den BIOS- und Setup-Standardeinstellungen bereits wieder aufgehoben habe :Banana


    Der einfachere, unwichtigere Teil, den ich zuerst als Testballon eingeschleußt habe, geht aber leider (noch) nicht. Scheinbar ist das Register gesperrt oder wird von einer anderen Einstellung wieder überschrieben :( . Das wird wohl doch etwas komplizierter als ich zunächst dachte. Da muß ich noch mal das Datenblatt durchwühlen. Egal, das kann ich auch unter DOS und Windows einstellen, daher verschieb ich das mal auf später...


    Jetzt will ich den Patch erst einmal an- und abschaltbar machen, da ich noch mehr Modifikationen testen will. Im Falle eines Fehlschlages d. h. nicht Bootens reicht es dann, einfach nur die BIOS/Setup-Standardeinstellungen zu laden, um die Änderungen an den Einstellungen der Chipsatzregister zu umgehen. Dazu hab ich mir auch schon ein überflüssiges Bit in einem der Chipsatzregister ausgesucht, das ich vom BIOS aus einstellen kann. Meine Frage ist jetzt:


    Wie erzeuge ich einen Sprungbefehl in FASM?


    Bleiben wir bei dem Beispiel von oben:


    Wir sehen also zunächst, daß ich wohl mehr als 127 Byte überspringen muß, wenn ich die Ausstiegsbefehle popf, clc und retn nicht doppelt haben will, einmal am Anfang zum Überspringen und einmal am Ende, wenn die Modifikationen komplett sind.


    Nun zum Code für die Prüfung und den Sprung:

    Wie definiere ich jetzt in FASM das Sprungziel?
    Kann ich jz (jump if zero) auch verwenden, um mehr als 127 Byte zu überspringen (z. B. durch ein near)?
    Werden die Prozessor-Flags, die durch cmp gesetzt werden, auch durch pushf und popf gesichert bzw. wiederhergestellt?
    (Sorry für den vielen Text im Code ;) )


    EDIT:
    Hab's bereits rausgefunden/gelesen: Es war der : Einfach einen : hinter die Sprungmarke setzen. Jetzt kann ich den Patch zwar abschalten, aber wenn ich ihn anschalte, macht Win98SE jedesmal einen Neustart während es hochfährt. Vorher also mit unbedingter Patchausführung war es egal, wie diese BIOS-Option eingestellt wurde. Das BIOS meckert nicht rum ?(?(?(


    Der Code sieht im Moment so aus:


    EDIT 2: Ich glaube, ich weiß, wo der Fehler ist: Ich muß ax nach dem Vergleich wieder löschen, da ja eine 1 drinnen steht, wenn ich zum Patch springe :mist
    -> Keine Besserung, das war es auch nicht. Kopf völlig umsonst gegen die Wand geknallt :mist:mist

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

    6 Mal editiert, zuletzt von Lotosdrache ()

  • seg000:B382 mov cx, 41h ; 'A'
    seg000:B385 call sub_B3CD
    seg000:B388 and ax, 2
    seg000:B38B cmp ax, 0
    seg000:B38E jz short loc_B3CA

    Also der Grund, daß Win98SE nicht mehr bootet, liegt darin, daß nach dem oben zitierten Vergleich (Sprungkriterium) der Patch offenbar gar nicht mehr ausgeführt wird. Wie ich schon sagte, führt eine 1 in Bit#1 zu einem Bootfehler, wenn der Patch nicht ausgeführt wird, es sei denn der L2-Cache wird abgeschaltet. So bin ich drauf gekommen.
    Warum springt er jetzt aber immer?


    EDIT: Er springt immer, weil da in der Standardeinstellung immer 0 steht, der L2-Cache während der Initialisierung im 16-Bit-Modus also noch abgeschaltet ist. Mein Patch wird also ausgeführt, bevor die Einstellungen des BIOS-Setupprogramms geladen werden.

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:


    Meine Begehren

    Einmal editiert, zuletzt von Lotosdrache ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!