V bob Assembler tilida dasturlash
Download 0.51 Mb. Pdf ko'rish
|
10-amaliy
- Bu sahifa navigatsiya:
- 5.4. Ozgarmaslar, ifodalar va direktivalar
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 ;; 501baytdan 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 f x= x2 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, UTF8 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.8e10 ;; 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling