Assembly language — protsessorning mashina ko‘rsatmalarini odam o‘qishi mumkin bo‘lgan mnemonik nomlar, operandlar va belgilar orqali ifodalovchi past darajali dasturlash tilidir. Har bir assembler tili muayyan instruction set architecture bilan chambarchas bog‘liq. Assembler dasturi bu matnni obyekt yoki mashina kodiga aylantiradi.
Ko‘rsatmalar va operandlar
Mnemonik ko‘rsatma amal turini bildiradi: ma’lumot ko‘chirish, arifmetika, mantiq, taqqoslash yoki tarmoqlanish shular jumlasidandir. Operand registr, darhol berilgan son, xotira manzili yoki label bo‘lishi mumkin. Bir ISA uchun ham assembler sintaksislari farq qilishi mumkin; operand tartibi, registr yozilishi va xotira manzilini ifodalash vositaga bog‘liq.
Label kod yoki ma’lumot joyiga ramziy nom beradi. Dasturchi mutlaq bayt manzilini hisoblamaydi; assembler symbol va relocation yozuvlarini yaratib, yakuniy joylashuvni linkerga qoldiradi. Direktivalar protsessor bajaradigan ko‘rsatma emas, assemblerga bo‘lim, hizalanish, konstanta, eksport qilinadigan symbol yoki boshlang‘ich ma’lumot haqida ko‘rsatma beradi.
Funksiya va ABI
Assembly funksiyasi boshqa til kodi bilan ishlashi uchun platforma ABI’siga mos bo‘ladi. Argumentlar qaysi registrlarda uzatilishi, qaytish qiymati qayerda berilishi, qaysi registrlarni chaqiriluvchi saqlashi va stack qanday hizalanishi calling convention bilan belgilanadi. Funksiya stack frame yaratishi, lokal joy ajratishi va qaytishda stack holatini to‘liq tiklashi kerak.
Noto‘g‘ri saqlangan registr yoki hizalanmagan stack xatosi darhol ko‘rinmasligi mumkin; u boshqa funksiya chaqirilganda yoki optimizatsiya darajasi o‘zgarganda namoyon bo‘ladi. Unwind va debug ma’lumoti istisno qayta ishlash hamda stack trace uchun kerak bo‘lishi mumkin. Shu sababli compiler yaratgan assemblyni o‘rganish ABI tafsilotlarini tushunishda foydali.
Qo‘llanish sohalari
Operatsion tizimning ishga tushish kodi, kontekst almashtirish, interrupt kirish nuqtasi va ayrim qurilma drayverlari apparat ko‘rsatmalarini bevosita nazorat qilish uchun assembly ishlatadi. Kriptografiya, signalni qayta ishlash va multimedia kutubxonalarida muhim issiq qismlar maxsus SIMD ko‘rsatmalari bilan yozilishi mumkin. Embedded tizimda aniq vaqt yoki kod hajmi talabi ham sabab bo‘ladi.
Ko‘p dastur uchun zamonaviy optimallashtiruvchi kompilyator yuqori darajali koddan sifatli mashina kodi yaratadi. Qo‘lda assembly portativlikni pasaytiradi, xizmat ko‘rsatishni qiyinlashtiradi va nozik xavfsizlik xatolarini oshiradi. Uning foydasi benchmark va profiler bilan isbotlanadi, turli protsessor imkoniyatlari uchun esa fallback yo‘l saqlanadi.
Debugger registrlar, flaglar va ko‘rsatma manzillarini ko‘rsatadi; disassembler mashina baytlarini assembly ko‘rinishiga qaytaradi. Bu vositalar crash, kompilyator chiqishi va zararli kodni tahlil qilishda ishlatiladi. Assembly manbasi mashina kodiga juda yaqin bo‘lsa-da, makro, pseudo-instruction va linker o‘zgartirishlari sabab ular doim birga-bir mos kelmaydi.
Makro va pseudo-ko‘rsatmalar
Assembler makrosi takroriy matnni parametrlar asosida kengaytiradi, lekin u runtime funksiyasi emas va har ishlatilgan joyda kod hajmini oshirishi mumkin. Pseudo-instruction dasturchiga qulay bitta yozuv bo‘lib, assembler uni bir yoki bir nechta haqiqiy ko‘rsatmaga aylantiradi. Shu sababli manba qatorlari sonidan aniq mashina kodi hajmini chiqarib bo‘lmaydi. Listing va disassembly yakuniy kodni ko‘rsatadi. Shartli assembly platforma variantlarini boshqaradi, ammo haddan tashqari ko‘p shart bir xil algoritmning tekshirilmagan yo‘llarini yaratadi; har qo‘llab-quvvatlangan ISA varianti alohida build va testdan o‘tadi.
Inline assembly compiler register allocationi va optimizator bilan aniq constraintlar orqali kelishadi. Noto‘g‘ri clobber ro‘yxati compiler saqlanadi deb o‘ylagan qiymatni buzadi. Zarur imkon bo‘lsa intrinsic ko‘proq portativ va tahlil qilinadigan yechim beradi.
Bog‘liq tushunchalar
Machine code, ISA, Assembler, Register, ABI, Linker, Disassembler