a db 1 0 0 + 4 * 1 0 ; ; a = 1 4 0
b db 2 1 0 / 4 - 2 ;; b - 50
c dw -100 + !100 ; ; c = -100
d dd ~ llll_ 0 0 0 0 b ;; d = 0000.
k dq - 0 x7A / / -OxE ; ; k = 0x8
Ifodalarda kasr sonli o'zgarmaslar qatnashishi mumkin emas. Chunki NASM kasr sonlarni
hisoblay olmaydi. Shuning uchun ham ifodalarda bo'linma yaxlitlab olinadi. Masalan,
210/4=52.5 emas, balki 50 ga teng.
mov eax , 0000_0001b ≪
mov eax , 0000_0100b ≫
mov a l , 110b | 101b
mov a l , 110b & 101b
mov a l , 110b A 101b
; EAX 0 0 0 0 _ 0 1 0 0 b, x ≪ y = x * 2 y
; EAX ♦- 0 0 0 0 _ 0 0 0 1 b, x ≫ y = x / / 2 y
; AL 1 1 1 b
; AL ≪- 1 0 0 b
; AL ♦- 0 1 1 b
Ifodalarda qatnashishi mumkin bo'lgan yana bir maxsus belgi mayjud: $. Bu belgi o'zi
ishlatilayotgan dastur qatorining boshlanish offset manzilini beradi.
Ba'zida dastur davomida o'zgarmas qiymatlaml o'zimiz uchun belgilab olishimiz juda foydali
bo'ladi. Bunday imkoniyatni bizga equ direktivasi beradi:
belgilash_nomi
Masalan:
equ 2 5
equ ifoda
1 «Ishorali va Ishorasiz butun sonlar» mavzusiga qarang.
_ Shu yozuvdan so'ng dasturda_uzunlik-bu-25-sonini anqlatuvchi-kattalik-bo'ladi.-Bu yerda
hech qanday xotiradan joy ajratilmaydi. Faqat dasturning barcha u zu n lik uchraydigan joylari
assembler tomonidan 25 soniga almashtirib chiqiladi. O'zgaruychilami e'lon qilishdan farqli
o'laroq o'zgarmas kattaliklami bu usulda aniqlash dastuming istalgan bo'limida amalga oshirilishi
mumkin.
Assembler tilida ko'pincha qatorll qiymatlar bilan !shlaganda ularning uzunligini eslab qolish
talab etiladi. Shuning uchun qatorli o'zgaruvchilami e'lon qilganda, ularning uzunligini o'zgarmas
sifatida tezda belgllab qoVgan ma'qul.
qator , db "Salom", 0 : -
Do'stlaringiz bilan baham: |