Mathias hat geschrieben: ↑Di 11. Jul 2023, 14:08
Nixsager will, so wie es aussieht, Integer dort reinpacken.
Wollen nicht. Nur verstehe ich nicht wieso bei 'ES:[X]' eine Variabel anders behandelt wird als ein Register. Denn beiden beinhaltet einen Wert.
Ich habe jetzt nicht alle Register gezogen, denn so wie ich es jetzt verstanden habe, sind Register nicht einfach nur Variabeln die Daten beinhalten, sondern habe auch noch einen speziellen Status.
Ich habe jetzt den Code so geändert, wie ich ihn von der Seite i8086 verstanden habe,
Für das Schreiben nutze ich jetzt folgendes:
Code: Alles auswählen
MOV ES, SegmentValue {Zielsegment in das Register ES schreiben}
MOV DI, OffsetValue {Offset in das Register DI schreiben}
MOV DL, Value {Den Wert in das Register DL geschrieben}
MOV ES:[DI], DL {Den Inhalt des Register DL in die Adresse des Registers ES:[Offset] schreiben}
Für das Lesen nutze ich folgendes:
Code: Alles auswählen
MOV ES, SegmentValue {Zielseqment in das Register ES schreiben}
MOV SI, OffsetValue {Offset in das Register SI schreiben}
MOV DL, ES:[SI] {Den Inhalt der Adresse aus dem Register ES:[Offset] in das Register DL schreiben}
MOV TempValue, DL {Den Inhalt des Register DL in die Variabel schreiben}
Die Register A, B, C und D habe ich immer als Variabeln genutzt, um kurz Daten zwischenzulagern, oder für einen CMP-Befehl.
Aber ich glaube das mit 'MOV ES, XX' muss ich noch sauberer machen.
Ich kann dem Register ES, mit einem Register und einer Variabel nutzen, aber einen Wert kann ich nicht zuweisen.
So wie ich das jetzt sehe, ist es besser Variabeln und Werte erstemal einem anderen Register zuweisen, und das Register dann dem ES-Register zuweisen.
Also das es am Ende so aussieht:
Code: Alles auswählen
MOV DX, SegmentValue {Zielsegment in das Register DX schreiben}
MOV ES, DX {Den Wert des Register DX in das Register ES schreiben}
MOV DI, OffsetValue {Offset in das Register DI schreiben}
MOV DL, Value {Den Wert in das Register DL geschrieben}
MOV ES:[DI], DL {Den Inhalt des Register DL in die Adresse des Registers ES:[Offset] schreiben}
siro hat geschrieben: ↑Di 11. Jul 2023, 14:22
Eigentlich liegen die immer auf graden Adresse fällt mir grade ein. Also eher 60h und 61h für die erste Variable und dann die folgenden...
Wenn er oben drüber noch andere Variablen definiert, muss er sicherlich auch seine Subtraktionswerte entsprechend ändern.
Der Witz ist, die Subtraktionswerte waren vorher andere. Ich hatte den Code geändert um zu testen, und habe es rückgängig gemacht, und dann musste ich andere Werte nehmen.
Danke für eure Codeschnippsel, aber die verwirren mich leider.
@siro
Was ist die Aufgabe deines Codes?
@Mathias
Das mit dem Offset-Befehl muss ich noch ausprobieren. Ich verstehe den Sinn nicht dahinter,
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!