Zitat von
mumu:
zu ( 1 ):
was bedeutet dieses $ und was mache ich mit MiniArray EQU $???
$ ist der aktuelle Programmcodezähler. Den Programmcodezähler kann man sich so vorstellen: Nachdem das Programm in den Speicher geladen ist, enhält $ den Wert 0 für das erste Byte des Programms im Speicher. 1 für das zweite Byte, 2 für das Dritte, ... Es handelt sich bei $ aber nicht um eine Variable sondern der Assembler ersetzt $ durch eine konstante Adresse. (Da die EQU Assembler-Anweisungen keine Befehle sind verändern sie den Programmcodezähler nicht.)
Zitat:
zu ( 2 ):
was macht ORG $ + 32
Hierdurch wird der aktuelle Programmcodezähler um 32 Bytes verschoben.
Nimmt man (1) und (2) zusammen, so wird MiniArray auf das erste Byte zeigen. Danach folgen 31 weitere Bytes (insg 32 Bytes), die ungenutzt sind und den Kommentaren zu folge für das MiniArray benutzt werden.
Man hätte das auch so schreiben können:
Zitat:
zu ( 3 ):
definiere ich hier ein Word (also 2 bytes) und iLow zeigt aufs erste Byte von i und iHigh aufs zweite Byte.
Was macht in diesem Fall $ genau?!
$ steht 2 Bytes hinter "i". Somit wird durch das abziehen von 2 bzw 1 das entsprechende Byte des Words adressiert.
Zitat:
zu ( 4 ):
was passiert hier? versteh ich irgendwie überhaupt nicht? BYTE PTR?
Da "Do" ein "Do EQU '$'" ist wird an die Adresse MiniArray+DI (DI ist ein CPU register und hat den Wert 2 erhalten), also MiniArray+2 das Zeichen '$' geschrieben, weil $ hier in einfachen Anführungsstrichen steht und somit
nicht die Bedeutung des Programmcodezählers hat.
Zitat:
zu ( 5 ):
was passiert hier?
Dabei handelt es sich nur um einen komplizierten Weg, um die Zahl 5 in das Word "i" zu schreiben.
Denn "DsDatenPointer DW OFFSET DsDatenPointer" erzeugt ein Word, dessen Inhalt der Offset dieses Words selbst ist. Und das ist wiederum der aktuelle Programmcodezähler $.
Und von diesem wird wieder DI abgezogen, womit wir wieder bei der Addresse von "i" landen. In in diesen wird dann die Zahl 5 gemovt.