Uslubiy ko’rstamalar Assemblerda o’zgaruvchilarni e’lon qilish


Download 24.85 Kb.
Sana23.09.2023
Hajmi24.85 Kb.
#1686522
Bog'liq
2-amaliy mashg\'ulot


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.

  1. ;; Ushbu dastur berilgan ikkita sonni qabul qilib

  2. ;; ularning yig'indisini hisoblab

  3. ;; natijani chop etadi.

  4. ;;

  5. ;; O'zgaruvchilar :

  6. ;; a,b-2 ta qo'shiluvchi, eax-yig'indi


  7. %include "nasm-io.inc"

  8. section .bss

  9. a resd 1

  10. b resd 1

  11. section .text

  12. global _main

  13. _main:

  14. chop_et 'Ikkita son kiririting:'

  15. qabul_qil '%i %i',a,b

  16. mov eax,[a] ;; eax=a

  17. add eax,[b] ;; eax=eax+b

  18. chop_et 'Natija: %i+%i=%i ',[a],[b],eax

  19. 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