Uslubiy ko’rstamalar Assemblerda o’zgaruvchilarni e’lon qilish
Download 24.85 Kb.
|
2-amaliy mashg\'ulot
- Bu sahifa navigatsiya:
- Dasturning .data va .bss bo’limlarida e’lon qilingan o’zgaruvchilar ommaviy deb ataladi. Ommaviy o’zgaruvchilarga dastur yozilayotgan faylning istalgan yeridan murojaat qilish mumkin.
- Qo’shish amali qoidasi: add
- Dastur tahlili.
2-amaliy mashg’ulot Mavzu: Assembler dasturlash tilida sodda masalalarni dasturlash va dastur kodini tahlil qilish Mashg’ulotning maqasdi: Assembler dasturlash tili konstruksiyasini tahlil qilish. Uslubiy ko’rstamalar 1. Assemblerda o’zgaruvchilarni e’lon qilish. Assembler tilida o’zgaruvchilarni e’lon qilishning ikki xil yo’li bor. Birinchisida faqat keraklicha joy ajratiladi va manzil o’zgaruvchiga o’zgartiriladi. Ikkinchisida esa joy ajratilishi bilan birga o’zgaruvchiga boshlang’ich qiymat ham beriladi, ya’ni o;zgaruvchi e’lon qilinishi bilan birga u aniqlanadi ham. Birinchi usulda e’lon qilinadigan o’zgaruvchilar dasturning .bss bo’limida yoziladi. Yozish qoidasida resx deriktivasidan foydalanamiz. x o’znida quyidagi jadvalda ko’rsatilgan harflardan biri bo’lishi mumkin: Bu harflar qancha xotira ajratishini ifodalaydi. Deriktiva -bu faqat assembler tushunadigan va umuman mashina tiliga o’girilmaydigan buyruqlar. Assembler resxni ko’rganda o’zgaruvchi uchun joy ajratilishi kerak ekanligini anglaydi. Qoidasi: ozgaruvchi_nomi resx n Bu yerda ozgaruvchi_nomi- bu dasturchi o’zgaruvchiga beradigan nom, resx-o’zgaruvchi o’lchami, n-natural son bo’lib, nechta x kattaligida joy ajratilishi kerakligini ko’rsatadi, ya’ni x*n bayt joy ajratiladi. Misollar: x resb 1 ;; Bir bayt joy ajratib uning manzilini x o’zgaruvchisida saqlaymiz. ;;x o’zgaruvchisi 0 dan 28-1 gacha, ya’ni 0 dan 255 gacha bo’lgan sonlarni sig’dira oladi. y resb 2 ;; y o’zgaruvchisi uchun ikki bayt joy ajratamiz, ya’ni u yerda 0 dan 216-1 gacha bo’lgan sonlarni sig’dira olamiz. kasr resq 1 ;;O’nli kasr uchun 8 bayt ajratiladi q2 reso 2 ;; q2 uchun 8 baytdan 16 bayt ajratiladi. katta_kasr rest 1 ;; katta kasr uchun 10 bayt joy ajratiladi. Ikkinchi usulda e’lon qilinganida o’zgaruvchilar dasturning .data bo’limida yoziladi. Bunda biz dx direktivasidan foydalanamiz. x harfi resx dagi kabi ma’noga ega. Qoidasi: ozgaruvchi_nomi dx boshlangich_qiymat Misollar: son db 0 ;; son o’zgaruvchisiga bir bayt joy ajratamiz va u yerga 0 sonini yozamiz a dd -789 ;; to’rt bayt joy ajratiladi Dasturning .data va .bss bo’limlarida e’lon qilingan o’zgaruvchilar ommaviy deb ataladi. Ommaviy o’zgaruvchilarga dastur yozilayotgan faylning istalgan yeridan murojaat qilish mumkin. 2. Asosiy amallar va ular qabul qiladigan qiymatlar. Assemblerda buyruqlar dasturning .text bo’limida yoziladi. Har bir buyruq alohida qatorda yoziladi. Buyruqdan so’ng boshqa dasturlash tillaridan farqli o’laroq hech qanday maxsus belgi qo’yilmaydi. .text bo’limidagi qator quyidagicha umumiy ko’rinishga ega: nishon: buyruq qiymatlar ;; izohlar Bu yerda buyruq dan boshqa hamma obyektlar majburiy bo’lmagan obyektlardir. mov buyrug’i yozilish qoidasi: mov maqsad , manba Bu yerda manba qiymati maqsadga nusxa qilib ko’chiriladi va maqsadning oldingi qiymati o’chib ketadi. manba va maqsad lar qanday obyektlar bo’lishi mumkinligi quyidagi jadvalda keltirilgan: Misollar: mov eax , 0 ;; eax registri qiymati 0 qilindi, eax=0 mov eax , edx ;; edx ning qiymati eax ga ko’chiriladi, edx=eax mov ecx , [x1] ;; o’zgaruvchining qiymatini ecx registrga ta’minlash mov bayt[son] , 5 ;; son o’zgaruvchisiga 5 ni ta’minlash, son=5 O’zgaruvchilar uchun aniqlovchilar: Qo’shish amali qoidasi: add maqsad , manba ;; maqsad=maqsad+manba Ayirish amali qoidasi: sub maqsad , manba ;; maqsad=maqsad-manab Masala. Berilgan ikkita sonni qabul qilib ularning yig’indisini chop etuvchi dastur tuzilsin. Dasturi listingi. ;; Ushbu dastur berilgan ikkita sonni qabul qilib ;; ularning yig'indisini hisoblab ;; natijani chop etadi. ;; ;; O'zgaruvchilar : ;; a,b-2 ta qo'shiluvchi, eax-yig'indi %include "nasm-io.inc" section .bss a resd 1 b resd 1 section .text global _main _main: chop_et 'Ikkita son kiririting:' qabul_qil '%i %i',a,b mov eax,[a] ;; eax=a add eax,[b] ;; eax=eax+b chop_et 'Natija: %i+%i=%i ',[a],[b],eax ret Dastur tahlili. Dasturning 1-6 qatorlarida ;; belgilari bilan izohlar yozilgan. 8-qatorda kiritish-chiqarish kutubxonasi %include direktivasi yordamida chaqirilmoqda. 9-11 qatorlarda ikkita a va b o’zagruvchilar e’lon qilinmoqda. 12-qatordan boshlab 20-qatorgacha dasturning bajariluvchi qismi yozilgan. 16-qatorda o’zgaruchilarga qiymat kiritish buyrug’i yozilgan. 17-qatorda eax registriga a o’zgaruvchining qiymati ta’minlanmoqda. 18-qatorda eax registrga b o’zgaruvchining qiymati qo’shib qo’yilmoqda . 19-qatorda natija ekranga chiqarilmoqda. 20-qator dasturning bajariluvchi main nishoni tugayotganini bildiruvchi ret buyrug’i yozilgan. Dasturimiz birinchi bo’lib ikkita son kiritishni so’raydi. So’ngra enter tugmasi bosilgandan keyin kiritilgan sonlarni yig’indisini %i+%i=%i formatda chiqarib beradi. Download 24.85 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling