Majelis - Konstanta
Ada beberapa arahan yang disediakan oleh NASM yang mendefinisikan konstanta. Kami telah menggunakan direktif EQU di bab-bab sebelumnya. Kami secara khusus akan membahas tiga arahan -
- EQU
- %assign
- %define
Petunjuk EQU
Itu EQUdirektif digunakan untuk mendefinisikan konstanta. Sintaks dari direktif EQU adalah sebagai berikut -
CONSTANT_NAME EQU expression
Sebagai contoh,
TOTAL_STUDENTS equ 50
Anda kemudian dapat menggunakan nilai konstan ini dalam kode Anda, seperti -
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS
Operan pernyataan EQU bisa berupa ekspresi -
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
Segmen kode di atas akan mendefinisikan AREA sebagai 200.
Contoh
Contoh berikut mengilustrasikan penggunaan direktif EQU -
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
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Hello, programmers!
Welcome to the world of,
Linux assembly programming!
% Assign Directive
Itu %assigndirektif dapat digunakan untuk mendefinisikan konstanta numerik seperti direktif EQU. Arahan ini memungkinkan redefinisi. Misalnya, Anda dapat mendefinisikan TOTAL konstan sebagai -
%assign TOTAL 10
Nanti dalam kode, Anda dapat mendefinisikannya kembali sebagai -
%assign TOTAL 20
Petunjuk ini peka huruf besar / kecil.
% Mendefinisikan Petunjuk
Itu %definedirektif memungkinkan mendefinisikan konstanta numerik dan string. Direktif ini mirip dengan #define in C. Misalnya, Anda dapat mendefinisikan PTR konstan sebagai -
%define PTR [EBP+4]
Kode di atas menggantikan PTR dengan [EBP + 4].
Arahan ini juga memungkinkan redefinisi dan peka huruf besar / kecil.