Asosiy mazmunga o'tish

12-dars: Abstraksiya minorasi

3-blokProtsessor9–12 darslar

10-darsda uch qatorli oddiy ish uchun sakkiz qator assembler yozdingiz. Endi tasavvur qiling: Instagram millionlab qator koddan iborat. Assemblerda uni yozish — imkonsiz. Ammo protsessor faqat mashina kodini tushunadi. Qanday qilib?

Javob — abstraksiya minorasi: odam yuqori qavatda qulay tilda yozadi, maxsus dasturlar esa uni qavatma-qavat pastga, bitlargacha o’girib beradi. Bu dars blokning yakuni: siz minoraga to’liq bir qarash tashlaysiz — eng tepadan eng pastgacha.

Bu darsdan keyin siz

  • yuqori va past darajali til farqini aniq misolda ko’rsata olasiz
  • kompilyator nima qilishini tushuntira olasiz
  • bitta qator kod nechta buyruq va bitga aylanishini kuzatasiz
  • “abstraksiya” so’zini shu moduldagi barcha qavatlar bilan bog’lay olasiz

yigindi = a + b — bu yozuvda registr ham, manzil ham, opkod ham yo’q. Faqat niyat: ikki sonni qo’sh. Qolgan ishni mashina o’zi hal qilsin.

yuqori darajali tilhigh-level language

Odamning fikrlash tarziga yaqin dasturlash tili: o’zgaruvchilar, ifodalar, funksiyalar. Python, JavaScript, C — shular jumlasidan. Protsessor tafsilotlari yashirilgan.

Yuqori til — qulaylik uchun to’langan soliq emas, aksincha: dasturchi xatosi kamayadi, kod boshqa protsessorlarga ham mos bo’ladi, million qatorli tizimlarni jamoa bo’lib yozish mumkin bo’ladi.

Yuqori tildagi matnni mashina kodiga o’giruvchi dastur kompilyator deb ataladi. U har qatorni tahlil qiladi, o’zgaruvchilarga xotiradan katak ajratadi va buyruqlar ketma-ketligini yasaydi.

kompilyatorcompiler

Yuqori darajali tildagi dasturni mashina kodiga o’giruvchi dastur. O’zi ham dastur — bir paytlar uni ham kimdir assemblerda yozgan.

Diqqat qiling: yigindi = a + b bitta qator, lekin undan uchta buyruq chiqadi — yukla, qo’sh, saqla. Yuqori qavatda bir qadam, pastda uch qadam. Instagram’ning millionlab qatori — protsessorda milliardlab buyruq.

Endi butun modulni bir ustunga teraylik. Eng tepada — yigindi = a + b. Uni kompilyator buyruqlarga o’giradi. Buyruqlar — sonlar, sonlar — bitlar. Bitlarni darvozalar qayta ishlaydi, darvozalar tranzistorlardan, tranzistorda esa shunchaki tok bor yoki yo’q.

Har qavat pastkisining tafsilotini yashiradi: Python yozuvchisi registrni o’ylamaydi, sxema chizuvchi elektronlar fizikasini o’ylamaydi. Aynan shu yashirish tufayli bir odam hammasini bilmasa ham butun tizim ishlaydi.

Bitta dastur uch darajada. Yuqori tildagi istalgan qatorni bosing — unga mos assembler buyruqlari va bitlar yonadi. Teskari yo’nalishda ham ishlaydi: bit qatorini bosib, u qaysi qatordan kelganini toping.

Abstraksiya minorasi: uch daraja

Istalgan qatorni bosing — unga mos qatorlar qolgan ikki darajada yonadi.

Bu simulyatorda bitta dastur uch darajada yonma-yon turadi: yuqori til (4 qator), assembler (8 buyruq) va mashina kodi (8 baytlik bitlar). Yuqori tilning bitta qatori assemblerda bir nechta buyruqqa aylanadi.

JavaScript'siz sinash: yigindi = a + b qatorini qo'lda assemblerga o'giring — nechta buyruq chiqdi? Keyin har buyruqni 10-darsdagi jadval bo'yicha songa aylantiring.

Yuqori til
Assembler
Bitlar

Yuqori tildagi to'rt qatorning har birini bosib chiqing.

  • Yuqori darajali til niyatni yozadi, tafsilotni yashiradi
  • Kompilyator uni mashina kodiga o’giradi: bitta qator → bir nechta buyruq
  • Minora: Python → assembler → mashina kodi → darvozalar → tranzistorlar
  • Har qavat pastkisini yashiradi — shu tufayli murakkablik boshqariladi
  • Bit o’z ma’nosini bilmaydi: TOXTA va SON 0 — bir xil bitlar, har xil ma’no

1Yuqori darajali tilning uch aniq afzalligini ayting.

Javobni ko'rish

Birinchisi: qisqalik — bitta qator o’nlab buyruq o’rnini bosadi. Ikkinchisi: tushunarlilik — o’zgaruvchi nomlari, ifodalar odam tilida. Uchinchisi: ko’chma — bitta kod turli protsessorlarda ishlaydi, har biriga o’z kompilyatori o’giradi.

2Simulyatorda 'a = 5' qatoriga nechta assembler qatori mos keldi va nega aynan shu?

Javobni ko'rish

Bitta: SON 5 (5-katak). Chunki bu qator hech narsa hisoblamaydi — kompilyator shunchaki “a” uchun katak ajratib, boshlang’ich qiymatini yozib qo’ydi. Harakat yo’q, faqat joy va qiymat.

3Kompilyator bilan 10-darsdagi 'yig'ish' (assemble) jarayonining farqi nimada?

Javobni ko'rish

Assembler yig’uvchisi birma-bir o’giradi: har mnemonika — aynan bitta mashina buyrug’i. Kompilyator esa ijodiy tarjimon: bitta qatordan bir nechta buyruq yasaydi, kataklarni o’zi taqsimlaydi, hatto kodni tezlashtirish uchun qayta ham yozadi.

4Nega TOXTA va SON 0 ning bitlari bir xil bo'lishi xato emas?

Javobni ko'rish

Chunki ma’no bitda emas, ishlatilishida. PC o’sha katakka kelsa — buyruq sifatida o’qiladi va dastur to’xtaydi. Boshqa buyruq o’sha katakdan ma’lumot olsa — bu 0 soni. Kontekst hal qiladi; xotira uchun ikkisi bir xil 8 bit.

5Abstraksiya qavatlari bo'lmasa, milliondan ortiq qatorli dastur yozish nega imkonsiz bo'lardi?

Javobni ko'rish

Har dasturchi bir vaqtda hamma tafsilotni — registr, manzil, takt, darvoza — boshida ushlashi kerak bo’lardi. Inson miyasi buncha detalni ko’tarmaydi. Qavatlar mehnatni bo’ladi: har kim o’z qavatida ishlaydi va pastga ishonadi.

Amaliy topshiriq

~35 daqiqao'rta

Bitta masalani uch darajada o’zingiz yozing. Masala: ikki son ayirmasini topish (masalan, 9 − 4).

1-daraja (yuqori til): 3–4 qator, o’zgaruvchilar bilan, xuddi simulyatordagidek.

2-daraja (assembler): 10-darsdagi buyruqlar jadvalidan foydalanib to’liq dastur yozing (ma’lumot kataklari bilan). Xohlasangiz Mini assemblerda ishlatib tekshiring.

3-daraja (bitlar): har assembler qatorini 8 bitga o’giring — yuqori 4 bit opkod, pastki 4 bit operand.

Oxirida ikki gap yozing: qaysi darajada yozish eng tez bo’ldi va qaysi darajada xato qilish eng oson?

Topshiriladigan natija: uch daraja yonma-yon yozilgan varaq + ikki gaplik xulosa.

Darsni belgilash uchun JavaScript kerak. Bu progressni saqlash uchun ishlatiladi — darslikning o'zi JavaScript'siz ham to'liq o'qiladi.