Fehler oder nicht?



  • Also ich habe mich mal ein Wenig mit Maschinensprache beschäftigt. Hab mir dann auch die Herrstellerinformationen von Intel über meinen x86 Pentium geholt. In diesen steht :

    Register AL = 00H
    Register BL = 01H
    Register CL = 02H
    Register DL = 03H
    Register AH = 04H
    Register BH = 05H
    Register CH = 06H
    Register DH = 07H

    So. Habe dann mal den Mnemonic "MOV BH, 01H" mit MASM assembliert und mir die fertige EXE in dem Hexeditor HexWorkshop angeschaut. Das Seltsame ist dort steht der Hexcode:

    B701

    Also ich denke mal "B" steht für "MOV", "7" für den Register und "01" für den hexadezimalen Wert der in dem Register gespeichert werden soll. Aber wiso steht dort für den Register "7" 😕
    Der ist doch laut Intel DH!



  • So einfach kann man das nicht sagen - musst du irgendwie falsch verstanden haben.
    Der mov-Befehl wird in diesem Fall wie folgt gebildet:
    B0 +rb, imm8

    rb ist Dabei ein Wert, der das Zielregister identifiziert:
    0=al
    1=cl
    2=dl
    3=bl
    4=ah
    5=ch
    6=dh
    7=bh

    imm8 ist der fixe 8Bit-Wert.

    Zusammen wird also mov bh, 01h korrekt zu
    B0 + 07h, 01h => B7 01



  • Vielen Dank für die schnelle Antwort. Wie der Mov-Befehl gebildet wird hab ich jetzt verstanden. Mein Fehler war wohl in der Registertabelle:

    Falsch:

    Register AL = 00H
    Register BL = 01H
    Register CL = 02H
    Register DL = 03H
    Register AH = 04H
    Register BH = 05H
    Register CH = 06H
    Register DH = 07H

    Richtig:

    Register AL = 00H
    Register BL = 03H
    Register CL = 01H
    Register DL = 02H
    Register AH = 04H
    Register BH = 07H
    Register CH = 05H
    Register DH = 06H

    So hab ichs richtig verstanden, oder? Hab mich wohl irritieren lassen durch mein zwanghaftes "nach Alphabet sortieren".^^



  • nicht dass ichs richtig wüsste, aber da sich deine 'richtige' und nobous versionen immer nocht unterscheiden muss wohl einer falsch liegen...

    man man man wie scharf hab ich da bloß wieder kombiniert



  • 😮 schrieb:

    nicht dass ichs richtig wüsste, aber da sich deine 'richtige' und nobous versionen immer nocht unterscheiden muss wohl einer falsch liegen...

    Wo ist denn der Unterschied? Nur die Reihenfolge ist unterschiedlich (Nobuo T hat nach dem Registerwert und Holgae nach dem Namen sortiert), aber ansonsten ist die Liste von Holgae korrekt. Bei den Registern ist die Reihenfolge nunmal a, c, d, b.



  • 😮 😮

    das muss dann wohl einer von den beiden noch schnell korrigiert haben 🙄


Anmelden zum Antworten