Assembler tili
Assembler tili kompyuterning barcha funktsional birliklarining operatsion
tizim
bilan o'zaro ta'sirini yaxshiroq tushunishga imkon beradi. Assembler tili - bu
operatorlar va protsessor komandalari o'rtasida bir-birini yozishmalarga ega
maxsus
dasturiy tildir. Har bir protsessor turi yoki protsessorlarning butun oilasi
uchun
assembler tili mavjud, chunki assembler tili bo'yicha yo'riqnomalar mashina
yo'riqnomasi tizimi bilan bir-birini yozishmalarga ega bo'lishi kerak va
kompyuter
arxitekturasiga muvofiq bo'lishi kerak. Ushbu ma’ruzada 16 bitli 8086-88
Intel
protsessoriga oid buyruqlar ko'rsatmalarni o'z ichiga oladi. 8086-88
mikroprotsessorlari birinchi 640 KB (kilobayt) asosiy xotiraga (RAM) va
65536
baytlik kirish/chiqish manzil maydoniga ajratilgan 1 (MB) megabaytning
asosiy
manzil maydoni bilan ajralib turadi.
Assembler tilining manba kodini mashina ko'rsatmalariga o'zgartiradigan
dastur.
Assembler dasturlari juda samarali bo'lishi mumkin. Dastur qobiliyatlari va
qobiliyatlari teng bo'lgan dasturchilar tomonidan Assembler tilida ishlash
yuqori
darajadagi tilda yozilgan dasturdan ko'ra ixcham va tezroq dastur ishlab
chiqaradi. Bu
deyarli barcha kichik va o'rta dasturlar uchun amal qiladi. Assembler tili
dasturi juda
to'g'ri. Ushbu til dasturchining barcha apparat bilan bevosita ishlashiga imkon
berganligi sababli, assembler dasturi boshqa dasturlarda mavjud bo'lmagan
narsalarni
bajarishi mumkin.
Birlashtiruvchi til dasturini ishlab chiqish va disk raskadrovka qilish vaqt
talab
qiladigan bo'lsa-da, bu xotirada kam joy ajratadigan va asta-sekin
kompyuterlarda ham
tezkor tezlikka erishish imkonini beradigan kichik bajariladigan modullarga
olib
keladi. Assembler tili asosan dasturlarning individual segmentlarini (ish
tezligini
oshirish va uskunaga bevosita kirish), shuningdek alohida qurilmalarning
dasturlashtirilgan xotirasida saqlanadigan tizim dasturlarini yozish uchun
ishlatiladi.
Assembler tilining asosiy kamchiliklari, kompyuterning bir turiga
yoziladigan
dasturni boshqa komputer turlarida ishlatish mumkin emas, chunki har bir
kompyuter
oilasi uchun boshqa assembler tili ishlatiladi. Agar yaratiladigan dastur turli
xil
kompyuterlarda ishlatilsa, u yuqori darajadagi tillarda ishlab chiqilishi kerak
va u
kompyuter arxitekrurasining xususiyatlarini dasturiy ta'minotdan foydalanish
qulayligi
va portativ kodni olish uchun yashirishi kerak.
Assembler tili bir
dasturlash tili
ma'lum bir turdagi protsessor uchun mo'ljallangan past
darajali. Biz uni ishlab chiqarishimiz mumkin
yuqori darajadagi dasturlash tilidan
(masalan, C / C ++). Ammo biz ushbu tilda dasturlarni o'zimiz
ham yozishimiz mumkin.
Biz o'z navbatida assembler kodini assembler yordamida mashina kodiga
aylantirishimiz
mumkin.
Assembler - bu kompyuterni boshqaradigan va ko'rsatmalarni bitlar naqshiga
o'zgartiradigan dastur. Protsessor undan asosiy operatsiyalarni bajarish uchun
foydalanishi mumkin. Ba'zilar ushbu ko'rsatmalarni assembler tili deb atashadi,
boshqalari esa bu atamadan foydalanadilar assambleya tili .
Biz qayerda assemblerdan foydalanamiz?
Har bir kompyuterda kompyuterning arifmetik, mantiqiy va
nazorat ishlarini bajaradigan
protsessor mavjud.
Har bir protsessor oilasi har xil operatsiyalarni bajarish uchun o'ziga
xos ko'rsatmalarga
ega, masalan, klaviatura kiritish, ma'lumotni ekranda aks ettirish va boshqa har xil
vazifalarni bajarish. Ushbu ko'rsatmalar ketma-ketligini "mashina tiliga
oid ko'rsatmalar"
deymiz.
Protsessor faqat mashina tilidagi ko'rsatmalarni tushunadi, ular birlar va nollarning
ketma-ketligidir. Biroq, mashina tili juda tushunarsiz va murakkab bo'lib, dasturiy
ta'minotni ishlab chiqishda
foydalanish mumkin emas. Shunday qilib, assembler tili turli
xil ko'rsatmalarni ramziy kodda va tushunarli shaklda ifodalovchi ma'lum bir
protsessorlar oilasi uchun mo'ljallangan.
Assambleya tili - shakli va mazmuni bo'yicha mashina tiliga eng yaqin ramziy
dasturlash tili. O'rnatish tili quyidagi hollarda foydalidir:
Biz dasturimiz bosqichlarini baytgacha va hatto bit darajasiga qadar ehtiyotkorlik
bilan nazorat qilishimiz kerak.
COBOL, Java yoki C kabi boshqa ramziy dasturlash tillari bilan ta'minlanmagan
funktsiyalar uchun kichik dasturlarni yozishimiz kerak.
Assambleyer shunday ishlaydi
Kompyuterlar ma'lum bir asosiy ko'rsatmalar to'plami bilan ta'minlanadi, ular
kompyuter bajarishi mumkin bo'lgan asosiy operatsiyalarga mos keladi. Masalan,
"Load" iborasi protsessorning ketma-ket bitlarini protsessor xotirasidagi joydan
registr deb ataladigan maxsus omborga ko'chirilishiga olib keladi.
Dasturchi ushbu assembler ko'rsatmalaridan foydalangan holda dastur yozishi
mumkin.
Deb nomlanuvchi assambleyerlarning ushbu ketma-ketligi
manba kodi
yoki manba
dastur, keyinchalik dasturni boshlaganimizda assembler dasturida ko'rsatiladi.
Assembler dasturi har bir dastur yo'riqnomasini manba dasturida oladi va tegishli
bitli oqim yoki naqsh hosil qiladi (nollar qatori va ma'lum uzunlikdagi birliklar).
Assambleyer
dasturining chiqishi kirish manbai dasturiga nisbatan ob'ekt kodi yoki
ob'ekt dasturi deb ataladi. Ob'ekt dasturini tashkil etadigan nollar va bir qatorlar
qatori mashina kodi deb ham ataladi.
Keyin biz ob'ekt dasturini istalgan vaqtda ishga tushirishimiz mumkin.
Assambleya tili ko'rsatmalar yoki izohlarni ifodalovchi bayonotlardan iborat.
Yo'riqnomalar tilning ishchi qismi bo'lib, quyidagi uch guruhga bo'linadi:
Mashina uchun ko'rsatmalar.
Montajchi uchun ko'rsatmalar.
Ibratli ko'rsatmalar.
O'rnatish kodini qanday qo'llaymiz?
Ko'pgina kompilyatorlar manba kodini to'g'ridan-
to'g'ri mashina kodiga o'zgartirganligi
sababli yarating
dasturiy ta'minotni ishlab chiquvchilar
ko'pincha assembler tilidan
foydalanmasdan dasturlar. Ammo ba'zi hollarda biz dasturni aniq sozlash uchun
assembler kodidan foydalanishimiz mumkin. Masalan, dasturchi ma'lum bir
jarayonni
iloji boricha samarali ishlashiga ishonch hosil qilish uchun uni assembler tilida
yozishi
mumkin.
Assembler tillari protsessor arxitekturasiga qarab turlicha bo'lishiga qaramay, ular
ko'pincha tegishli ko'rsatmalar va operatorlarga ega. Quyida
x86 protsessorlarini qo'llab-
quvvatlaydigan ko'rsatmalarga ba'zi misollar keltirilgan.
MOV - ma'lumotlarni bir joydan boshqasiga ko'chirish.
ADD - ikkita qiymatni birga qo'shish.
SUB - bitta qiymatni boshqa qiymatdan ayirish.
PUSH - ma'lumotlarni to'plamga surish.
POP - to'plamdan olingan ma'lumotlar.
JMP - boshqa joyga o'tish.
INT - jarayonni to'xtatish.
3 va 4 raqamlarini qo'shish uchun quyidagi oddiy yig'ish kodidan foydalanishimiz
mumkin:
mov eax, 3 - "eax" registriga 3 yuklaydi.
mov ebx, 4 - "ebx" registrga 4 yuklaydi.
eax, ebx, ecx qo'shing - "eax" va "ebx" ni qo'shing va natijani (7)
"ecx" da saqlang.
Biroq, assemblerda dastur yozish juda
mashaqqatli jarayondir. Buning sababi shundaki,
har bir operatsiya juda oddiy darajada bajarilishi kerak. Kompyuter
dasturini yaratish
uchun hech qachon assembler kodidan foydalanishning hojati bo'lmasligi mumkin,
ammo
assambleyer tilini o'rganish ko'pincha informatika o'quv dasturining bir
qismidir, chunki
u protsessorlarning ishlash uslubi to'g'risida foydali ma'lumot beradi.
Assembler tilining afzalliklari
Ushbu asosiy tilni bilish sizni quyidagilar haqida xabardor qiladi:
Dasturlar OS, protsessor va BIOS bilan birgalikda ishlaydi.
Ma'lumotlar xotirada ko'rsatiladi.
Protsessor ko'rsatmalarni bajaradi.
Ma'lumotlarga ishlov berish.
Dastur tashqi qurilmalarga kirish huquqiga ega bo'ladi.
Assembler tilidan foydalanishning afzalliklari:
Kamroq xotira va bajarilish vaqtini talab qiladi.
Assembler apparatga tegishli murakkab vazifalarni sodda usulda iloji boricha
osonlashtiradi.
Vaqt tanqidiy ishlariga mos keladi.
Interfaol tartiblarini va boshqa xotira dasturlarini yozish uchun eng mos keladi.
Assembler tilini o'rganishimiz kerakmi?
Assambler tilini o'rganishimiz kerakmi, bizning ishimizga bog'liq. Ko'pgina ishlab
chiquvchilar uchun javob "yo'q".
Assembler tilini o'rganishning ikkita asosiy sababi bor: biz uni o'zimiz
ishlatishimiz
kerakligi yoki kompyuterlarni fundamental darajada tushunishni istaganimiz
uchun.
Amaliy nuqtai nazardan, faqat bir nechta muhandislar va kompyuter olimlari
assemblerlardan foydalanadilar.
Dasturiy ta'minot ishlab chiqaruvchilarning aksariyat qismi, shu jumladan deyarli b
archa
dasturlarni ishlab chiquvchilar
yuqori darajadagi dasturlash tillaridan foydalanadilar va
assembler kodisiz. Ammo biz assambler tilidan foydalanadigan ba'zi bir
aniq yo'nalishlar
quyidagilardir:
Operatsion tizimlar.
Mikrodastur.
Uskunalar dasturlari.
Dasturlash tillarini loyihalash.
Kompilyatorlarni loyihalash.
O'rnatilgan tizimlar
.
Uskuna dizayni.
Ilg'or
kriptografiya
.
Nazariy informatika.
Assamblerni o'rganishning yana bir sababi bu kompyuterning tubida nima
borligini
yaxshiroq anglashdir. (Shuning uchun deyarli barcha
IT mutaxassislari ushbu tilni o'quv
jarayonida o'rgatishadi.)
Agar siz kompyuterlarga sho'ng'ishni yaxshi ko'radigan va texnologiyaga
qiziqsangiz,
past darajadagi tizimlarni rivojlantirishda martaba haqida o'ylashingiz mumkin.
Assembler tili kodini yaratish
Kod generatori sintaksis analizatori va/yoki semantik analizatorning chiqishini quy
i
darajadagi kodga, masalan, assembler tiliga o'giradi.
Kompilyatorning birinchi qismi tahlil qiladi manba kodini dasturning ma'nosini o'z
ichiga olgan tuzilishga
aylantiradi. Bu struktura odatda tekshirilgan va dekodlangan
mavhum sintaksis daraxtidir. Bundan tashqari, dekodlash barcha identifikatorlar
tayinlanganligini bildirishini unutmang.
Ushbu strukturadan biz
mos keladigan kodni ham olishimiz mumkin hosil qilish boshqa
tilda, maqsadli tilda. Kod ishlab chiqaruvchisi shunday qiladi.
Ba'zi kompilyatorlar ikki marta ishlab chiqaradilar: avval SIL, LLVM
IR, HIR, MIR,
CIL va boshqalar
kabi "oraliq tilda" kod ishlab chiqaradilar. Keyin ular virtual mashina
kodi, assembler tili yoki mashina tili kabi to'g'ridan-
to'g'ri bajarishimiz mumkin bo'lgan
maqsadli tilda "haqiqiy" kod ishlab chiqarishni amalga oshiradilar.
Kod yaratish maqsadlari
Bular yaxshi kod ishlab chiqaruvchining uchta maqsadi:
U to'g'ri kodni ishlab chiqishi kerak.
Jeneratör samarali kod yaratishi kerak.
U samarali kod ishlab chiqishi kerak.
O'rganish uchun boshqa narsalar
Dasturni tayyorlash va ko'chirish sohasidagi yangi g'oya - a tushunchasi
virtual mashina
.
Masalan, Java dasturlash tili yordamida til ko'rsatmalari bayt kod
deb nomlanuvchi
mashina tilining umumiy shakliga tuzilgan bo'lib, uni virtual mashina
bajarishi mumkin,
bu kompyuterning aksariyat operatsiyalariga yaqin keladigan nazariy mashina
turi. Keyin
bayt kodi Java virtual mashinasiga oldindan yuklangan yoki o'rnatilgan har qanday
hisoblash platformasiga yuborilishi mumkin. Virtual mashina platformaning o'ziga
xos
ko'rsatmalari va boshqa xususiyatlarini biladi va Java bayt kodini ishga tushirishga
imkon beradi.
Ba'zi tillar mavjud, agar ular haqida biron bir narsani bilsak, biz ko'p narsani qila
olamiz.
Python va Ruby shunga o'xshashdir, biz ular haqida biron bir
foydali narsani qurish
uchun hafta oxiri etarlicha ma'lumot olishimiz mumkin. Assambleya
tili bunday emas.
Biz hech qachon assembler tilini o'z-o'zidan emas, balki har doim ma'lum bir
platformada
ishlatamiz. Assambleyerni bilishi kerak bo'lgan muhandis turi, ehtimol siz samarali
bo'lish uchun boshqa ko'nikmalarni ham bilishingiz kerak bo'lgan joyda
ishlaydi. Bunga
quyidagilar kiradi:
VHDL va Verilog kabi apparat tillari, shuningdek mikroprotsessorlar va
elektrotexnika haqida tushuncha.
C va uning hosilalari kabi past darajadagi operatsion tizim tillari: C ++, C # va D
Fortran va kabi qadimiy tillar
Kobol
.
Java va Objective-C kabi platforma tillari.
Algoritmlar.
Programmalash tillari sun’iy tillar hisoblanadi, ularda sintaksis va
semantik qoidalar
qat’iy aniqlangan bo‘ladi. SHu sababli Programmalash tillari tabiiy tillardan farqli
ravishda jumlalarni ko‘pmazmunli va erkin talqin etishga
yo‘l qo‘ymaydi. Buning asosiy
sababi tildagi xar bir ko‘rsatma mashina tilidagi aniq bir buyruqqa o‘tadi.
Sintaksis-bu qoidalar to‘plami bo‘lib, Programmalash tilida
ruxsat etilgan belgilarning
ketma-ketligi va asosiy ichki tuzilishni aniqlaydi.
Semantika-til birliklariga (so‘z, so‘z birikmalari, jumlalariga) beriladigan
qiymatlardir.
EHMlar endi yuzaga kelgan paytda programma
tuzishda, faqat mashina tillarida, ya’ni
sonlar yordamida EHM
bajarishi kerak bo‘lgan amallarning kodlarida kiritilgan. Bu
holda mashina uchun tushinarli sanoq, sistemasi sifatida 2 lik, 6 lik, 8 lik sanoq
sistemalari bo‘lgan. Programma mazkur sanoq sistemasidagi sonlar vositasida
kiritilgan.
YUqori bosqichli programmalashda, mashina tillariga qaraganda mashinaga
moslashgan
(yo‘naltirilgan) belgili kodlardagi tillar
hisoblanadi. Belgilar kodlashtirilgan tillarning
asosiy tamoyillari shundaki, unda mashina kodlari ularga mos belgilar
bilan belgilanadi,
hamda xotirani avtomatik taqsimlash va xatolarni tashhis qilish kiritilgan. Bunday
mashina moslashgan til -
ASSEMBLER tili nomini oldi.
EHM faqat mashina tilini-buyruqlar, operand va
sonlarning ikkilik sanok, sistemasidagi
ko‘rinishini «tushinadi». SHu sababli, Assembler tilida yozilgan programmalar
uchun
ularni mashina tiliga o‘tkazuvchi «tarjimon» kerak bo‘ladi.
Assembler tilidagi programmani mashina tiliga o‘tkazuvchi maxsus programma
translyator deyiladi, ayrim hollarda uni assembler deb ham atashadi.
Mashinaga moslashgan tillarning asosiy kamchiligi bir
turdagi mashina uchun tuzilgan
programma boshqa mashinalarda
bajarilmaydi, ya’ni bunday tillar mashinaning apparat
tuzilishiga bog‘liq qilib yaratiladi. Masalan, Pravets mashinasi uchun tuzilgan
programma IBM yoki YAMANA turidagi mashinalar uchun o‘tmaydi va aksincha.
Programmalash tillarining keyingi bosqichida protsedurali tillar
joylashadi. Bu tillaring
asosiy xususiyati shundaki, ularning sintaksis va semantikasi konkret EHM
(protsessor)
buyruqlari tarkibiga bog‘liq, emas. Tuzilgan programmani konkret EHM
ga bog‘lashni
translyator amalga oshiradi.
Programmaning boshlang‘ich matni Operativ xotiraga kiritilgandan keyin u transly
asiya
qilinadi. Natijada, aynan shu mashina «tushinadigan» buyruqlar ketma-
ketligi hosil
bo‘ladi va ularni bajarish asosida EHM
masalani echadi. Programmani tarjimasi va uni
bajarish jarayoni ikki usulda amalga oshirilishi mumkin:
Birinchi usul-komplilyator deb nomlanuvchi usulda programmani EHMda
bajarilishi-
tarjima jaryoni to‘liq, tugagandan keyin amalga oshiriladi. Bunda tarjima
programmasini
operativ xotirada saqlab turishga hojat yuq, shu sababli xotirani tejashga erishiladi.
Ikkinchi usul – interpretatsiya - programmadagi ayrim operatorlar ular tarjima
qilingan
zahoti bajariladi, shundan keyin navbatdagi operator tarjima qilinadi, bajariladi va
xokazo. Bu rejimda xotirada
interpretator programmasi ham bo‘lishi kerak, natijada
qo‘shimcha xotira ishlatiladi va programmaning ishlashi kompilyasiya qilinganga
nisbatan sekin ishlaydi. Interpretatorning afzallik tomonlari programmalarni sozlas
h
paytida ko‘rinadi, ya’ni yo‘l qo‘yilgan xatolar tuzatilishi mumkin.
Kompilyatorda
bunday
imkoniyat
yuk.
Protsedurali tillarning umumiy xususiyatlarini ko‘raylik. Bu tillarda programmada
gi
yozuvlar umumiy qabul qilingan matematik yozuvlarga juda yaqin va
tushunish uchun
engildir. Masalan, 7 va 5
sonlaring yig‘indisini hisoblash amalini programmalash tillarida
yozilishini ko‘raylik:
mashina tilida
Buyruq
Operand adresi
0011 1111
1101 0001
0000 0101
1101 0010
0000 0110
1101 00111
0000 0111
1101 0100
1000 0000
1101 0101
Java tili kompyuter tarmoqlarida amal qiladigan programmalarni yaratishga
mo‘ljallangan, ya’ni Java tilida yozilgan programmalar global tarmoqlarda
dinamik reklamalarni (animatsiya, teletayp lentalari) global tarmoqda joylashtirish
uchun ishlatiladi, Java tilining afzalligi shundaki, u turli operatsion sistemalarda
ham birdek amal qilaveradi. Java programmasi bir paytda Windows, UNIX va
Macintosh operatsion sistemalarida ishlashi mumkin.
Quyidagi jadvalda programmalash tillari xaqida ma’lumotlar keltirilgan.
|