Bitte um Überprüfung



  • Hallo,
    ich bitte um Überprüfung meines Programms.

    Die Aufgabenstellung lautet:

    Schreiben Sie ein Programmstück, welches eine Anzahl nicht zusammenhängender Speicher- zellen (Bytes) mit dem Wert Eins beschreibt. Die Adressen dieser Speicherzellen stehen als Tabelle aus Doppelworten im Speicher, die Anfangsadresse dieser Tabelle ist in EDI gegeben. Das Ende dieser Tabelle ist durch einen Eintrag mit dem Wert Null gekennzeichnet.

    Meine Überlegung:

    MOV AL,1
    m2: MOV ESI,[EDI]
        CMP ESI,0
        JNZ m1
        MOV [ESI],AL
        ADD EDI,4 ;(oder muss man hier ADD ESI,4 nehmen?)
        JMP m2
    m1: NOP
    

    Vielen Dank.



  • Patrick1990 schrieb:

    Hallo,
    ich bitte um Überprüfung meines Programms.

    Die Aufgabenstellung lautet:

    Schreiben Sie ein Programmstück, welches eine Anzahl nicht zusammenhängender Speicher- zellen (Bytes) mit dem Wert Eins beschreibt. Die Adressen dieser Speicherzellen stehen als Tabelle aus Doppelworten im Speicher, die Anfangsadresse dieser Tabelle ist in EDI gegeben. Das Ende dieser Tabelle ist durch einen Eintrag mit dem Wert Null gekennzeichnet.

    Meine Überlegung:

    MOV AL,1
    m2: MOV ESI,[EDI]
        CMP ESI,0
        JNZ m1
        MOV [ESI],AL
        ADD EDI,4 ;(oder muss man hier ADD ESI,4 nehmen?)
        JMP m2
    m1: NOP
    

    Vielen Dank.

    Das ist so schon richtig, weil die Bytes sich an beliebigen Stellen im Speicher befinden können und jede dieser Adressen davon jeweils einzelnd aus der Tabelle geholt werden muss, weil die Adressen nicht auf einen zusammhängenden Speicherbereich zeigen.

    Dazu ein Schema:

    EDI          EDI+4
    Adress-Tabelle: Adresse X, Adresse Y, ...
    
    Adresse X: Byte
    ....
    ...
    ..
    Adresse P: Byte
    Adresse Q: Byte
    Adresse R: Byte
    Adresse S: Byte
    Adresse T: Byte
    .....
    ...
    ..
    Adresse Y: Byte
    

    Dirk



  • also ist mein ADD EDI,4 korrekt?

    Ich habe es undeutlich in meinen Aufzeichnungen und dachte dort steht ADD ESI,4 aber das macht für mich keinen Sinn.



  • Patrick1990 schrieb:

    also ist mein ADD EDI,4 korrekt?

    ja genau....

    Ich habe es undeutlich in meinen Aufzeichnungen und dachte dort steht ADD ESI,4 aber das macht für mich keinen Sinn.

    ...weil ESI am Anfang der Runde doch eh wieder mit einer neuen Adresse gefüllt wird und um diese neue Adresse zu bekommen dafür müssen wir den Zeiger in EDI der auf unsere Tabelle zeigt erhöhen, um von dort die nächste Adresse holen zu können.

    ....

    Ein letzter Fehler:
    Allerdings bei "CMP ESI,0" wird das Zeroflag gesetzt, wenn ESI=0 ist.
    Andernfalls wird es gelöscht.
    Es müsste daher "JZ m1" oder "JZ short m1" sein, wenn es so als Abbruchbedingung für die Schleife verwendet werden soll.
    Als Gedankenhilfe: Anstelle von JZ oder JNZ, kann man auch JE und JNE verwenden, was so viel wie "jump equal" Wertübereinstimmung und "not equal" wenn der Wert nicht gleich des Vergleichswertes ist bedeutet.

    Dirk


Anmelden zum Antworten