Bosh sahifa Wiki Instruction Encoding

Instruction Encoding

Instruction Encoding — assemblerda yozilgan protsessor buyrug‘ini mashina o‘qiydigan bitlar ketma-ketligiga moslashtirish qoidalari. Kodlash har bir mnemonic, registr, doimiy qiymat va adreslash usuli uchun aniq bit ko‘rinishini belgilaydi. Natijada bir xil ISA uchun yaratilgan kompilyator kodi turli mos protsessorlarda bir xil me’moriy ma’noda bajariladi.

Kodlash jarayoni

Assembler avval buyruq variantini tanlaydi. Masalan, doimiy operand kichik bo‘lsa ixcham immediate shakl, katta bo‘lsa bir necha buyruqli ketma-ketlik kerak bo‘lishi mumkin. So‘ng opcode va operand maydonlari Instruction Format talabiga ko‘ra joylashtiriladi. Belgili qiymat belgilangan kenglikka sig‘ishi, registr raqami mavjud diapazonda bo‘lishi va talab qilingan tekislanish bajarilishi tekshiriladi.

Quyidagi mavhum yozuv bitta natijani ifodalaydi:

ADD r3, r1, r2

Uning bitlari arxitekturaga bog‘liq. Bitta ISA r3ni alohida natija maydoniga yozishi, boshqasi esa bir operandni ham manba, ham natija sifatida kodlashi mumkin. Shuning uchun mashina kodini faqat mnemonic nomidan chiqarib bo‘lmaydi.

Doimiylar va manzillar

Immediate qiymat buyruq maydonidan keng bo‘lsa, assembler uni qismlarga ajratadi yoki konstantalar jadvalidan yuklaydi. Tarmoqlanish manzili ko‘pincha joriy buyruqqa nisbatan siljish sifatida kodlanadi. Bunday nisbiy kod ko‘chiriladigan dasturlar uchun qulay, ammo nishon diapazondan tashqarida bo‘lsa, linker uzoq o‘tish ketma-ketligini yaratishi mumkin.

Obyekt fayldagi tashqi belgi manzili yig‘ish paytida noma’lum bo‘ladi. Assembler relokatsiya yozuvini qoldiradi; linker bo‘limlar joylashgach tegishli bitlarni to‘ldiradi. Relokatsiya turi maydonning kengligi, nisbiy yoki mutlaq ekanini va qiymat qanday siljitilishini ko‘rsatadi.

Kanonik va noqonuniy ko‘rinishlar

Ayrim ISAlarda bir semantik buyruqning bir nechta kodlanishi mavjud. Assembler odatda eng qisqa yoki kanonik shaklni tanlaydi. Dekoder esa spetsifikatsiya ruxsat bergan barcha ko‘rinishni tanishi mumkin. Rezerv qilingan bitlar belgilangan qiymatda bo‘lmasa, buyruq noqonuniy deb qaraladi; bu kelajakda yangi kengaytmani xavfsiz joriy etishga joy qoldiradi.

O‘zgaruvchan uzunlikdagi kodda prefikslar operand kengligi, registrlar to‘plami yoki adreslashni o‘zgartiradi. Prefikslarning tartibi va maksimal buyruq uzunligi ham kodlash qoidasi hisoblanadi. Noto‘g‘ri chegara keyingi barcha baytlarni boshqa buyruq sifatida talqin qilishga olib kelishi mumkin.

Dasturiy vositalardagi ahamiyati

Kompilyator kod generatori tezlik va hajm orasida kodlash variantini tanlaydi. Disassembler teskari amalni bajaradi, ammo belgi nomlari yo‘qolgan bo‘lsa faqat adres va registrlarni ko‘rsatadi. JIT kompilyator yoziladigan xotiraga kod chiqarishda ISA, baytlar tartibi, kesh uyg‘unligi va bajarish ruxsatlarini ham hisobga oladi.

Kodlash sintaktik bit xaritasi bo‘lsa, buyruq semantikasi uning kuzatiladigan ta’siridir. Birini bilish ikkinchisini avtomatik bermaydi; to‘liq ISA spetsifikatsiyasi ikkalasini ham belgilaydi.

Baytlar tartibi masalasi kod va ma’lumotda bir xil ko‘rinmasligi mumkin. ISA buyruq oqimining bayt tartibini aniq belgilaydi, obyekt formati esa ko‘p baytli relokatsiya qiymatini qanday saqlashni qo‘shadi. Tarmoqdan olingan tasodifiy baytlarni mashina kodi deb bajarish mumkin emas: sahifa ruxsati, ishonch tekshiruvi va to‘g‘ri kod chegarasi kerak. Kodlashni fuzz sinovi noqonuniy kombinatsiyalar aniq rad etilishini va assembler-disassembler aylanishi kanonik natija berishini tekshiradi.

Assembler diagnostikasi sig‘maydigan immediate yoki noto‘g‘ri registrni jim qisqartirmasligi kerak. Aniq xato xabari dasturchini boshqa kodlash variantini tanlashga majbur qiladi va yuqori bitlarning tasodifiy yo‘qolishi sababli paydo bo‘ladigan nozik xatoni oldini oladi.

Bog‘liq tushunchalar

machine code, assembler, opcode, relocation, immediate operand, instruction format