opcode laenge



  • Hallo Leute.

    Was mich interessieren wuerde ist folgendes - es geht um die groesse des produzierten codes

    Wenn ich ein

    mov eax, 1
    

    mache, dann ist eax ja ein 32 bit register und 1 eine 32 bit zahl, oder?
    wie sieht es aber bei

    mov ax, 1
    

    eins aus? ax ist ein 16bit register aber wieviele bit hat dann 1?
    und bei

    mov al, 1
    

    ist al ja 8bit gross und 1 hat wieviele bit?

    Der Gedanke dahinter warum ich das Frage ist: wo wird die Zahl auf die noetigen bit beschnitten: schneidet der Assembler die unnoetigen bit weg oder erwartet mov immer eine 32bit zahl als 2. operanden und was in das register nicht reinpasst wird halt weggelassen?

    Sprich: ist der opcode fuer

    mov ax,1
    

    groesser als der fuer

    mov  al,1
    

    ?

    Und rein interesse halber: wie auch immer es die x86 Architektur macht - gibt es Architekturen die es anders machen?

    Ich hoffe es ist halbwegs klar was ich ausdruecken will 🙂

    Danke schonmal.



  • befehl, anzahl und typ der operanden werden durch den opcode bestimmt. bei einigen prozessoren sind es bestimmte bitstellen im opcode, die diese informationen enthalten. dementsprechend einfach lassen sich disassember für solche prozessoren schreiben (z.b. der 6502 macht es so).
    🙂





  • sehr schoen, danke, genau so einen einblick habe ich gesucht.

    du hast das nicht zufaellig auch noch fuer andere architekturen? am liebsten sind mir eh die etwas aelteren - die noch nicht ganz so komplex waren wie die modernen prozessoren...


Anmelden zum Antworten