Bilvosita registrli adreslash
Bunday adreslashda aniqlanayotgan operand xotiradan olinadi yoki jo’natiladi, adres esa komandada qat’iy belgilab qo’yilgan emas. Buning o’rniga adres registrda joylashadi. Bunday ishlatilgan adres ko’rsatkich deyiladi. Bu usulning yutug’i shundaki, xotiraga murojaat qilganda komandada to’liq adresni ko’rsatmaslik ham mumkin. Bundan tashqari, bir komandani turli ishlatishda turli xotira so’zlaridan foydalanish mumkin.
Turli xotira so’zlaridan foydalanish qanday foydali bo’lishini tushunish uchun 1024 ta elementli bir o’lchamli sonli massivni yig’indisini R1 registriga yozish misolini ko’ramiz. Bu sikldan tashqaridagi R2 registri massivni 1-elementini ko’rsatadi, R3 registri massivdan keyingi 1-adresni ko’rsatadi. Massiv 1024 ta 4 baytli butun sonlardan tashkil topadi. Agar massiv A dan boshlansa, massivdan keyingi adres A+4096 bo’ladi. Ushbu ishni bajaruvchi assembler dasturi slaydda
2 -slayd. Listing
Bu dasturda adreslashning bir necha usullari keltirilgan. Dastlabki 3 ta komanda birinchi operand uchun registrli adreslashni va ikkinchi operand uchun bevosita adreslashni bajaradi. (# belgili) Ikkinchi komanda R2 ga A ning qiymatini emas, uning adresini saqlaydi. Shu narsani assemblerga # belgisibildiradi. 3-komanda R3 ga massivdan keyingi birinchi so’zni yozadi.
Sikl tanasida birorta ham xotira adresi yo’q. 4-komandada registrli va bilvosita adreslash ishlatilgan. 5-komandada registrli va bevosita adreslash, 6-komandada ikki marta registrli adreslash ishltilgan.shunday qilib xotira adreslarini ishlatmasdan qisqa va tezkor ishlovchi sikl hosil bo’ldi. Bu programma Pentium II uchun mo’ljallangan.
Indeksli adreslash.
Ko’pincha xotiradagi so’zlarga ko’chirish orqali murojaat qilishga to’g’ri keladi. Xotiraga bunday uslubda, ya’ni rigistr va konstatnta ko’chirish orqali murojaat qilish indeksli adreslash deyiladi. Bunda lokal o’zgaruvchiga murojaat qilishda xotira yacheykasi ko’rsatkichi ishatiladi(a rasm)
3-slayd
Boshqacha usul ham mavjud. Xotira yacheykasi ko’rsatkichi komandada va ko’chirish registrda. Quyidagi misolda ko’ramiz. A va B bir o’lchamli 1024 elementli massiv mavjud. A va B massiv elementlari ko’paytmasidan nolga teng bo’lmagan birorta juftlik borligini aniqlash kerak. Birinchi variant A massiv adresini bir registrga, B massiv adresini ikkinchi registrga joylashtirib,keyin ularni ko’rib chiqish lozim. 5.1-listing
Bunday dasturning ishini mukammalshtirilgan holati quyidagicha
Bu yerda 4 ta registr zarur
R1 – yig’indi saqlanadi
R2 – massiv elementlarini ko’rib chiqishda qo’llaniladigan i indeksi
R3 – konstanta 4096. i ning eng kichik qiymati
R4 – har bir yig’indini saqlab turuvchi vaqtinchalik registr
Initsializatsiyadan keyin 6 satrli sikl boshlanadi. LOOP dan keyingi komanda Ai ni R4 ga yuklaydi. Hisoblashda bu indeksli adreslash ishlatiladi. R2 registri va konstanta (A elementi adresi) qo’shiladi, natija xotiraga murojaatda ishlatiladi. Bu ikki qiymatning yig’indisi xotiraga yoziladi, registrga emas.
MOV R4,A(R2)
yozuvi indeksli registrlash ishlatilayotganligini ko’rsatadi, bunda A-ko’chirish, R2-registr. Agar A ni qiymati 124300 ga teng bo’lsa, mashina komandasi quyidagicha bo’ladi
Siklning birinchi aylanishida R2 registr 0 ga teng, bizga kerakli so’z 124300 adrsli yacheykada bor. Bu so’z R4 registrga yoziladi. Siklning keyingi bosqichida R2 4 ga teng bo’ladi, bizga kerakli so’z 124304 registrida joylashadi va h.k. bu yerda ko’chirish – xotira yacheykasi ko’rsatkichi, registr qiymati esa butun son bo’lib, hisoblashlar jarayonida o’zgarib turadi. Ishni bunday tashkil qilinishi komandadagi ko’chirish maydoni adresni saqlash uchun tegishlicha katta bo’lishini talab qiladi. Shunday bo’lsa ham bu usul ko’pincha eng samarali deb topiladi.
Do'stlaringiz bilan baham: |