Verständnisfrage



  • Hallo,
    ich versuche zur Zeit mehrere Aufgaben zu wiederholen und bin auf eine Aufgabe gestoßen, wo ich nicht so richtig weiß, was ich damit anfangen soll.

    Hier der Link zur Aufgabenstellung:

    http://s14.directupload.net/file/d/3178/uzpcebtr_jpg.htm

    Könnt Ihr mir helfen?



  • Wobei sollen wir dir helfen? Mit welchem Teil dieser Aufgabe kannst du denn nichts anfangen?



  • Ich wollte nur wissen, was ich machen soll.
    Ich bin jetzt darauf gekommen, das ich den Inhalt angeben muss des Registers AL zum Beispiel.

    Verstehenich es richtig, dass sobald dort [AL] stehen würde, AL nicht mehr ein Register, sondern nun eine Speicherzelle wäre?

    Weiterhin noch eine Frage, wieso erhöht sich der Wert, zum Beispiel in Teilaufgabe k.) jeweils um 1?
    Die Lösung von k wäre ja 12345678H,12345679H,1234567AH,1234567BH?



  • Was du machen sollst, ist doch beschrieben? Wenn du nicht weißt, was die Aufgabe des MOV-Befehls oder der eckigen Klammern ist, dann guck in deinen Unterlagen nach oder verwende eine Suchmaschine. Bei x86 findest du genügend Material.

    Verstehenich es richtig, dass sobald dort [AL] stehen würde, AL nicht mehr ein Register, sondern nun eine Speicherzelle wäre?

    AL bleibt ein Register(-name). Eckige Klammern bezeichnen eine Speicherzelle und dessen Adresse befindet sich eben dazwischen.
    [AL] ist also die Speicherzelle an der Adresse, die sich in AL befindet. Das nennt sich Register-indirekte Adressierung.
    Z.B. bei a): das Byte an Adresse AAAA BBBB (Inhalt von EBX) wird in AL geladen. Lsg.: AAAA BBBB

    Weiterhin noch eine Frage, wieso erhöht sich der Wert, zum Beispiel in Teilaufgabe k.) jeweils um 1?
    Die Lösung von k wäre ja 12345678H,12345679H,1234567AH,1234567BH?

    Die Lösung jeder der Teilaufgaben ist _eine_ Adresse. k) kann daher keine 4 Lösungen haben oder bezieht sich das auf eine andere Aufgabe?



  • Nein auf unsere Teilaufgabe k bezieht sich das. Unser Seminarleiter hat die Lösungen so vorgegeben.

    Bei Zeilaufgabe j sind es auch 2 "Lösungen".



  • Ich hab mich vertan 😞 . Natürlich können auch mehrere Adressen pro Teilaufgabe die Lösung sein! Das liegt daran, dass EBX ein 4 Byte großes Register ist und dann eben 4 Speicherzellen, angefangen mit der Adresse in den eckigen Klammern, ausgelesen werden.



  • Ok, vielen Dank.

    Mir ist das mit der eckigen Klammer immernoch schleierhaft. Ich habe mir jetzt vieles Durchgelesen, aber so richtig will es nicht klappen. In den eckigen Klammern steht also immer die Adresse einer Speicherzelle?



  • Patrick1990 schrieb:

    Ok, vielen Dank.

    Mir ist das mit der eckigen Klammer immernoch schleierhaft. Ich habe mir jetzt vieles Durchgelesen, aber so richtig will es nicht klappen. In den eckigen Klammern steht also immer die Adresse einer Speicherzelle?

    Mal ganz langsam. Es sieht mir ganz nach dem Intel-Syntax aus der hier verwendet wird und das bedeutet "Befehl Ziel, Quelle".

    Dann wird der Inhalt von eckigen Klammern immer als Adresse interpretiert.
    Wobei dort entweder nur ein einzelnes Register als Adressregister enthalten sein kann, oder optinal 2 Register kombiniert als Base+Indexregister und optinal zusammen mit dem Scaling(Index*Scale coefficient von 2, 4, oder 😎 und wieder optinal zusammen mit einem Displacement kombiniert werden können.

    h) mov al,[EDX+ECX*8+8200h]

    Adresse = DS:EDX+ECX8+8200h
    Adresse ergibt sich aus Segment-Adresse im DS-Descriptor/ oder DS-Segment-Registers
    +dem Inhalt von ECX
    8
    +Inhalt von EDX
    +8200h
    Von dieser Adresse werden 8 Bits(ein Byte) in das AL-Register geladen.

    d) hier wird das EBP-Register als Adrssregister verwendet welches genauso wie das ESP-Register defaultmäßig zum SS-Segment zugeordnet ist.
    (Alle anderen verwendbaren Adressregister werden defaultmäßig zum DS-Segment zugeordnet. Wenn EBP oder ESP als Adressregister alleine oder zusammen mit anderen Adressregister verwendet werden, dann SS-Segment.)

    Aus den folgenden Tabellen zur Bildung eines Postbytes/Mod R/M-Bytes ergeben sich die verschiedenen Adressierungsmöglichkeiten die wir verwenden können.
    (Betrachtet aus dem 16 bit address mode, wo das D-flag nicht gesetzt ist
    und wofür eine 32 bit-Adresse ein Address-override-prefix benötigt.)

    Instruction Prefix                0 or 1 Byte
    Address-Size Prefix               0 or 1 Byte
    Operand-Size Prefix               0 or 1 Byte
    Segment Prefix                    0 or 1 Byte
    Opcode                            1 or 2 Byte
    Mod R/M (Postbyte)                0 or 1 Byte
    SIB, Scale Index Base (386+)      0 or 1 Byte
    Displacement                      0, 1, 2 or 4 Byte (4 only 386+)
    Immediate                         0, 1, 2 or 4 Byte (4 only 386+)
    
    Format of Postbyte(Mod R/M from Intel-Manual)
    ------------------------------------------
    MM RRR MMM
    
    MM  - Memeory addressing mode
    RRR - Register operand address
    MMM - Memoy operand address
    
    RRR Register Names
    Filds  8bit  16bit  32bit
    000    AL     AX     EAX
    001    CL     CX     ECX
    010    DL     DX     EDX
    011    Bl     BX     EBX
    100    AH     SP     ESP
    101    CH     BP     EBP
    110    DH     SI     ESI
    111    BH     DI     EDI
    
    ---
    
    16bit memory (No 32 bit memory address prefix)
    MMM   Default MM Field
    Field Sreg     00        01          10             11=MMM is reg
    000   DS       [BX+SI]   [BX+SI+o8]  [BX+SI+o16]
    001   DS       [BX+DI]   [BX+DI+o8]  [BX+DI+o16]
    010   SS       [BP+SI]   [BP+SI+o8]  [BP+SI+o16]
    011   SS       [BP+DI]   [BP+DI+o8]  [BP+DI+o16]
    100   DS       [SI]      [SI+o8]     [SI+o16]
    101   DS       [DI]      [DI+o8]     [SI+o16]
    110   SS       [o16]     [BP+o8]     [BP+o16]
    111   DS       [BX]      [BX+o8]     [BX+o16]
    Note: MMM=110,MM=0 Default Sreg is DS !!!!
    
    32bit memory (Has 67h 32 bit memory address prefix)
    MMM   Default MM Field
    Field Sreg     00        01          10             11=MMM is reg
    000   DS       [EAX]     [EAX+o8]    [EAX+o32]
    001   DS       [ECX]     [ECX+o8]    [ECX+o32]
    010   DS       [EDX]     [EDX+o8]    [EDX+o32]
    011   DS       [EBX]     [EBX+o8]    [EBX+o32]
    100   SIB      [SIB]     [SIB+o8]    [SIB+o32]
    101   SS       [o32]     [EBP+o8]    [EBP+o32]
    110   DS       [ESI]     [ESI+o8]    [ESI+o32]
    111   DS       [EDI]     [EDI+o8]    [EDI+o32]
    Note: MMM=110,MM=0 Default Sreg is DS !!!!
    
    ---
    
    SIB is (Scale/Base/Index)
    SS BBB III
    Note: SIB address calculated as:
    <sib address>=<Base>+<Index>*(2^(Scale))
    
    Fild   Default Base
    BBB    Sreg    Register   Note
    000    DS      EAX
    001    DS      ECX
    010    DS      EDX
    011    DS      EBX
    100    SS      ESP
    101    DS      o32        if MM=00 (Postbyte)
    SS     EBP        if MM<>00 (Postbyte)
    110    SS      ESI
    111    DS      EDI
    
    Fild  Index
    III   register   Note
    000   EAX
    001   ECX
    010   EDX
    011   EBX
    100              never Index SS can be 00
    101   EBP
    110   ESI
    111   EDI
    
    Fild Scale coefficient
    SS   =2^(SS)
    00   1
    01   2
    10   4
    11   8
    

    Dirk



  • Vielen Dank Dirk.

    Wir haben dies in der Uni nur sehr schlecht beigebracht bekommen, bin nicht der einzige, der diese Verständnisprobleme hat und bin Dankbar für jede Antwort.


Anmelden zum Antworten