V bob Assembler tilida dasturlash


Download 0.51 Mb.
Pdf ko'rish
bet4/5
Sana22.04.2023
Hajmi0.51 Mb.
#1382060
1   2   3   4   5
Bog'liq
10-amaliy

Standards of Coding – Xalqaro Kodlash mezoni Instituti) mezoni bo'yicha bitta belgi yoki harf 
uchun eng kamida bir bayt joy kerak bo'ladi. Masalan, o'nta harfdan iborat so'zni xotirada 
saqlash uchun o'n baytli o'zgaruvchi kerak bo'ladi. Misollar:
qator
db
'S', 'a', 'l', 'o', "m", 0
qator o'zgaruvchisi uchun 6 bayt joy ajratiladi va u yerga Salom so'zi yoziladi va oxirida nol 
soni qo'yiladi. Nolni doim qatorlar oxirida qo'yish lozim, bu qator so'ngini bildiradi.
qator2
db
"Salom",0
;; qator o'zgaruvchisi singari.
Haft
db
'G'
;; bir baytli Harf o'zgaruvchisiga
;; bosh G harfini boshlang'ich
;; qiymat qilib beramiz.
Assembler tilida "...", '...' yoki `...` turdagi qo'shtirnoqlar farqlanmaydi.
Ba'zida fayllarda saqlanayotgan katta-katta matnlar yoki musiqiy axborotlarni o'zgaruvchiga 
boshlang'ich qiymat sifatida o'zlashtirish ehtiyoji tug'uladi. INCBIN direktivasi shunday 
imkoniyatni bizga beradi. Unga boshlang'ich qiymat sifatida fayl nomi beriladi. Misollar:
Xat incbin "matn.txt" ;; Fayl to'liqligicha yuklanadi.
Musiqa incbin "madhiya.mp3",500 ;; Birinchi 500 bayt yuklanmaydi.
film incbin "Buxoro.mpg", 500, 10 ;; 501­baytdan boshlab faqat 10
;; bayt yukalanadi.
Xulosa qilib aytganda, biz mazkur mavzuda ajratilgan xotira sohalariga qanday qilib nishonlar 
qo'yilishini o'rganib oldik. Dasturning .data va .bss bo'limlarida ko'rib chiqqanimiz kabi e'lon 
qilingan nishonlar ommaviy deb ataladi. Ommaviy nishonlarga dastur yozilayotgan faylning 
istalgan yeridan murojaat qilish mumkin.
5.4. O'zgarmaslar, ifodalar va direktivalar
Dasturlashda o'zgaruvchilar bilan bir qatorda o'zgarmaslar ham keng qo'llaniladi. O'zgarmas 
bu dastur kodida to'g'ridan-to'g'ri yozib ketiladigan qiymat. Masalan, yuqorida ko'rib chiqqan 
x=
x2
4
matematik funksiyamizning o'zgarmas qiymatlari 2 va 4 hisoblanadi. Shunga 
o'xshab dasturning ham o'z o'zgarmaslari bo'ladi. Oldingi mavzuda biz o'zgarmaslar bilan ish 
ko'rib ulgurgan edik. X1 dd 85, 96 ni oladigan bo'lsak, bu yerda 85 va 96 o'zgarmas 
hisoblanadi.
O'zgarmaslar to'rt turga bo'linadi: sonli, belgili(harfli), qatorli va kasr sonli. Sonli 
o'zgarmaslar har xil sanoq tizimidagi oddiy tarzda beriladigan sonlardir. Agar son maxsus 
qo'shimchalarsiz berilsa NASM ularni o'nli son sifatida qabul qiladi. Son ma'lum bir sanoq 
tizimiga tegishliligini bildirish uchun son oxirida quyidagi qo'shimchalardan birini qo'shish kerak 
bo'ladi: H, Q yoki O, B. Ular mos ravishda son o'n oltilik, sakkizlik va ikkilik sanoq tizimida 
ekanligini NASMga bildiradi. O'n oltilik son 0x old qo'shimchasi orqali ham berilishi mumkin. 
Ammo, bir narsani unutmaslik kerakki, o'n oltilik son oxirida H qo'shimchasi bilan berilgan doim 
0....9 raqamlaridan birortasi bilan boshlanishi shart! Aks holda ba'zan o'n oltilik sonni nishon 
nomidan farqlash qiyin bo'ladi. Masalan, FADH ni oladigan bo'lsak, bu nishon nomi yoki 4013 
soni ekanligini anglash qiyin. Muammo ikki xil usulda yechilishi mumkin: 0FADH yoki 0xFAD.
49


Sonli o'zgarmas tarkibida pastki chiziq (_) ham ishlatilishi mumkin. Bunday imkoniyatning 
foydasi shuki, o'zgarmas qiymat uzunroq bo'lganda siz uni o'qish oson bo'lishi uchun bo'laklarga 
ajratish imkoniyatiga ega bo'lasiz. Misollar:
mov
eax , 456
;; o'nlik sanoq tizimidagi 456 soni.
mov
eax , 0fff4dh ;; o'n oltilik sanoq tizimidagi fff4d soni.
mov
eax , 4ah
;; o'n oltilik sanoq tizimidagi 4a soni.
mov
eax , 0xfff4d ;; o'n oltilik sanoq tizimidagi fff4d soni.
mov
eax , 567o
;; sakkizlik sanoq tizimidagi 567 soni.
mov
eax , 567q
;; sakkizlik sanoq tizimidagi 567 soni.
mov
eax , 110010100111b
;; ikkilik son.
mov
eax , 1100_1010_0111b
;; tushunarliroq ko'rinishda.
Yuqoridagi misollarning barchasida o'zgarmaslar EAX registriga yuklanadi.
Eslatma
: Boshlang'ich qiymat sifatida sonli o'zgarmaslar faqat DB, DW, DD va DQ 
direktivalariga berilishi mumkin.
Dasturlashda yana bir keng ishlatiladigan o'zgarmas turi belgili o'zgarmaslardir. Belgi 
deganda harf, raqam va tugmachalar taxtasidagi maxsus belgilar tushuniladi. Tugmachalar 
taxtasidagi barcha tugmalar raqamlab chiqilgan bo'lib, ular tizim uchun ma'lum bir sonni 
anglatadi. Bunday raqamlash usullarining ASCII, KOE-8, UTF-8 kabi har xil turlari mavjud bo'lib, 
ular 8 bitli mezon bo'yicha belgilarni son orqali ifodalashga xizmat qiladi. Sizning 
dasturlaringizda aynan qaysi raqamlash turi ishlatilayotganini operatsion tizimning sozlashlar 
bo'limidan aniqlashingiz mumkin.
Assemblerda sakkiz baytgacha bo'lgan belgilar ketma-ketligi belgili o'zgarmaslar hisoblanadi 
va ularga tizim oddiy son sifatida qaraydi. Lekin faqat dasturchi uchun ular belgi ko'rinishida 
namoyish etiladi. Misollar:
mov
ah , 't'
;; AH t, ya'ni AH 116


mov
al , '2'
;; AL 50

Misoldagi '2' belgili o'zgarmasni 2 soni bilan chalkashtirmaslik kerak. Tugmachalar 
taxtasidagi raqamlar 48 dan boshlab raqamlanadi va shunga ko'ra '2' ning tartib raqami 50 
bo'ladi. Ushbu buyruqlardan so'ng AX registrida 't2' belgili o'zgarmasi bo'ladi.
mov
ebx , 'Havo'
;; EBX 0x4861766F

Belgilarni son sifatida o'n oltilik sanoq tizimida ifodalash juda qulay, chunki barcha belgilarni 
ikki xonali o'n oltilik son bilan raqamlab chiqish mumkin. Shuning uchun misolda yuklanayotgan 
son sifatida o'n oltilik sonni keltirdik: H=0x48, a=0x61, v=0x76 va o=0x6F.
Biz belgili o'zgarmaslarni '...' qo'shtirnog'i bilan chegaralashga kelishib olamiz. Ammo, 
ba'zida o'zgarmas tarkibida qo'shtirnoq bo'lishi kabi istisnoli holatlar yuzaga keladi. Masalan, 
quyidagi so'zlarni olaylik: A'lo, Ra'no, "iPhone",... Bunday holatlarda chegaralovchi qo'shtirnoqlar 
sifatida o'zgarmas tarkibidagidan boshqacha bo'lganlarini qo'llash kifoya:
mov
eax , "A'lo"
;; EAX A'lo

mov
ax , "O'"
;; AX O'

mov
eax , '"AB"'
;; EAX "AB"

Yana shunday holatlar bo'ladiki, o'zgarmas tarkibida barcha qo'shtirnoq turlari qatnashadi. 
Masalan, "O'zbek" so'zini olaylik. Bunday holatlar uchun yuqoridagi masalaning ikkinchi xil 
yechimi mavjud. Qo'shtirnoqqa o'xshagan maxsus belgilar maxsus ma'noga ega emasligini 
50


assemblerga bildirish uchun belgi oldidan qiya chiziqni (\) ishlatsa bo'ladi: '\"O\'zbek\"'. 
Mazkur usul qo'llanganda o'zgarmas '...' qo'shtirnog'i bilan chegaralanishi zarur.
Quyida shunga o'xshagan maxsus belgilar berilgan:
\' tutuq belgisi (')
\" qo'shtirnoq (")
\` teskari tutuq (`)
\\ qiya chiziq (\)
\? so'roq belgisi (?)
\t satr boshi (ASCII 9)
\n yangi satrga o'tish (ASCII 10)
\r satr boshiga qaytish (ASCII 13)
\e ESCAPE (ASCII 27)
\u263a kulib turgan chehra, UTF­8 da
Qatorli o'zgarmas bu INCBIN yoki DX direktivalar oilasiga boshlang'ich qiymat qilib berilgan 
bir yoki undan ortiq belgili o'zgarmaslardan iborat bo'lgan ketma-ketlikdir. Biz qatorli 
o'zgarmaslarni "..." qo'shtirnog'i bilan chegaralashga kelishib olamiz. Misollar:
db
"Toshkent – O'zbekiston poytaxti",0
;; 0 qator so'nggi.
db
'Toshkent – O'zbekiston poytaxti\0'
;; Ikkinchi usuli.
db
"@#!%$^&()­={}",'\`\"\?\'\'
;; 17 baytli o'zgarmas.
Kasr sonli o'zgarmaslarga ortiqcha ta'rif berish shart bo'lmasa kerak. Assemblerda bu turdagi 
o'zgarmaslar faqat DB, DW, DD, DQ, DT va DO direktivalari yoki __float8__, 
__float16__, __float32__, __float64__, __float80m__, __float80e__, 
__float128l__ va __float128h__ maxsus buyruqlariga qiymat sifatida berilishi mumkin.
db
7.8
;; Chorak aniqlikdagi kasr son.
dw
7.8
;; Yarim aniqlikdagi kasr son.
dd
7.888888888
;; Birlamchi aniqlikdagi kasr son.
dd
7.888_888_888
;; Tushunarliroq ko'rinish.
dq
7.8e+10
;; 7.8 * 10
10
, qo'sh aniqlik.
dq
7.8e­10
;; 7.8 * 10
­10
.
Kasr sonlarni o'n oltilik sanoq tizimida ham yozish mumkin:
mov
eax , __float32__(0x7.8)
;; 32 bitli o'zgarmas sifatida.
mov
ax , __float16__(­0x7.8p+2)
;; ­0x7.8p+2=­0x7.8*2
2
=­0x1E.0
O'nlik sanoq tizimidagi kasr sonlarda ishlatilgan E belgisi o'n oltilik kasr sonlar bilan 
ishlatilishi mumkin emas. Aks holda 0xE soni bilan chalkashib ketishi mumkin. O'n oltilik kasr 
sonlar bilan ishlatiladigan P belgisini ham o'nlik o'zgarmaslar bilan ishlatib bo'lmaydi (Kasr sonlar 
haqida batafsilroq ma'lumot uchun «O'nli kasrlar» bobiga qarang).
Assembler dasturlash tilida ham boshqa tillarda bo'lgani kabi ifodalardan foydalanish 
imkoniyati bor. Mantiqiy yoki arifmetik amallar orqali bog'langan o'zgarmaslar ketma-ketligi 
ifoda deyiladi. NASM dasturni yig'ish chog'ida bu ifodalarni hisoblab, ularni o'zgarmas sonlarga 
almashtirib chiqadi, ya'ni bajaruvchi kodgacha ifodalar yetib bormaydi.
Quyida amallar birinchi bo'lib bajarilish tartibi bo'yicha kichikdan kattaga qarab berilgan:


Download 0.51 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling