Montage - Konstanten

Es gibt mehrere von NASM bereitgestellte Anweisungen, die Konstanten definieren. Wir haben die EQU-Richtlinie bereits in früheren Kapiteln verwendet. Wir werden insbesondere drei Richtlinien diskutieren -

  • EQU
  • %assign
  • %define

Die EQU-Richtlinie

Das EQUDie Direktive wird zum Definieren von Konstanten verwendet. Die Syntax der EQU-Direktive lautet wie folgt:

CONSTANT_NAME EQU expression

Zum Beispiel,

TOTAL_STUDENTS equ 50

Sie können diesen konstanten Wert dann in Ihrem Code verwenden, wie z.

mov  ecx,  TOTAL_STUDENTS 
cmp  eax,  TOTAL_STUDENTS

Der Operand einer EQU-Anweisung kann ein Ausdruck sein -

LENGTH equ 20
WIDTH  equ 10
AREA   equ length * width

Das obige Codesegment würde AREA als 200 definieren.

Beispiel

Das folgende Beispiel zeigt die Verwendung der EQU-Direktive -

SYS_EXIT  equ 1
SYS_WRITE equ 4
STDIN     equ 0
STDOUT    equ 1
section	 .text
   global _start    ;must be declared for using gcc
	
_start:             ;tell linker entry point
   mov eax, SYS_WRITE         
   mov ebx, STDOUT         
   mov ecx, msg1         
   mov edx, len1 
   int 0x80                
	
   mov eax, SYS_WRITE         
   mov ebx, STDOUT         
   mov ecx, msg2         
   mov edx, len2 
   int 0x80 
	
   mov eax, SYS_WRITE         
   mov ebx, STDOUT         
   mov ecx, msg3         
   mov edx, len3 
   int 0x80
   
   mov eax,SYS_EXIT    ;system call number (sys_exit)
   int 0x80            ;call kernel

section	 .data
msg1 db	'Hello, programmers!',0xA,0xD 	
len1 equ $ - msg1			

msg2 db 'Welcome to the world of,', 0xA,0xD 
len2 equ $ - msg2 

msg3 db 'Linux assembly programming! '
len3 equ $- msg3

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

Hello, programmers!
Welcome to the world of,
Linux assembly programming!

Die% weisen Richtlinie zu

Das %assignDirektive kann verwendet werden, um numerische Konstanten wie die EQU-Direktive zu definieren. Diese Richtlinie ermöglicht eine Neudefinition. Beispielsweise können Sie die Konstante TOTAL als - definieren.

%assign TOTAL 10

Später im Code können Sie ihn neu definieren als -

%assign  TOTAL  20

Diese Richtlinie unterscheidet zwischen Groß- und Kleinschreibung.

Die% definieren Richtlinie

Das %defineDie Direktive ermöglicht das Definieren von numerischen und String-Konstanten. Diese Direktive ähnelt der #define in C. Beispielsweise können Sie die Konstante PTR als - definieren

%define PTR [EBP+4]

Der obige Code ersetzt PTR durch [EBP + 4].

Diese Richtlinie ermöglicht auch eine Neudefinition und unterscheidet zwischen Groß- und Kleinschreibung.