ALGORITHMEN - Teil XVI: Liberté - Fraternité - Pfefferminztee

Jetzt mitmachen!

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

  • Ein weiterer Versuch, aus der Software-Müllkippe noch-Verwendbares zu retten!
    Na, schau´n wer mal ... :pfeifend:

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • ...i..tee ist doch drin. Erinnert mich an den Fuchstritt, der in das englische Buchstabier-Alphabet rutschte.
    (jetzt ist auch bei mir der Groschen gefallen: Egalité )


    Wie wär's mit diesem Schnipsel, den ich auf Container umstellen werde...



    (cl) steht übrigens für CopyLeft


    (ist aus einem Codeschnipsel von Richard Maurukas; ich hoffe, ich erinnere mich an die richtige Namensschreibung)


    P.S.:
    und recherchiert:
    Liberté, Égalité, Fraternité (Freiheit, Gleichheit Brüderlichkeit)


    aus Google:


    Liberté, Égalité, Fraternité – Boarische Wikipedia


    https://bar.wikipedia.org/wiki/Liberté,_Égalité,_Fraternité


    De Paroin Liberté, Égalité, Fraternité is easchd 50 Joa noch da Franzesischn Revolution, untam Napoléon III., zum Motto vo dera Revolution erkleat woan. Nochdems zwischnduach oiwei wieda in Frog gstejt woan is, hodsa si unta da 3. Republik duachgsetzt. Da Woispruch is in da Vafossung vo 1958 festgschriem. :lol2:

    Programmieren, das spannendste Detektivspiel der Welt.

    2 Mal editiert, zuletzt von Michael Wodrich () aus folgendem Grund: recherchiert

  • Hätte da eine Frage :


    Warum zweimal denselben Code in unterschiedlichen Procs
    (TickCount.Stopp & TickCount.Stopp) ?


    Machen doch beide das gleiche.
    Oder sollte eine für QueryPerformanceFrequency und die andere
    für QueryPerformanceCounter stehen ?


    Also Typo-Fehler : TickCount_QPF

  • .Stop = Englisch, .Stopp = Deutsch
    Ich vermute, ein VCT (very common typo) soll hier befriedet werden ...
    Nur so ein Tip - oder Tipp?

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Link: Aktuelles INHALTSVERZEICHNIS
    ========================
    ... dieser "Algorithmen"-Reihe (Teile I bis XV) als gezippte EXE zum Download. Im zip-File zusätzlich enhalten: Der BEAMER, der einen rasch in die Nähe des entsprechenden Beitrags im richtigen Kapitel hier im Forum bringen soll - als normales, anpassbares .PRF, um den eigenen Browser wählen zu können. (Eingestellt ist die Firefox-32bit-Defaultinstallation auf einem 64-bit Windows 7 SP1).
    Gruss


    P.S.: Eingabe der Kapitelnummer wie üblich als normale arabische, nicht als römische Zahl, getrennt durch Underscore-Zeichen "_" von der gewünschten Beitragsnummer.

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht ()

  • Hallo Heinz,
    das QPC ist schon richtig, es wird ja der Counter gestoppt und nicht die Frequenz, die wird beim Starten nur einmal initialisiert (festgehalten).


    Das Stopp und Stop als zwei unabhängige Funktionen hatte ich mir bei anderen Compilern angewöhnt. Die erkennen, welche Form im Programm dann später aufgerufen wird und entfernen die nicht benutze. Rufft man innerhalb der einen Funktion die andere auf, dann bleiben beide erhalten. Und ja, da andere diese Funktionen aufrufen sollen sind beide Varianten vertreten.


    Diese kleine INI habe ich häufiger im Einsatz und es wird immer mal ein bisschen dran geschraubt.
    - die neuen Datentypen
    - die DT()-Aufrufe mit getestet
    - und nun soll "Container und SubProc" dazu kommen

  • Abt. Codevergleich
    ============
    Verglichen wird hier die .LST-Datei des XProfan-X4ß Inline-Assemblers im Modus set("asmmode",1) mit dem entsprechenden Disassemblercode, den der Online-Disassembler auf https://defuse.ca/online-x86-assembler.htm#disassembly2 liefert.


    Das Programm:

    Code
    CLS:set("asmmode",1)
    ASM "MeineFunktion", 2
      mov eax,par1
      mov ebx,par2
      add eax,ebx
    ENDASM
    Var Ergebnis& = MeineFunktion(38764, 879879878)
    Print Ergebnis&
    WaitInput

    Die erzeugte .LST-Datei:

    Das Disassembler-Ergebnis des Hexcode-Strings in obiger Zeile 13:

    und dessen für XProfan verdaubar gemachte Variante


    Im Prinzip könnten hier also auch ältere Maschinenprogramme (etwa solche mit INT(21)-Funktionen) angepasst und im Kern weiterverwendet werden. Weiters erscheint mit diesem Online-Tool die Anpassung an 64-bit-Systeme möglich, ohne lokal einen Voll-Assembler aufsetzen zu müssen!
    Gruss


    P.S.: Selbstverständlich sind dabei Urheberrechte zu beachten!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    3 Mal editiert, zuletzt von p. specht ()

  • Abt. Schon wieder Rätsel - SR 1
    ------------------------------------
    Wieviele Ziffern hat die kleinste restlos durch 225 teilbare Zahl, die man im Dezimalsystem nur mit den Ziffern 0 und 1 anschreiben kann?

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Lösung zu SwR 1
    -------------------
    Die Antwort liefert wie so oft ein kleines XProfan-Programm:

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Das Sprung-Desaster
    =================


    A. Bedingte Sprünge:


    CF: Carry flag; ZF: Zero flag; SF: Sign flag; OF: Overflow flag;
    DF: Direction flag; PF: Parity flag (0 = gerade Anzahl von 1-bits, 1 = ungerade bit-Summe)


    Opcode Description CPU Flags
    -----------------------------------
    JA Above CF = 0 and ZF = 0
    JAE Above or equal CF = 0
    JB Bellow CF
    JBE Bellow or equal CF or ZF
    JC Carry CF
    JE Equality ZF
    JG Greater (s) ZF = 0 and SF = OF
    JGE Greater of equal(s) SF = OF
    JL Less (s) SF ≠ OF
    JLE Less or equal (s) ZF or SF ≠ OF
    JNA Not above CF or ZF
    JNAE Neither above nor equal CF
    JNB Not bellow CF = 0
    JNBE Neither bellow nor equal CF = 0 and ZF = 0
    JNC Not carry CF = 0
    JNE Not equal ZF = 0
    JNG Not greater ZF or SF ≠ OF
    JNGE Neither greater nor equal SF ≠ OF
    JNL Not less SF = OF
    JNLE Not less nor equal ZF = 0 and SF = OF
    JNO Not overflow OF = 0
    JNP Not parity PF = 0
    JNS Not negative SF = 0
    JNZ Not zero ZF = 0
    JO Overflow (s) OF
    JP Parity PF
    JPE Parity PF
    JPO Not parity PF = 0
    JS Negative (s) SF
    JZ Null ZF
    -----
    (s) signed = Unter Beachtung des Vorzeichen-bits


    Ausnahmen:
    JECXZ hängt nicht vom EFLAG Register ab, sondern vom ´decremented ECX´= 0.



    B. Unconditional jump: JMP
    ----------------------------


    C. Äquivalente Codes:
    ----------------------
    JB ≡ JC ≡ JNAE
    JAE ≡ JNB ≡ JNC
    JE ≡ JZ
    JNE ≡ JNZ
    JBE ≡ JNA
    JA ≡ JNBE
    JP ≡ JPE
    JNP ≡ JPO
    JL ≡ JNGE
    JGE ≡ JNL
    JLE ≡ JNG
    JG ≡ JNLE


    D. Ohne Äquivalenz:
    ---------------------
    JO
    JNO
    JS
    JNS


    Gruss


    P.S.: Kennt jemand diese Debugging tools? Sieht eher verdächtig aus ...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht ()

  • Abt. Karrierewege von Informatik-Profis
    =============================
    Aus einem öffentlichen Youtube-Vortrag (engl.):


    [Blockierte Grafik: http://members.aon.at/startup/Developer.gif]


    Zentrale Funktion scheinen hier die TeamleiterInnen einzunehmen - die erste Managementstufe, in der aber immer noch die Tätigkeit des Programmierens eine große Rolle spielt und unterschiedliche Wege offenstehen.


    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    Einmal editiert, zuletzt von p. specht ()

  • Abt. Grundsätzliche Speicheradressierungsmethoden
    =======================================


    A) Ladeadress- bzw. positionsunabhängiger Code
    -----------------------------------------------
    verwendet ausschließlich relative Adressierung, also Sprungdistanzen (bezogen auf den jeweiligen Stand des "Program Instruction Pointers" EIP *nach* Ausführung des Maschinenbefehls, also der nächsten unverzweigten Speicheradresse). Es ist eine sehr nützliche Art von Code, weil das bedeutet, dass keine Anpassungen nach dem Laden erforderlich sind und mit der Abarbeitung sofort begonnen werden kann. Leider wird diese Adressierungsart von x86-Prozessoren nur bei bestimmten Befehlen unterstützt.



    B) "Relokatible" Adressierung
    ----------------------------
    verwendet verschieblichen Code relativ zum jeweiligen Programmbeginn bzw. zur noch absolut oder relativ zur Verfügung zu stellenden Label-Adresse. Die zuerst nur symbolisch vorliegenden Adressen sind daher im konkreten Fall nach dem Laden noch anzupassen - das ist Aufgabe des Linkers (... oder im Falle eines ´Interpreters von Inline-Code´ dessen zusätzliche Aufgabe, stark unterstützt vom Betriebssystem). Hat man keinen solchen Relocator zur Verfügung, wird blosses Laden und Anspringen nicht klappen, oder nur beim ersten Mal.


    Leider verwenden viele x86-Befehle diese Adressierungsart. Das hat historische Gründe: Früher erfolgte die Speicherverwaltung über die CPU-Segmentregister, und da der Speicherbereich somit nicht zusammenhängend erschien (Was heute durch die Memory Management Unit MMU gewährleistet wird), war ohnehin noch ständige Adressanpassung erforderlich. Erst die x86-64-bit Version kennt heute jeweils auch rein EIP/RIP-relativen positionsunabhängigen Code.



    C) Absolute Adressierung
    ------------------------
    bezieht sich auf eine ganz konkrete Speicheradresse, was vor allem im Mikroprozessorsystemen mit wenig Speicher üblich ist. Vorteil: Es ist die schnellste Art von Code.


    Q: https://stackoverflow.com/ques…and-absolute-machine-code

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht ()

  • Zur Hüpferei in Assembler:


    Wenn im XProfan-Inline-Assembler Lablels innerhalb der ASM-Routine mit JUMP oder CALL angesprungen werden, sind die Sprungentfernungen auch hier relativ zum augenblicklichen EIP nach Ausführung des Befehls, dürfen aber über die -127 bis +128 bei den anderen Sprüngen hinaus gehen (A). Solange man sich darauf beschränkt, ist der erzeugte Maschinencode also verschiebbar.


    Wenn ich aus der ASM-Routine aber eine eine importierte Funktion (dazu zählen auch andere mit ASM erzeugte Funktionen) mit CALL @NAME aufrufe, ist der Code nicht mehr verschiebbar. Ebenso, wenn ich Adressen aus geladenen DLLs oder von XProfan-Prozeduren als Parameter verwende, um sie aus der ASM-Routine heraus aufzurufen. In diesem Fällen wird nämlich eine direkte Adresse (C) angegeben.


    Gruß
    Roland

    (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
    AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


    http://www.xprofan.de

  • @Michael Wodrich: Ersatz wäre z.B. JECXZ <rel8> = db $e3 db <+128=$7F,-127=$FF>


    Hinweis @RGH: Folgende Zeichen machen noch Erfassungsprobleme: 129,141,143 144 und 157
    und zwar weil sie (zumindest in LemonEd) keinen Zeichenabstand schreiben. Sind sie aber in einem String erst vorhanden,dann kann man sie zusammen mit den anderen Zeichen "mitgrabben". Eleganter wäre, sie durch \x81, \x8D, \x8F\x90 und \x9D ersetzen zu können. Frage: Geht das?

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Abt. Schon wieder Rätsel - SwR 2:
    ------------------------------------
    Eine Uhr geht in y Stunden x Minuten nach. Wieviele Minuten geht sie in einer Woche nach?

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    Einmal editiert, zuletzt von p. specht ()

  • @Michael Wodrich: Ersatz wäre z.B. JECXZ <rel8> = db $e3 db <+128=$7F,-127=$FF>


    Hinweis @RGH: Folgende Zeichen machen noch Erfassungsprobleme: 129,141,143 144 und 157
    und zwar weil sie (zumindest in LemonEd) keinen Zeichenabstand schreiben. Sind sie aber in einem String erst vorhanden,dann kann man sie zusammen mit den anderen Zeichen "mitgrabben". Eleganter wäre, sie durch \x81, \x8D, \x8F\x90 und \x9D ersetzen zu können. Frage: Geht das?

    Ein Zeichen im String durch seinen Hexcode mit "\xNN" zu ersetzen, geht immer. So kannst Du das " wahlweise durch "\q" oder "\x22" ersetzen.


    Gruß
    Roland

    (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
    AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


    http://www.xprofan.de

  • Abt. BITCOIN SOUND 03/2018
    ====================
    Keine nähere Erklärung nötig. Spielerei ohne jede Gewähr!
    Gruss


    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse