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.