Kommentare

Definition

Kommentare sind Beschreibungen des Codes. Sie werden vom Assembler ignoriert und haben keinen weiteren Einfluss auf das Programm. Sie werden beim Assemblieren einfach verworfen und landen auch nicht in der Binärdatei.

Gründe

Wenn Kommentare keinerlei Einfluss auf die Ausführung haben, wieso werden sie dann als so wichtig angesehen? Das hat mehrere Gründe.
Für andere Programmierer ist die Absicht des Autors oft nicht offensichtlich. Kommentare helfen dabei, Code für andere Programmierer verständlich zu machen. Da sich Projekte oft über mehrere Jahre strecken, dienen Kommentare aber auch dazu seinen eigenen Code wieder zu verstehen. Sie helfen also dabei ein Programm wart- und erweiterbar zu halten.

Syntax

Einzeilige Kommentare

Einzeilige Kommentare werden mit einem Semikolon gekennzeichnet. Wie der Name schon sagt enden sie mit einem Zeilenumbruch.

mov rax, 4                 ; Sycall-Nummer für write()
mov rbx, 1                 ; Nach stdout schreiben
mov rcx, MyString          ; Auszugebenden String festlegen
mov rdx, MyStringLength    ; Länge des Strings angeben

Mehrzeilige Kommentare

Da die obige Methode bei Block-Kommentaren relativ aufwendig ist, gibt es auch die Möglichkeit Kommentare über mehrere Zeilen zu verteilen, ohne jedes Mal den Semikolon zu schreiben. Dies geschieht mit den Makros %comment und %endcomment.

%comment
  Ruft den Syscall "write()" auf, um
  "MyString" auf die Standardausgabe
  zu schreiben.
%endcomment
mov rax, 4
mov rbx, 1
mov rcx, MyString
mov rdx, MyStringLength

Einzeilige und mehrzeilige Kommentare mischen

Natürlich können einzeilige und mehrzeilige Kommentare auch beliebig vermischt werden.

%comment
  Ruft den Syscall "write()" auf, um
  "MyString" auf die Standardausgabe
  zu schreiben.
%endcomment
mov rax, 4
mov rbx, 1
mov rcx, MyString
mov rdx, MyStringLength   ; Newline wird nicht ausgegeben!

Sinnvoll kommentieren

Einige werden sich jetzt denken: „Je mehr Kommentare, desto besser!“. Die Menge an Kommentaren sagt aber nichts über die Qualität der Dokumentation aus. Sehen wir uns folgendes Beispiel an:

mov rax, 4                 ; rax auf 4 setzen
mov rbx, 1                 ; rbx auf 1 setzen
mov rcx, MyString          ; rcx auf MyString setzen
mov rdx, MyStringLength    ; rdx auf MyStringLength setzen

Die obigen Kommentare sagen eigentlich nichts aus. Sie beschreiben das, was jeder Programmierer mit Assembler-Kenntnissen sowieso auf den ersten Blick sieht. Es sollte beschrieben werden, mit welcher Absicht die Anweisungen ausgeführt werden und was sie bedeuten.
Viel sinnvoller wäre es wie oben gezeigt:

mov rax, 4                 ; Sycall-Nummer für write()
mov rbx, 1                 ; Nach stdout schreiben
mov rcx, MyString          ; Auszugebenden String festlegen
mov rdx, MyStringLength    ; Länge des Strings angeben

bzw. mit mehrzeiligen Kommentaren:

%comment
  Ruft den Syscall "write()" auf, um
  "MyString" auf die Standardausgabe
  zu schreiben.
%endcomment
mov rax, 4
mov rbx, 1
mov rcx, MyString
mov rdx, MyStringLength

Ob man zeilen- oder blockweise Kommentiert ist Geschmackssache und jedem selbst überlassen. Durch die sinnvolle Kommentierung des Codes kann er sogar von Programmierern verstanden werden, die Assembler nicht beherrschen.