Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Assembler, was bedeutet $

  Alt 4. Jan 2006, 13:42
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:
Code:
MiniArray DB 32 DUP(?)

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.
  Mit Zitat antworten Zitat