Montaj - Sabitler
Sabitleri tanımlayan NASM tarafından sağlanan birkaç yönerge vardır. EQU direktifini önceki bölümlerde zaten kullandık. Özellikle üç yönergeyi tartışacağız -
- EQU
- %assign
- %define
EQU Direktifi
EQUyönergesi sabitleri tanımlamak için kullanılır. EQU direktifinin sözdizimi aşağıdaki gibidir -
CONSTANT_NAME EQU expression
Örneğin,
TOTAL_STUDENTS equ 50
Daha sonra bu sabit değeri kodunuzda kullanabilirsiniz, örneğin -
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS
Bir EQU ifadesinin işleneni bir ifade olabilir -
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
Yukarıdaki kod segmenti AREA'yı 200 olarak tanımlar.
Misal
Aşağıdaki örnek, EQU direktifinin kullanımını göstermektedir -
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
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Hello, programmers!
Welcome to the world of,
Linux assembly programming!
% Atama Yönergesi
%assignYönerge, EQU yönergesi gibi sayısal sabitleri tanımlamak için kullanılabilir. Bu yönerge yeniden tanımlamaya izin verir. Örneğin, TOTAL sabitini şu şekilde tanımlayabilirsiniz:
%assign TOTAL 10
Kodun ilerleyen kısımlarında, bunu şu şekilde yeniden tanımlayabilirsiniz:
%assign TOTAL 20
Bu yönerge büyük / küçük harfe duyarlıdır.
% Direktifi tanımlar
%defineyönerge hem sayısal hem de dizge sabitlerini tanımlamaya izin verir. Bu yönerge C'deki #define yönergesine benzer. Örneğin, sabit PTR'yi şu şekilde tanımlayabilirsiniz:
%define PTR [EBP+4]
Yukarıdaki kod, PTR'nin yerini [EBP + 4] ile değiştirir.
Bu yönerge ayrıca yeniden tanımlamaya izin verir ve büyük / küçük harfe duyarlıdır.