🏠 » Tutorials » Assembler Tutorial » Assembler Makros

Makros in Assembler schreiben

Das Schreiben eines Makros in Assembler ist eine weitere Möglichkeit, die modulare Programmierung in Assemblersprache sicherzustellen.

Was genau ist ein Makro in Assembler?

Ein Makro ist eine Folge von Anweisungen, die einem Namen zugeordnet sind und überall im Programm verwendet werden können. In NASM werden Makros mit % macro- und %endmacro- Direktiven definiert. Das Makro beginnt mit der %macro-Direktive und endet mit der %endmacro-Direktive.

Makro Syntax verstehen und richtig anwenden

Die Syntax für die Makrodefinition in Assembler sieht wie folgt aus:

%macro macro_name number_of_params
<macro body>
%endmacro

Dabei gibt der Begriff number_of_params die Anzahl der Parameter an, macro_name gibt den Namen des Makros an.

Das Makro in Assembler wird aufgerufen, indem der Makroname zusammen mit den erforderlichen Parametern verwendet wird. Wenn eine Reihe von Anweisungen mehrmals in einem Programm verwendet werden muss, können die Anweisungen in einem Makro gekapselt verwendet werden, anstatt die Anweisungen wiederholt zu schreiben.

Zum Beispiel besteht ein sehr häufiger Bedarf für Assembler Programme darin, eine Zeichenkette auf dem Bildschirm auszugeben. Um eine Zeichenfolge anzuzeigen, werden die folgenden Befehle immer wieder verwendet:

mov	edx,len	    ;message length
mov	ecx,msg	    ;message to write
mov	ebx,1       ;file descriptor (stdout)
mov	eax,4       ;system call number (sys_write)
int	0x80        ;call kernel

Im Beispiel zur Anzeige einer Zeichenkette wurden die Register EAX, EBX, ECX und EDX vom Funktionsaufruf INT 80H verwendet. Jedes Mal, wenn die Ausgabe auf dem Bildschirm angezeigt werden muss, müssen diese Register auf dem Stack gespeichert, INT 80H aufgerufen und dann den ursprünglichen Wert der Register aus dem Stack wiederhergestellt werden.

Es kann also sehr nützlich sein, zwei Makros zum Speichern und Wiederherstellen von Daten zu schreiben.

Assembler Makro Beispiel schreiben

Das folgende Beispiel zeigt das Definieren und Verwenden von Makros in der Programmiersprache Assembler:

; Ein Makro mit zwei Parametern
   %macro schreibe_string 2 
      mov   eax, 4
      mov   ebx, 1
      mov   ecx, %1
      mov   edx, %2
      int   80h
   %endmacro
 
section	.text
   global _start            
    
_start:                     ;Einstiegspunkt definieren
   schreibe_string msg1, len1               
   schreibe_string msg2, len2    
   schreibe_string msg3, len3  
    
   mov eax,1                ;Systemaufruf
   int 0x80                 ;Aufruf des Kernels

section	.data
msg1 db	'Hallo Programmierer!',0xA,0xD 	
len1 equ $ - msg1			

msg2 db 'Willkommen in der Welt', 0xA,0xD 
len2 equ $- msg2 

msg3 db 'der Programmiersprache Assembler!'
len3 equ $- msg3

Wenn nun der Quelltext in Assembler kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Hallo Programmierer!
Willkommen in der Welt
der Programmiersprache Assembler!

Weiterführende Artikel

  • Dateiverwaltung

Bitte bewerten (1 - 5):