Montaj - Değişkenler
NASM, çeşitli define directivesdeğişkenler için depolama alanı ayırmak için. Define assembler direktifi, depolama alanı tahsisi için kullanılır. Bir veya daha fazla baytı ayırmak ve başlatmak için kullanılabilir.
İlklendirilmiş Veriler için Depolama Alanı Tahsis Etme
Başlatılan veriler için depolama ayırma ifadesi sözdizimi şöyledir:
[variable-name] define-directive initial-value [,initial-value]...
Nerede, değişken adı her depolama alanı için tanımlayıcıdır. Derleyici, veri segmentinde tanımlanan her değişken adı için bir ofset değeri ilişkilendirir.
Tanımlama yönergesinin beş temel biçimi vardır -
Direktif | Amaç | Depolama alanı |
---|---|---|
DB | Bayt Tanımla | 1 bayt ayırır |
DW | Kelime Tanımla | 2 bayt ayırır |
DD | Doubleword tanımlayın | 4 bayt ayırır |
DQ | Quadword tanımlayın | 8 bayt ayırır |
DT | On Bayt Tanımla | 10 bayt ayırır |
Aşağıda, define yönergelerinin kullanımına ilişkin bazı örnekler verilmiştir -
choice DB 'y'
number DW 12345
neg_number DW -12345
big_number DQ 123456789
real_number1 DD 1.234
real_number2 DQ 123.456
Lütfen unutmayın -
Her karakter baytı, ASCII değeri olarak onaltılık olarak saklanır.
Her ondalık değer otomatik olarak 16 bitlik ikili eşdeğerine dönüştürülür ve onaltılık bir sayı olarak saklanır.
İşlemci, küçük endian bayt sırasını kullanır.
Negatif sayılar, 2'nin tümleyen gösterimine dönüştürülür.
Kısa ve uzun kayan noktalı sayılar sırasıyla 32 veya 64 bit kullanılarak temsil edilir.
Aşağıdaki program, define yönergesinin kullanımını göstermektedir -
section .text
global _start ;must be declared for linker (gcc)
_start: ;tell linker entry point
mov edx,1 ;message length
mov ecx,choice ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
choice DB 'y'
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
y
İlklendirilmemiş Veriler için Depolama Alanı Tahsis Etme
Rezerv direktifleri, başlatılmamış veriler için yer ayırmak için kullanılır. Rezerv direktifleri, rezerve edilecek alan birimlerinin sayısını belirten tek bir işlenen alır. Her bir tanımlama yönergesinin ilgili bir yedek yönergesi vardır.
Rezerv direktifinin beş temel biçimi vardır -
Direktif | Amaç |
---|---|
RESB | Bayt ayır |
RESW | Bir Kelime Rezerve Et |
RESD | Doubleword ayırtın |
RESQ | Bir Quadword ayırtın |
DİNLENME | On Bayt Ayırtın |
Çoklu Tanımlar
Bir programda birden çok veri tanımlama ifadesine sahip olabilirsiniz. Örneğin -
choice DB 'Y' ;ASCII of y = 79H
number1 DW 12345 ;12345D = 3039H
number2 DD 12345679 ;123456789D = 75BCD15H
Birleştirici, birden çok değişken tanımı için bitişik bellek ayırır.
Çoklu İlklendirmeler
TIMES yönergesi, aynı değere birden çok başlatmaya izin verir. Örneğin, 9 boyutunda işaretler adlı bir dizi, aşağıdaki ifade kullanılarak tanımlanabilir ve sıfır olarak başlatılabilir -
marks TIMES 9 DW 0
TIMES yönergesi, dizileri ve tabloları tanımlamada kullanışlıdır. Aşağıdaki program ekranda 9 yıldız işareti gösterir -
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,9 ;message length
mov ecx, stars ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
stars times 9 db '*'
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
*********