8ED8h ???



  • So lautete eine Antwort auf meine Frage
    was bedeutet diese Zeile
    :0001.0003 8ED8 mov ds, ax
    "Wenn du schreibst "mov ds,ax" ist das nur
    eine andere Schreibweise für 8ED8h."
    Nun eine weitere Frage :
    Was bedeutet diese hexadezimale Zahl 8ED8h an der Stelle
    im Klartext? Ich meine gibt es eine Tabelle in der Befehle solche
    Nummern zugeornet sind oder wie????Wenn ja wie komme ich an soeine
    Tabelle ran?
    Oder warum vertsteht der Prozessor die Zahlkombi eher als
    mov ds,ax??
    Warum ergibt mov ds,ax gerade 8ED8h und nicht z.B 8FD9h oder anderes???
    Ist das bei jedem Rechner so dass 8ED8h eben mov ds,ax bedeutet??

    Grüße

    Program Entry Point = 0001:0000

    //********************** Start of Code in Segment: 1 **************

    //******************** Program Entry Point ********
    :0001.0000 B80000 mov ax, 0000
    :0001.0003 8ED8 mov ds, ax
    :0001.0005 BA0000 mov dx, 0000
    :0001.0008 B409 mov ah, 09
    :0001.000A CD21 int 21
    :0001.000C B44C mov ah, 4C
    :0001.000E CD21 int 21



  • Tauboga schrieb:

    Was bedeutet diese hexadezimale Zahl 8ED8h an der Stelle
    im Klartext?

    stagte man doch, das bedeutet mov ds, ax 🙂

    Ich meine gibt es eine Tabelle in der Befehle solche
    Nummern zugeornet sind oder wie????Wenn ja wie komme ich an soeine
    Tabelle ran?

    Klar, di emuss es geben, sonst wäre Assemblerschreiben ziemlich ratespiel. Steht alles haarklein im zweiten Teil der x86-Referenz von Intel (Links in der FAQ)

    Oder warum vertsteht der Prozessor die Zahlkombi eher als
    mov ds,ax??

    Weil Intel das so definiert hat. Dass der Prozessor erst Text interpretieren muss wäre sehr umständlich, deswegen kodiert man den Inhalt halt binär. Und da muss man halt festlegen, welche Bedeutung welche binärzahlen haben bzw. wie man einen Befehl in binär verschlüsselt. Denn außer Binär kann der Prozessor nichts lesen 🙂

    Warum ergibt mov ds,ax gerade 8ED8h und nicht z.B 8FD9h oder anderes???

    Weil Intel dies ebenso definiert hat 🙂

    Ist das bei jedem Rechner so dass 8ED8h eben mov ds,ax bedeutet??

    Muss, denn sonst würde ein Programm ja nicht auf jedem x86-Rechenr laufen wenn jeder Prozessor die Binärwerte anders interpretiert.

    HTH



  • Hi.

    Ich versuche mal die vielen Fragen der Reihe nach zu beantworten...

    Tauboga schrieb:

    Was bedeutet diese hexadezimale Zahl 8ED8h an der Stelle
    im Klartext?

    Wurde doch schon geschrieben: Es ist der OpCode fuer "mov ds,ax"

    Tauboga schrieb:

    Ich meine gibt es eine Tabelle in der Befehle solche
    Nummern zugeornet sind oder wie????

    Ja, genau so ist es.

    Tauboga schrieb:

    Wenn ja wie komme ich an soeine
    Tabelle ran?

    Musst du suchen - habe ich jetzt ehrlichgesagt keine Lust zu. 🙄
    Ueber google zB. nach x86 Opcode list o.ae. oder schau direkt auf den Herstellerseiten (intel/AMD o.ae.) nach.
    Es gibt sie auf jeden Fall auch im Internet.

    Tauboga schrieb:

    Oder warum vertsteht der Prozessor die Zahlkombi eher als
    mov ds,ax??

    Das kann man sich im wahrsten Sinne des Wortes an 2 Fingern abzaehlen:
    Diese Zahlenkombination ist nur 2Byte lang und "mov ds,ax" sind 9Byte.
    So lange OpCodes wuerden nicht nur die Verarbeitungszeit erheblich verlaengern, sondern auch unmengen an Speicher belegen.
    Von daher ist diese Zahlenkodierung doch schon recht praktisch. 😉

    Tauboga schrieb:

    Warum ergibt mov ds,ax gerade 8ED8h und nicht z.B 8FD9h oder anderes???

    Du musst das eher andersherum sehen: mov ds,ax ergibt gar nichts. Das ist nur Text. 8ED8h ist das was der Prozessor liest und das bedeutet nunmal Pack ax nach ds (entspr. nach intel Asm.Syntax "mov ds,ax") und nichts anderes.

    Tauboga schrieb:

    Ist das bei jedem Rechner so dass 8ED8h eben mov ds,ax bedeutet??

    Ja, das ist bei jedem PC (=x86-kompatibel) so.
    zB. ein Gameboy (AFAIK Motorola CPU) wuerde unter 8ED8h garantiert etwas anderes verstehen.

    [edit]Mist, hat sich doch tatsaechlich noch vor mir jemand hingesetzt und das ausklambuesert. 😃 Kommt davon, wenn man nebenher Glotze schaut. 🙄
    Ich lasse es einfach mal zusaetzlich stehen.[/edit]



  • wie ist >8ED8h< zu verstehen

    nur 36568 (als Dezimal)
    oder 142 für 8E
    und 216 für D8



  • 8ED8h? Nun für den Prozessor ist das

    1000111011011000 bzw. HLLLHHHLHHLHHLLL wobei H ein hohes Spannugnsniveau ist und L ein niedriges. Mehr als SPannungsniveaus kennt der Prozessor nunmal nicht. Oder worauf willst du hinaus?



  • Die Opcodes bestehen zum einen Teil aus dem Opcode selbst und zum anderen aus zusätzlichen Informationen. In der FAQ sind Links zu Inteldokumentationen, da steht das genauer drin. Dort wird beschrieben wie die "Parameter" für einen Befehl codiert sind (Prefixe, ModR/M Byte, welche Register verwendet werden ... bla bla bla).


Anmelden zum Antworten