Download as pdf or txt
Download as pdf or txt
You are on page 1of 458

Բովանդակություն

ՀԱՏՈՒԿ ԱՌԱՋԱՐԿ. Թարմացրեք այս էլեկտրոնային գիրքը O'Reilly-ի հետ


Թղթե տպագիր հրատարակության նախաբան
1. Լավագույն ընկերներ
2. Կոդեր և համակցություններ
3. Բրայլի և Երկուական կոդեր
4. Լապտերի անատոմիա
5. Տեսնել շուրջ անկյունները
6. Հեռագրեր և ռելեներ
7. Մեր տասը թվանշանները
8. Տասի այլընտրանքները
9. Կիտ առ հատ
10. Տրամաբանություն և անջատիչներ
11. Գեյթս (ոչ Բիլ)
12. Երկուական ավելացման մեքենա
13. Բայց ինչ վերաբերում է հանմանը:
14. Հետադարձ կապ և ֆլիպ-ֆլոպներ
15. Բայթեր և վեցանկյուն
16. Հիշողության ժողով
17. Ավտոմատացում
18. Abaci-ից մինչև Chips
19. Երկու դասական միկրոպրոցեսոր
20. ASCII և հերոսների դերասանական կազմ
21. Նստեք ավտոբուս
22. Օպերացիոն համակարգը
23. Հաստատուն կետ, լողացող կետ
24. Լեզուներ Բարձր և ցածր
25. Գրաֆիկական հեղափոխություն
Ա. Երախտագիտություն
Բ. Մատենագիտություն
ՀԱՏՈՒԿ ԱՌԱՋԱՐԿ. Թարմացրեք այս էլեկտրոնային գիրքը O'Reilly-ի հետ
Կոդ՝ Համակարգչային սարքավորումների և ծրագրերի թաքնված լեզուն
Բովանդակություն
ՀԱՏՈՒԿ ԱՌԱՋԱՐԿ. Թարմացրեք այս էլեկտրոնային գիրքը O'Reilly-ի հետ
Թղթե տպագիր հրատարակության նախաբան
1. Լավագույն ընկերներ
2. Կոդեր և համակցություններ
3. Բրայլի և Երկուական կոդեր
4. Լապտերի անատոմիա
5. Տեսնել շուրջ անկյունները
6. Հեռագրեր և ռելեներ
7. Մեր տասը թվանշանները
8. Տասի այլընտրանքները
9. Կիտ առ հատ
10. Տրամաբանություն և անջատիչներ
11. Գեյթս (ոչ Բիլ)
12. Երկուական ավելացման մեքենա
13. Բայց ինչ վերաբերում է հանմանը:
14. Հետադարձ կապ և ֆլիպ-ֆլոպներ
15. Բայթեր և վեցանկյուն
16. Հիշողության ժողով
17. Ավտոմատացում
18. Abaci-ից մինչև Chips
19. Երկու դասական միկրոպրոցեսոր
20. ASCII և հերոսների դերասանական կազմ
21. Նստեք ավտոբուս
22. Օպերացիոն համակարգը
23. Հաստատուն կետ, լողացող կետ
24. Լեզուներ Բարձր և ցածր
25. Գրաֆիկական հեղափոխություն
Ա. Երախտագիտություն
Բ. Մատենագիտություն
ՀԱՏՈՒԿ ԱՌԱՋԱՐԿ. Թարմացրեք այս էլեկտրոնային գիրքը O'Reilly-ի հետ
Գլուխ 1. Լավագույն ընկերներ
ծածկագիր (կոդ)
Դուք 10 տարեկան եք: Ձեր լավագույն ընկերը ապրում է փողոցի մյուս կողմում: Փաստորեն, ձեր
ննջասենյակների պատուհանները միմյանց դիմաց են: Ամեն երեկո, երբ ձեր ծնողները քնելու ժամանակ են
հայտարարել սովորական վաղ ժամի, դուք դեռ պետք է փոխանակեք մտքեր, գաղտնիքներ, բամբասանքներ և
կատակներ: Ոչ ոք չի կարող ձեզ մեղադրել։ Ի վերջո, հաղորդակցվելու մղումը մարդկային հատկանիշներից
մեկն է:
Քանի դեռ ձեր ննջասենյակներում լույսերը վառ են, դուք և ձեր լավագույն ընկերը կարող եք օգտագործել
ժեստերը և մարմնի տարրական լեզուն որ փոխանցել մեկ-երկու միտք: Սակայն բարդ գործարքները դժվար են
թվում: Եվ երբ ծնողները որոշեն անջատել լույսերը: իրավիճակը անհուսալի է թվում.
Ինչպե՞ս շփվել: Հեռախոսը միգուցե. 10 տարեկանում ձեր սենյակում հեռախոս ունե՞ք: Նույնիսկ այդպես,
որտեղ էլ որ լինի հեռախոսը, ձեզ կլսեն:
Այն, ինչ դուք և ձեր լավագույն ընկերն ունեք , այնուամենայնիվ, լապտերներն են: Բոլորը գիտեն, որ
լապտերները հորինվել են, որպեսզի երեխաներին թույլ տան գրքեր կարդալ մահճակալի ծածկոցների տակ;
Լապտերները նույնպես կատարյալ են թվում մութն ընկնելուց հետո հաղորդակցվելու աշխատանքի համար:
Նրանք, անշուշտ, բավականաչափ հանգիստ են, և լույսը խիստ ուղղորդված է և, հավանաբար, դուրս չի գա
ննջասենյակի դռան տակից
Կարո՞ղ են լապտերները օգտագործվել խոսելու համար: Անշուշտ, արժե փորձել: Դուք սովորել եք, թե ինչպես
գրել տառեր և բառեր թղթի վրա առաջին դասարանում, ուստի այդ գիտելիքները լապտերին փոխանցելը
խելամիտ է թվում: Ձեզ մնում է միայն կանգնել պատուհանի մոտ և լույսով նկարել տառերը: O-ի համար դուք
միացնում եք լապտերը, շրջանցում օդում և անջատում անջատիչը: I-ի համար դուք ուղղահայաց հարված եք
կատարում: Բայց, ինչպես արագ հայտնաբերում եք, այս մեթոդը պարզապես չի աշխատում: Երբ դիտում եք
ձեր ընկերոջ լապտերը, որն օդում պտտվում և գծեր է անում, տեսնում եք, որ շատ դժվար է գլխում մի քանի
հարվածներ հավաքել: Լույսի այս պտույտներն ու շեղումները բավականաչափ ճշգրիտ չեն:
Դուք մի անգամ տեսաք մի ֆիլմ, որտեղ մի քանի նավաստիներ ազդանշան էին տալիս միմյանց ծովից այն
կողմ՝ թարթող լույսերով։ Մեկ այլ ֆիլմում լրտեսը հայելին պտտեց՝ արևի լույսն արտացոլելու սենյակ,
որտեղ մեկ այլ լրտես էր գերի ընկած: Միգուցե դա է լուծումը: Այսպիսով, դուք նախ մշակում եք պարզ
տեխնիկա: Այբուբենի յուրաքանչյուր տառը համապատասխանում է լապտերի մի շարք թարթումների: Ա-ն 1
թարթումն է, Բ-ն 2 թարթումն է, Գ-ը 3 թարթում է, և այլն՝ մինչև 36 թարթում Ֆ-ի համար։ Դուք մի փոքր
ավելի երկար կդադարեք բառերի միջև:
Սա խոստումնալից է թվում: Լավ նորությունն այն է, որ այլևս պետք չէ լապտերը օդում թափահարել. Վատ
նորությունն այն է, որ առաջին հաղորդագրություններից մեկը, որը փորձում եք ուղարկել («Ինչպե՞ս ես»),
պարզվում է, որ ընդհանուր առմամբ պահանջում է լույսի 126 թարթում: Ավելին, դուք մոռացել եք
կետադրական նշանները, ուստի չգիտեք, թե քանի թարթում է համապատասխանում հարցականին։
Բայց դու մոտ ես: Անշուշտ, դուք կարծում եք, որ ինչ-որ մեկը պետք է նախկինում բախվել այս խնդրին, և դուք
լիովին իրավացի եք: հետազոտության համար գրադարան գնալով՝ դուք հայտնաբերում եք մի հրաշալի գյուտ,
որը հայտնի է որպես Մորզեի այբուվեն: Դա հենց այն է, ինչ փնտրում էիք, թեև այժմ պետք է նորից սովորեք,
թե ինչպես գրել այբուբենի բոլոր տառերը:
Ահա տարբերությունը. Ձեր հորինած համակարգում այբուբենի յուրաքանչյուր տառը թարթումների որոշակի
քանակ է՝ 1 թարթում Ա-ից մինչև 36 թարթում՝ Ֆ-ի համար: Մորզեի կոդով դուք ունեք երկու տեսակի
թարթում՝ կարճ և երկար թարթումներ: Սա, իհարկե, ավելի բարդ է դարձնում Մորզեի կոդը, բայց իրական
օգտագործման դեպքում այն շատ ավելի արդյունավետ է ստացվում: «Ինչպե՞ս ես» նախադասությունը. այժմ
պահանջում է ընդամենը 32 թարթում (որոշ կարճ, որոշ երկար), քան 131, և դա ներառում է հարցական
նշանի ծածկագիրը:
Երբ քննարկում են, թե ինչպես է աշխատում Մորզեի կոդը, մարդիկ չեն խոսում «կարճ թարթումների» և
«երկար թարթումների» մասին: Փոխարենը, դրանք վերաբերում են «կետերին» և «գծիկներին», քանի որ դա
տպագիր էջի կոդերը ցուցադրելու հարմար միջոց է: Մորզեի կոդում այբուբենի յուրաքանչյուր տառը
համապատասխանում է կետերի և գծիկների կարճ շարքին, ինչպես կարող եք տեսնել հետևյալ աղյուսակում։

Թեև Մորզեի կոդը բացարձակապես ոչ մի կապ չունի համակարգիչների հետ, կոդերի բնույթին ծանոթանալը
էական նախադրյալ է համակարգչային տեխնիկայի և ծրագրաշարի թաքնված լեզուների և ներքին
կառուցվածքների խորը ըմբռնման հասնելու համար:
Այս գրքում կոդ բառը սովորաբար նշանակում է մարդկանց և մեքենաների միջև տեղեկատվության
փոխանցման համակարգ: Այլ կերպ ասած, կոդը թույլ է տալիս հաղորդակցվել: Երբեմն մենք ծածկագրերը
համարում ենք գաղտնի: Բայց կոդերի մեծ մասը այդպես չէ: Իրոք, կոդերի մեծ մասը պետք է լավ հասկանալ,
քանի որ դրանք մարդկային հաղորդակցության հիմքն են:
«Հարյուր տարվա մենություն» գրքի սկզբում Գաբրիել Գարսիա Մարկեսը հիշում է մի ժամանակ, երբ
«աշխարհն այնքան նոր էր, որ շատ բաների անուններ չկար, և դրանք նշելու համար անհրաժեշտ էր
մատնանշել»: Անունները, որոնք մենք տալիս ենք իրերին, սովորաբար կամայական են թվում: Թվում է, թե
պատճառ չկա, թե ինչու կատուներին «շուն» չեն ասում, իսկ շներին՝ «կատու»: Կարելի է ասել, որ Հայերեն
բառապաշարը կոդի տեսակ է:
Բառեր ձևավորելու համար մեր բերանով հնչյունները արտահայտելը հասկանալի ծածկագիր են
յուրաքանչյուրի համար, ով կարող է լսել մեր ձայնը և հասկանալ այն լեզուն, որով մենք խոսում ենք: Մենք
այս ծածկագիրը անվանում ենք «խոսք»: Մենք թղթի վրա բառեր գրելու այլ ծածկագիր ունենք այն անվանում
ենք «գրավոր խոսք» կամ «տեքստ»: Շատ լեզուներում խոսքի և տեքստի միջև առկա է ամուր
համապատասխանություն։ Հայերենում, օրինակ, տառերը և տառերի խմբերը հիմնականում
համապատասխանում են խոսակցական հնչյուններին։
Մարդկանց համար, ովքեր չեն կարողանում լսել կամ խոսել, մշակվել է մեկ այլ ծածկագիր, որն օգնում է դեմ
առ դեմ հաղորդակցությանը: Սա ժեստերի լեզուն է, որտեղ ձեռքերի շարժումները փոխարինում են տառերի::
Մենք օգտագործում ենք տարբեր կոդեր հաղորդակցվելու համար, քանի որ որոշ դեպքերում ինչ որ կոդեր
ավելի հարմար են, քան մյուսները: Օրինակ, խոսակցական կոդը չի կարող պահվել թղթի վրա, ուստի դրա
փոխարեն օգտագործվում է գրավոր կոդը: Մթության մեջ հեռավորության վրա տեղեկատվության լուռ
փոխանակումը հնարավոր չէ խոսքի կամ թղթի միջոցով: Հետևաբար, Մուրզեի կոդը հարմար այլընտրանք է։
Ինչպես կտեսնենք, տարբեր տեսակի կոդեր օգտագործվում են նաև համակարգիչներում՝ թվեր, ձայներ,
երաժշտություն, նկարներ և ֆիլմեր պահելու և փոխանցելու համար: Համակարգիչները չեն կարող
ուղղակիորեն գործ ունենալ “մարդկային կոդերի” հետ։ Այնուամենայնիվ, համակարգչային տեխնոլոգիայի
վերջին միտումներից մեկն այն է, որ մեր համակարգիչները կարողանան ստանալ, պահել, մանիպուլացնել և
մատուցել մարդկային հաղորդակցության մեջ օգտագործվող բոլոր տեսակի տեղեկատվությունը, լինի դա
տեսողական (տեքստ և նկարներ), լսողական (խեսք, երաժշտություն) կամ երկուսի համակցությունը
(անիմացիաներ և ֆիլմեր): Այս բոլոր տեսակի տեղեկությունները պահանջում են իրենց սեփական կոդերը,
ճիշտ այնպես, ինչպես խոսքը պահանջում է մարդու օրգանների մի շարք (բերան և ականջներ), մինչդեռ գրելն
ու կարդալը պահանջում են մյուսները (ձեռքեր և աչքեր):
Նույնիսկ 4-րդ էջում ցուցադրված Մորզեի կոդի աղյուսակն ինքնին մի տեսակ ծածկագիր է: Աղյուսակը ցույց
է տալիս, որ յուրաքանչյուր տառ ներկայացված է մի շարք կետերով և գծիկներով: Այնուամենայնիվ, մենք
իրականում չենք կարող կետեր և գծիկներ ուղարկել: Փոխարենը, կետերն ու գծիկները համապատասխանում
են լույսի թարումներին:
Լապտերով Մորզեի կոդը ուղարկելիս դուք շատ արագ միացնում և անջատում եք լապտերի անջատիչը (արագ
թարթում՝ կետի համար): Դուք թողնում եք լապտերը մի փոքր ավելի երկար միացված (ավելի դանդաղ
միացում/անջատում) գծիկի համար: A ուղարկելու համար, օրինակ, դուք շատ արագ միացնում և անջատում
եք լապտերը, իսկ հետո միացնում և անջատում ավելի փոքր արագությամբ: Դուք դադար եք տալիս հաջորդ
նիշն ուղարկելուց առաջ: Պայմանականորեն, գծիկի երկարությունը պետք է լինի մոտ երեք անգամ ավելի քան
կետինը: Օրինակ, եթե կետը մեկ վայրկյան է, գծիկը երեք վայրկյան է: Ստացողը տեսնում է կարճ թարթումը և
երկար թարթումը և գիտի, որ դա A է:
Մուրզեի կոդում կետերի և գծիկների միջև դադարները շատ կարևոր են: Երբ, օրինակ, A-ն ուղարկում եք,
լապտերը պետք է անջատված լինի կետի և գծիկի միջև մոտավորապես մեկ կետի հավասար
ժամանակահատվածով: (Եթե կետի երկարությունը մեկ վայրկյան է, ապա կետերի և գծիկների միջև եղած
բացը նույնպես մեկ վայրկյան է): ) Օրինակ, ահա «hello» Մորզեի կոդը, որը ցույց է տալիս տառերի միջև
եղած դադարները.

Բառերը բաժանվում են մոտ երկու գծիկի չափ ժամանակաշրջանով (վեց վայրկյան, եթե գծիկը երեք վայրկյան
է): Ահա «hi there» ծածկագիրը.

Ժամանակի երկարությունը, երբ լապտերը մնում է միացված և անջատված, ֆիքսված չէ: Դրանք բոլորը
հարաբերական են մի կետի երկարությանը, որը կախված է նրանից, թե որքան արագ կարող է գործարկվել
լապտերի անջատիչը, ինչպես նաև այն, թե որքան արագ Մուրզեի կոդը ուղարկողը կարող է հիշել որոշակի
տառի կոդը: Արագ ուղարկողի գծիկը կարող է լինել նույն երկարությունը, ինչ դանդաղ ուղարկողի կետը: Այս
փոքրիկ խնդիրը կարող է դժվարացնել Մորզեի կոդով հաղորդագրություն կարդալը, բայց մեկ-երկու տառից
հետո ստացողը սովորաբար կարող է պարզել, թե որն է կետը, իսկ որը գծիկ:
Մուրզեի կոդերի կետերի և գծերի տարբեր հաջորդականությունների համապատասխանությունը այբուբենի
տառերին, նույնքան պատահական է թվում, որքան գրամեքենայի դասավորությունը: Ավելի ուշադիր
ուսումնասիրելով, սակայն, դա այդքանել այդպես չէ: Ավելի պարզ և կարճ կոդերը վերագրվում են այբուբենի
ավելի հաճախ օգտագործվող տառերին, ինչպիսիք են E և T: Scrabble խաղացողները կարող են դա
անմիջապես նկատել: Ավելի քիչ տարածված տառերը, ինչպիսիք են Q և Z (որոնք 10 միավոր են ստանում
Scrabble-ում), ունեն ավելի երկար կոդեր:
Գրեթե բոլորը գիտեն մի փոքր Մորզեի կոդից: Երեք կետ, երեք գծիկ և երեք կետ ներկայացնում են SOS-ը՝
միջազգային աղետի ազդանշանը: SOS-ը ոչ մի բանի հապավում չէ, դա պարզապես հեշտ հիշվող Մորզեի
կոդերի հաջորդականություն է:
Մորզեի կոդի թերությունն այն է, որ այն տարբերություն չի դնում մեծատառերի և փոքրատառերի միջև: Բայց
տառերը ներկայացնելուց բացի, Մորզեի կոդը ներառում է նաև թվերի կոդեր՝ օգտագործելով հինգ կետերի և
գծիկների շարքը.

Այս ծածկագրերը, համենայնդեպս, մի փոքր ավելի կարգավորված են, քան տառային կոդերը։ Կետադրական
նշաններից շատերը օգտագործում են հինգ, վեց կամ յոթ կետեր և գծիկներ.

Լրացուցիչ ծածկագրերը սահմանվում են որոշ եվրոպական լեզուների ընդգծված տառերի համար և որպես
սղագրության (Սղագրություն, արագ գիր, որ հիմնված է նշանների, կրճատված բառերի և բառակապակցությունների հատուկ համակարգի
կիրառման վրա։) հաջորդականություններ հատուկ նպատակների համար: SOS կոդը նման սղագրության
հաջորդականություն է. ենթադրվում է, որ այն պետք է անընդհատ ուղարկվի երեք տառերի միջև ընդամենը
մեկ կետ դադարով:
Երբ վերջապես դուք և ձեր լավագույն ընկերը պետք է մտապահեք Մորզեի կոդը (որովհետև միայն այդպես
կարող եք հմուտ դառնալ այն ուղարկելու և ստանալու մեջ), կարող եք նաև ձայնային կերպով օգտագործել
այն որպես նորմալ խոսքի փոխարինում: Առավելագույն արագության համար դուք արտասանում եք կետը
որպես dih , իսկ գծիկը՝ dah :
Գլուխ 2. Կոդեր և համակցություններ
Մորզեի կոդը հորինել է Սամուել Ֆինլի Բրիզ Մորզը (1791–1872), որին մենք կրկին կհանդիպենք ավելի
ուշ այս գրքում: Մորզեի ծածկագրի գյուտը զուգահեռ է հեռագրի գյուտի հետ, որը մենք նույնպես կքննարկենք
ավելի մանրամասն: Ինչպես Մորզեի կոդը լավ ծանոթացնում է կոդերի բնույթին, հեռագրը լավ ծանոթացնում
է համակարգչի ապարատին:
Մարդկանց մեծամասնության կարծիքով Մորզեի կոդը ավելի հեշտ է ուղարկել, քան ստանալ: Նույնիսկ եթե
դուք չգիտեք անգիր Մորզեի կոդը, կարող եք պարզապես օգտագործել այս աղյուսակը՝ հարմար դասավորված
այբբենական կարգով.

Մորզեի կոդը ստանալը և այն բառերով թարգմանելը զգալիորեն ավելի դժվար և ժամանակատար է, քան
ուղարկելը, քանի որ դուք պետք է աշխատեք՝ պարզելու այն տառը, որը համապատասխանում է կետերի և
գծիկների որոշակի կոդավորված հաջորդականությանը: Օրինակ, եթե դուք ստանում եք գծիկ-կետ-գծիկ-գծիկ,
դուք պետք է տառ առ տառ սկանավորեք աղյուսակը, նախքան վերջապես հայտնաբերեք, որ կոդը Y տառն է:
մենք ունենք աղյուսակ, որն ապահովում է այս թարգմանությունը.
Այբբենական տառ → Մորզեի կոդը

Բայց մենք չունենք աղյուսակ, որը թույլ կտա մեզ հետ գնալ.
Մորզեի կոդը կետեր և գծիկներ → Այբբենական տառ

Մորզեի կոդը սովորելու վաղ փուլերում նման աղյուսակը, անշուշտ, հարմար կլիներ: Բայց ամենևին էլ պարզ
չէ, թե ինչպես կարող ենք այն կառուցել: Այդ կետերում և գծիկներում ոչինչ չկա, որը մենք կարող ենք
դասավորել այբբենական կարգով:
Այսպիսով, եկեք մոռանանք այբբենական կարգի մասին: Թերևս կոդերը կազմակերպելու ավելի լավ մոտեցում
կարող է լինել դրանք խմբավորելը՝ կախված նրանից, թե քանի կետ և գծիկ ունեն: Օրինակ, Մորզեի կոդի
հաջորդականությունը, որը պարունակում է մեկ կետ կամ մեկ գծիկ, կարող է ներկայացնել միայն երկու տառ,
որոնք են E և T:
Ուղիղ երկու կետերի կամ գծիկների համակցությունը մեզ տալիս է ևս չորս տառ՝ I, A, N և M:

Երեք կետերից կամ գծիկներից բաղկացած սինվոլը մեզ տալիս է ևս ութ տառ.

Եվ վերջապես (եթե մենք ուզում ենք դադարեցնել այս վարժությունը նախքան թվերի և կետադրական
նշանների հետ գործ ունենալը), չորս կետերի և գծիկների հաջորդականությունը մեզ տալիս է ևս 16 նիշ.

Այս չորս աղյուսակները միասին պարունակում են 2 գումարած 4 գումարած 8 գումարած 16 կոդ՝ ընդհանուր
30 տառերի համար, 4-ով ավելի, քան անհրաժեշտ է լատինական այբուբենի 26 տառերի համար: Այդ իսկ
պատճառով դուք կնկատեք, որ վերջին աղյուսակի կոդերից 4-ը ընդգծված տառերի համար են:
Այս չորս աղյուսակները կարող են օգնել ձեզ ավելի հեշտ թարգմանել, երբ ինչ-որ մեկը ձեզ Մորզե կոդ է
ուղարկում: Որոշակի տառի կոդը ստանալուց հետո դուք գիտեք, թե քանի կետ և գծիկ ունի այն, և կարող եք
գոնե գնալ ճիշտ աղյուսակ՝ այն փնտրելու համար:
Ուշադրություն դարձրեք, որ յուրաքանչյուր աղյուսակ ունի երկու անգամ ավելի շատ կոդ, քան նախորդ
աղյուսակը: Սա իմաստ ունի. Յուրաքանչյուր աղյուսակ ունի նախորդ աղյուսակի բոլոր կոդերը, որին
նախորդում է մի կետ, և նախորդ աղյուսակի բոլոր կոդերը, որին հաջորդում է գծիկ:
Այս հետաքրքիր միտումը կարող ենք ամփոփել այսպես.
Չորս աղյուսակներից յուրաքանչյուրը երկու անգամ ավելի շատ կոդեր ունի, քան նախորդ աղյուսակը, այնպես
որ, եթե առաջին աղյուսակն ունի 2 կոդ, ապա երկրորդ աղյուսակը ունի 2 x 2 կոդ, իսկ երրորդ աղյուսակը՝ 2
x 2 x 2 կոդ: Ահա դա ցույց տալու ևս մեկ միջոց.

Կետերի և գծիկների քանակը Կոդերի քանակը

1 2

2 4

3 8

4 16

Իհարկե, երբ մենք ունենանք ինքն իրենով բազմապատկված թիվ, մենք կարող ենք սկսել օգտագործել
ցուցիչները՝: Օրինակ, 2 x 2 x 2 x 2-ը կարող է գրվել որպես 2^4 ( 2-ի 4-րդ աստիճան ): 2-ը, 4-ը, 8-ը և
16-ը բոլորը 2-ի աստիճաններ են, քանի որ դրանք կարող եք հաշվարկել՝ 2-ն ինքն իրենով բազմապատկելով:
Այսպիսով, մեր ամփոփագիրը կարող է ցուցադրվել նաև այսպես.

Կետերի և գծիկների քանակը Կոդերի քանակը

1 2^1

2 2^2

3 2^3

4 2^4

Այս աղյուսակը դարձել է շատ պարզ. Կոդերի թիվը պարզապես 2 է կետերի և գծիկների քանակի նկատմամբ:
Մենք կարող ենք ամփոփել աղյուսակի տվյալները այս պարզ բանաձևով.

կոդերի քանակը = 2 անգամ կետերի և գծիկների թիվը

Մորզեի կոդի վերծանման գործընթացը ավելի հեշտ դարձնելու համար մենք կարող ենք նկարել այստեղ
ներկայացված մեծ ծառանման աղյուսակի նման մի բան:
Այս աղյուսակը ցույց է տալիս տառերը, որոնք առաջանում են կետերի և գծիկների յուրաքանչյուր
հաջորդականությունից: Որոշակի հաջորդականությունը վերծանելու համար հետևեք ձախից աջ սլաքներին:
Օրինակ, ենթադրենք, որ ցանկանում եք իմանալ, թե որ տառն է համապատասխանում կետ-գիծ-կետ կոդը:
Սկսեք ձախից և ընտրեք կետը; այնուհետև շարունակեք շարժվել անմիջապես սլաքների երկայնքով և ընտրեք
գծիկը, այնուհետև կետը: Տառը R է, որը ցույց է տրված վերջին կետի կողքին:

Այս աղյուսակը ընդլայնելու կարիքի դեպքում մենք կարող ենք այն շարունակել հինգ կետերի և գծիկների
միջիցով ավելին ծածկագրերի համար: Ուղիղ հինգ կետերից և գծիկներից բաղկացած հաջորդականությունը
մեզ տալիս է 32 (2x2x2x2x2 կամ 2^5 ) լրացուցիչ կոդ: Սովորաբար դա բավարար կլինի Մորզե կոդով
սահմանված 10 թվերի և 16 կետադրական նշանների համար, և իսկապես թվերը կոդավորված են հինգ
կետերով և գծիկներով: Բայց շատ այլ կոդեր, որոնք օգտագործում են հինգ կետերի և գծիկների
հաջորդականությունը, ավելի շուտ ընդգծված տառեր են ներկայացնում, քան կետադրական նշաններ:
Բոլոր կետադրական նշանները ներառելու համար համակարգը պետք է ընդլայնվի մինչև վեց կետ և գծիկ,
ինչը մեզ տալիս է 64 (2x2x2x2x2x2, կամ 2^6 ) լրացուցիչ կոդ՝ 2+4+8+16+32+64 (126) ընդհանուր
։ . Դա չափազանց մեծ է Մորզեի կոդի համար, որը թողնում է այս երկար կոդերից շատերը «չսահմանված»:
Այս համատեքստում օգտագործված չսահմանված բառը վերաբերում է մի ծածկագրի, որը ոչինչ չի
նշանակում: Եթե դուք ստանում էիք Մորզեի կոդը որը սահմանված չէ, կարող եք վստահ լինել, որ ինչ-որ
մեկը սխալ է թույլ տվել:
Քանի որ մենք բավական խելացի էինք այս փոքրիկ բանաձևը մշակելու համար,

կոդերի քանակը = 2 ^ կետերի և գծիկների թիվը

մենք կարող ենք շարունակել պարզել, թե քանի կոդ ենք ստանում՝ օգտագործելով կետերի և գծիկների ավելի
երկար հաջորդականությունը.

Կոդերի քանակը
Կետերի և գծիկների քանակը
1 2^1 = 2
2 2^2 = 4
3 2^3 = 8
4 2^4 = 16
5 2^5 = 32
6 2^6 = 64
7 2^7 = 128
8 2^8 = 256
9 2^9 = 512
10 2^10 = 1024

Բարեբախտաբար, մենք պետք չէ իրականում գրել բոլոր հնարավոր կոդերը՝ որոշելու համար, թե քանիսը
կլինեն: Մեզ մնում է միայն 2-ը բազմապատկել ինքն իրեն նորից ու նորից:
Մորզեի կոդը համարվում է երկուական կոդ, քանի որ կոդի բաղադրիչները բաղկացած են միայն երկու
բանից՝ կետից և գծիկից:

Այս կերպ այն նման է մետաղադրամի, որը կարող է ընկնել կամ գլխով կամ պոչով: Երկուական օբյեկտներ
կամ կոդեր (ինչպես Մորզեի կոդը) նկարագրելիս հաճախ դիմում են 2-ի հզորությանը: Երկուական կոդերի
վերը նշված հաշվարկը պարզ վարժություն է մաթեմատիկայում, որը կոչվում է. կոմբինատորիկա կամ
կոմբինատոր վերլուծություն։
Գլուխ 3. Բրայլյան և Երկուական ծածկագրեր
Սամուել Մորզը առաջինը չէր, ով հորինեց տառերի կոդավորումը, և նա առաջին մարդը չէր, ում անունը
ավելի շատ ընկալվում է որպես այբուբենի անուն, և ոչ որպես հատուկ անուն: Այս պատիվը շնորհվել է մի
կույր ֆրանսիացի դեռահասի, ով ծնվել է Մորզից 18 տարի ուշ։ բայց ով իր դրոշը դրել է շատ ավելի
վաղաժամ: Նրա կյանքի մասին քիչ բան է հայտնի, բայց այն, ինչ հայտնի է, ազդեցիկ պատմություն է
դարձնում:
Լուի Բրայլը ծնվել է 1809 թվականին Ֆրանսիայի Կուվրեյ քաղաքում, Փարիզից ընդամենը 25 մղոն
արևելք: Նրա հայրը զրահագործ էր։ ։ Երբ Լուիը երեք տարեկան էր, այդ տարիքում փոքրիկը չպետք է խաղար
իր հոր արհեստանոցում, նա պատահաբար վնասեց աչքը: Վերքը վարակվել է, վարակը տարածվել է մյուս
աչքի վրա, իսկ տղան ամբողջովին կուրացել է։ Թվում էր, թե նա դատապարտված է մնալ անգրագետ և քարշ
գալ մուրացկանության մեջ (այն օրերի կույրերի սովորական ճակատագիրը)։ Այնուամենայնիվ, տղան
դրսևորեց աշխույժ միտք և սովորելու կրքոտ ցանկություն ուներ: Գյուղի քահանայի և դպրոցի ուսուցչի
միջամտությամբ նա մյուս երեխաների հետ սկզբում հաճախել է գյուղի դպրոց և 10 տարեկանում ուղարկվել
Փարիզի Կույր երիտասարդների թագավորական հաստատություն։

Կույրերի կրթության հիմնական խոչընդոտը, իհարկե, տպագիր գրքեր կարդալու նրանց անկարողությունն է:
Փարիզի դպրոցի հիմնադիր Վալենտին Հայունը (1745–1822), հորինել էր թղթի վրա բարձր տառերի
համակարգ, որը կարելի էր կարդալ հպումով։ Բայց այս համակարգը շատ դժվար էր օգտագործել, և միայն մի
քանի գրքեր էին արտադրվել այս մեթոդով։
Նրա համար A-ն A էր և ուրիշ ոչինչ, և, հետևաբար, պետք է նմանվի A-ին նույնիսկ շոշափելու դեպքում:
(Եթե լապտերը շփվելու համար, նա կարող էր փորձել տառեր նկարել օդում, ինչպես մենք անում էինք
նախքան այն հայտնաբերելը): այնքան էլ լավ չէր աշխատում:) Հեյը, հավանաբար, չէր գիտակցում, որ
տպագիր այբուբենից միանգամայն տարբերվող ծածկագիրը կարող է ավելի հարմար լինել կույր մարդկանց
համար:
Այլընտրանքային կոդերի ակունքները ծագել են անսպասելի: Ֆրանսիական բանակի կապիտան Շառլ
Բարբիեն մինչև 1819 թվականը ստեղծեց գրելու մի համակարգ, որը նա անվանեց écriture nocturne կամ
«գիշերային գրություն»: Այս համակարգը օգտագործում էր բարձրացված կետերի և գծիկների սինվոլը հաստ
թղթի վրա և նախատեսված էր զինվորների կողմից մթության մեջ միմյանց գրառումներ փոխանցելու համար,
երբ անհրաժեշտ էր լռություն:
Barbier-ի համակարգի խնդիրն այն է, որ այն բավականին բարդ էր: Այբուբենի տառերին
համապատասխանող կետերի և գծիկների օրինաչափություններ օգտագործելու փոխարեն, Բարբիեն հորինեց
ձևեր, որոնք համապատասխանում էին հնչյուններին, որոնք հաճախ պահանջում էին բազմաթիվ ծածկագրեր
մեկ բառի համար։ Համակարգը լավ էր աշխատում դաշտային կարճ հաղորդագրությունների համար, բայց
ակնհայտորեն անբավարար էր ավելի երկար տեքստերի, էլ չասած ամբողջ գրքերի համար:
Լուի Բրայլը Բարբիեի համակարգի հետ ծանոթացավ 12 տարեկանում: Նրան դուր էր գալիս բարձրացված
կետերի օգտագործումը ոչ միայն այն պատճառով, որ այն հեշտ էր կարդալ մատներով, այլև այն պատճառով,
որ հեշտ էր գրել : Թղթով և գրիչով հագեցած դասարանում գտնվող ուսանողը կարող էր իրականում
գրառումներ անել և կարդալ դրանք: Լուի Բրայլը ջանասիրաբար փորձեց բարելավել համակարգը և երեք
տարվա ընթացքում (15 տարեկանում) հորինեց իր սեփականը, որի հիմունքները մինչ օրս օգտագործվում են:
Երկար տարիներ համակարգը հայտնի էր միայն դպրոցում, սակայն այն աստիճանաբար տարածվեց ամբողջ
աշխարհում: 1835 թվականին Լուի Բրայլը հիվանդացավ տուբերկուլյոզով, որն ի վերջո սպանեց նրան իր
43-ամյակից անմիջապես հետո՝ 1852 թվականին։
Այսօր Բրայլի համակարգի կատարելագործված տարբերակները մրցում են ձայնագրված գրքերի հետ՝
կույրերին գրավոր խոսքի հասանելիություն ապահովելու համար, Բրայլը դեռևս մնում է անգնահատելի
համակարգ և կարդալու միակ միջոցը և՛ կույր, և՛ խուլ մարդկանց համար: Վերջին տարիներին Բրայլը ավելի
ծանոթ է դարձել հանրային ասպարեզում, քանի որ վերելակները և ավտոմատ փոխանցման մեքենաներն ավելի
մատչելի են դառնում կույրերի համար:
Այն, ինչ մենք պատրաստվում ենք անել այս գլխում, բաժանել Բրայլի ծածկագիրը և տեսնել, թե ինչպես է այն
աշխատում: Պարտադիր չէ, որ իրականում սովորենք Բրայլի տառերը կամ որևէ բան անգիր անենք: Մենք
պարզապես ուզում ենք որոշակի պատկերացում կազմել կոդերի բնույթի մասին:
Բրայլում սովորական գրավոր լեզվով օգտագործվող յուրաքանչյուր նշան ՝ տառեր, թվեր և կետադրական
նշաններ, կոդավորված է որպես մեկ կամ մի քանի բարձրացված կետերի հաջորդականություն 3x2 մատրիցի
մեջ որը կոչվում է բրայելյան բջիջ(braille cell): Բջջի կետերը սովորաբար համարակալված են 1-ից 6-ը.

Քանի որ այս գրքի ընդամենը մի քանի էջը բրայլյան տառերով դաջելը չափազանց թանկ կարժենա, ես
օգտագործել եմ սովորական նշում՝ տպագիր էջի վրա Բրայլի տառերը ցուցադրելու համար: Յուրաքանչյուր
բջիջում ես ցույց կտամ բոլոր վեց կետերը. մեծ կետերը կհամապատասխանեն բարձրացված կետերին, իսկ
փոքր կետերը՝ հարթ կետերին: Օրինակ՝ Բրայլի գրանշաններում 1, 3 և 5 կետերը բարձրացված են, իսկ 2, 4
և 6 կետերը՝ ոչ կլինի այսպես։

Մեզ համար այս պահին հետաքրքիրն այն է, որ կետերը երկուական են : Որոշակի կետը կա՛մ հարթ է, կա՛մ
բարձրացված: Դա նշանակում է, որ մենք կարող ենք կիրառել այն, ինչ սովորել ենք Մորզեի կոդի և
կոմբինատոր վերլուծության մասին Բրայլի գրառման մեջ: Մենք գիտենք, որ կա 6 կետ, և որ յուրաքանչյուր
կետ կարող է լինել հարթ կամ բարձրացված, ուստի 6 հարթ և բարձրացված կետերի համակցությունների
ընդհանուր թիվը կազմում է 2 x 2 x 2 x 2 x 2 x 2=64 :
Այսպիսով, Բրայլի համակարգը կարող է ներկայացնել 64 եզակի ծածկագիր։ Ահա դրանք՝ բոլոր 64
հնարավոր Բրայլի կոդերը.

Եթե գտնենք բրայլյան գրառման մեջ օգտագործված 64-ից քիչ կոդ, ապա պետք է հարց տանք, թե ինչու 64
հնարավոր կոդերից մի քանիսը չեն օգտագործվում: Եթե գտնենք Բրայլի գրառման մեջ օգտագործված ավելի
քան 64 ծածկագիր, մենք պետք է կասկածի տակ դնենք կամ մեր ողջամտությունը կամ մաթեմատիկայի
հիմնարար ճշմարտությունները:
Բրայլի ծածկագիրը բաժանելու համար եկեք նայենք հիմնական փոքրատառ այբուբենին.

Օրինակ՝ «you and me» արտահայտությունը բրայլյան գրառմամբ այսպիսի տեսք ունի.
Ուշադրություն դարձրեք, որ բառի մեջ յուրաքանչյուր տառի բջիջները բաժանված են մի փոքր
տարածությամբ. բառերի միջև օգտագործվում է ավելի մեծ տարածություն
Սա Բրայլի հիմքն է, ինչպես այն մշակել է Լուի Բրայլը: ։ Ուշադրություն դարձրեք, որ w- ի կոդ չկա : (Մի
անհանգստացեք: այն ի վերջո կհայտնվի:) Այս պահին 64 հնարավոր կոդերից միայն 25-ի հետ ենք ծանոցել:
Մանրակրկիտ ուսումնասիրելուց հետո դուք կհայտնաբերեք, որ վերը պատկերված Բրայլի երեք տողերը ունեն
օրինաչափություն: Առաջին շարքը ( a- ից j տառերը) օգտագործում է բջիջի միայն վերին չորս կետերը:
Երկրորդ շարքը կրկնօրինակում է առաջին տողը, բացառությամբ, որ 5-րդ կետը նույնպես բարձրացված է:
Երրորդ շարքը նույնն է, բացառությամբ, որ 5-րդ և 6-րդ կետերը բարձրացված են:
Լուի Բրայլի ժամանակներից ի վեր Բրայլի ծածկագիրը ընդլայնվել է տարբեր ձևերով։ Ներկայումս
անգլերենով հրատարակվող նյութերում առավել հաճախ օգտագործվող համակարգը կոչվում է Grade 2
Braille: Grade 2 Braille-ը օգտագործում է բազմաթիվ նշումներ ՝ ծառերը փրկելու և ընթերցումն
արագացնելու համար: Օրինակ, եթե կոդը իր հարեւաններից առանձնացված է մեծ ընդմիջումով, դա
նշանակում է ոչ թե տառ, այլ հաճախ հանդիպող բառերից մեկը:

Այսպիսով, «you and me» արտահայտությունը կարող է գրվել Grade 2 Braille-ի տառերով այսպես.

Մինչ այժմ ես նկարագրել եմ 31 ծածկագիր: Մենք դեռ մոտ չենք տեսականորեն հասանելի 64 կոդերին:
Grade 2 Braille-ը ինչպես կտեսնենք, ոչինչ չի վատնում:
a- ից մինչև j տառերի կոդերը ՝ + բարձրացված 6-րդ կետը հիմնականում օգտագործվում են տառերի
հաճախակի համակցությունները և մոռացված «w» տառը նշելու համար

Օրինակ, «about» բառը կարող է գրվել այսպես


, a- ից j տառերի կոդերը կարող են տեղափոխվել մեկ շարքով ներքև՝ օգտագործելով միայն 2, 3, 4 և 5
կետերը: Այս կոդերը, կախված համատեքստից, օգտագործվում են որոշ կետադրական նշանների կամ տառերի
համակցությունների համար.՝ կախված համատեքստից.

Այս կոդերից առաջին չորսն են՝ ստորակետը, կետ-ստորակետը, վերջակետը և միջնակետը: Ուշադրություն
դարձրեք, որ նույն կոդը օգտագործվում է ինչպես ձախ, այնպես էլ աջ փակագծերի համար, բայց երկու
տարբեր կոդեր օգտագործվում են բաց և փակ չակերտների համար:
Առայժմ մենք մինչև 51 կոդ ունենք: Հետևյալ 6 ծածկագրերը օգտագործում են որոշ չօգտագործված
համակցություններ՝ լրացուցիչ կետադրական նշաններ ներկայացնելու համար.

«ble»-ի կոդը շատ կարևոր է, քանի որ երբ այն բառի մաս չէ, նշանակում է, որ հաջորդող ծածկագրերը պետք
է մեկնաբանվեն որպես թվեր: Այս թվերի կոդերը նույնն են, ինչ a- ից մինչև j տառերը .

Այսպիսով, ծածկագրերի այս հաջորդականությունը նշանակում է 256 թիվը։

Եթե հետևում եք, մեզ անհրաժեշտ է ևս 7 կոդ՝ առավելագույնը 64-ի հասնելու համար: Ահա դրանք.

Առաջինը օգտագործվում է որպես շեշտադրման ցուցիչ։ Մյուսները օգտագործվում են որպես նախածանցներ


որոշ կրճատումների և նաև որոշ այլ նպատակների համար.
Եվ վերջապես եթե ձեզ հետաքրքրում է, թե ինչպես է Բրայլը կոդավորում մեծատառերը ՝ գոյություն ունի
մեծատառի ցուցիչ որը այս շարքի 6 րդ սինվոլն է (6-րդ կետը բարձրացված): Սա ազդանշան է տալիս, որ
հաջորդող տառը մեծատառ է: Օրինակ՝ այս համակարգի սկզբնական ստեղծողի անունը կարող ենք գրել
այսպես
Ամփոփելով՝ մենք տեսանք, թե ինչպես են վեց երկուական տարրերը (կետերը) տալիս 64 հնարավոր կոդ և ոչ
ավելին: Պարզապես պատահում է, որ այս 64 կոդերից շատերը կատարում են կրկնակի պարտականություն՝
կախված իրենց համատեքստից:
Գլուխ 4. Լապտերի անատոմիա
Լապտերները օգտակար են բազմաթիվ առաջադրանքների համար, որոնցից ծածկոցի տակ կարդալը և
կոդավորված հաղորդագրություններ ուղարկելը միայն երկուսն են :Օրինակ, սովորական լապտերը, որը,
հավանաբար, կա յուրաքանչյուր տանը, հիանալի տեսողական օգնություն է էլեկտրաէներգիան
ուսումնասիրելու համար:
Էլեկտրականությունը զարմանալի երևույթ է, որը կարողանում է համատարած օգտակար լինել՝ միաժամանակ
մնալով առեղծվածային, նույնիսկ այն մարդկանց համար, ովքեր ձևացնում են, թե գիտեն, ինչպես է այն
աշխատում այն :Վախենում եմ, որ մենք չենք կարող առանց այս առեղծվածի հետ որոշակի ծանոթության:
Բարեբախտաբար, մենք պետք է հասկանանք միայն մի քանի հիմնական հասկացություններ՝ հասկանալու
համար, թե ինչպես է այն օգտագործվում համակարգիչների ներսում:
Լապտերը, անշուշտ, տների մեծ մասում հայտնաբերված պարզ էլեկտրական սարքերից մեկն է: քանդեք տիպիկ
լապտերը և կտեսնեք, որ այն բաղկացած է մի քանի մարտկոցից, լամպից, անջատիչից, մի քանի մետաղական
կտորներից և պլաստիկ պատյանից ամեն ինչ իրար հետ պահելու համար:
Դուք կարող եք պատրաստել ձեր սեփական լապտերը՝ հեռացնելով ամեն ինչ, բացի մարտկոցներից և
լամպից: Ձեզ նաև անհրաժեշտ կլինեն մեկուսացված մետաղալարերի մի քանի կարճ կտորներ (մեկուսիչը
ծայրերից հանված)

Ուշադրություն դարձրեք գծապատկերի աջ կողմում գտնվող լարերի երկու չամրացված ծայրերին: Դա մեր
անջատիչն է: այս չամրացված ծայրերին միասին դիպչելը լույսը կմիացնի:
Այն, ինչ մենք ստեղծել ենք այստեղ, պարզ էլեկտրական շղթա է, և առաջին բանը, որ պետք է նկատել, այն է,
որ շղթան փակ է : Լույսի լամպը կվառվի միայն այն դեպքում, եթե մարտկոցներից դեպի մետաղալարեր դեպի
լամպ դեպի անջատիչ և դեպի մարտկոցներ տանող ճանապարհը ընդհատումներ չունի: Այս շղթայի
ցանկացած ընդհատում կհանգեցնի լամպի անջատմանը: Անջատիչի նպատակն է վերահսկել այս
գործընթացը:
Էլեկտրական շղթայի շրջանաձև բնույթը հուշում է, որ ինչ-որ բան շարժվում է շղթայի միջով, հավանաբար,
ինչպես ջուրը, որը հոսում է խողովակների միջով: «Ջրի և խողովակների» անալոգիան բավականին
տարածված է էլեկտրաէներգիայի աշխատանքի բացատրության մեջ, բայց այն հալված է ձախողման: :
Տիեզերքում ոչինչ չկա, որը կարելի է համեմատել էլեկտրականության հետ, ուստի ավելի լավ է անել առանց
համեմատությունների և խոսել դրա մասին իր լեզվով:
Էլեկտրաէներգիայի աշխատանքի վերաբերյալ գերակշռող գիտական իմաստությունը կոչվում է էլեկտրոնի
տեսություն(electron theor) , որն ասում է, որ էլեկտրաէներգիան առաջանում է էլեկտրոնների շարժումից:
Ինչպես գիտենք, բոլոր նյութը, այն նյութը, որը մենք կարող ենք տեսնել և զգալ (սովորաբար), կազմված է
չափազանց փոքր բաներից, որոնք կոչվում են ատոմներ: Յուրաքանչյուր ատոմ բաղկացած է երեք տեսակի
մասնիկներից. դրանք կոչվում են նեյտրոններ, պրոտոններ և էլեկտրոններ: Դուք կարող եք պատկերացնել
ատոմը որպես փոքրիկ արեգակնային համակարգ, որտեղ նեյտրոններն ու պրոտոնները կապված են միջուկի
մեջ, իսկ էլեկտրոնները պտտվում են միջուկի շուրջ, ինչպես արևի շուրջ մոլորակները:

Պետք է խոստովանեմ, որ սա այն չէ, ինչ դուք կտեսնեիք, եթե կարողանայիք ստանալ բավականաչափ հզոր
մանրադիտակ իրական ատոմները տեսնելու համար։ այնուամենայնիվ այն աշխատում է որպես հարմար
մոդել:
Նախորդ էջում ցուցադրված ատոմն ունի 3 էլեկտրոն, 3 պրոտոն և 4 նեյտրոն, ինչը նշանակում է, որ այն
լիթիումի ատոմ է։ Լիթիումը 112 հայտնի տարրերից մեկն է , որոնցից յուրաքանչյուրն ունի որոշակի
ատոմային թիվ , որը տատանվում է 1-ից մինչև 112ի միջև: Տարրի ատոմային թիվը ցույց է տալիս տարրի
յուրաքանչյուր ատոմի միջուկում գտնվող պրոտոնների թիվը և նաև (սովորաբար նաև էլեկտրոնների)
յուրաքանչյուր ատոմում: Լիթիումի ատոմային թիվը 3 է։
Ատոմները կարող են քիմիապես միանալ այլ ատոմների հետ՝ առաջացնելով մոլեկուլներ : Մոլեկուլները
սովորաբար շատ տարբեր հատկություններ ունեն իրենց կազմած ատոմներից: Օրինակ՝ ջուրը կազմված է
մոլեկուլներից, որոնք բաղկացած են ջրածնի երկու ատոմից և թթվածնի մեկ ատոմից (հետևաբար՝ H 2 O)։
Ակնհայտ է, որ ջուրը զգալիորեն տարբերվում է ջրածնից կամ թթվածնից: Նմանապես, կերակրի աղի
մոլեկուլները բաղկացած են նատրիումի և քլորի ատոմներից, որոնցից ոչ մեկն առանձնապես ախորժելի չի
լինի ֆրիյի վրա:
Ջրածինը, թթվածինը, նատրիումը և քլորը բոլոր տարրերն են: Ջուրն ու աղը կոչվում են միացություններ :
Աղի ջուրը, սակայն, ավելի շուտ խառնուրդ է, քան միացություն, քանի որ ջուրն ու աղը պահպանում են իրենց
սեփական հատկությունները:
Սովորաբար ատոմում էլեկտրոնների թիվը նույնն է, ինչ պրոտոնների թիվը։ Բայց որոշակի
հանգամանքներում էլեկտրոնները թողնում են իրենց ատոմները և առաջացնում էլեկտրական երևույթներ։
Էլեկտրոն և էլեկտրաէներգիա բառերը երկուսն էլ ծագում են հին հունարեն ηλεκτρον ( էլեկտրոն ) բառից ,
որը դուք կարող եք ակնկալել, որ նշանակում է «փոքրիկ անտեսանելի բան»: Բայց ոչ—ηλεκτρον
իրականում հունարեն բառն է «սաթ»: Այս անհավանական ածանցման պատճառն այն է, որ հին հույները
փորձեր են արել սաթը բուրդով քսելու վրա, որը արտադրում է մի բան, որը մենք այժմ անվանում ենք ստատիկ
էլեկտրականություն: Սաթի վրա բուրդ քսելը հանգեցնում է նրան, որ բուրդը էլեկտրոններ է վերցնում սաթի
միջից: Բուրդն ավելի շատ էլեկտրոններ է ունենում, քան պրոտոննեը, իսկ սաթի էլեկտրոնները քչանում են,
քան պրոտոնները:
Պրոտոններն ու էլեկտրոնները ունեն մի հատկանիշ, որը կոչվում է լիցք : Ասում են, որ պրոտոններն ունեն
դրական (+) լիցք, իսկ էլեկտրոնները՝ բացասական (–): Նեյտրոնները չեզոք են և լիցք չունեն։ Բայց չնայած
մենք օգտագործում ենք գումարած և մինուս նշաններ՝ պրոտոններն ու էլեկտրոնները նշելու համար, այդ
նշանները իրականում չեն նշանակում գումարած և մինուս թվաբանական իմաստով, կամ որ պրոտոններն
ունեն մի բան, որը չունեն էլեկտրոնները: Այս նշանների օգտագործումը պարզապես նշանակում է, որ
պրոտոններն ու էլեկտրոնները ինչ-որ կերպ հակադիր են: Այս հակառակ բնութագիրը դրսևորվում է նրանով,
թե ինչպես են պրոտոններն ու էլեկտրոնները փոխկապակցված միմյանց հետ:
Պրոտոններն ու էլեկտրոնները կայուն են, երբ նրանք միասին գոյություն ունեն հավասար քանակությամբ:
Պրոտոնների և էլեկտրոնների անհավասարակշռությունը կփորձի շտկել ինքն իրեն: Գորգը էլեկտրոններ է
վերցնում կոշիկների ներբաններից, երբ դուք քայլում եք, բայց հենց որ դիպչեք դռամ բռմալօմ, կզգաք, որ մի
կայծ է անցնում: այսպես Հավասարակշռությունը վերականգնվում է. կայծը ստատիկ էլեկտրականության
արտանետում է, որը էլեկտրոնները տեղափոխում է գորգից ձեր մարմնի միջով բարդ ճանապարհով ետ:
Ստատիկ էլեկտրականությունը չի սահմանափակվում դռան բռնակներին դիպչող մատների կողմից
առաջացած փոքրիկ կայծերով: Փոթորիկների ժամանակ ամպերի ներքևի մասում կուտակում է էլեկտրոններ,
մինչդեռ ամպերի վերին մասերը կորցնում են էլեկտրոններ. ի վերջո, անհավասարակշռությունը հարթվում է
կայծակի հարվածով: Կայծակը շատ էլեկտրոններ են, որոնք շատ արագ շարժվում են մի կետից մյուսը:
Լապտերի էլեկտրաէներգիան ավելի կառավարելի է, քան կայծը կամ կայծակը: Լապտերի լույսը կայուն է և
շարունակական, քանի որ էլեկտրոնները պարզապես տեղից տեղ չեն ցատկում: Ատոմը, կորցնելով էլեկտրոնը
գրավում է այն վերցնում է մեկ այլ էլեկտրոն հարակից ատոմից, որընել վերցնում է էլեկտրոն մեկ այլ
հարակից ատոմից և այլն: Շղթայում էլեկտրական հոսանքը էլեկտրոնների անցումն է ատոմից ատոմ։

Բնականաբար, դա ինքնին չի լինում։ Մի սպասեք, որ էլեկտրաէներգիան գա միայն երկու կտոր մետաղալար


միացնելով: Ինչ-որ բան անհրաժեշտ է ստիպելու էլեկտրոններին շարժվել շղթայի երկայնքով: Կրկին
նայելով մեր պարզ լապտերի միացմանը, մենք համարձակորեն ենթադրում ենք, որ էլեկտրոնի շարժման
աղբյուրը ոչ թե լարերի և ոչ թե լամպի մեջ է, այլ, ամենայն հավանականությամբ, մարտկոցների մեջ:
Հավանաբար բոլորը գիտեն մարտկոցների մասին ամենակարևորը.

● Նրանք ունեն խողովակաձև ձև և ունեն տարբեր չափսեր, ինչպիսիք են D, C, A, AA և AAA:


● Անկախ մարտկոցի չափից, դրանք բոլորը «1,5 վոլտ»: են
● Մարտկոցի մի ծայրը հարթ է և պիտակավորված է մինուս նշանով (–); մյուս ծայրը մի փոքր
ելուստ ունի և պիտակավորված է գումարած նշանով (+):
● Եթե ցանկանում եք, որ ձեր սարքը ճիշտ աշխատի, լավ գաղափար է, որ մարտկոցները ճիշտ
տեղադրել
● Մարտկոցները վերջապես մաշվում են: Երբեմն դրանք կարելի է լիցքավորել, երբեմն՝ ոչ։
● Եվ վերջապես, մենք կասկածում ենք, որ ինչ-որ տարօրինակ ձևով մարտկոցները
էլեկտրաէներգիա են արտադրում:
Բոլոր մարտկոցները ենթարկվում են ինչ-որ քիմիական ռեակցիայի, որի ժամանակ որոշ մոլեկուլներ,
քայքայվելով կամ միավորվելով միմյանց հետ, վերածվում են այլ մոլեկուլների։ Մարտկոցներում
պարունակվող քիմիական նյութերն ընտրված են այնպես, որ դրանց միջև տեղի ունեցող ռեակցիաները
գեներացնեն պահեստային էլեկտրոններ մարտկոցի այն կողմում, որը նշված է մինուս նշանով և պահանջի
լրացուցիչ էլեկտրոններ մարտկոցի մյուս կողմում: Այս կերպ քիմիական էներգիան վերածվում է
էլեկտրական էներգիայի։
Քիմիական ռեակցիան չի կարող շարունակվել, քանի դեռ չկա որևէ միջոց, որով լրացուցիչ էլեկտրոնները
կարող են հեռացվել մարտկոցի բացասական կողմիցև վերադարձնել դրական կողմին: Այսպիսով, եթե
մարտկոցը միացված չէ որևէ բանի, առանձնապես ոչինչ չի պատահում: (Իրականում քիմիական
ռեակցիաները դեռ տեղի են ունենում, բայց շատ դանդաղ:) Ռեակցիաները տեղի են ունենում միայն այն
դեպքում, եթե առկա է էլեկտրական միացում, որը հեռացնում է էլեկտրոնները բացասական կողմից և
էլեկտրոններ մատակարարում դրական կողմին: Էլեկտրոնները շրջում են այս շղթայի մեջ ժամացույցի սլաքի
հակառակ ուղղությամբ.

Այս գրքում կարմիր գույնն օգտագործվում է ցույց տալու, որ էլեկտրականությունը հոսում է լարերի միջով:

Նկատի ունեցեք, որ երկու մարտկոցներն էլ նույն կերպ են ուղղված: Ներքևի մարտկոցի դրական կողմը
էլեկտրոններ է ստանում վերին մարտկոցի բացասական կողմից: Այս կերպ միացված երկու մարտկոցներ
(շարքով) իրենց պահում են մեկ մեծ մարտկոցի պես՝ 3 վոլտ լարմամբ։ Եթե մարտկոցներից մեկը գլխիվայր
շրջվի, միացումը կդադարի աշխատել.
Մարտկոցների երկու դրական բևեռներին անհրաժեշտ են էլեկտրոններ քիմիական ռեակցիաների համար,
բայց բևեռները կանգնած են միմյանց դեմ, և ճանապարհը, որով էլեկտրոնները կարող են անցնել այնտեղ
հասնելու համար, արգելափակված է:

Հիմա փորձենք միացնել դրական բևեռները իրար իսկ բացասականները իրար ներքևի նկարի խես.

Սա աշխատում է: Ասում են, որ մարտկոցները միացված են զուգահեռաբար , այլ ոչ թե հաջորդական, ինչպես


ցույց է տրված ավելի վերև: Համակցված լարումը 1,5 վոլտ է, որը նույնն է, ինչ մարտկոցներից
յուրաքանչյուրի լարումը։ Լույսը, հավանաբար, դեռ կվառվի, բայց ոչ այնքան պայծառ, որքան երկու
հաջորդական մարտկոցների դեպքում: Բայց մարտկոցները երկու անգամ ավելի երկար կծառայեն:
Սովորաբար մենք սիրում ենք մտածել մարտկոցի մասին որպես էլեկտրականություն մատակարարող սարքի:
Բայց մենք տեսանք, որ մենք կարող ենք նաև պատկերացնել սխեման որպես մարտկոցի քիմիական
ռեակցիաների իրականացման միջոց: Շղթան հեռացնում է էլեկտրոնները մարտկոցի բացասական ծայրից և
դրանք հասցնում մարտկոցի դրական ծայրին: Մարտկոցում ռեակցիաները շարունակվում են այնքան
ժամանակ, մինչև բոլոր քիմիական նյութերը սպառվեն, այդ ժամանակ դուք դեն եք նետում մարտկոցը կամ
վերալիցքավորում եք այն:
Մարտկոցի բացասական ծայրից մինչև մարտկոցի դրական ծայրը էլեկտրոնները հոսում են լարերի և լամպի
միջով: Բայց ինչո՞ւ են մեզ անհրաժեշտ լարերը: Չի՞ կարող հոսանքը պարզապես հոսել օդով: Դե, այո և ոչ:
Այո, էլեկտրաէներգիան կարող է հոսել օդով (հատկապես թաց օդով), հակառակ դեպքում մենք կայծակ չենք
տեսնի: Բայց էլեկտրաէներգիան այնքան էլ հեշտությամբ չի հոսում օդով:
էլեկտրաէներգիա տեղափոխելու համար որոշ նյութեր զգալիորեն ավելի լավն են, քան մյուսները:
Էլեկտրականություն կրելու տարրի կարողությունը կապված է նրա ենթաատոմային կառուցվածքի հետ:
Էլեկտրոնները պտտվում են միջուկի շուրջ տարբեր մակարդակներում, որոնք կոչվում են թաղանթներ:
Ատոմը, որն ունի ընդամենը մեկ էլեկտրոն իր արտաքին թաղանթում, կարող է հեշտությամբ հրաժարվել այդ
էլեկտրոնից, որն անհրաժեշտ է էլեկտրականություն տեղափոխելու համար: Այս նյութերը նպաստում են
էլեկտրաէներգիա տեղափոխելուն և, հետևաբար, համարվում են հաղորդիչներ : Լավագույն հաղորդիչներն են
պղինձը, արծաթը և ոսկին։ Պատահական չէ, որ այս երեք տարրերը գտնվում են պարբերական աղյուսակի
նույն սյունակում: Պղինձը մետաղալարեր պատրաստելու ամենատարածված նյութն է։
Այն նյութերը, որոնք հոսանք չեն անցկացնում, կոչվում են մեկուսիչներ : : Ռետինն ու պլաստիկը լավ
մեկուսիչներ են, այդ իսկ պատճառով այդ նյութերը հաճախ օգտագործվում են լարերը ծածկելու համար։
Կտորն ու փայտը նույնպես լավ մեկուսիչներ են, ինչպես չոր օդը: գրեթե ամեն ինչ էլեկտրաէներգիա
հաղորդում է, եթե լարումը բավականաչափ բարձր է սակայն որոշակի դիմադրություն ունի : Որքան երկար է
մետաղալարը, այնքան բարձր է նրա դիմադրությունը: Եթե փորձեիք միացնել լապտերը կիլոմետրեր
երկարությամբ լարերով, լարերի դիմադրությունն այնքան բարձր կլիներ, որ լապտերը չէր աշխատի:
Որքան հաստ է մետաղալարը, այնքան ցածր է նրա դիմադրությունը: Սա կարող է որոշակիորեն հակասական
լինել: Դուք կարող եք պատկերացնել, որ հաստ մետաղալարը շատ ավելի շատ էլեկտրաէներգիա է
պահանջում այն «լցնելու համար»: Բայց իրականում մետաղալարի հաստությունը հնարավորություն է տալիս
շատ ավելի շատ էլեկտրոնների շարժվել մետաղալարով:
Ես արդեն մի քանի անգամ օգտագործել եմ «լարում» տերմինը, բայց դեռ չեմ բացատրել դրա իմաստը։ Ի՞նչ է
նշանակում մարտկոցի մեկուկես վոլտ լարումը: Լարումը տարրական էլեկտրականության ամենաբարդ
հասկացություններից մեկն է: Լարումը մարտկոցի պոտենցիալ կարողությունն է աշխատելու համար: Լարումը
գոյություն ունի անկախ նրանից, թե ինչ-որ բան միացված է մարտկոցին, թե ոչ: Լարման միավորը՝ վոլտը (V),
անվանվել է կոմս Ալեսանդրո Վոլտայի (1745–1827) պատվին, ով առաջին մարտկոցը հորինել է 1800
թվականին։

Ջրի և խողովակների անալոգիան օգնում է այստեղ. հոսանքը նման է խողովակի միջով հոսող ջրի քանակին :
Լարումը նման է ջրի ճնշմանը : Դիմադրությունը նման է խողովակի լայնությանը. որքան փոքր է խողովակը,
այնքան մեծ է դիմադրությունը: Այսպիսով, որքան մեծ է ջրի ճնշումը, այնքան ավելի շատ ջուր է հոսում
խողովակի միջով: Որքան փոքր է խողովակը, այնքան քիչ ջուր է հոսում դրա միջով: Խողովակի միջով հոսող
ջրի քանակը (հոսանքը) ուղիղ համեմատական է ջրի ճնշմանը (լարմանը) և հակադարձ համեմատական է
խողովակի մաշվածությանը (դիմադրությանը):
Էլեկտրաէներգիայի մեջ դուք կարող եք հաշվարկել, թե որքան հոսանք է անցնում շղթայի միջով, եթե գիտեք
լարումը և դիմադրությունը: Դիմադրությունը` նյութի էլեկտրոնների հոսքը խոչընդոտելու միտումը, չափվում
է ohms-ով , որն անվանվել է Գեորգ Սայմոն Օհմի (1789–1854) պատվին, ով նաև առաջարկել է Օհմի
օրենքը: Օրենքում ասվում է

I = E/ R

որտեղ I-ն ավանդաբար օգտագործվում է հոսանքը ամպերով ներկայացնելու համար, E-ն օգտագործվում է
լարումը ներկայացնելու համար իսկ R-ը դիմադրություն է:
Օրինակ, եկեք նայենք մարտկոցին, որը պարզապես նստած է և միացված չէ որևէ բանի.

E լարումը 1,5 է։ Դա աշխատանք կատարելու ներուժ է: Բայց քանի որ դրական և բացասական տերմինալները
միացված են բացառապես օդով, դիմադրությունը (նշանը R) շատ, շատ, շատ բարձր է, ինչը նշանակում է, որ
հոսանքը (I) հավասար է 1,5 վոլտի՝ բաժանված մեծ թվի: Սա նշանակում է, որ հոսանքը գրեթե զրոյական է:
Հիմա եկեք միացնենք դրական և բացասական տերմինալները կարճ պղնձե մետաղալարով .

Սա հայտնի է որպես կարճ միացում : Լարումը դեռ 1,5 է, բայց դիմադրությունն այժմ շատ ու շատ ցածր է։
Հոսանքը 1,5 վոլտ է, որը բաժանված է շատ փոքր թվի: Սա նշանակում է, որ հոսանքը շատ ու շատ բարձր է
լինելու։ Լարի միջով շատ ու շատ էլեկտրոններ կհոսեն: Իրականում հոսանքը կսահմանափակվի մարտկոցի
ֆիզիկական չափերով: Եթե մարտկոցը բավականաչափ մեծ է, լարը կտաքանա, քանի որ էլեկտրական
էներգիան վերածվում է ջերմության: Եթե մետաղալարը շատ տաքանա, այն իրականում կփայլի և նույնիսկ
կարող է հալվել:
Շղթաների մեծ մասը գտնվում է այս երկու ծայրահեղությունների միջև: Մենք կարող ենք դրանք
խորհրդանշել այսպես.
Էլեկտրական ճարտարագետների համար զիգզագաձեվ գիծը ճանաչելի է որպես դիմադրության խորհրդանիշ:
Այստեղ դա նշանակում է, որ շղթան ունի դիմադրություն, որը ոչ շատ ցածր է, ոչ էլ շատ բարձր:
Եթե մետաղալարն ունի ցածր դիմադրություն, այն կարող է տաքանալ և սկսել փայլել: Այսպես է աշխատում
լամպը։ լամպը սովորաբար վերագրվում է Ամերիկայի ամենահայտնի գյուտարար Թոմաս Ալվա Էդիսոնին
(1847–1931), բայց գաղափարները լավ հայտնի էին այն ժամանակ, երբ նա արտոնագրեց լամպը (1879),
և շատ այլ գյուտարարներ նույնպես աշխատում էին խնդրի վրա:
Լամպի ներսում բարակ մետաղալար կա, որը սովորաբար պատրաստված է վոլֆրամից: մետաղալարի մի
ծայրը միացված է հիմքի ներքևի կոնտակտին. մյուս ծայրը միացված է մետաղական հիմքին։ Լարի
դիմադրությունը հանգեցնում է դրա տաքացմանը: Բաց երկնքի տակ վոլֆրամը տաքանում է և այրվում, բայց
վակուումում վոլֆրամը փայլում է և լույս է արձակում:
Ամենատարածված լապտերներն ունեն երկու մարտկոց միացված հաջորդաբար: Ընդհանուր լարումը 3.0
վոլտ է։ Լապտերի մեջ սովորաբար օգտագործվող տիպի լամպն ունի մոտ 4 ohms դիմադրություն: Այսպիսով,
հոսանքը 3 վոլտ է, որը բաժանվում է 4 ohms-ի կամ 0,75 ամպերի, որը կարող է արտահայտվել նաև որպես
750 միլիամպեր: Սա նշանակում է, որ լույսի լամպով ամեն վայրկյան հոսում է
4,680,000,000,000,000,000 էլեկտրոն:

Ինչպես գիտեք, ձեր տան համար գնած լամպերը պիտակավորված են որոշակի հզորությամբ վտ-ով : Վատն
անվանվել է Ջեյմս Ուոթի (1736–1819) պատվին, ով առավել հայտնի է շոգեմեքենայի վրա իր
աշխատանքով։ հզորությունը հաշվարկվում է բանաձևով.

P=ExI

Մեր լապտերի 3 վոլտը և 0,75 ամպերը ցույց են տալիս, որ գործ ունենք 2,25 վտ հզորությամբ լամպի հետ:
Ձեր տունը կարող է լուսավորված լինել 100 վտ հզորությամբ լամպերով: Դրանք նախատեսված են ձեր տան
120 վոլտ լարման համար: Այսպիսով, նրանց միջով հոսող հոսանքը հավասար է 100 վտ-ի՝ բաժանված 120
վոլտ-ի կամ մոտ 0,83 ամպերի: Այսպիսով, 100 վտ հզորությամբ լամպի դիմադրությունը 120 վոլտ է, որը
բաժանված է 0,83 ամպերի կամ 144 ohms-ի:
Այսպիսով, մենք կարծես թե վերլուծել ենք լապտերի մասին ամեն ինչ՝ մարտկոցները, լարերը և լամպը: Բայց
մենք մոռացել ենք ամենակարևոր մասը։
Այո, անջատիչը: Անջատիչը վերահսկում է, թե արդյոք էլեկտրական հոսանքը հոսում է շղթայում, թե ոչ: Երբ
անջատիչը թույլ է տալիս հոսել էլեկտրականությունը, ասում են, որ այն միացված է կամ շղթան փակ է :
Անջատված կամ բաց անջատիչը թույլ չի տալիս հոսել էլեկտրականությունը :
անջատիչը փակ է, կամ բաց է: լամպը վառվում է, կամ չի վառվում: Ինչպես երկուական ծածկագրերը, որոնք
հորինել են Մորզը և Բրայլը։ պարզ էլեկտրական սխեմաների և երկուական ծածկագրերի միջև այս
նմանությունը շատ օգտակար կլինի գալիք գլուխներում:
Գլուխ 5. Այնտեղ, անկյունում
Դուք տասներկու տարեկան եք: Մի սարսափելի օր ձեր լավագույն ընկերոջ ընտանիքը տեղափոխվում է մեկ
այլ քաղաք: Դուք երբեմն խոսում եք ձեր ընկերոջ հետ հեռախոսով, բայց հեռախոսային խոսակցությունները
նույնը չեն, ինչ ուշ գիշերային հանդիպումները, երբ լապտերները թարթում են Մորզեի կոդը: Ձեր երկրորդ
լավագույն ընկերը, ով ապրում է ձեր հարևան տանը, ի վերջո դառնում է ձեր նոր լավագույն ընկերը:
Ժամանակն է սովորեցնել ձեր նոր լավագույն ընկերոջը Մորզեի ծածկագիրը և ուշ գիշերվա լապտերները
նորից թարթել:
Խնդիրն այն է, որ ձեր նոր լավագույն ընկերոջ ննջասենյակի պատուհանը ձեր ննջասենյակի պատուհանի
դիմաց չէ: Տները կողք կողքի են, բայց ննջասենյակի պատուհանները նայում են նույն ուղղությամբ։ Քանի
դեռ չեք գտել դրսում մի քանի հայելիներ սարքելու միջոց, լապտերներն այժմ անբավարար են մթնշաղից հետո
հաղորդակցվելու համար:
Կամ նրանք.
Միգուցե այս պահին դուք ինչ-որ բան եք սովորել էլեկտրաէներգիայի մասին, ուստի որոշել եք ձեր սեփական
լապտերները պատրաստել մարտկոցներից, լամպերից, անջատիչներից և լարերից: Առաջին փորձի ժամանակ
դուք միացնում եք մարտկոցները և միացնում ձեր ննջասենյակը: Երկու լարեր դուրս են գալիս ձեր
պատուհանից, ցանկապատի միջով և մտնում ձեր ընկերոջ ննջասենյակ, որտեղ դրանք միացված են լույսի
լամպին.

Չնայած ես ցույց եմ տալիս միայն մեկ մարտկոց, դուք կարող եք իրականում երկուսն օգտագործել: Այս և
ապագա դիագրամներում սա կլինի անջատված (կամ բաց) անջատիչ.

և սա կլինի անջատիչը, երբ այն միացված է (կամ փակ).

Այս գլխի լապտերը աշխատում է նույն կերպ, ինչ նախորդ գլխում պատկերվածը, չնայած այս գլխի լապտերի
բաղադրիչները միացնող լարերը մի փոքր ավելի երկար են: Երբ փակում եք անջատիչը ձեր ծայրում, լույսը
վառվում է ձեր ընկերոջ ծայրում.
Այժմ դուք կարող եք հաղորդագրություններ ուղարկել Մորզեի կոդով:
Մեկ լապտեր աշխատելուց հետո կարող եք միացնել մեկ այլ միջքաղաքային լապտեր, որպեսզի ձեր ընկերը
կարողանա ձեզ հաղորդագրություններ ուղարկել.

Շնորհավորում եմ: Դուք հենց նոր ստեղծեցիք երկկողմանի հեռագրական համակարգ: Դուք կնկատեք, որ
սրանք երկու նույնական սխեմաներ են, որոնք ամբողջովին անկախ են և միմյանցից կապ չունեն:
Տեսականորեն, դուք կարող եք հաղորդագրություն ուղարկել ձեր ընկերոջը, մինչդեռ ձեր ընկերը
հաղորդագրություն է ուղարկում ձեզ (չնայած ձեր ուղեղի համար կարող է դժվար լինել միաժամանակ կարդալ
և ուղարկել հաղորդագրություններ):
Դուք կարող եք նաև բավական խելացի լինել՝ պարզելու, որ կարող եք նվազեցնել ձեր լարերի պահանջները
25 տոկոսով՝ կոնֆիգուրացիան միացնելով հետևյալ կերպ.
Ուշադրություն դարձրեք, որ երկու մարտկոցների բացասական տերմինալներն այժմ միացված են: Երկու
շրջանաձև սխեմաները (մարտկոցը լամպից մարտկոցի անցնելու համար) դեռևս գործում են անկախ, չնայած
նրանք այժմ միացված են սիամական երկվորյակների նման:
Այս կապը կոչվում է ընդհանուր : Այս միացումում ընդհանուրը տարածվում է այն կետից, որտեղ ամենաձախ
լամպը և մարտկոցը միացված են մինչև այն կետը, որտեղ միացված են ամենաաջ լույսի լամպը և մարտկոցը:
Այս կապերը նշվում են կետերով:
Եկեք ավելի ուշադիր նայենք, որպեսզի համոզվենք, որ ոչ մի զվարճալի բան տեղի չի ունենում: Նախ, երբ
սեղմում եք ձեր կողմի անջատիչը, ձեր ընկերոջ տան լամպը վառվում է: Կարմիր լարերը ցույց են տալիս
էլեկտրականության հոսքը միացումում.

Շղթայի մյուս մասում էլեկտրականություն չի հոսում, քանի որ էլեկտրոնների համար տեղ չկա, որ գնան
միացումն ավարտելու համար:
Երբ դուք չեք ուղարկում, բայց ձեր ընկերն է ուղարկում, ձեր ընկերոջ տան անջատիչը կառավարում է ձեր
տան լույսի լամպը: Կրկին կարմիր լարերը ցույց են տալիս, թե ինչպես է էլեկտրականությունը հոսում
շղթայում.
Երբ դուք և ձեր ընկերը երկուսն էլ փորձում եք ուղարկել միաժամանակ, երբեմն երկու անջատիչները բաց են,
երբեմն մի անջատիչը փակ է, բայց մյուսը բաց է, և երբեմն երկու անջատիչները սեղմված են: Այդ դեպքում
էլեկտրականության հոսքը շղթայում ունի հետևյալ տեսքը.

Շղթայի ընդհանուր մասով հոսանք չի անցնում:


Երկու առանձին սխեմաները մեկ շղթայի մեջ միացնելու համար ընդհանուր օգտագործելով՝ մենք երկու տների
միջև էլեկտրական կապը չորս լարից իջեցրել ենք երեք լարերի և կրճատել ենք մեր լարերի ծախսերը 25
տոկոսով:
Եթե մենք ստիպված լինենք լարերը լարել շատ երկար հեռավորության վրա, մենք կարող ենք գայթակղվել
ավելի նվազեցնել մեր ծախսերը՝ հեռացնելով մեկ այլ մետաղալար: Ցավոք, դա հնարավոր չէ 1,5 վոլտ D
բջիջների և փոքր լամպերի դեպքում: Բայց եթե գործ ունենայինք 100 վոլտ լարման մարտկոցների և շատ
ավելի մեծ լամպերի հետ, դա, անշուշտ, կարելի էր անել:
Ահա հնարքը. Երբ դուք ստեղծեք շղթայի ընդհանուր մաս, դուք ստիպված չեք լինի դրա համար մետաղալարեր
օգտագործել: Դուք կարող եք մետաղալարը փոխարինել այլ բանով: Եվ այն, ինչով դուք կարող եք փոխարինել
այն, մոտավորապես 7900 մղոն տրամագծով հսկա գունդ է՝ կազմված մետաղից, քարից, ջրից և օրգանական
նյութերից, որոնց մեծ մասը մեռած է: Հսկա գունդը մեզ հայտնի է որպես Երկիր:
Երբ ես նկարագրեցի լավ դիրիժորներին վերջին գլխում, ես նշեցի արծաթը, պղինձը և ոսկին, բայց ոչ
մանրախիճ և ցանքածածկ: Իրականում, երկիրն այնքան էլ տաք հաղորդիչ չէ, չնայած հողի որոշ տեսակներ
(խոնավ հող, օրինակ) ավելի լավն են, քան մյուսները (օրինակ՝ չոր ավազը): Բայց մի բան, որ մենք իմացանք
դիրիժորների մասին, սա է. Որքան մեծ է, այնքան լավ: Շատ հաստ մետաղալարը շատ ավելի լավ է վարում,
քան շատ բարակ մետաղալարը: Ահա թե որտեղ է երկիրը գերազանցում: Դա իսկապես, իրոք, իսկապես մեծ է:
Երկիրը որպես հաղորդիչ օգտագործելու համար դուք պարզապես չեք կարող լոլիկի բույսերի կողքին մի փոքր
մետաղալար կպցնել գետնին: Դուք պետք է օգտագործեք մի բան, որը պահպանում է էական շփումը երկրի
հետ, և ես նկատի ունեմ մեծ մակերես ունեցող հաղորդիչ: Լավ լուծումներից մեկը առնվազն 8 ոտնաչափ
երկարությամբ և ½ դյույմ տրամագծով պղնձե բևեռն է: Դա ապահովում է 150 քառակուսի դյույմ շփում
երկրի հետ: Դուք կարող եք մուրճով թաղել ձողը հողի մեջ, ապա միացնել մետաղալարով: Կամ, եթե ձեր տան
սառը ջրի խողովակները պատրաստված են պղնձից և ծագում են տնից դուրս հողից, կարող եք խողովակին
միացնել մետաղալար:
Երկրի հետ էլեկտրական շփումը Մեծ Բրիտանիայում կոչվում է երկիր , իսկ Ամերիկայում՝ հող ։ Մի փոքր
շփոթություն է շրջապատում հիմք բառը , քանի որ այն նաև հաճախ օգտագործվում է շղթայի մի մասի համար,
որը մենք անվանում էինք սովորական : Այս գլխում, և քանի դեռ ես այլ բան չեմ նշել, հիմքը ֆիզիկական կապ
է երկրի հետ:
Երբ մարդիկ գծում են էլեկտրական սխեմաներ, նրանք օգտագործում են այս նշանը՝ հողը ներկայացնելու
համար.

Էլեկտրիկները օգտագործում են այս խորհրդանիշը, քանի որ նրանք չեն սիրում ժամանակ հատկացնել գետնի
մեջ թաղված 8 ոտնաչափ պղնձե ձող նկարելու համար:
Տեսնենք, թե ինչպես է սա աշխատում: Մենք սկսեցինք այս գլուխը՝ նայելով միակողմանի կոնֆիգուրացիան,
ինչպիսին է սա.

Եթե դուք օգտագործում եք բարձր լարման մարտկոցներ և լամպեր, ապա ձեզ հարկավոր կլինի միայն մեկ լար
ձեր տան և ձեր ընկերոջ տան միջև, քանի որ կարող եք օգտագործել երկիրը որպես միակցիչներից մեկը.
Երբ դուք միացնում եք անջատիչը, էլեկտրականությունը հոսում է այսպես.

Էլեկտրոնները դուրս են գալիս երկրից ձեր ընկերոջ տանը, անցնում են լամպի և մետաղալարերի միջով, ձեր
տան անջատիչով, այնուհետև մտնում են մարտկոցի դրական տերմինալը: Մարտկոցի բացասական
տերմինալից էլեկտրոնները գնում են երկիր:
Կարող եք նաև պատկերացնել, թե ինչպես են էլեկտրոնները ցատկում ձեր տան բակում թաղված 8 ֆուտանոց
պղնձե բևեռից դեպի երկիր, այնուհետև սլանում են երկրի միջով՝ հասնելու ձեր ընկերոջ տան բակում
թաղված 8 ֆուտանոց պղնձե բևեռին:
Բայց եթե հաշվի առնեք, որ Երկիրն այս նույն գործառույթն է կատարում աշխարհի հազարավոր էլեկտրական
սխեմաների համար, կարող եք հարցնել. Ինչպե՞ս են էլեկտրոնները գիտեն, թե ուր գնալ: Դե, ակնհայտ է, որ
չեն անում: Երկրի տարբեր պատկերը շատ ավելի տեղին է թվում:
Այո, Երկիրը էլեկտրաէներգիայի զանգվածային հաղորդիչ է, բայց այն կարող է դիտվել նաև որպես
էլեկտրոնների և՛ աղբյուր, և՛ պահեստ: Երկիրը էլեկտրոնների համար է, ինչպես օվկիանոսը՝ ջրի կաթիլների
համար : Երկիրը էլեկտրոնների գրեթե անսահմանափակ աղբյուր է, ինչպես նաև էլեկտրոնների հսկա
խորտակիչ:
Երկիրը, այնուամենայնիվ, որոշակի դիմադրություն ունի: Ահա թե ինչու մենք չենք կարող օգտագործել
հողային հիմքը մեր էլեկտրահաղորդման կարիքները նվազեցնելու համար, եթե մենք խաղում ենք 1,5 վոլտ D
բջիջների և լապտերի լամպերի հետ: Երկիրը պարզապես չափազանց մեծ դիմադրություն ունի ցածր լարման
մարտկոցների համար:
Դուք նկատում եք, որ նախորդ երկու դիագրամները ներառում են մարտկոց, որի բացասական տերմինալը
միացված է գետնին.
Ես այլևս չեմ նկարելու գետնին միացված այս մարտկոցը: Փոխարենը, ես կօգտագործեմ մեծատառ V, որը
նշանակում է լարում : Միակողմանի լամպի հեռագիրն այժմ ունի հետևյալ տեսքը.

V-ը նշանակում է լարման , բայց այն կարող է նաև նշանակել վակուում : Մտածեք V-ի մասին որպես
էլեկտրոնային վակուում, իսկ գետինը որպես էլեկտրոնների օվկիանոս: Էլեկտրոնային վակուումը
էլեկտրոնները քաշում է երկրից շղթայի միջով՝ կատարելով աշխատանք ճանապարհին (օրինակ՝ լույսի լամպ
վառելը):
Գետինը երբեմն նաև հայտնի է որպես զրոյական պոտենցիալի կետ : Սա նշանակում է, որ լարում չկա:
Լարումը, ինչպես ես բացատրեցի ավելի վաղ, պոտենցիալ է աշխատանք կատարելու համար, ինչպես օդում
կախված աղյուսը էներգիայի պոտենցիալ աղբյուր է: Զրոյական պոտենցիալը նման է գետնին նստած աղյուսի.
տեղ չի մնացել, որ նա ընկնի:
4-րդ գլխում առաջին բաներից մեկը, որ մենք նկատեցինք, այն էր, որ սխեմաները շրջանակներ էին: Մեր նոր
շղթան ընդհանրապես շրջանագծի տեսք չունի: Այնուամենայնիվ, դա դեռ մեկն է: Դուք կարող եք փոխարինել
V-ը մարտկոցով, որի բացասական տերմինալը միացված է գետնին, այնուհետև կարող եք մետաղալար քաշել,
որը միացնում է բոլոր այն վայրերը, որտեղ դուք տեսնում եք հողի նշան: Դուք կհայտնվեք նույն
գծապատկերով, որով մենք սկսել ենք այս գլխում:
Այսպիսով, մի քանի պղնձե ձողերի (կամ սառը ջրի խողովակների) օգնությամբ մենք կարող ենք կառուցել
երկկողմանի Մորզե կոդի համակարգ՝ ընդամենը երկու լարով, որոնք հատում են ցանկապատը ձեր տան և ձեր
ընկերոջ միջև:
Այս սխեման ֆունկցիոնալորեն նույնն է, ինչ նախկինում ցուցադրված կոնֆիգուրացիան, որում երեք լարերը
հատում էին տների միջև ցանկապատը:
Այս գլխում մենք կարևոր քայլ ենք կատարել հաղորդակցության էվոլյուցիայի մեջ: Նախկինում մենք
կարողանում էինք շփվել Մորզեի կոդով, բայց միայն ուղիղ տեսադաշտով և միայն այնքան հեռու, որքան
կարող էր անցնել լուսարձակի ճառագայթը:
Օգտագործելով լարերը՝ մենք ոչ միայն համակարգ ենք ստեղծել՝ տեսադաշտից այն կողմ գտնվող
անկյուններում հաղորդակցվելու համար, այլև մենք մեզ ազատել ենք հեռավորության սահմանափակումից:
Մենք կարող ենք շփվել հարյուրավոր և հազարավոր մղոնների վրա՝ միայն երկար ու երկար լարերը լարելով:
Դե, ոչ ճշգրիտ: Չնայած պղինձը էլեկտրականության շատ լավ հաղորդիչ է, այն կատարյալ չէ: Որքան երկար
են լարերը, այնքան ավելի մեծ դիմադրություն ունեն: Որքան շատ դիմադրություն, այնքան քիչ հոսանք է
հոսում: Որքան քիչ է հոսանքը, այնքան մթագնում են լույսի լամպերը:
Այսպիսով, կոնկրետ որքա՞ն ժամանակ կարող ենք պատրաստել լարերը: Դա կախված է. Ենթադրենք, դուք
օգտագործում եք օրիգինալ չորս մետաղալարով, երկկողմանի միացում առանց հիմքերի և ընդհանուրների, և
դուք օգտագործում եք լապտերի մարտկոցներ և լամպեր: Ձեր ծախսերը նվազեցնելու համար դուք կարող եք ի
սկզբանե գնել 20 չափիչ բարձրախոսի մետաղալար Radio Shack-ից 9,99 դոլարով 100 ֆուտի դիմաց:
Բարձրախոսի լարը սովորաբար օգտագործվում է ձեր բարձրախոսները ձեր ստերեո համակարգին միացնելու
համար: Այն ունի երկու հաղորդիչ, ուստի այն նաև լավ ընտրություն է մեր հեռագրական համակարգի համար:
Եթե ձեր ննջասենյակը և ձեր ընկերոջ ննջասենյակը միմյանցից 50 ոտնաչափ հեռավորության վրա են, ապա
այս մետաղալարն այն ամենն է, ինչ ձեզ հարկավոր է:
Լարի հաստությունը չափվում է ամերիկյան Wire Gauge- ով կամ AWG-ով : Որքան փոքր է AWG թիվը,
այնքան ավելի հաստ է մետաղալարը և ավելի քիչ դիմադրություն ունի: Ձեր գնած բարձրախոսի 20
տրամաչափի մետաղալարն ունի մոտ 0,032 դյույմ տրամագիծ և 1000 ֆուտի դիմաց 10 Օմ դիմադրություն,
կամ 1 Օմ ննջասենյակների միջև 100 ոտնաչափ հետադարձ հեռավորության համար:
Դա ամենևին էլ վատ չէ, բայց ի՞նչ կլինի, եթե մենք լարը կտրենք մեկ մղոնով: Լարի ընդհանուր
դիմադրությունը կլինի ավելի քան 100 ohms: Հիշեք վերջին գլխից, որ մեր լամպը ընդամենը 4 ohms էր:
Օհմի օրենքի հիման վրա մենք հեշտությամբ կարող ենք հաշվարկել, որ շղթայի միջոցով հոսանքն այլևս չի
լինի 0,75 ամպ (3 վոլտ բաժանված 4 ohms-ի վրա), ինչպես նախկինում, այլ այժմ կլինի 0,03 amp-ից
պակաս (3 վոլտը բաժանված է ավելի քան 100 ohms-ով): Գրեթե անկասկած, դա բավարար հոսանք չի լինի
լամպը լուսավորելու համար:
Ավելի հաստ մետաղալար օգտագործելը լավ լուծում է, բայց դա կարող է թանկ լինել: Տասը չափիչ
մետաղալարը (որը Radio Shack-ը վաճառում է որպես Automotive Hookup Wire 11,99 դոլարով 35
ոտնաչափով, և ձեզ երկու անգամ ավելի շատ է պետք, քանի որ այն ունի միայն մեկ հաղորդիչ, քան երկու)
ունի մոտ 0,1 դյույմ հաստություն, բայց ունի ընդամենը 1 Օմ դիմադրություն: 1000 ֆուտի վրա կամ 5
ohms մեկ մղոնում:
Մեկ այլ լուծում է լարման բարձրացումը և շատ ավելի բարձր դիմադրությամբ լամպերի օգտագործումը:
Օրինակ, 100 վտ հզորությամբ լամպը, որը լուսավորում է ձեր տան սենյակը, նախատեսված է 120 վոլտով
օգտագործելու համար և ունի մոտ 144 ohms դիմադրություն: Այդ դեպքում լարերի դիմադրությունը շատ
ավելի քիչ կազդի ընդհանուր սխեմայի վրա:
Սրանք խնդիրներ են, որոնց բախվել են 150 տարի առաջ մարդիկ, ովքեր ստեղծել են առաջին հեռագրական
համակարգերը Ամերիկայում և Եվրոպայում: Անկախ լարերի հաստությունից և լարման բարձր մակարդակից,
հեռագրային լարերը պարզապես հնարավոր չէր անվերջ շարունակել։ Առավելագույնը, այս սխեմայի
համաձայն աշխատող համակարգի սահմանը մի քանի հարյուր մղոն էր: Դա ոչ մի տեղ մոտ չէ Նյու Յորքի և
Կալիֆոռնիայի միջև հազարավոր մղոնների տարածմանը:
Այս խնդրի լուծումը` ոչ թե լապտերների, այլ անցյալի կտտացող և թրթռացող հեռագրերի համար, պարզվում
է, որ պարզ ու խոնարհ սարք է, բայց որից կարելի է կառուցել ամբողջ համակարգիչներ:
Գլուխ 6. Հեռագրեր և ռելեներ
Սամուել Ֆինլի Բրիզ Մորզը ծնվել է 1791 թվականին Մասաչուսեթս նահանգի Չարլսթոն քաղաքում, այն
քաղաքում, որտեղ կռվել է Բունկեր բլրի ճակատամարտը և որն այժմ Բոստոնի հյուսիս-արևելյան մասն է:
Մորզի ծննդյան տարում Միացյալ Նահանգների Սահմանադրությունը վավերացվել էր ընդամենը երկու տարի
առաջ, և Ջորջ Վաշինգտոնն իր առաջին ժամկետն էր որպես նախագահ: Եկատերինա Մեծը կառավարում էր
Ռուսաստանը։ Լյուդովիկոս XVI-ը և Մարի Անտուանետը երկու տարի անց կկորցնեն իրենց գլուխները
Ֆրանսիական հեղափոխությունից: Եվ 1791 թվականին Մոցարտն ավարտեց «Կախարդական սրինգը» ՝ իր
վերջին օպերան, և մահացավ նույն տարում 35 տարեկան հասակում:
Մորզը կրթություն է ստացել Յեյլում և արվեստ է սովորել Լոնդոնում։ Նա դարձավ հաջողակ դիմանկարիչ։
Նրա «Գեներալ Լաֆայետ» կտավը (1825) կախված է Նյու Յորքի քաղաքապետարանում։ 1836 թվականին
նա անկախ թեկնածուով առաջադրվեց Նյու Յորքի քաղաքապետի պաշտոնում և ստացավ ձայների 5,7
տոկոսը։ Նա նաև վաղ լուսանկարչության սիրահար էր: Մորզը սովորել է, թե ինչպես պատրաստել
դագերոտիպային լուսանկարներ ինքն իրենից՝ Լուի Դագերից և արել է Ամերիկայի առաջին դագերոտիպերից
մի քանիսը: 1840 թվականին նա այդ գործընթացը սովորեցրեց 17-ամյա Մեթյու Բրեյդիին, ով իր
գործընկերների հետ պատասխանատու կլիներ ստեղծելու Քաղաքացիական պատերազմի ամենահիշարժան
լուսանկարները՝ Աբրահամ Լինքոլնը և ինքը՝ Սամուել Մորսը:

Բայց սրանք ընդամենը տողատակեր են էկլեկտիկ կարիերայի համար: Սամուել Ֆ.


Համաշխարհային ակնթարթային հաղորդակցությունը, որին մենք սովոր ենք, համեմատաբար վերջերս տեղի
ունեցած զարգացումն է: 1800-ականների սկզբին դուք կարող էիք շփվել ակնթարթորեն և կարող էիք շփվել
երկար հեռավորությունների վրա, բայց երկուսն էլ միաժամանակ չէիք կարող անել: Ակնթարթային
հաղորդակցությունը սահմանափակվում էր այնքանով, որքանով ձեր ձայնը կարող էր տանել (ուժեղացում
չկա) կամ այնքանով, որքանով կարող էր տեսնել աչքը (հնարավոր է՝ աստղադիտակի օգնությամբ):
Նամակներով ավելի երկար հեռավորությունների վրա հաղորդակցությունը ժամանակ էր պահանջում և
ներառում էր ձիեր, գնացքներ կամ նավեր:
Մորզի գյուտից տասնամյակներ առաջ բազմաթիվ փորձեր են արվել արագացնելու հեռահար
հաղորդակցությունը: Տեխնիկապես պարզ մեթոդները կիրառում էին բլուրների վրա կանգնած տղամարդկանց
ռելեային համակարգ՝ սեմաֆորային ծածկագրերով դրոշներ ծածանելով: Տեխնիկապես ավելի բարդ
լուծումներում օգտագործվում էին շարժական ձեռքերով մեծ կառուցվածքներ, որոնք հիմնականում անում էին
նույնը, ինչ տղամարդիկ ծածանում էին դրոշները:
Հեռագրի գաղափարը (բառացիորեն նշանակում է «հեռավոր գրություն») անշուշտ օդում էր 1800-ականների
սկզբին, և այլ գյուտարարներ դանակահարել էին այն նախքան Սամուել Մորզը սկսել էր փորձերը 1832
թվականին: Սկզբունքորեն, էլեկտրական հեռագրի գաղափարը կայանում էր նրանում. պարզ. Դուք ինչ-որ բան
եք անում լարերի մի ծայրում, ինչը հանգեցնում է նրան, որ ինչ-որ բան տեղի է ունենում մետաղալարի մյուս
ծայրում: Սա հենց այն է, ինչ մենք արեցինք վերջին գլխում, երբ պատրաստեցինք միջքաղաքային լապտերը:
Այնուամենայնիվ, Մորզը չէր կարող օգտագործել լույսի լամպը որպես իր ազդանշանային սարք, քանի որ
գործնական լամպը չէր հայտնագործվի մինչև 1879 թվականը: Փոխարենը, Մորզը հիմնվեց
էլեկտրամագնիսականության երևույթի վրա :
Եթե վերցնեք երկաթե ձող, փաթաթեք այն մի քանի հարյուր պտույտ բարակ մետաղալարով, ապա հոսանք
անցկացնեք մետաղալարով, երկաթե ձողը դառնում է մագնիս: Այնուհետև այն ձգում է երկաթի և պողպատի
այլ կտորներ: (Էլեկտրամագնիսում բավականաչափ բարակ մետաղալար կա՝ բավականաչափ մեծ
դիմադրություն ստեղծելու համար, որպեսզի էլեկտրամագնիսը կարճ միացում չստեղծի:) Հեռացրեք հոսանքը,
և երկաթե ձողը կորցնում է իր մագնիսականությունը.

Էլեկտրամագնիսը հեռագրի հիմքն է։ Անջատիչը մի ծայրով միացնելն ու անջատելը ստիպում է


էլեկտրամագնիսին ինչ-որ բան անել մյուս ծայրում:
Մորզի առաջին հեռագրերը իրականում ավելի բարդ էին, քան նրանք, որոնք հետագայում ստեղծվեցին: Մորզը
կարծում էր, որ հեռագրային համակարգն իրականում պետք է ինչ-որ բան գրի թղթի վրա, կամ ինչպես
համակարգիչ օգտագործողները հետագայում կասեին այն՝ «արտադրել թղթային պատճեն»: Իհարկե, սա
պարտադիր չէ խոսքեր լինել, քանի որ դա չափազանց բարդ կլիներ: Բայց ինչ-որ բան պետք է գրվի թղթի վրա,
լինի դա ճռճռոց, թե կետեր ու գծիկներ: Ուշադրություն դարձրեք, որ Մորզը խրված էր մի պարադիգմի մեջ,
որը պահանջում էր թուղթ և ընթերցանություն, ինչպես Վալենտին Հաուիի այն պատկերացումը, որ կույրերի
համար նախատեսված գրքերը պետք է օգտագործեն այբուբենի բարձր տառերը:
Թեև Սամուել Մորզը 1836 թվականին տեղեկացրեց արտոնագրային գրասենյակին, որ նա հաջողակ
հեռագիր է հորինել, միայն 1843 թվականին նա կարողացավ համոզել Կոնգրեսին ֆինանսավորել սարքի
հանրային ցուցադրությունը: Պատմական օրը 1844 թվականի մայիսի 24-ն էր, երբ Վաշինգտոնի և
Մերիլենդ նահանգի Բալթիմոր միջև անցկացված հեռագրական գիծը հաջողությամբ փոխանցեց
աստվածաշնչյան ուղերձը. «Ի՞նչ է արել Աստված»:
Ավանդական հեռագրային «բանալին», որն օգտագործվում էր հաղորդագրություններ ուղարկելու համար,
այսպիսի տեսք ուներ.

Չնայած շքեղ տեսքին, սա պարզապես անջատիչ էր, որը նախատեսված էր առավելագույն արագության
համար: Բանալին երկար ժամանակ օգտագործելու ամենահարմար ձևը բռնակը բթամատի, ցուցամատի և
միջնամատի միջև պահելն ու վեր ու վար սեղմելն էր: Բանալին սեղմած պահելով կարճ
ժամանակահատվածում առաջացավ Մորզեի կոդ: Այն ավելի երկար պահելով՝ ստացվեց Մորզեի կոդ:
Լարի մյուս ծայրում մի ընդունիչ էր, որը հիմնականում էլեկտրամագնիս էր, որը քաշում էր մետաղյա լծակը:
Ի սկզբանե էլեկտրամագնիսը կառավարում էր գրիչը: Մինչ փաթաթվող զսպանակ օգտագործող մեխանիզմը
կամաց-կամաց թղթի գլան էր քաշում գաջեթի միջով, կցված գրիչը ցատկում էր վեր ու վար և թղթի վրա կետեր
ու գծիկներ գծեց: Այն անձը, ով կարող էր կարդալ Մորզեի կոդը, այնուհետև կետերն ու գծիկները տառերով և
բառերով կվերծաներ:
Իհարկե, մենք՝ մարդիկ, ծույլ տեսակ ենք, և հեռագրային օպերատորները շուտով հայտնաբերեցին, որ կարող
են արտագրել կոդը՝ պարզապես լսելով, թե ինչպես է գրիչը ցատկում վեր ու վար: Գրիչի մեխանիզմը ի վերջո
վերացվել է հօգուտ ավանդական հեռագրային «հնչյունի», որն այսպիսի տեսք ուներ.

Երբ սեղմվեց հեռագրային ստեղնը, ձայնային սարքի էլեկտրամագնիսը ներքև քաշեց շարժական սանդղակը, և
այն արձակեց «կտտոց» ձայն։ Երբ բանալին բաց է թողնվել, ձողը վերադարձել է իր բնականոն դիրքին՝
ստեղծելով «ճաք» ձայն: Արագ «click-clack»-ը մի կետ էր. ավելի դանդաղ «click…clack»-ը գծիկ էր:
Բանալին, ձայնային սարքը, մարտկոցը և որոշ լարեր կարող են միացված լինել այնպես, ինչպես նախորդ
գլխի լույսի լույսի հեռագիրը.
Ինչպես պարզեցինք, երկու հեռագրական կայանները միացնող երկու լարերի կարիք չկա: Մեկ մետաղալարը
բավական կլինի, եթե երկիրը ապահովում է շղթայի մյուս կեսը:
Ինչպես արեցինք նախորդ գլխում, մենք կարող ենք փոխարինել գետնին միացված մարտկոցը մեծ V-ով:
Այսպիսով, ամբողջական միակողմանի կարգավորումը նման է հետևյալին.

Երկկողմանի հաղորդակցությունը պարզապես պահանջում է մեկ այլ բանալի և ուղարկող: Սա նման է նրան,
ինչ մենք արեցինք նախորդ գլխում:
Հեռագրի գյուտը իսկապես նշանավորում է ժամանակակից հաղորդակցության սկիզբը: Առաջին անգամ
մարդիկ կարողացան շփվել ավելի հեռու, քան աչքը կարող էր տեսնել կամ ականջը կարող էր լսել և ավելի
արագ, քան ձին կարող էր վազել: Այն, որ այս գյուտը օգտագործում էր երկուական ծածկագիր, առավել
հետաքրքիր է: Էլեկտրական և անլար կապի ավելի ուշ ձևերում, ներառյալ հեռախոսը, ռադիոն և
հեռուստատեսությունը, երկուական ծածկագրերը լքվեցին, որպեսզի հետագայում հայտնվեն
համակարգիչներում, կոմպակտ սկավառակներով, թվային տեսասկավառակներում, թվային արբանյակային
հեռուստատեսային հեռարձակմամբ և բարձր հստակությամբ հեռուստատեսությամբ:
Մորզեի հեռագիրը հաղթեց այլ նմուշների նկատմամբ, մասամբ այն պատճառով, որ այն հանդուրժում էր վատ
գծերի պայմանները: Եթե դուք մետաղալար եք կապում բանալիի և ձայնային ազդանշանի միջև, այն
սովորաբար աշխատում էր: Այլ հեռագրական համակարգերն այնքան էլ ներողամիտ չէին: Բայց ինչպես նշեցի
վերջին գլխում, հեռագրի մեծ խնդիրն ընկած էր երկար երկարությամբ մետաղալարերի դիմադրության մեջ:
Թեև որոշ հեռագրական գծեր օգտագործում էին մինչև 300 վոլտ և կարող էին աշխատել 300 մղոն
երկարությամբ, լարերը չէին կարող անվերջ երկարացնել:
Ակնհայտ լուծումներից մեկը ռելեային համակարգ ունենալն է: Մոտավորապես յուրաքանչյուր երկու հարյուր
մղոն մեկ անձ, որը հագեցած էր ձայնային ազդանշանով և բանալիով, կարող էր հաղորդագրություն ստանալ
և նորից ուղարկել այն:
Այժմ պատկերացրեք, որ դուք աշխատանքի եք ընդունվել հեռագրային ընկերության կողմից՝ այս ռելեային
համակարգի մաս լինելու համար: Նրանք քեզ դուրս են հանել Նյու Յորքի և Կալիֆոռնիայի միջև ընկած
հատվածում, մի փոքրիկ խրճիթում՝ սեղանով և աթոռով: Արևելյան պատուհանից եկող լարը միացված է
ձայնավորին։ Ձեր հեռագրական բանալին միացված է մարտկոցին և արևմտյան պատուհանից դուրս եկող
մետաղալարին: Ձեր խնդիրն է ստանալ հաղորդագրություններ, որոնք ծագում են Նյու Յորքից և նորից
ուղարկել դրանք, ի վերջո հասնել Կալիֆոռնիա:
Սկզբում դուք նախընտրում եք ստանալ մի ամբողջ հաղորդագրություն, նախքան այն նորից ուղարկելը: Դուք
գրում եք այն տառերը, որոնք համապատասխանում են ձայնի կտտոցներին, և երբ հաղորդագրությունն
ավարտվում է, սկսում եք այն ուղարկել ձեր բանալին օգտագործելով: Ի վերջո, դուք ստանում եք
հաղորդագրություն ուղարկելու հմտություն, երբ այն լսում եք՝ առանց ամբողջը գրելու: Սա խնայում է
ժամանակը:
Մի օր հաղորդագրություն ուղարկելու ժամանակ դու նայում ես բարձր ու վար ցատկող ձայնի գծին, և նայում
ես մատներիդ, որոնք ցատկում են ստեղնը վեր ու վար: Դու նորից նայում ես հնչյունին, և նորից նայում ես
ստեղնին, և հասկանում ես, որ հնչյունը ցատկում է վերև վար, ինչպես որ բանալին վեր ու վար է ցատկում:
Այսպիսով, դուք դուրս եք գալիս և վերցնում մի փոքր փայտ, և օգտագործում եք փայտն ու մի պարան,
որպեսզի ֆիզիկապես միացնեք հնչյունն ու բանալին.

Այժմ այն աշխատում է ինքնուրույն, և դուք կարող եք հանգստանալ կեսօրից հետո և գնալ ձկնորսության:
Հետաքրքիր ֆանտազիա է, բայց իրականում Սամուել Մորզը վաղուց էր հասկացել այս սարքի գաղափարը:
Մեր հորինած սարքը կոչվում է կրկնողիչ կամ ռելե : Ռելեը նման է ձայնային ազդանշանի, քանի որ
մուտքային հոսանքն օգտագործվում է էլեկտրամագնիսը սնուցելու համար, որը ցած է քաշում մետաղական
լծակը: Լծակը, սակայն, օգտագործվում է որպես մարտկոցը ելքային մետաղալարին միացնող անջատիչի մաս:
Այս կերպ թույլ ներգնա հոսանքը «ուժեղացվում է» ավելի ուժեղ ելքային հոսանք ստեղծելու համար։
Բավական սխեմատիկորեն գծված ռելեն ունի հետևյալ տեսքը.
Երբ մուտքային հոսանքը գործարկում է էլեկտրամագնիսը, էլեկտրամագնիսը ցած է քաշում մետաղի ճկուն
շերտը, որը գործում է որպես անջատիչ՝ ելքային հոսանքը միացնելու համար.

Այսպիսով, հեռագրային ստեղնը, ռելեը և ձայնային ազդանշանը միացված են քիչ թե շատ այսպես.

Ռելեն ուշագրավ սարք է։ Դա, անշուշտ, անջատիչ է, բայց անջատիչ, որը միացվում և անջատվում է ոչ թե
մարդու ձեռքով, այլ հոսանքի միջոցով: Նման սարքերով դուք կարող եք զարմանալի բաներ անել: Դուք կարող
եք իրականում հավաքել համակարգչի մեծ մասը նրանց հետ:
Այո, այս էստաֆետային իրը չափազանց քաղցր գյուտ է հեռագրության թանգարանի շուրջ նստած թողնելու
համար: Եկեք բռնենք մեկը և փակենք մեր բաճկոնի մեջ և արագ անցնենք պահակների կողքով: Այս ռելեը շատ
հարմար կլինի: Բայց նախքան այն օգտագործելը, մենք պետք է սովորենք հաշվել:
Գլուխ 7. Մեր տասը թվանշանները
Այն գաղափարը, որ լեզուն պարզապես ծածկագիր է, կարծես թե ընդունելի է: Մեզանից շատերը գոնե ավագ
դպրոցում փորձել են օտար լեզու սովորել, ուստի պատրաստ ենք ընդունել, որ այն կենդանին, որը մենք
անգլերեն անվանում ենք կատու, կարող է նաև լինել գատո , չատ , Կաթզե , KOIIIKa կամ Կ άττα :
Թվերը, սակայն, ավելի քիչ մշակութային են թվում: Անկախ նրանից, թե որ լեզվից ենք խոսում և ինչպես ենք
արտասանում թվերը, գրեթե բոլորը, ում հետ ամենայն հավանականությամբ շփվելու ենք այս մոլորակի վրա,
գրում են դրանք նույն կերպ.

Արդյո՞ք մաթեմատիկան ինչ-որ պատճառով չի կոչվում «համընդհանուր լեզու»:


Թվերը, անշուշտ, ամենաբստրակտ կոդերն են, որոնց հետ մենք առնչվում ենք կանոնավոր հիմունքներով: Երբ
տեսնում ենք թիվը

մենք անմիջապես պետք չէ դա կապել որևէ բանի հետ: Մենք կարող ենք պատկերացնել 3 խնձոր կամ 3 այլ
բան, բայց մենք նույնքան հարմարավետ կսովորենք համատեքստից, որ այդ թիվը վերաբերում է երեխայի
ծննդյան օրվան, հեռուստաալիքին, հոկեյի խաղարկությանը կամ տորթի բաղադրատոմսի մեջ ալյուրի
բաժակների քանակին: . Քանի որ մեր թվերը սկզբից շատ վերացական են, մեզ համար ավելի դժվար է
հասկանալ, որ խնձորների այս թիվը

պարտադիր չէ, որ նշանակվի խորհրդանիշով

Այս և հաջորդ գլխի մեծ մասը նվիրված կլինի ինքներս մեզ համոզելուն, որ այսքան խնձոր է

կարելի է նշել նաև գրավոր

Եկեք նախ հրաժարվենք այն մտքից, որ տասը թվի մեջ էապես առանձնահատուկ բան կա: Այն, որ
քաղաքակրթությունների մեծամասնությունը հիմնել է իրենց թվային համակարգերը տասի (կամ երբեմն
հինգի) շուրջ, զարմանալի չէ: Մարդիկ հենց սկզբից մատով են հաշվում։ Եթե մեր տեսակը զարգանար
ունենալով ութ կամ տասներկու մատ, հաշվելու մեր եղանակները մի փոքր այլ կլիներ: Պատահական չէ, որ
թվանշան բառը կարող է վերաբերել մատների կամ ոտքերի մատներին, ինչպես նաև թվերին, կամ հինգ և
բռունցք բառերը նման արմատներ ունեն:
Այսպիսով, այդ առումով, օգտագործելով բազային-տասը կամ տասնորդական (լատիներենից տասը ), թվային
համակարգը լիովին կամայական է: Այնուամենայնիվ, մենք տասի վրա հիմնված թվերին տալիս ենք գրեթե
կախարդական նշանակություն և տալիս նրանց հատուկ անուններ: Տասը տարին տասնամյակ է. տասը
տասնամյակը դար է. տասը դարը հազարամյակ է։ Հազար հազարը միլիոն է. հազար միլիոնը միլիարդ է: Այս
թվերը բոլորը տասի ուժեր են.

101
=
10
102
=
100
103
=
100
0
(հազ
ար)
104
=10
000
105
=10
000
0
106
=
1,0
00,
000
(միլ
իոն)
107
=10
,00
0,0
00
108
=10
0,0
00,
000
109
=
1,0
00,
000
,00
0
(միլ
իար
դ)
Պատմաբանների մեծամասնությունը կարծում է, որ թվերն ի սկզբանե հորինվել են այնպիսի բաներ հաշվելու
համար, ինչպիսիք են մարդիկ, ունեցվածքը և առևտրային գործարքները: Օրինակ, եթե ինչ-որ մեկը չորս բադ
ուներ, դա կարող է արձանագրվել չորս բադերի նկարներով.

Ի վերջո, այն մարդը, ում գործը բադերը նկարելն էր, մտածեց. «Ինչո՞ւ ես պետք է չորս բադ նկարեմ, ինչո՞ւ
չեմ կարող մեկ բադ նկարել և նշել, որ դրանք չորսն են, չգիտեմ, քերծվածքով: կամ ինչ-որ բան»:

Եվ հետո եկավ այն օրը, երբ ինչ-որ մեկը 27 բադ ուներ, և քերծվածքների հետքերը ծիծաղելի դարձան.

Ինչ-որ մեկն ասաց. «Ավելի լավ ճանապարհ պետք է լինի», և թվային համակարգ ծնվեց:
Բոլոր վաղ թվային համակարգերից միայն հռոմեական թվերն են դեռ ընդհանուր օգտագործման մեջ։ Դրանք
կգտնեք ժամացույցների և ժամացույցների երեսների վրա, որոնք օգտագործվում են հուշարձանների և
արձանների վրա ամսաթվերի, գրքերի որոշ էջերի համարակալման, ուրվագծի որոշ տարրերի և,
ամենաանհանգստացնողը, ֆիլմերի հեղինակային իրավունքի մասին ծանուցման համար: («Ո՞ր տարում է
ստեղծվել այս նկարը» հարցին հաճախ կարելի է պատասխանել միայն այն դեպքում, եթե մեկը բավականաչափ
արագ վերծանի MCMLIII-ը, քանի որ վարկերի վերջը անցնում է:
Հռոմեական թվերով քսանյոթ բադ է

Հայեցակարգն այստեղ բավականին հեշտ է. X-ը նշանակում է 10 քերծվածք, իսկ V-ը նշանակում է 5
քերծվածք:
Այսօր պահպանված հռոմեական թվերի խորհրդանիշներն են

Ես մեկն է: Սա կարող է առաջանալ քերծվածքից կամ մեկ բարձրացրած մատից: V-ը, որը հավանաբար ձեռքի
խորհրդանիշն է, նշանակում է հինգ: Երկու V-ն կազմում է X, որը նշանակում է տասը: L-ն հիսուն է: C տառը
ծագում է centum բառից , որը լատիներեն նշանակում է հարյուր: D-ն հինգ հարյուր է։ Վերջապես, M-ն
գալիս է լատիներեն mille կամ հազար բառից :
Թեև մենք կարող էինք չհամաձայնվել, բայց երկար ժամանակ հռոմեական թվերը համարվում էին հեշտ
գումարել-հանելը, և այդ պատճառով նրանք այդքան երկար գոյատևեցին Եվրոպայում հաշվապահական
հաշվառման համար: Իրոք, երկու հռոմեական թվեր ավելացնելիս դուք պարզապես միավորում եք երկու թվերի
բոլոր նշանները և այնուհետև պարզեցնում արդյունքը՝ օգտագործելով ընդամենը մի քանի կանոն. Հինգ I-ը
դարձնում է V, երկու V-ը՝ X, հինգ X-ը՝ L և այլն:
Բայց հռոմեական թվերը բազմապատկելն ու բաժանելը դժվար է։ Բազմաթիվ այլ վաղ թվային համակարգեր
(օրինակ՝ հին հույների համակարգն է) նմանապես անբավարար են թվերի հետ բարդ ձևով աշխատելու
համար: Թեև հույները զարգացրել են արտասովոր երկրաչափություն, որը դեռևս այսօր գործնականում
անփոփոխ է դասավանդվում ավագ դպրոցներում, հին հույները հայտնի չեն իրենց հանրահաշիվով:
Թվային համակարգը, որը մենք օգտագործում ենք այսօր, հայտնի է որպես հինդու-արաբական կամ
հնդկա-արաբական: Այն հնդկական ծագում ունի, բայց Եվրոպա է բերվել արաբ մաթեմատիկոսների կողմից:
Հատկապես հայտնի է պարսիկ մաթեմատիկոս Մուհամմեդ իբն-Մուսա ալ-Խվարեզմին (որի անունից մենք
ստացել ենք ալգորիթմ բառը ) , որը գրել է գիրք հանրահաշվի մասին մոտ մ.թ. 825 թվականին, որն
օգտագործում էր հաշվման հինդուիստական համակարգը: Լատինական թարգմանությունը թվագրվում է մ.թ.
1120 թվականին և ազդեցիկ է եղել ողջ Եվրոպայում հռոմեական թվերից մեր ներկայիս հինդու-արաբական
համակարգին անցումը արագացնելու համար:
Հինդու-արաբական թվային համակարգը տարբերվում էր նախորդ թվային համակարգերից երեք առումով.
● Հինդու-արաբական թվային համակարգը համարվում է դիրքային , ինչը նշանակում է, որ
որոշակի թվանշանը տարբեր քանակություն է ներկայացնում՝ կախված այն բանից, թե որտեղ է
այն գտնվել թվի մեջ: Այն, որտեղ թվանշանները հայտնվում են թվի մեջ, նույնքան կարևոր է
(իրականում, ավելի նշանակալից), քան իրականում թվանշանները: Թե՛ 100-ը, և թե՛
1,000,000-ն ունեն միայն մեկ 1, սակայն մենք բոլորս գիտենք, որ միլիոնը շատ ավելի մեծ է,
քան հարյուրը:
● չունի հինդու-արաբական համակարգը , և դա տասը թվի հատուկ խորհրդանիշ է: Մեր թվային
համակարգում տասի համար հատուկ նշան չկա :
● Մյուս կողմից, գրեթե բոլոր վաղ թվային համակարգերից բացակայում է մի բան, որն ունի
հինդու-արաբական համակարգը, և որը, պարզվում է, շատ ավելի կարևոր է, քան տասի
խորհրդանիշը: Եվ դա զրոյական է:
Այո, զրո: Ցածր զրոն, անկասկած, թվերի և մաթեմատիկայի պատմության ամենակարևոր գյուտերից մեկն է:
Այն աջակցում է դիրքային նշումներին, քանի որ թույլ է տալիս տարբերակել 25-ը 205-ից և 250-ից: Զրոն
նաև հեշտացնում է շատ մաթեմատիկական գործողություններ, որոնք անհարմար են ոչ դիրքային
համակարգերում, մասնավորապես բազմապատկումն ու բաժանումը:
Հինդու-արաբական թվերի ամբողջ կառուցվածքը բացահայտվում է մեր արտասանության ձևով: Վերցրեք,
օրինակ, 4825-ը: Ասում ենք՝ «չորս հազար, ութ հարյուր, քսանհինգ»։ Դա նշանակում է

չորս
հազ
ար
ութ
հարյ
ուր
երկո
ւ
տաս
նյակ
և
հինգ
.
Կամ մենք կարող ենք բաղադրիչները գրել այսպես.

482
5=
400
0+
800
+
20
+5

Կամ ավելի խորացնելով այն՝ կարող ենք թիվը գրել այսպես.

482
5=
4x
100
0+
8x
100
+
2x
10
+
5x
1

Կամ, օգտագործելով տասը հզորությունները, թիվը կարելի է վերաշարադրել այսպես.

482
5=
4x
103
+
8x
102
+
2x
101
+
5x
100

Հիշեք, որ 0 աստիճանի ցանկացած թիվ հավասար է 1-ի:


Բազմանիշ թվի յուրաքանչյուր դիրք ունի որոշակի նշանակություն, ինչպես ցույց է տրված հետևյալ
գծապատկերում։ Այստեղ ցուցադրված յոթ տուփերը թույլ են տալիս ներկայացնել ցանկացած թիվ 0-ից
մինչև 9,999,999:
Յուրաքանչյուր դիրք համապատասխանում է տասը հզորության: Մեզ տասի համար հատուկ նշան պետք չէ,
քանի որ մենք 1-ը դնում ենք այլ դիրքում, իսկ 0-ն օգտագործում ենք որպես տեղապահ:
Այն, ինչ նաև իսկապես հաճելի է, այն է, որ տասնորդական կետի աջ կողմում ներկայացված կոտորակային
մեծությունները հետևում են նույն օրինակին: 42,705,684 համարն է

4x
10,
000
+
2x
100
0+
7x
100
+
0x
10
+
5x
1+

10
+

100
+

100
0

Այս թիվը նույնպես կարելի է գրել առանց բաժանման, այսպես.

4x
10,
000
+
2x
100
0+
7x
100
+
0x
10
+
5x
1+
6x
0.1
+
8x
0,0
1+
4x
0,0
01

Կամ, օգտագործելով տասը հզորությունները, թիվը

4x
104
+
2x
103
+
7x
102
+
0x
101
+
5x
100
+
6x
10-
1+
8x
10-
2+
4x
10-
3

Ուշադրություն դարձրեք, թե ինչպես են ցուցիչները իջնում զրոյի, իսկ հետո դառնում բացասական թվեր:
Մենք գիտենք, որ 3-ին գումարած 4-ը հավասար է 7-ի: Նմանապես, 30-ին գումարած 40-ը հավասար է
70-ի, 300-ին գումարած 400-ին հավասար է 700-ի, իսկ 3000-ին գումարած 4000-ին հավասար է
7000-ի: Սա է հինդու-արաբական համակարգի գեղեցկությունը: Երբ ավելացնում եք ցանկացած
երկարության տասնորդական թվեր, դուք հետևում եք մի ընթացակարգի, որը խնդիրը բաժանում է քայլերի:
Յուրաքանչյուր քայլ ավելի բարդ բան չի ներառում, քան միանիշ թվերի զույգեր ավելացնելը: Ահա թե ինչու
ինչ-որ մեկը վաղուց ստիպել է ձեզ անգիր անել հավելյալ աղյուսակը.

0 1 2 3 4 5 6 7 8 9
+
0 0 1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9 10
2 2 3 4 5 6 7 8 9 10 11
3 3 4 5 6 7 8 9 10 11 12
4 4 5 6 7 8 9 10 11 12 13
5 5 6 7 8 9 10 11 12 13 14
6 6 7 8 9 10 11 12 13 14 15
7 7 8 9 10 11 12 13 14 15 16
8 8 9 10 11 12 13 14 15 16 17
9 9 10 11 12 13 14 15 16 17 18

Գտեք այն երկու թվերը, որոնք ցանկանում եք ավելացնել վերևի տողում և ձախ սյունակում: Գումարը
ստանալու համար հետևեք ներքև և կողքով: Օրինակ՝ 4-ին գումարած 6-ը հավասար է 10-ի:
Նմանապես, երբ դուք պետք է բազմապատկեք երկու տասնորդական թվեր, դուք հետևում եք մի փոքր ավելի
բարդ ընթացակարգի, որը, այնուամենայնիվ, քանդում է խնդիրը այնպես, որ ձեզ հարկավոր չէ ավելի բարդ
բան անել, քան միանիշ տասնորդական թվեր ավելացնելը կամ բազմապատկելը: Ձեր վաղ դպրոցը
հավանաբար նաև ենթադրում էր անգիր բազմապատկման աղյուսակ.

0 1 2 3 4 5 6 7 8 9
x
0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9
2 0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27
4 0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 64 72
9 0 9 18 27 36 45 54 63 72 81

Նշման դիրքային համակարգում ամենալավն այն չէ, թե որքան լավ է այն աշխատում, այլ այն, թե որքան լավ է
այն աշխատում տասի վրա չհիմնված հաշվելու համակարգերի համար: Մեր թվային համակարգը պարտադիր
չէ, որ բոլորի համար հարմար լինի: Մեր բազային տասը թվերի համակարգի մեծ խնդիրն այն է, որ այն որևէ
առնչություն չունի մուլտֆիլմի հերոսների համար: Մուլտֆիլմերի հերոսների մեծ մասը յուրաքանչյուր
ձեռքի վրա (կամ թաթում) ունի ընդամենը չորս մատ, ուստի նրանք նախընտրում են թվային համակարգ, որը
հիմնված է ութի վրա: Հետաքրքիր է, որ տասնորդական համարակալման մասին մեր իմացածի մեծ մասը կարող
է կիրառվել մուլտֆիլմերի մեր ընկերների համար ավելի հարմար համարակալման համակարգի վրա:
Գլուխ 8. Տասի այլընտրանքները
Տասը մեզ՝ մարդկանց համար, բացառիկ կարևոր թիվ է։ Տասը մատների և ոտքերի մատների քանակն է
մեզանից շատերի մոտ, և մենք, իհարկե, նախընտրում ենք ունենալ բոլոր տասը: Քանի որ մեր մատները
հարմար են հաշվելու համար, մենք՝ մարդիկ, հարմարեցրել ենք մի ամբողջ թվային համակարգ, որը հիմնված է
10 թվի վրա:

Ինչպես նշեցի նախորդ գլխում, թվային համակարգը, որը մենք օգտագործում ենք, կոչվում է տասը հիմք կամ
տասնորդական : Թվային համակարգը մեզ այնքան բնական է թվում, որ սկզբում դժվար է այլընտրանքներ
պատկերացնել: Իսկապես, երբ տեսնում ենք 10 թիվը, չենք կարող չմտածել, որ այս թիվը վերաբերում է
այսքան բադերին.

Բայց միակ պատճառը, որ 10 թիվը վերաբերում է այսքան բադերին, այն է, որ այսքան բադերը նույնն են, ինչ
մեր մատների թիվը: Եթե մարդ արարածները տարբեր թվով մատներ ունենային, մեր հաշվելու ձևն այլ կլիներ,
իսկ 10-ը այլ բան կնշանակեր: Նույն 10 թիվը կարող է վերաբերել այսքան բադերին.

կամ այսքան բադիկներ.

կամ նույնիսկ այսքան բադիկներ.


Երբ հասնենք այն կետին, երբ 10-ը նշանակում է ընդամենը երկու բադ, մենք պատրաստ կլինենք
ուսումնասիրել, թե ինչպես են անջատիչները, լարերը, լույսի լամպերը և ռելեները (և ըստ ընդլայնման՝
համակարգիչները) կարող են թվեր ներկայացնել:
Իսկ եթե մարդ արարածները յուրաքանչյուր ձեռքի վրա ունենային ընդամենը չորս մատ, ինչպես
մուլտֆիլմերի հերոսները: Մենք, հավանաբար, երբեք չէինք մտածի տասի վրա հիմնված թվային համակարգ
մշակել: Փոխարենը, մենք կհամարեինք նորմալ և բնական, խելամիտ, անխուսափելի և անվիճելի և
անհերքելիորեն տեղին մեր թվային համակարգը հիմնել ութի վրա: Մենք սա չենք անվանի տասնորդական
թվային համակարգ: Մենք դա կանվանեինք օկտալ թվային համակարգ կամ ութ հիմք :
Եթե մեր թվային համակարգը կազմակերպված լիներ ութի, քան տասի շուրջ, մեզ պետք չէր լինի այսպիսի
տեսք ունեցող խորհրդանիշը.

Ցույց տվեք այս խորհրդանիշը ցանկացած մուլտհերոսի և կստանաք պատասխան՝ «Ի՞նչ է դա, ինչի՞ համար է
դա»: Եվ եթե մի պահ մտածեք, մեզ նույնպես պետք չի լինի այսպիսի տեսք ունեցող խորհրդանիշը.

Տասնորդական թվային համակարգում տասի համար հատուկ նշան չկա, ուստի ութնյակային համակարգում
ութի համար հատուկ նշան չկա:
Տասնորդական թվային համակարգում մենք հաշվում ենք 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 և այնուհետև 10:
Ութնյակային թվային համակարգում հաշվում ենք 0, 1, 2: 3, 4, 5, 6, 7 և հետո ի՞նչ: Մեզ սպառել են
սիմվոլները: Միակ բանը, որ իմաստ ունի, 10-ն է, և դա ճիշտ է: Ութթալերենում 7-ից հետո հաջորդ թիվը
10-ն է: Բայց այս 10-ը չի նշանակում մարդկանց մատների քանակը: Օկտալերենում 10-ը վերաբերում է
մուլտհերոսների մատների քանակին:

Մենք կարող ենք շարունակել հաշվել մեր չորքոտանի ոտքերի վրա.


Երբ աշխատում եք այլ թվային համակարգերի հետ, քան տասնորդականը, կարող եք խուսափել որոշակի
շփոթությունից, եթե արտասանեք 10-ի նման թիվը որպես մեկ զրո : Նմանապես, 13-ը արտասանվում է մեկ
երեք , իսկ 20-ը՝ երկու զրո : Շփոթությունից իսկապես խուսափելու համար մենք կարող ենք ասել երկու զրո
հիմք ութ կամ երկու զրո օկտալ :
Թեև մեր մատների և ոտքերի մատները սպառվել են, մենք դեռ կարող ենք շարունակել հաշվել ութնյակով: Դա
հիմնականում նույնն է, ինչ տասնորդականով հաշվելը, բացառությամբ, որ մենք բաց ենք թողնում
յուրաքանչյուր թիվ, որն ունի 8 կամ 9: Եվ, իհարկե, իրական թվերը վերաբերում են տարբեր
քանակությունների.

0, 1,
2, 3,
4, 5,
6, 7,
10,
11,
12,
13,
14,
15,
16,
17,
20,
21,
22,
23,
24,
25,
26,
27,
30,
31,
32,
33,
34,
35,
36,
37,
40,
41,
42,
43,
44,
45,
46,
47,
50,
51,
52,
53,
54,
55,
56,
57,
60,
61,
62,
63,
64,
65,
66,
67,
70,
71,
72,
73,
74,
75,
76,
77,
100

Այդ վերջին թիվը արտասանվում է մեկ զրո զրո : Դա մուլտհերոսների մատների քանակն է՝ բազմապատկված
ինքն իրենով:
Տասնորդական և ութնյակային թվեր գրելիս մենք կարող ենք խուսափել շփոթությունից և նշել, թե որն է`
օգտագործելով համարակալում` նշելով համարակալման համակարգը: TEN ենթանշանը նշանակում է հիմք
տասը կամ տասնորդական, իսկ EIGHT նշանակում է հիմք ութ կամ ութնյակ:

Այս
պիս
ով,
թզու
կներ
ի
թիվը
,
որոն
ց
հան
դիպ
ում է
Ձյու
նան
ուշը,
կազ
մում
է
7ՏԱ
ՍԸ
կամ
7ՈՒ
Թ
Մուլ
տֆի
լմի
հերո
սներ
ի
մատ
ների
թիվը
8TE
N
կամ
10
ՈՒԹ
է
Բեթ
հովե
նի
գրա
ծ
սիմ
ֆոն
իան
երի
թիվը
9
ՏԱՍ
Ը
կամ
11
ՈՒԹ
է
Մար
դկա
նց
մատ
ների
թիվը
10Տ
ԱՍՆ
է
կամ
12Ո
ւԹ
Տար
վա
ամի
սներ
ի
թիվը
12Տ
ԱՍՆ
է
կամ
14Ո
ՒԹ
Երկո
ւ
շաբ
աթու
մ
օրեր
ի
թիվը
14Տ
ԱՍՆ
է
կամ
16Ո
ՒԹ
Ծնն
դյան
«քա
ղցր»
տոն
ակա
տար
ությ
ունը
16T
EN
կամ
20E
IGH

Օրվ
ա
ժամ
երի
թիվը
կազ
մում
է
24T
EN
կամ
30E
IGH
T
Լատ
ինա
կան
այբո
ւբեն
ի
տառ
երի
թիվը
26T
EN
կամ
32E
IGH

Հեղո
ւկ
ունց
իան
երի
քան
ակը
քառո
րդու
մ
կազ
մում
է
32T
EN
կամ
40E
IGH
T
Տախ
տակ
ամա
ծի
քար
տեր
ի
քան
ակը
52T
EN
կամ
64E
IGH

Շախ
մատ
ի
տախ
տակ
ի
վրա
քառ
ակու
սինե
րի
թիվը
64Տ
ԵՆ է
կամ
100
ՈՒԹ
Sun
set
Stri
p-ի
ամե
նահ
այտ
նի
հաս
ցեն
է
77T
EN
կամ
115
EIG
HT
Ամե
րիկյ
ան
ֆու
տբոլ
ի
դաշ
տի
յարդ
երի
թիվը
100
TE
N
կամ
144
EIG
HT
է
Ուիմ
բլդո
նի
մեկն
արկ
ային
մեն
ախա
ղի
կան
անց
թիվը
կազ
մում
է
128
TE
N
կամ
200
EIG
HT
Մեմ
ֆիս
ում
քառ
ակու
սի
մղոն
ների
թիվը
256
TE
N
կամ
400
EIG
HT
է

Ուշադրություն դարձրեք, որ այս ցանկում կան մի քանի գեղեցիկ կլոր օկտալ թվեր, ինչպիսիք են 100 EIGHT և
200 EIGHT և 400 EIGHT : Գեղեցիկ կլոր թիվ տերմինով մենք սովորաբար հասկանում ենք մի թիվ, որը
վերջում ունի որոշ զրոներ: Տասնորդական թվի վերջում երկու զրո նշանակում է, որ այդ թիվը 100 TEN- ի
բազմապատիկն է , որը 10 TEN- ն է 10 TEN-ի : Օկտալ թվերի դեպքում վերջում երկու զրո նշանակում է, որ թիվը
100 ՈՒԹ- ի բազմապատիկն է , որը 10 ութ անգամ 10 ՈՒԹ է (կամ 8 ՏԱՍԸ 8 ՏԱՍԸ , որը 64 ՏԱՍՆ է ):
Կարող եք նաև նկատել, որ 100 EIGHT և 200 EIGHT և 400 EIGHT այս գեղեցիկ կլոր օկտալ թվերն ունեն 64 TEN , 128
TEN և 256 TEN տասնորդական համարժեքները , որոնք բոլորը երկուսի ուժեր են: Սա իմաստ ունի: 400 ՈՒԹ
թիվը (օրինակ) 4 ութ անգամ 10 ութ անգամ 10 ՈՒԹ է , որոնք բոլորը երկուսի ուժեր են: Եվ ամեն անգամ, երբ
մենք երկուսի հզորությունը բազմապատկում ենք երկուի հզորությամբ, մենք ստանում ենք մեկ այլ ուժ երկու:
Հետևյալ աղյուսակը ցույց է տալիս երկուսի որոշ ուժեր տասնորդական և ութնյակային ներկայացումներով.

Երկո
ւ
տաս Օկտ
Ուժը նորդ ալ
ակա
ն
20 1 1
21 2 2
22 4 4
23 8 10
24 16 20
25 32 40
26 64 100
200
27 128
թ
28 256 400
512 100
29
թ 0
102 200
210
4թ 0թ
204 400
211
8թ 0
409 100
212
6 թ 00

Աջ սյունակի գեղեցիկ կլոր թվերը հուշում են, որ տասնորդականից բացի այլ թվային համակարգեր կարող են
օգնել երկուական կոդերի հետ աշխատելիս:
Օկտալ համակարգը ոչ մի կառուցվածքային առումով չի տարբերվում տասնորդական համակարգից:
Պարզապես տարբերվում է դետալներով։ Օրինակ, օկտալ թվի յուրաքանչյուր դիրքը թվանշան է, որը
բազմապատկվում է ութի հզորությամբ.

Այսպիսով, ութթալ թիվը, ինչպիսին է 3725 ՈՒԹԸ , կարելի է բաժանել այսպես.

372
5
ՈՒԹ
=
300
0
ՈՒԹ
+
700
ՈՒԹ
+
20
ՈՒԹ
+5
ՈՒԹ

Սա կարող է վերաշարադրվել մի քանի եղանակով: Ահա մի ճանապարհ, օգտագործելով ութի ուժերը իրենց
տասնորդական ձևերով.

372
5ՈՒ
Թ=
3x
512
TE
N+
7x
64T
EN
+
2x
8TE
N+
5x
1

Սա նույնն է, երբ ութի ուժերը ցուցադրվում են իրենց ութնյակային ձևով.


372
5EI
GH
T=
3x
100
0EI
GH
T+
7x
100
ՈՒԹ
+
2x
10
ՈՒԹ
+
5x
1

Ահա դա անելու մեկ այլ եղանակ.

372
5ՈՒ
Թ=
3x
83
+
7x
82
+
2x
81
+
5x
80

Եթե այս հաշվարկը մշակեք տասնորդական ձևով, ապա կստանաք 2005 TEN : Այսպես կարող եք օկտալ թվերը
վերածել տասնորդական թվերի:
Մենք կարող ենք ավելացնել և բազմապատկել ութնյակային թվեր այնպես, ինչպես գումարում և
բազմապատկում ենք տասնորդական թվեր: Միակ իրական տարբերությունն այն է, որ մենք օգտագործում ենք
տարբեր աղյուսակներ առանձին թվանշաններ ավելացնելու և բազմապատկելու համար: Ահա օկտալ թվերի
գումարման աղյուսակը.

0 1 2 3 4 5 6 7
+
0 0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7 10
2 2 3 4 5 6 7 10 11
3 3 4 5 6 7 10 11 12
4 4 5 6 7 10 11 12 13
5 5 6 7 10 11 12 13 14
6 6 7 10 11 12 13 14 15
7 7 10 11 12 13 14 15 16

Օրինակ՝ 5 ՈՒԹ + 7 ՈՒԹ = 14 ՈՒԹ . Այսպիսով, մենք կարող ենք ավելացնել երկու ավելի երկար օկտալային
թվեր, ինչպես որ ավելացնում ենք տասնորդական թվեր.

Աջ սյունակից սկսելու համար 5-ին գումարած 3-ը հավասար է 10-ի: Ներդրեք 0-ը, տեղափոխեք 1-ը: Մեկին
գումարած 3-ին գումարած 4-ը հավասար է 10-ի: Ներդրեք 0-ը, տեղափոխեք 1-ը: Մեկ գումարած 1-ին
գումարած 6-ը հավասար է 10-ի:
Նմանապես, 2 անգամ 2-ը դեռ 4-ն է օկտալում: Բայց 3 անգամ 3-ը 9 չէ: Ինչպե՞ս կարող է դա լինել:
Փոխարենը 3 անգամ 3-ը 11 ՈՒԹ է , որը նույնքան է, որքան 9 Տասնյակը : Դուք կարող եք տեսնել ամբողջ
օկտալային բազմապատկման աղյուսակը հաջորդ էջի վերևում:

0 1 2 3 4 5 6 7
x
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 10 12 14 16
3 0 3 6 11 14 17 22 25
4 0 4 10 14 20 24 30 34
5 0 5 12 17 24 31 36 43
6 0 6 14 22 30 36 44 52
7 0 7 16 25 34 43 52 61

Այստեղ մենք ունենք 4 x 6, որը հավասար է 30 ՈՒԹ-ի , բայց 30 ՈՒԹ-ը նույնն է, ինչ 24 TEN-ը , ինչը 4 x 6-ը
հավասար է տասնորդականում:
Օկտալը նույնքան վավեր է թվային համակարգում, որքան տասնորդականը: Բայց գնանք ավելի հեռուն։ Այժմ,
երբ մենք մշակել ենք մուլտհերոսների համարակալման համակարգ, եկեք մշակենք մի բան, որը հարմար է
օմարների համար: Օմարները ճշգրիտ մատներ չունեն, բայց նրանք ունեն աքցաններ իրենց երկու առջևի
ոտքերի ծայրերում: Օմարների համար համապատասխան թվային համակարգը չորրորդական համակարգն է
կամ բազային չորսը.
Չորրորդական թվով հաշվելը կատարվում է այսպես. եւ այլն.
Չեմ պատրաստվում շատ ժամանակ հատկացնել չորրորդական համակարգի հետ, քանի որ մենք շուտով
կանցնենք շատ ավելի կարևոր բանի: Բայց մենք կարող ենք տեսնել, թե ինչպես է չորրորդական թվի
յուրաքանչյուր դիրքը համապատասխանում այս անգամ չորսի հզորությանը .

31232 չորրորդական թիվը կարելի է գրել այսպես.

312
32F
OU
R=
3x
256
TE
N+
1x
64T
EN
+
2x
16T
EN
+
3x
4TE
N+
2x
1TE
N

որը նույնն է, ինչ

312
32F
OU
R=
3x
100
00F
OU
R+
1x
100
0
FOU
R+
2x
100
FOU
R+
3x
10
FOU
R+
2x
1
ՉՈՐ
Ս

Եվ դա նույնպես նույնն է, ինչ

312
32
ՉՈՐ
Ս=
3x
44
+
1x
43
+
2x
42
+
3x
41
+
2x
40

Եթե հաշվարկներն անենք տասնորդական թվերով, ապա կգտնենք, որ 31232 FOUR-ը հավասար է 878 TEN-ի :
Հիմա մենք պատրաստվում ենք հերթական թռիչքը կատարել, և սա ծայրահեղ է: Ենթադրենք, որ մենք
դելֆիններ էինք և պետք է օգտագործենք մեր երկու թռչող սարքերը հաշվելու համար: Սա թվային համակարգ
է, որը հայտնի է որպես հիմք երկու կամ երկուական (լատիներենից երկու-երկու ): Հավանական է թվում, որ
մենք կունենայինք ընդամենը երկու թվանշան, և այս երկու թվանշանները կլինեն 0 և 1:
Այժմ 0-ի և 1-ի հետ աշխատելը շատ բան չէ, և երկուական թվերին ընտելանալու համար անհրաժեշտ է
որոշակի պրակտիկա: Մեծ խնդիրն այն է, որ թվանշանները շատ արագ սպառվում են: Օրինակ, ահա, թե
ինչպես է դելֆինը հաշվում՝ օգտագործելով իր փեղկերը.

Այո, երկուական տարբերակով 1-ից հետո հաջորդ թիվը 10-ն է: Սա ապշեցուցիչ է, բայց իրականում չպետք է
անակնկալ լինի: Անկախ նրանից, թե ինչ թվային համակարգ ենք մենք օգտագործում, երբ միանիշ թվերը մեզ
սպառում են, առաջին երկնիշ թիվը միշտ 10 է: Երկուականում մենք հաշվում ենք այսպես.

0, 1,
10,
11,
100
,
101
,
110
,
111
,
100
0,
100
1,
101
0,
101
1,
110
0,
110
1,
111
0,
111
1,
100
00,
100
01

Այս թվերը կարող են մեծ թվալ, բայց իրականում այդպես չէ: Ավելի ճիշտ է ասել, որ երկուական թվերը շատ
արագ են երկարանում , քան մեծ.

Մար
դկա
նց
գլխի
թիվը
1ՏԱ
Սէ
կամ
1ԵՐ
ԿՈՒ
Դել
ֆին
ների
մոտ
պտտ
վող
թռչն
ակն
երի
թիվը
2TE
N
կամ
10
TW

Ճաշ
ի
գդալ
ում
թեյի
գդալ
ների
քան
ակը
3TE
N
կամ
11T
WO
է
Քառ
ակու
սու
կողմ
երի
թիվը
4ՏԵ
Նէ
կամ
100
ԵՐԿ
ՈՒ
Մար
դու
մեկ
ձեռք
ի
մատ
ների
թիվը
5TE
N
կամ
101
TW

Միջ
ատի
ոտքե
րի
թիվը
6TE
N
կամ
110
TW

Շաբ
աթա
կան
օրեր
ի
թիվը
7TE
N
կամ
111
TW

Օկտ
ետու
մ
երա
ժիշտ
ների
թիվը
կազ
մում
է
8TE
N
կամ
100
0T
WO
Մեր
Արե
գակ
նայի
ն
համ
ակա
րգի
մոլո
րակ
ների
թիվը
(ներ
առյ
ալ
Պլու
տոն
ը)
9TE
N
կամ
100
1
TW
O
Կովբ
ոյակ
ան
գլխ
արկ
ի
գալո
ններ
ի
թիվը
10T
EN
կամ
101
0T
WO
է

և այլն։
Բազմանիշ երկուական թվի մեջ թվանշանների դիրքերը համապատասխանում են երկու ուժի.

Այսպիսով, երբ մենք ունենք երկուական թիվ, որը բաղկացած է 1-ից, որին հաջորդում են բոլոր զրոները, այդ
թիվը երկուսի ուժ է: Հզորությունը նույնն է, ինչ երկուական թվի զրոների թիվը։ Ահա այս կանոնը ցուցադրող
երկուսի լիազորությունների մեր ընդլայնված աղյուսակը.

Երկո
Տաս Օկտ Չորր
ւակ
նորդ ալ որդ
ան
ակա ակա
Երկո ն ն
ւսի
ուժը
20 1 1 1 1
21 2 2 2 10
22 4 4 10 100
100
23 8 10 20
0
100
24 16 20 100
00
200 100
25 32 40
թ 000
100
100
26 64 100 000
0
0
100
200 200
27 128 000
թ 0թ
00
100
100
28 256 400 000
00
000
100
512 100 200 000
29
թ 0 00 թ 000
0
100
102 200 100 000
210
4 թ 0 թ 000 000
00
100
204 400 200 000
211
8 թ 0 000 000
000
100
100 000
409 100
212 000 000
6 թ 00
0 000
00

Ենթադրենք, մենք ունենք 101101011010 երկուական թիվը: Սա կարելի է գրել այսպես.

101
101
011
010
TW
O=
1x
204
8TE
N+
0x
102
4TE
N+
1x
512
TE
N+
1x
256
TE
N+
0x
128
TE
N+
1x
64T
EN
+
0x
32T
EN
+
1x
16T
EN
+
1x
8TE
N+
0x
4TE
N+
1x
2TE
N+
0x
1TE
N

Նույն թիվը կարելի է գրել այսպես.

101
101
011
010
TW
O=
1x
211
+
0x
210
+
1x
29
+
1x
28
+
0x
27
+
1x
26
+
0x
25
+
1x
24
+
1x
23
+
0x
22
+
1x
21
+
0x
20

Եթե ուղղակի գումարենք մասերը տասնորդական թվերով, ապա կստանանք 2048 + 512 + 256 + 64 + 16 +
8 + 2, որը կազմում է 2906 ՏԱՍԸ :
Երկուական թվերը տասնորդական ավելի հակիրճ փոխարկելու համար դուք կարող եք նախընտրել մի մեթոդ,
որն օգտագործում է իմ պատրաստած ձևանմուշը.

Այս ձևանմուշը թույլ է տալիս փոխարկել թվերը մինչև ութ երկուական թվանշանների երկարությամբ, սակայն
այն հեշտությամբ կարող է երկարացվել: Այն օգտագործելու համար դրեք մինչև ութ երկուական թվանշան
վերևի 8 տուփերում, մեկ նիշ՝ վանդակում: Կատարեք ութ բազմապատկումներ և դրեք արտադրյալները 8
ստորին տուփերում: Վերջնական արդյունքի համար ավելացրեք այս ութ տուփերը: Այս օրինակը ցույց է
տալիս, թե ինչպես գտնել 10010110-ի տասնորդական համարժեքը.

Տասնորդականից երկուականի վերածելը այնքան էլ պարզ չէ, բայց ահա մի ձևանմուշ, որը թույլ է տալիս
տասնորդական թվերը 0-ից մինչև 255-ը վերածել երկուականի.
Փոխակերպումն իրականում ավելի բարդ է, քան թվում է, այնպես որ ուշադիր հետևեք հրահանգներին: Վերևի
ձախ անկյունում գտնվող վանդակում դրեք ամբողջ տասնորդական թիվը (255-ից փոքր կամ հավասար): Այդ
թիվը (շահաբաժինը) բաժանեք առաջին բաժանարարի վրա (128), ինչպես նշված է: Ներքևի վանդակում
դրեք գործակիցը (ներքևի ձախ անկյունում գտնվող վանդակը), իսկ մնացորդը՝ աջ կողմում գտնվող
վանդակում (վերևի շարքի երկրորդ վանդակը): Այդ առաջին մնացորդը հաջորդ հաշվարկի շահաբաժինն է,
որն օգտագործում է 64-ի բաժանարարը: Շարունակեք նույն կերպ կաղապարի միջոցով:
Նկատի ունեցեք, որ յուրաքանչյուր գործակից կլինի կամ 0 կամ 1: Եթե շահաբաժինը փոքր է բաժանարարից,
գործակիցը 0 է, իսկ մնացորդը պարզապես դիվիդենտ է: Եթե շահաբաժինը մեծ է կամ հավասար է
բաժանարարին, ապա գործակիցը 1 է, իսկ մնացորդը շահաբաժինն է՝ հանած բաժանարարը: Ահա թե ինչպես է
դա արվում 150-ով.

Եթե Ձեզ անհրաժեշտ է ավելացնել կամ բազմապատկել երկու երկուական թվեր, հավանաբար ավելի հեշտ
կլինի հաշվարկն անել երկուական տարբերակով, քան տասնորդականի վերածել: Սա այն հատվածն է, որը
դուք իսկապես դուր կգաք: Պատկերացրեք, թե որքան արագ կարող էիք յուրացնել հավելումը, եթե միակ բանը,
որ պետք է անգիր անեիք, սա էր.

0 1
+
0 0 1
1 1 10

Եկեք օգտագործենք այս աղյուսակը երկուական երկու թվեր ավելացնելու համար.

Սկսած աջ սյունակից՝ 1-ին գումարած 0-ը հավասար է 1-ի: Երկրորդ սյունակը աջից՝ 0-ին գումարած 1-ը
հավասար է 1-ի: Երրորդ սյունակը՝ 1-ին գումարած 1-ին հավասար է 0-ի, տեղափոխել 1-ը: Չորրորդ
սյունակը. Հինգերորդ սյունակ. 0-ին գումարած 1-ը հավասար է 1-ի: Վեցերորդ սյունակը՝ 1-ին գումարած
1-ը հավասար է 0-ի, տեղափոխել 1-ը: Յոթերորդ սյունակը՝ 1 (փոխադրված) գումարած 1-ին գումարած
0-ին հավասար է 10
Բազմապատկման աղյուսակը նույնիսկ ավելի պարզ է, քան գումարման աղյուսակը, քանի որ այն կարող է
ամբողջությամբ ստացվել՝ օգտագործելով բազմապատկման երկու հիմնական կանոնները.

0 1
x
0 0 0
1 0 1

Ահա 13 TEN- ի բազմապատկումը 11 TEN- ով երկուական տարբերակով.

Արդյունքը 143 TEN է :


Մարդիկ, ովքեր աշխատում են երկուական թվերի հետ, հաճախ դրանք գրում են սկզբնական զրոներով
(այսինքն՝ առաջին 1-ի ձախ կողմում գտնվող զրոները), օրինակ՝ 0011, այլ ոչ թե պարզապես 11-ը: դա
պարզապես կոսմետիկ նպատակների համար է: Օրինակ, ահա առաջին տասնվեց երկուական թվերն իրենց
տասնորդական համարժեքներով.

Տաս
Երկո նորդ
ւակ ակա
ան ն
000
0
0
000
1
1
001
2
0
001
3
1
010
4
0
010
5
1
011
6
0
011
7
1
100
8
0
100
9

101
10

101
11

110
12

110
13

111
14

111
15

Եկեք մի պահ նայենք երկուական թվերի այս ցանկին: Դիտարկենք զրոների և միավորների չորս ուղղահայաց
սյունակներից յուրաքանչյուրը և ուշադրություն դարձրեք, թե ինչպես են թվանշանները հերթափոխվում՝
իջնելով սյունակով:
● Ամենաաջ թվանշանը փոխարինվում է 0-ի և 1-ի միջև:
● Աջից հաջորդ թվանշանը փոխարինվում է երկու 0-ի և երկու 1-ի միջև:
● Հաջորդ թվանշանը հերթափոխվում է չորս 0-ի և չորս 1-ի միջև:
● Հաջորդ թվանշանը փոխվում է ութ 0-ի և ութ 1-ի միջև:
Սա շատ մեթոդական է, չե՞ք ասի։ Իրոք, դուք հեշտությամբ կարող եք գրել հաջորդ տասնվեց երկուական
թվերը՝ պարզապես կրկնելով առաջին տասնվեցը և առաջ դնելով 1:

Տաս
Երկո նորդ
ւակ ակա
ան ն
100
16
00
100
17
01
100
18
10 թ
100
19
11 թ
101
20
00 թ
101
21
01 թ
101
22
10 թ
101
23
11 թ
110
24
00
110
25
01 թ
110
26
10 թ
110
27
11 թ
111
28
00 թ
111
29
01
111
30
10 թ
111
31
11

Ահա դրա դիտարկման ևս մեկ տարբերակ. Երբ հաշվում եք երկուական տարբերակով, ամենաաջ թվանշանը
(նաև կոչվում է ամենանվազ նշանակալի թվանշան), հերթափոխվում է 0-ի և 1-ի միջև: Ամեն անգամ, երբ
այն փոխվում է 1-ից 0-ի, երկրորդից աջ թվանշանը (որ հաջորդ ամենակարևոր թվանշանն է) նույնպես
փոխվում է՝ 0-ից 1 կամ 1-ից 0: Այսպիսով, ամեն անգամ, երբ երկուական թվանշանը փոխվում է 1-ից 0-ի,
հաջորդ ամենակարևոր թվանշանը նույնպես փոխվում է՝ կա՛մ 0-ից մի՛: 1 կամ 1-ից մինչև 0:
Երբ մենք գրում ենք մեծ տասնորդական թվեր, մենք օգտագործում ենք ստորակետեր յուրաքանչյուր երեք
տեղում, որպեսզի կարողանանք ավելի հեշտ իմանալ, թե ինչ է նշանակում թիվը մեկ հայացքից: Օրինակ, եթե
տեսնում եք 12000000, հավանաբար պետք է թվանշանները հաշվեք, բայց եթե տեսնում եք 12,000,000,
ապա գիտեք, որ դա նշանակում է տասներկու միլիոն:
Երկուական թվերը կարող են շատ արագ երկարանալ: Օրինակ, երկուական տասներկու միլիոնը
101101110001101100000000 է: Որպեսզի սա մի փոքր ավելի ընթեռնելի լինի, ընդունված է
յուրաքանչյուր չորս երկուական թվանշանն առանձնացնել գծիկով, օրինակ՝
1011-0111-0001-1011-0000-0001 կամ 1011-0000-0001: 1011 0000 0000: Հետագայում այս
գրքում մենք կանդրադառնանք երկուական թվերի արտահայտման ավելի հակիրճ ձևին:
Մեր թվային համակարգը նվազեցնելով միայն երկուական թվանշաններով՝ 0-ով և 1-ով, մենք գնացել ենք
այնքան հեռու, որքան կարող ենք գնալ: Մենք չենք կարող ավելի պարզ բան անել: Ավելին, երկուական թվային
համակարգը կամրջում է թվաբանության և էլեկտրականության միջև եղած բացը: Նախորդ գլուխներում մենք
ուսումնասիրել ենք անջատիչները, լարերը, լամպերը և ռելեները, և այս օբյեկտներից որևէ մեկը կարող է
ներկայացնել 0 և 1 երկուական թվանշանները.
Լարը կարող է լինել երկուական թվանշան : Եթե հոսանք է հոսում մետաղալարով, ապա երկուական
թվանշանը 1 է, եթե ոչ, ապա երկուական թվանշանը 0 է:
Անջատիչը կարող է լինել երկուական թվանշան : Եթե անջատիչը միացված է կամ փակ, երկուական
թվանշանը 1 է: Եթե անջատիչը անջատված է կամ բաց, ապա երկուական թվանշանը 0 է:
Լույսի լամպը կարող է լինել երկուական թվանշան : Եթե լամպը վառված է, ապա երկուական թվանշանը 1 է։
Եթե լամպը վառված չէ, ապա երկուական թվանշանը 0 է։
Հեռագրական ռելեը կարող է լինել երկուական թվանշան : Եթե ռելեը փակ է, ապա երկուական թվանշանը 1 է։
Եթե ռելեը հանգստի վիճակում է, ապա երկուական թվանշանը 0 է։
Երկուական թվերը շատ բան ունեն համակարգիչների հետ:
երկուական թվանշան բառերը, հավանաբար, շատ ավելի մեծ նշանակություն կունենան գալիք տարիներին,
քանի որ համակարգիչներն ավելի տարածված են դարձել: Նա որոշեց հորինել նոր, ավելի կարճ բառ, որը
կփոխարինի երկուական թվանշանի անտանելի հինգ վանկերին : Նա մտածեց մեծ և բինիտ , բայց փոխարենը
որոշեց կարճ, պարզ, էլեգանտ և կատարյալ սիրուն բառը :
Գլուխ 9. Բիթ առ հատ
Երբ Թոնի Օռլանդոն 1973 թվականի երգում խնդրեց, որ իր սիրելին «Կապի դեղին ժապավենը կաղնու ծառի
շուրջը», նա մանրամասն բացատրություններ կամ ընդլայնված քննարկում չէր խնդրում: Նա չէր ուզում ոչ մի
եթե, ոչ, ոչ էլ: Չնայած բարդ զգացողություններին և հուզական պատմություններին, որոնք կխաղային
իրական կյանքում, որոնց վրա հիմնված էր երգը, այն ամենը, ինչ տղամարդն իսկապես ուզում էր, պարզ այո
կամ ոչ էր: Նա ուզում էր, որ ծառի շուրջը կապած դեղին ժապավենը նշանակեր «Այո, թեև դու մեծ ժամանակ
ես խառնել և երեք տարի բանտում ես, ես դեռ ուզում եմ, որ դու ինձ հետ վերադառնաս իմ տանիքի տակ»: Եվ
նա ուզում էր, որ դեղին ժապավենի բացակայությունը նշանակեր «Անգամ մի մտածիր այստեղ կանգ առնելու
մասին»։
Սրանք երկու հստակ, միմյանց բացառող այլընտրանքներ են: Թոնի Օռլանդոն չի երգել «Կապիր դեղին
ժապավենի կեսը, եթե ուզում ես մի քիչ մտածել դրա մասին» կամ «Կապիր կապույտ ժապավենը, եթե ինձ
այլևս չես սիրում, բայց դեռ կցանկանաս ընկերներ լինել»: Փոխարենը նա դարձրեց այն շատ, շատ պարզ:
Նույնքան արդյունավետ, որքան դեղին ժապավենի բացակայությունը կամ առկայությունը (բայց գուցե ավելի
անհարմար է ոտանավորի մեջ դնել) ճանապարհային նշանների ընտրությունը առջևի բակում. Թերևս
«Միաձուլում» կամ «Սխալ ճանապարհ»:
Կամ դռան վրա կախված ցուցանակ՝ «Փակ» կամ «Բաց»:
Կամ լուսամուտի լապտերը՝ միացված կամ անջատված:
Դուք կարող եք ընտրել այո կամ ոչ ասելու բազմաթիվ եղանակներից, եթե դա այն ամենն է, ինչ դուք պետք է
ասեք: «Այո» կամ «ոչ» ասելու համար նախադասություն պետք չէ. քեզ ոչ մի բառ պետք չէ, ոչ էլ նույնիսկ
տառ: Ձեզ անհրաժեշտ է ընդամենը մի քիչ , և դրանով ես նկատի ունեմ այն ամենը, ինչ ձեզ հարկավոր է 0
կամ 1:
Ինչպես բացահայտեցինք նախորդ գլուխներում, իրականում ոչ մի առանձնահատուկ բան չկա տասնորդական
թվերի համակարգում, որը մենք սովորաբար օգտագործում ենք հաշվելու համար: Միանգամայն պարզ է, որ
մենք մեր թվային համակարգը հիմնում ենք տասի վրա, քանի որ դա մեր մատների քանակն է: Մենք կարող էինք
նույնքան ողջամտորեն հիմնել մեր թվային համակարգը ութի վրա (եթե մենք մուլտֆիլմի հերոսներ լինեինք)
կամ չորսի (եթե մենք օմարներ լինեինք) կամ նույնիսկ երկուսի վրա (եթե մենք դելֆիններ լինեինք):
Բայց երկուական թվային համակարգում առանձնահատուկ բան կա : Երկուականի առանձնահատկությունն
այն է, որ այն ամենապարզ թվային համակարգն է: Կա ընդամենը երկու երկուական թվանշան՝ 0 և 1: Եթե
մենք ուզում ենք ինչ-որ ավելի պարզ բան, քան երկուականը, մենք պետք է ազատվենք 1-ից, այնուհետև մեզ
կմնա ընդամենը 0-ը: Մենք շատ բան չենք կարող անել: ընդամենը 0-ով:
Bit բառը , որը ստեղծվել է երկուական թվանշան նշանակելու համար , անշուշտ համակարգիչների հետ
կապված ամենահիասքանչ բառերից է: Իհարկե, բառն ունի նորմալ նշանակություն՝ «փոքր չափաբաժին,
աստիճան կամ քանակ», և այդ նորմալ իմաստը կատարյալ է, քանի որ մի բիթ՝ մեկ երկուական թվանշան,
իսկապես շատ փոքր քանակություն է:
Երբեմն, երբ նոր բառ է հորինվում, այն նաև նոր իմաստ է ստանում։ Դա, իհարկե, ճիշտ է այս դեպքում: Մի
քիչ նշանակություն ունի դելֆինների կողմից հաշվելու համար օգտագործվող երկուական թվանշաններից
դուրս: Համակարգչային դարաշրջանում բիթը համարվում է տեղեկատվության հիմնական շինանյութ :
Հիմա դա համարձակ հայտարարություն է, և, իհարկե, բիթերը միայն տեղեկատվություն չեն փոխանցում:
Տառերն ու բառերը, Մորզեի կոդը, Բրայլի և տասնորդական թվանշանները նույնպես տեղեկատվություն են
փոխանցում: Բանն այն է, որ այն շատ քիչ տեղեկատվություն է փոխանցում: Մի քիչ տեղեկատվությունը
հնարավոր ամենափոքր տեղեկատվությունն է: Մի քիչ պակաս բան ընդհանրապես տեղեկատվություն չէ: Բայց
քանի որ բիթը ներկայացնում է տեղեկատվության նվազագույն քանակությունը, ավելի բարդ
տեղեկատվությունը կարող է փոխանցվել մի քանի բիթերի միջոցով: (Ասելով, որ բիթը «փոքր»
տեղեկատվություն է փոխանցում, ես, անշուշտ, նկատի չունեմ, որ տեղեկատվությունը սահմանակից է
անկարևորին: Իրոք, դեղին ժապավենը շատ կարևոր կետ է դրանով մտահոգ երկու մարդկանց համար):
«Լսեք, զավակներս, և դուք կլսեք / Փոլ Ռևերի կեսգիշերային ճանապարհորդության մասին», - գրել է Հենրի
Ուադսվորթ Լոնգֆելլոն, և թեև նա կարող էր պատմականորեն ճշգրիտ չլիներ, երբ նկարագրում էր, թե
ինչպես Փոլ Ռիվերը զգուշացրեց ամերիկյան գաղութներին, որ բրիտանացիները ներխուժել են, նա.
Մտածողություն առաջացնող օրինակ բերեց բիթերի օգտագործման կարևոր տեղեկություններ հաղորդելու
համար.
Նա ասել է իր ընկերոջը «Եթե բրիտանական երթ
Այս գիշեր քաղաքից ցամաքով կամ ծովով,
Զանգակատան կամարի մեջ լապտեր կախեք վերևում
Հյուսիսային եկեղեցու աշտարակը որպես հատուկ լույս,-
Մեկ, եթե ցամաքով, և երկու, եթե ծովով…»

Ամփոփելու համար, Փոլ Ռիվերի ընկերն ունի երկու լապտեր: Եթե բրիտանացիները ցամաքով ներխուժեն, նա
եկեղեցու աշտարակում կդնի ընդամենը մեկ լապտեր։ Եթե բրիտանացիները գալիս են ծովով, նա երկու
լապտերներն էլ կդնի եկեղեցու աշտարակի մեջ։
Այնուամենայնիվ, Լոնգֆելոն բացահայտորեն չի նշում բոլոր հնարավորությունները: Նա չասված թողեց
երրորդ հավանականությունը, այն է, որ բրիտանացիները դեռ չեն ներխուժում: Լոնգֆելոն ենթադրում է, որ
այդ հնարավորությունը կփոխանցվի եկեղեցու աշտարակում լապտերների բացակայությամբ :
Ենթադրենք, որ երկու լապտերներն իրականում եկեղեցու աշտարակի մշտական ամրացումներ են։
Սովորաբար դրանք չեն վառվում.

Սա նշանակում է, որ բրիտանացիները դեռ չեն ներխուժում: Եթե լապտերներից մեկը վառված է,


կամ

բրիտանացիները գալիս են ցամաքային ճանապարհով. Եթե երկու լապտերներն էլ վառված են,

բրիտանացիները գալիս են ծովով.


Յուրաքանչյուր լապտեր մի քիչ է: Վառված լապտերը 1 բիթ է, իսկ չլուսավորված լապտերը 0 բիթ է: Թոնի
Օռլանդոն մեզ ցույց տվեց, որ երկու հնարավորություններից մեկը փոխանցելու համար անհրաժեշտ է միայն
մեկ բիթ: Եթե Փոլ Ռիվերին միայն զգուշացներ, որ բրիտանացիները ներխուժում են (և ոչ թե որտեղից են
նրանք գալիս), մեկ լապտերը բավական կլիներ: Լապտերը կվառվեր արշավանքի համար և չվառված՝
խաղաղության մեկ այլ երեկոյի համար։
Երեք հնարավորություններից մեկը փոխանցելու համար անհրաժեշտ է մեկ այլ լապտեր: Երբ այդ երկրորդ
լապտերն առկա է, այնուամենայնիվ, երկու բիթերը թույլ են տալիս հաղորդակցվել չորս
հնարավորություններից մեկը.

00
=
Բրի
տան
ացի
ները
այս
գիշե
ր
չեն
ներխ
ուժո
ւմ:
01
=
Նրա
նք
գալի
ս են
ցամ
աքով
:
10
=
Նրա
նք
գալի
ս են
ցամ
աքով
:
11
=
Նրա
նք
գալի
ս են
ծովո
վ:

Այն, ինչ արեց Փոլ Ռիվերը՝ հավատարիմ մնալով ընդամենը երեք հնարավորություններին, իրականում
բավականին բարդ էր: Հաղորդակցման տեսության լեզվով նա օգտագործում էր ավելորդությունը ՝
հակազդելու աղմուկի ազդեցությանը : Աղմուկ բառն օգտագործվում է հաղորդակցության տեսության մեջ՝
վերաբերելու այն ամենին, ինչը խանգարում է հաղորդակցությանը: Հեռախոսային գծի վրա ստատիկը
աղմուկի ակնհայտ օրինակ է, որը խանգարում է հեռախոսային հաղորդակցությանը: Հեռախոսով
հաղորդակցությունը սովորաբար հաջող է, այնուամենայնիվ, նույնիսկ աղմուկի առկայության դեպքում, քանի
որ խոսակցական լեզուն խիստ ավելորդ է: Մեզ պետք չէ լսել յուրաքանչյուր բառի յուրաքանչյուր վանկը,
որպեսզի հասկանանք, թե ինչ է ասվում:
Եկեղեցու աշտարակի լապտերների դեպքում աղմուկը կարող է վերաբերել գիշերվա մթությանը և Պոլ Ռևերի
հեռավորությանը աշտարակից, որոնք երկուսն էլ կարող են խանգարել նրան տարբերել մի լապտերը մյուսից:
Ահա Լոնգֆելոյի բանաստեղծության կարևոր հատվածը.
Եվ ահա՛ Ինչպես նա է նայում, զանգակատան բարձրության վրա
Մի շող, իսկ հետո լույսի շող:
Նա գալիս է թամբին, սանձը շրջում է,
Բայց տևում է և նայում մինչև իր հայացքը ամբողջությամբ
Այրվում է զանգակատան երկրորդ լամպը։

Անշուշտ այնպես չի հնչում, թե Փոլ Ռիվերը ի վիճակի էր պարզելու, թե երկու լապտերներից որն է առաջինը
վառվել:
Այստեղ էական հայեցակարգն այն է, որ տեղեկատվությունը ներկայացնում է ընտրություն երկու կամ ավելի
հնարավորությունների միջև : Օրինակ, երբ մենք խոսում ենք մեկ այլ անձի հետ, յուրաքանչյուր բառ, որը
մենք ասում ենք, ընտրություն է բառարանի բոլոր բառերի մեջ: Եթե բառարանի բոլոր բառերը համարակալենք
1-ից մինչև 351,482, մենք կարող ենք նույնքան ճշգրիտ կերպով շարունակել խոսակցությունները՝
օգտագործելով թվերը և ոչ թե բառերը: (Իհարկե, երկու մասնակիցներին էլ կպահանջվեն բառարաններ,
որտեղ բառերը համարակալված են նույնական, ինչպես նաև մեծ համբերություն):
Սրա հակառակ կողմն այն է, որ ցանկացած տեղեկատվություն, որը կարող է կրճատվել երկու կամ ավելի
հնարավորությունների միջև ընտրության, կարող է արտահայտվել բիթերի միջոցով : Ավելորդ է ասել, որ կան
մարդկային հաղորդակցության բազմաթիվ ձևեր, որոնք չեն ներկայացնում ընտրություն առանձին
հնարավորությունների միջև և որոնք նույնպես կենսական նշանակություն ունեն մեր գոյության համար: Ահա
թե ինչու մարդիկ ռոմանտիկ հարաբերություններ չեն ստեղծում համակարգիչների հետ։ (Հուսանք, որ նրանք
այդպես էլ չեն անում:) Եթե դուք չեք կարող ինչ-որ բան արտահայտել բառերով, նկարներով կամ ձայներով,
ապա չեք կարողանա տեղեկատվությունը բիթերով կոդավորել: Ոչ էլ կցանկանայիք:
Բթամատը վեր կամ ներքև բթամատը մի փոքր տեղեկատվություն է: Եվ երկու բութ մատը վեր կամ վար,
օրինակ՝ կինոքննադատներ Ռոջեր Էբերտի և հանգուցյալ Ջին Սիսկելի բութ մատները, երբ նրանք կայացրին
իրենց վերջնական վճիռները վերջին ֆիլմերի վերաբերյալ, փոխանցում են երկու կտոր տեղեկատվություն:
(Մենք անտեսելու ենք այն, ինչ նրանք իրականում պետք է ասեին ֆիլմերի մասին, մեզ հետաքրքրում է միայն
նրանց բութ մատները:) Այստեղ մենք ունենք չորս հնարավորություն, որոնք կարող են ներկայացվել զույգ
բիթերով.

00
=
Երկո
ւսն
էլ
ատո
ւմ
էին
դա:
01
=
Սիսկ
ելը
ատո
ւմ էր
այն;
Էբեր
տը
սիրո
ւմ էր
դա։
10
=
Sisk
el-ը
սիրո
ւմ էր
այն;
Էբեր
տը
ատո
ւմ էր
դա։
11
=
Երկո
ւսն
էլ
սիրո
ւմ
էին
դա:

Առաջին բիթը Սիսկելի բիթն է, որը 0 է, եթե Սիսկելը ատում էր ֆիլմը և 1, եթե այն հավանում էր:
Նմանապես, երկրորդ բիթը Էբերտի բիթն է:
Այսպիսով, եթե ձեր ընկերը ձեզ հարցնի . «Սիսկելը բթամատ տվեց, իսկ Էբերտը մատը ցած» կամ նույնիսկ
«Սիսկելը հավանեց, Էբերտը ոչ» պատասխանելու փոխարեն, դուք կարող եք պարզապես ասել՝ «մեկ զրո»:
Քանի դեռ ձեր ընկերը գիտեր, թե որն է Սիսկելի բիթը, որը՝ Էբերտի բիթը, և որ 1 բիթը նշանակում է բութ
մատը վեր, իսկ 0 բիթը՝ բութ մատը ցած, ձեր պատասխանը միանգամայն հասկանալի կլիներ: Բայց դուք և ձեր
ընկերը պետք է իմանաք կոդը:
Մենք կարող էինք ի սկզբանե հայտարարել, որ 1 բիթը նշանակում է բութ մատը ցած, իսկ 0 բիթը նշանակում
է բութ մատը վեր: Դա կարող է հակասական թվալ: Բնականաբար, մենք սիրում ենք պատկերացնել 1 բիթը
որպես հաստատող բան, իսկ 0 բիթը՝ հակառակը, բայց դա իրականում պարզապես կամայական
հանձնարարություն է: Միակ պահանջն այն է, որ բոլորը, ովքեր օգտագործում են կոդը, պետք է իմանան, թե
ինչ են նշանակում 0 և 1 բիթերը:
Որոշակի բիտի կամ բիթերի հավաքածուի իմաստը միշտ հասկացվում է համատեքստում: Որոշակի կաղնու
շուրջ դեղին ժապավենի նշանակությունը հավանաբար հայտնի է միայն այն անձը, ով այն դրել է այնտեղ, և
այն մարդը, ով պետք է տեսնի այն: Փոխեք գույնը, ծառը կամ ամսաթիվը, և դա պարզապես անիմաստ կտորի
կտոր է: Նմանապես, Սիսկելի և Էբերտի ձեռքի շարժումներից որոշ օգտակար տեղեկություններ ստանալու
համար մենք առնվազն պետք է իմանանք, թե ինչ ֆիլմ է քննարկվում:
Եթե դուք պահպանում եք այն ֆիլմերի ցանկը, որոնք Սիսկելը և Էբերտը վերանայել են, և թե ինչպես են
նրանք քվեարկել իրենց բութ մատներով, կարող եք ևս մի քիչ ավելացնել խառնուրդին՝ ձեր կարծիքը
ներառելու համար: Այս երրորդ բիթը ավելացնելով տարբեր հնարավորությունների թիվը հասնում է ութի՝

000
=
Սիսկ
ելը
ատո
ւմ էր
այն;
Էբեր
տը
ատո
ւմ էր
դա;
Ես
ատո
ւմ էի
դա։
001
=
Սիսկ
ելը
ատո
ւմ էր
այն;
Էբեր
տը
ատո
ւմ էր
դա;
Ես
հավ
անե
ցի
դա.
010
=
Սիսկ
ելը
ատո
ւմ էր
այն;
Էբեր
տը
սիրո
ւմ էր
դա;
Ես
ատո
ւմ էի
դա։
011
=
Սիսկ
ելը
ատո
ւմ էր
այն;
Էբեր
տը
սիրո
ւմ էր
դա;
Ես
հավ
անե
ցի
դա.
100
=
Sisk
el-ը
սիրո
ւմ էր
այն;
Էբեր
տը
ատո
ւմ էր
դա;
Ես
ատո
ւմ էի
դա։
101
=
Sisk
el-ը
սիրո
ւմ էր
այն;
Էբեր
տը
ատո
ւմ էր
դա;
Ես
հավ
անե
ցի
դա.
110
=
Sisk
el-ը
սիրո
ւմ էր
այն;
Էբեր
տը
սիրո
ւմ էր
դա;
Ես
ատո
ւմ էի
դա։
111
=
Sisk
el-ը
սիրո
ւմ էր
այն;
Էբեր
տը
սիրո
ւմ էր
դա;
Ես
հավ
անե
ցի
դա.

Այս տեղեկատվությունը ներկայացնելու համար բիթերի օգտագործման բոնուսներից մեկն այն է, որ մենք
գիտենք, որ մենք հաշվի ենք առել բոլոր հնարավորությունները: Մենք գիտենք, որ կարող է լինել ութ և միայն
ութ հնարավորություն և ոչ ավել, ոչ պակաս: 3 բիթով մենք կարող ենք հաշվել միայն զրոյից մինչև յոթ:
Այլևս եռանիշ երկուական թվեր չկան:
Այժմ, Սիսկելի և Էբերտի բիթերի այս նկարագրության ժամանակ, դուք կարող էիք քննարկել մի շատ լուրջ և
մտահոգիչ հարց, և այդ հարցը հետևյալն է . Ի վերջո, Լեոնարդ Մալթինը չի անում բութ մատը և բթամատը:
Լեոնարդ Մալթինը գնահատում է ֆիլմերը՝ օգտագործելով ավելի ավանդական աստղային համակարգը:
Որոշելու համար, թե Մալտինի քանի բիթ է մեզ անհրաժեշտ, նախ պետք է մի քանի բան իմանանք նրա
համակարգի մասին: Մալթինը ֆիլմին տալիս է ամեն ինչ՝ 1 աստղից մինչև 4 աստղ, իսկ արանքում՝ կես
աստղ: (Պարզապես սա հետաքրքիր դարձնելու համար նա իրականում ոչ մի աստղ չի շնորհում, փոխարենը
ֆիլմը գնահատվում է որպես ԲՈՄԲ): Կան յոթ հնարավորություն, ինչը նշանակում է, որ մենք կարող ենք
ներկայացնել որոշակի վարկանիշ՝ օգտագործելով ընդամենը 3 բիթ.

000
=
Ռում
բ
001
=

010
= **
011
=
**½
100
=
***
101
=
***
½
110
=
****

«Ի՞նչ կասեք 111-ի մասին»: կարող եք հարցնել. Դե, այդ կոդը ոչինչ չի նշանակում: Սահմանված չէ: Եթե
111 երկուական կոդը օգտագործվեր Մալթին վարկանիշը ներկայացնելու համար, դուք կիմանաք, որ սխալ է
թույլ տրվել: (Հավանաբար համակարգիչը սխալ է թույլ տվել, քանի որ մարդիկ երբեք չեն անում):
Դուք կհիշեք, որ երբ մենք ունեինք երկու բիթ՝ ներկայացնելու Սիսկելի և Էբերտի վարկանիշները, ամենաձախ
բիթը Սիսկելի բիթն էր, իսկ ամենաաջը՝ Էբերտի բիթը: Արդյո՞ք առանձին բիթերը որևէ բան են նշանակում
այստեղ: Դե, մի տեսակ: Եթե վերցնեք բիթային կոդի թվային արժեքը, ավելացնեք 2, ապա բաժանեք 2-ի, դա
ձեզ կտա աստղերի քանակը: Բայց դա միայն այն պատճառով, որ մենք սահմանել ենք կոդերը ողջամիտ և
հետևողական ձևով: Մենք կարող էինք նույնքան լավ սահմանել կոդերը հետևյալ կերպ.
000
=
***
001
=

010
=
**½
011
=
****
101
=
***
½
110
= **
111
=
Ռում
բ

Այս ծածկագիրը նույնքան օրինական է, որքան նախորդ ծածկագիրը, քանի դեռ բոլորը գիտեն, թե դա ինչ է
նշանակում:
Եթե Մալթինը երբևէ հանդիպեր ֆիլմի, որն արժանի չէ նույնիսկ մեկ ամբողջական աստղին, նա կարող էր կես
աստղ շնորհել: Նա, անշուշտ, կունենա բավարար կոդեր կիսաստղանի տարբերակի համար: Կոդերը կարող են
վերասահմանվել այսպես.

000
=
ԽՈՇ
ՈՐ
ՌՈՒ
ՄԲ
001
=
Ռում
բ
010
=

011
= **
100
=
**½
101
=
***
110
=
***
½
111
=
****
Բայց եթե նա հանդիպի մի ֆիլմի, որը նույնիսկ արժանի չէ կես աստղի և որոշի ոչ մի աստղ չպարգևատրել
(ԱՏՈՄԱԿԱՆ ՌՈՒՄԲ՞), ապա նրան ևս մի քիչ էլ պետք կգա: Այլևս 3-բիթանոց կոդ չկա:
Entertainment Weekly ամսագիրը գնահատականներ է տալիս ոչ միայն ֆիլմերի, այլ նաև
հեռուստահաղորդումների, ձայնասկավառակների, գրքերի, CD-ROM-ների, վեբ կայքերի և շատ այլ բաների
համար։ Գնահատականները տատանվում են A+-ից մինչև F (չնայած թվում է, որ միայն Pauly Shore
ֆիլմերն են արժանի այդ պատվին): Եթե հաշվեք դրանք, ապա կտեսնեք 13 հնարավոր գնահատական: Այս
գնահատականները ներկայացնելու համար մեզ անհրաժեշտ կլինի 4 բիթ.

000
0=
Ֆ
000
1=
D–
001
0=
Դ
001
1=
D+
010
0=
C–
010
1=
C
011
0=
C+
011
1=
B–
100
0=
Բ
100
1=
B+
101
0=
Ա–
101
1=
Ա
110
0=
A+

Մենք ունենք երեք չօգտագործված կոդ՝ 1101, 1110 և 1111, ընդհանուր՝ 16:
բիթերի որոշակի քանակի մասին: Որքան շատ բիթ ունենք, այնքան ավելի մեծ կլինի տարբեր
հնարավորությունների քանակը, որոնք մենք կարող ենք փոխանցել:
Նույն իրավիճակն է, իհարկե, տասնորդական թվերի դեպքում: Օրինակ, քանի՞ հեռախոսային կոդ կա:
Տարածքի կոդը երեք տասնորդական թվանշան է, և եթե դրանք բոլորն օգտագործվեն (ինչը չեն, բայց մենք դա
անտեսելու ենք), կան 10 3 կամ 1000 կոդեր, որոնք տատանվում են 000-ից մինչև 999: Քանի՞ 7:
-Հնարավո՞ր են թվային հեռախոսահամարներ 212 տարածքային կոդով: Դա 10 7 է կամ 10,000,000: Քանի՞
հեռախոսահամար կարող եք ունենալ 212 տարածքային կոդով և 260 նախածանցով: Դա 10 4 է կամ 10000:
Նմանապես, երկուականում հնարավոր կոդերի թիվը միշտ հավասար է 2-ի բիթերի քանակի հզորությանը.

Կոդե
Բիթ
րի
երի
քան
քան
ակը
ակը
21
1
=2
22
2
=4
23
3
=8
24
4 =
16
25
5 =
32
26
6 =
64
27
7 =
128
28
8 =
256
29
9 =
512
210
=
10
102
4

Յուրաքանչյուր լրացուցիչ բիթ կրկնապատկում է կոդերի քանակը:


Եթե գիտեք, թե քանի կոդ է ձեզ անհրաժեշտ, ինչպե՞ս կարող եք հաշվարկել, թե քանի բիթ է ձեզ անհրաժեշտ:
Այլ կերպ ասած, ինչպե՞ս եք հետ գնալ նախորդ աղյուսակում:
Ձեր օգտագործած մեթոդը կոչվում է հիմք երկու լոգարիթմ : Լոգարիթմը հզորության հակառակն է: Մենք
գիտենք, որ 2-ից մինչև 7-րդ աստիճանը հավասար է 128-ի: 128-ի երկու հիմնական լոգարիթմը հավասար է
7-ի: Ավելի շատ մաթեմատիկական նշում օգտագործելու համար այս պնդումը.

27
=
128
համարժեք է այս հայտարարությանը.

log
212
8=
7

Այսպիսով, եթե 128-ի երկու հիմքի լոգարիթմը 7 է, իսկ 256-ի երկու հիմքի լոգարիթմը 8 է, ապա ո՞րն է
200-ի երկու հիմքի լոգարիթմը: Իրականում դա 7.64-ի մասին է, բայց մենք իրականում դա պետք չէ իմանալ:
Եթե մեզ անհրաժեշտ լիներ բիթերով ներկայացնել 200 տարբեր իրեր, ապա մեզ անհրաժեշտ կլիներ 8 բիթ:
Բիթերը հաճախ թաքնված են պատահական դիտումից մեր էլեկտրոնային սարքերի խորքում: Մենք չենք կարող
տեսնել մեր կոմպակտ սկավառակների կամ թվային ժամացույցների կամ համակարգիչների ներսում
կոդավորված բիթերը: Բայց երբեմն բիթերը պարզ տեսանելի են:
Ահա մի օրինակ. Եթե ունեք տեսախցիկ, որն օգտագործում է 35 միլիմետր թաղանթ, նայեք ֆիլմի ժապավենին:
Պահեք այն այսպես.

Դուք կտեսնեք շաշկի նման արծաթե և սև քառակուսիների ցանց, որը ես համարակալել եմ 1-ից 12-ը
գծապատկերում: Սա կոչվում է DX-կոդավորում : Այս 12 քառակուսիները իրականում 12 բիթ են: Արծաթե
քառակուսին նշանակում է 1 բիթ, իսկ սև քառակուսին նշանակում է 0 բիթ: 1-ին և 7-րդ քառակուսին միշտ
արծաթագույն են (1):
Ի՞նչ են նշանակում բիթերը: Դուք կարող եք տեղյակ լինել, որ որոշ ֆիլմեր ավելի զգայուն են լույսի
նկատմամբ, քան մյուսները: Լույսի նկատմամբ այս զգայունությունը հաճախ կոչվում է ֆիլմի արագություն :
Ֆիլմը, որը շատ զգայուն է լույսի նկատմամբ, ասում են, որ արագ է , քանի որ այն կարող է շատ արագ
բացահայտվել: Ֆիլմի արագությունը նշվում է ֆիլմի ASA (Ամերիկյան ստանդարտների ասոցիացիա)
վարկանիշով, որոնցից ամենահայտնին 100, 200 և 400 է: Այս ASA վարկանիշը տպված է ոչ միայն տուփի
և ֆիլմի ձայներիզների վրա, այլև կոդավորված է բիթերով: .
Լուսանկարչական ֆիլմերի համար կա 24 ստանդարտ ASA վարկանիշ: Այստեղ են:

32 40
25
50 64 80
100 125 160
200 320
250
թ թ
640
400 500
թ
800 100 125
թ 0 0թ
160 200 250
0թ 0թ 0թ
320 400 500
0թ 0 0

Քանի՞ բիթ է պահանջվում ASA վարկանիշը կոդավորելու համար: Պատասխանը 5 է: Մենք գիտենք, որ 2 4-ը
հավասար է 16-ի, ուստի դա շատ քիչ է: Բայց 2 5-ը հավասար է 32-ի, որն ավելի քան բավարար է։
Ֆիլմի արագությանը համապատասխանող բիթերը ներկայացված են հետևյալ աղյուսակում.

Ֆիլ
Քառ Քառ Քառ Քառ մի
Քառ
ակու ակու ակու ակու արա
ակու
սի 3 սի 4 սի 5 սի 6 գութ
սի 2
յուն
0 0 0 1 0 25
0 0 0 0 1 32
0 0 0 1 1 40
1 0 0 1 0 50
1 0 0 0 1 64
1 0 0 1 1 80
0 1 0 1 0 100
0 1 0 0 1 125
0 1 0 1 1 160
200
1 1 0 1 0
թ
1 1 0 0 1 250
320
1 1 0 1 1
թ
0 0 1 1 0 400
0 0 1 0 1 500
640
0 0 1 1 1
թ
800
1 0 1 1 0
թ
100
1 0 1 0 1
0
125
1 0 1 1 1

160
0 1 1 1 0

200
0 1 1 0 1

250
0 1 1 1 1

320
1 1 1 1 0

400
1 1 1 0 1
0
500
1 1 1 1 1
0

Ժամանակակից 35 միլիմետրանոց տեսախցիկների մեծ մասը օգտագործում է այս ծածկագրերը:


(Բացառություն են կազմում այն տեսախցիկները, որոնց վրա դուք պետք է ձեռքով կարգավորեք
լուսարձակումը, և տեսախցիկները, որոնք ունեն ներկառուցված լուսաչափեր, սակայն պահանջում են ձեռքով
կարգավորել ֆիլմի արագությունը): մետաղական կոնտակտներ, որոնք համապատասխանում են 1-ից 6-րդ
քառակուսիներին ֆիլմի տարայի վրա: Արծաթե քառակուսիները իրականում ֆիլմի ժապավենի մետաղն են,
որը հաղորդիչ է: Սև քառակուսիները ներկ են, որը մեկուսիչ է։
Տեսախցիկի էլեկտրոնային սխեման հոսանք է փոխանցում 1-ին քառակուսի, որը միշտ արծաթագույն է: Այս
հոսանքը կվերցվի (կամ չի վերցվի) 2-ից 6-րդ քառակուսիների հինգ կոնտակտներով՝ կախված նրանից՝
քառակուսիները մերկ արծաթյա են, թե ներկված են: Այսպիսով, եթե տեսախցիկը հոսանք է զգում 4 և 5
կոնտակտներում, բայց ոչ 2, 3 և 6 կոնտակտներում, ապա ֆիլմի արագությունը 400 ASA է: Այնուհետև
տեսախցիկը կարող է համապատասխանաբար կարգավորել ֆիլմի ազդեցությունը:
Էժան տեսախցիկներին անհրաժեշտ է կարդալ միայն 2-րդ և 3-րդ քառակուսիները և ենթադրել, որ ֆիլմի
արագությունը 50, 100, 200 կամ 400 ASA է:
Տեսախցիկների մեծամասնությունը չի կարդում կամ օգտագործում 8-ից 12-րդ քառակուսիները: 8-րդ, 9-րդ
և 10-րդ քառակուսիները կոդավորում են ֆիլմի ժապավենի լուսարձակումների քանակը, իսկ 11-րդ և 12-րդ
քառակուսիները վերաբերում են լուսարձակման լայնությանը, որը կախված է նրանից, թե արդյոք ֆիլմը
նախատեսված է : սև-սպիտակ տպումներ, գունավոր տպագրության կամ գունավոր սլայդների համար:
Թերևս երկուական թվանշանների ամենատարածված տեսողական ցուցադրումը համատարած Ունիվերսալ
Ապրանքի կոդը (UPC) է, այդ փոքրիկ շտրիխ կոդի խորհրդանիշը, որը երևում է գրեթե յուրաքանչյուր
փաթեթավորված ապրանքի վրա, որը մենք գնում ենք այս օրերին: UPC-ն խորհրդանշում է համակարգիչների
մեր կյանք մուտք գործելու ուղիներից մեկը:
Թեև UPC-ն հաճախ պարանոյայի նոպաներ է ներշնչում, դա իսկապես անմեղ փոքրիկ բան է, որը հորինվել է
մանրածախ դրամարկղի և գույքագրման ավտոմատացման նպատակով, ինչը բավականին հաջողությամբ է
անում: Երբ այն օգտագործվում է լավ մշակված դրամարկղային համակարգով, սպառողը կարող է ունենալ
վաճառքի կտրոն, ինչը հնարավոր չէ սովորական ՀԴՄ-ներով:
Մեզ համար այստեղ հետաքրքիր է այն, որ UPC-ն երկուական կոդ է, թեև սկզբում այն կարող է թվալ որպես
այդպիսին: Այսպիսով, ուսանելի կլինի վերծանել UPC-ն և ուսումնասիրել, թե ինչպես է այն աշխատում:
Ամենատարածված ձևով UPC-ն տարբեր լայնությունների 30 ուղղահայաց սև գծերի հավաքածու է՝
բաժանված տարբեր լայնությունների բացերով և որոշ թվանշաններով: Օրինակ, սա UPC-ն է, որը հայտնվում
է Campbell's Chicken Noodle ապուրի 10 ¾ ունցիայի տարայի վրա.

Մենք գայթակղվում ենք փորձել տեսողականորեն մեկնաբանել UPC-ն բարակ և սև գծերով, նեղ
բացվածքներով և լայն բացերով, և, իսկապես, դա դիտարկելու ձևերից մեկն է: UPC-ի սև գծերը կարող են
ունենալ չորս տարբեր լայնություններ, ընդ որում ավելի հաստ ձողերը երկու, երեք և չորս անգամ մեծ են
ամենաբարակ գծից: Նմանապես, ձողերի միջև ավելի լայն բացերը երկու, երեք և չորս անգամ ավելի են, քան
ամենաբարակ բացը:
Բայց UPC-ին նայելու մեկ այլ միջոց է որպես բիթերի շարք: Հիշեք, որ ամբողջ շտրիխ կոդի խորհրդանիշը
հենց այն չէ, ինչ սկանավորման գավազանը «տեսնում է» դրամարկղում: Գավազանը չի փորձում մեկնաբանել
ներքևի թվերը, օրինակ, քանի որ դա կպահանջի ավելի բարդ հաշվողական տեխնիկա, որը հայտնի է որպես
օպտիկական նիշերի ճանաչում կամ OCR: Փոխարենը, սկաները տեսնում է այս ամբողջ բլոկի ընդամենը մի
բարակ շերտ: UPC-ն այնքան մեծ է, որքան այն, որպեսզի դրամարկղային անձին ինչ-որ բան տա սկաները
ուղղելու համար: Այն հատվածը, որը տեսնում է սկաները, կարող է ներկայացվել այսպես.

Սա մոտավորապես նման է Մորզեի կոդի, այնպես չէ՞:


Երբ համակարգիչը սկանավորում է այս տեղեկատվությունը ձախից աջ, այն 1 բիթ է հատկացնում իր
հանդիպած առաջին սև գծին, 0 բիթ հաջորդ սպիտակ բացին: Հետագա բացերն ու ձողերը կարդացվում են
որպես 1, 2, 3 կամ 4 բիթ անընդմեջ բիթերի շարք՝ կախված բացի լայնությունից կամ բարից: Սկանավորված
շտրիխ կոդի համապատասխանությունը բիթերին պարզապես հետևյալն է.

Այսպիսով, ամբողջ UPC-ն ուղղակի 95 բիթանոց շարք է: Այս կոնկրետ օրինակում բիթերը կարող են
խմբավորվել հետևյալ կերպ.
Առաջին 3 բիթերը միշտ 101 են: Սա հայտնի է որպես ձախակողմյան պահակային օրինաչափություն և թույլ
է տալիս համակարգիչ սկանավորող սարքին կողմնորոշվել: Պահակային օրինաչափությունից սկաները
կարող է որոշել ձողերի և բացերի լայնությունը, որոնք համապատասխանում են առանձին բիթերին: Հակառակ
դեպքում, UPC-ն պետք է լինի որոշակի չափս բոլոր փաթեթների վրա:
Ձախ ձեռքի պահակային օրինակին հաջորդում են վեց խումբ՝ յուրաքանչյուրը 7 բիթից: Սրանցից
յուրաքանչյուրը 0-ից 9 թվանշանի ծածկագիր է, ինչպես ես շուտով ցույց կտամ: Հետևում է կենտրոնական
պահակախմբի 5-բիթանոց օրինակը: Այս ֆիքսված օրինակի առկայությունը (միշտ 01010) ներկառուցված
սխալների ստուգման ձև է: Եթե համակարգչային սկաները չի գտնում կենտրոնական պահակային
օրինաչափությունը, որտեղ այն պետք է լինի, այն չի ընդունի, որ նա մեկնաբանել է UPC-ն: Կենտրոնական
պահակախմբի այս նախշը մի քանի նախազգուշական միջոցներից մեկն է կեղծված կամ վատ տպագրված
ծածկագրի դեմ:
Կենտրոնական պահակային օրինաչափությանը հաջորդում են ևս վեց խումբ՝ յուրաքանչյուրը 7 բիթից,
որոնցից հետո հետևում է աջակողմյան պաշտպանիչ նախշը, որը միշտ 101 է: UPC կոդը պետք է
սկանավորվի հետընթաց (այսինքն՝ աջից ձախ), ինչպես նաև առաջ:
Այսպիսով, ամբողջ UPC-ն կոդավորում է 12 թվանշան: UPC-ի ձախ կողմը կոդավորում է 6 թվանշան,
որոնցից յուրաքանչյուրը պահանջում է 7 բիթ: Այս բիթերը վերծանելու համար կարող եք օգտագործել
հետևյալ աղյուսակը.
Աղյուսակ 9-1. Ձախ կողմի կոդեր

011
000
000
110
1=
1=
5
0
001 010
100 111
1= 1=
1 6
001 011
001 101
1= 1=
2 7
011 011
110 011
1= 1=
3 8
010 000
001 101
1= 1=
4 9

Ուշադրություն դարձրեք, որ յուրաքանչյուր 7-բիթանոց կոդ սկսվում է 0-ով և ավարտվում 1-ով: Եթե
սկաները ձախ կողմում հանդիպի 7-բիթանոց կոդի, որը սկսվում է 1-ով կամ ավարտվում է 0-ով, նա գիտի, որ
այն ճիշտ չէ: կարդալ UPC կոդը կամ որ կոդը կեղծվել է: Ուշադրություն դարձրեք նաև, որ յուրաքանչյուր
կոդ ունի հաջորդական 1 բիթերի միայն երկու խումբ: Սա ենթադրում է, որ յուրաքանչյուր թվանշան
համապատասխանում է UPC կոդի երկու ուղղահայաց տողերին:
Դուք կտեսնեք, որ այս աղյուսակի յուրաքանչյուր ծածկագիր ունի 1 բիթ կենտ թիվ: Սա սխալի և
հետևողականության ստուգման մեկ այլ ձև է, որը հայտնի է որպես հավասարություն : Բիթերի խումբն ունի
զույգ հավասարություն , եթե ունի 1 բիթ զույգ, և կենտ հավասարություն , եթե ունի 1 բիթ կենտ: Այսպիսով,
այս բոլոր ծածկագրերն ունեն տարօրինակ հավասարություն:
UPC-ի աջ կողմում գտնվող վեց 7-բիթանոց կոդերը մեկնաբանելու համար օգտագործեք հետևյալ աղյուսակը.

Աղյուսակ 9-2. Աջ կողմի կոդեր

100
111
111
001
0=
0=
5
0
110 101
011 000
0= 0=
1 6
110 100
110 010
0= 0=
2 7
100 100
001 100
0= 0=
3 8
101 111
110 010
0= 0=
4 9

Այս կոդերը նախորդ կոդերի լրացումն են. որտեղ էլ որ 0-ն հայտնվեց, այժմ 1 է, և հակառակը: Այս կոդերը
միշտ սկսվում են 1-ով և ավարտվում 0-ով: Բացի այդ, նրանք ունեն 1 բիթերի զույգ թիվ, որը հավասարաչափ
է:
Այսպիսով, այժմ մենք հագեցած ենք UPC-ի վերծանման համար: Օգտագործելով նախորդ երկու
աղյուսակները՝ մենք կարող ենք որոշել, որ Campbell's Chicken Noodle ապուրի 10 ¾ ունցիա
տարողությամբ 12 նիշերը կոդավորված են.

0
510
00
012
51
7

Սա շատ հիասթափեցնող է: Ինչպես տեսնում եք, դրանք ճիշտ նույն թվերն են, որոնք հարմար կերպով տպված
են UPC-ի ներքևում: (Սա շատ իմաստալից է, քանի որ եթե սկաները ինչ-ինչ պատճառներով չի կարող
կարդալ կոդը, գրանցամատյանում գտնվող անձը կարող է ձեռքով մուտքագրել համարները: Իսկապես, դուք,
անկասկած, տեսել եք, որ դա տեղի է ունենում:) Մենք ստիպված չենք եղել գնալ: դրանք վերծանելու այդ
ամբողջ աշխատանքով, և առավել եւս՝ մենք չենք մոտեցել որևէ գաղտնի տեղեկատվության վերծանմանը։
Այնուամենայնիվ, UPC-ում ոչինչ չի մնացել վերծանելու համար: Այդ 30 ուղղահայաց գծերը որոշվում են
ընդամենը 12 թվանշաններով:
Առաջին թվանշանը (այս դեպքում՝ 0) հայտնի է որպես թվային համակարգի նիշ : 0-ը նշանակում է, որ սա
սովորական UPC կոդը է: Եթե UPC-ն հայտնվեր փոփոխական քաշով մթերային ապրանքների վրա, ինչպիսիք
են միսը կամ արտադրանքը, ապա ծածկագիրը կլինի 2: Կտրոնները կոդավորված են 5-ով:
Հաջորդ հինգ թվանշանները կազմում են արտադրողի կոդը: Այս դեպքում 51000-ը Campbell Soup
Company-ի կոդը է: Campbell-ի բոլոր ապրանքներն ունեն այս կոդը: Հետևյալ հինգ թվանշանները
(01251) տվյալ ընկերության որոշակի արտադրանքի կոդը են, այս դեպքում՝ 10 ¾ ունցիաանոց հավի
լապշա ապուրի տուփի կոդը: Այս ապրանքի կոդը նշանակություն ունի միայն այն դեպքում, երբ համակցված է
արտադրողի կոդի հետ: Մեկ այլ ընկերության հավի լապշա ապուրը կարող է ունենալ այլ ապրանքի կոդը, իսկ
01251 ապրանքի կոդը կարող է նշանակել բոլորովին տարբերվող այլ արտադրողներից:
Հակառակ տարածված կարծիքի, UPC-ն չի ներառում ապրանքի գինը: Այդ տեղեկատվությունը պետք է
առբերվի այն համակարգչից, որն օգտագործում է խանութը դրամարկղային սկաներների հետ համատեղ:
Վերջնական թվանշանը (այս դեպքում 7-ը) կոչվում է մոդուլի ստուգման նշան : Այս նիշը հնարավորություն
է տալիս սխալների ստուգման ևս մեկ ձև: Որպեսզի ուսումնասիրենք, թե ինչպես է դա աշխատում, եկեք
վերագրենք առաջին 11 թվանշաններից յուրաքանչյուրին (մեր օրինակում 0 51000 01251) տառ.
A
BC
DEF
GHI
JK

Այժմ հաշվարկեք հետևյալը.

3x
(A +
C+
E+
G+
I+
K) +
(B +
D+
F+
H+
J)

և հանեք այն 10-ի հաջորդ ամենաբարձր բազմապատիկից: Դա կոչվում է մոդուլի ստուգման նշան :
Campbell's Chicken Noodle Soup-ի դեպքում մենք ունենք

3x
(0 +
1+
0+
0+
2+
1) +
(5 +
0+
0+
1+
5) =
3x
4+
11
=
23

10-ի հաջորդ ամենաբարձր բազմապատիկը 30-ն է, ուրեմն

30 –
23
=7

և դա UPC-ում տպված և կոդավորված մոդուլային ստուգման նիշն է: Սա ավելորդության ձև է: Եթե սկաները


կառավարող համակարգիչը չի հաշվարկում մոդուլի ստուգման նույն նիշը, ինչ UPC-ում կոդավորվածը,
համակարգիչը չի ընդունի UPC-ն որպես վավեր:
Սովորաբար 0-ից 9-ը տասնորդական թվանշանը նշելու համար պահանջվում է ընդամենը 4 բիթ: UPC-ն
օգտագործում է 7 բիթ յուրաքանչյուր թվի համար: Ընդհանուր առմամբ, UPC-ն օգտագործում է 95 բիթ միայն
11 օգտակար տասնորդական թվանշաններ կոդավորելու համար: Փաստորեն, UPC-ն ներառում է դատարկ
տարածություն (համարժեք ինը 0 բիթ) ինչպես ձախ, այնպես էլ պահակային օրինաչափության աջ կողմում:
Դա նշանակում է, որ ամբողջ UPC-ն պահանջում է 113 բիթ 11 տասնորդական նիշ կոդավորելու համար,
կամ ավելի քան 10 բիթ մեկ տասնորդական թվի համար:
Այս գերակատարման մի մասը անհրաժեշտ է սխալները ստուգելու համար, ինչպես տեսանք: Ապրանքի նման
ծածկագիրը այնքան էլ օգտակար չէր լինի, եթե այն հեշտությամբ փոփոխվեր հաճախորդի կողմից, ով ձեռքում
է ֆլոմաստեր:
UPC-ն նաև շահում է երկու ուղղություններով ընթեռնելի լինելով: Եթե առաջին թվանշանները, որոնք
վերծանում է սկանավորող սարքը, ունեն հավասարաչափ (այսինքն՝ 1 բիթերի զույգ թիվ յուրաքանչյուր
7-բիթանոց կոդում), սկաները գիտի, որ այն մեկնաբանում է UPC կոդը աջից ձախ: Համակարգչային
համակարգը այնուհետև օգտագործում է այս աղյուսակը աջ կողմի թվանշանները վերծանելու համար.

Աղյուսակ 9-3. Աջ կողմի կոդերը հակառակ ուղղությամբ

011
010
100
011
1=
1=
5
0
011 000
001 010
1= 1=
1 6
001 001
101 000
1= 1=
2 7
010 000
000 100
1= 1=
3 8
001 001
110 011
1= 1=
4 9

և այս աղյուսակը ձախ կողմի թվանշանների համար.

Աղյուսակ 9-4. Ձախ կողմի կոդերը հակառակ ուղղությամբ

100
101
011
100
0=
0=
5
0
100 111
110 101
0= 0=
1 6
110 110
010 111
0= 0=
2 7
101 111
111 011
0= 0=
3 8
110 110
001 100
0= 0=
4 9

Այս 7-բիթանոց կոդերը բոլորը տարբերվում են այն կոդերից, որոնք կարդացվում են, երբ UPC-ն
սկանավորվում է ձախից աջ: Ոչ մի երկիմաստություն չկա.
Մենք սկսեցինք դիտարկել այս գրքի ծածկագրերը Մորզեի կոդով, որոնք կազմված էին կետերից, գծիկներից և
կետերի և գծիկների միջև եղած դադարներից: Մորզեի կոդը անմիջապես չի թվում, թե այն համարժեք է
զրոների և մեկերի, բայց դա այդպես է:
Հիշեք Մորզեի կանոնները. գծիկը երեք անգամ ավելի երկար է, քան կետը: Մեկ տառի կետերն ու գծիկները
բաժանվում են մեկ կետի երկարությամբ դադարով: Բառի մեջ տառերը բաժանվում են գծիկի երկարությամբ
դադարներով: Բառերը բաժանվում են երկու գծիկի երկարությամբ դադարներով:
Պարզապես այս վերլուծությունը մի փոքր պարզեցնելու համար ենթադրենք, որ գծիկը երկու անգամ մեծ է
կետի երկարությունից, քան երեք անգամ: Դա նշանակում է, որ կետը կարող է լինել 1 բիթ, իսկ գծիկը՝ երկու
1 բիթ: Դադարները 0 բիթ են:
Ահա Մորզեի կոդի հիմնական աղյուսակը 2-րդ գլխից .

Ահա աղյուսակը վերածված բիթերի.

101
101 101
Ջ Ս 010
Ա 100 101
0
101
100
110
110
101 110
Բ Կ 101 Տ
010 0թ
100
0
110 101
101
101 101
Գ Լ U 011
101 010
00
00 0

101
110 110
010
Դ 101 Մ 110 Վ
110
00 0
0
101
110
Ե 100 Ն Վ 101
100
100

101 110 110


011 110 101
Ֆ Օ X
010 110 011
0 0 00
101 110
110
101 101
Գ 110 Պ Յ
101 101
100
00 100
110 110
101
110 110
Հ 010 Ք Զ
101 101
100
100 00
101 101
Ի 00 Ռ 101
թ 00

Ուշադրություն դարձրեք, որ բոլոր կոդերը սկսվում են 1 բիթով և ավարտվում զույգ 0 բիթով: 0 բիթ զույգը
ներկայացնում է նույն բառի տառերի միջև դադարը: Բառերի միջև տարածության ծածկագիրը 0 բիթերի ևս
մեկ զույգ է: Այսպիսով, «hi there»-ի Մորզեի կոդը սովորաբար տրվում է որպես

բայց Մորզեի կոդը՝ օգտագործելով բիթերը, կարող է նմանվել UPC կոդի խաչմերուկին.

Բիթերի առումով Բրայլը շատ ավելի պարզ է, քան Մորզեի կոդը: Բրայլը 6-բիթանոց կոդ է: Յուրաքանչյուր
նիշ ներկայացված է վեց կետերից բաղկացած զանգվածով, և վեց կետերից յուրաքանչյուրը կարող է կամ
բարձրացվել կամ չբարձրացվել: Ինչպես ես բացատրեցի 3-րդ գլխում , կետերը սովորաբար համարակալված
են 1-ից 6-ը.
«Կոդ» բառը (օրինակ) ներկայացված է Բրայլի նշաններով.

Եթե բարձրացված կետը 1 է, իսկ հարթ կետը 0, ապա Բրայլի գրանշաններից յուրաքանչյուրը կարող է
ներկայացվել 6-բիթանոց երկուական թվով: «Կոդ» բառի տառերի չորս բրայլյան նշանները պարզապես
հետևյալն են.

100
100
101
010
100
110
100
010

որտեղ ամենաձախ բիթը համապատասխանում է ցանցի 1 դիրքին, իսկ ամենաաջ բիթը համապատասխանում է
6 դիրքին:
Ինչպես կտեսնենք այս գրքում ավելի ուշ, բիթերը կարող են ներկայացնել բառեր, նկարներ, ձայներ,
երաժշտություն և ֆիլմեր, ինչպես նաև արտադրանքի կոդերը, ֆիլմերի արագությունը, ֆիլմերի վարկանիշը,
բրիտանական բանակի ներխուժումը և սիրելիի մտադրությունները: Բայց ամենահիմնականը, բիթերը թվեր
են: Այն ամենը, ինչ պետք է արվի, երբ բիթերը ներկայացնում են այլ տեղեկատվություն,
հնարավորությունների քանակը հաշվելն է: Սա որոշում է բիթերի քանակը, որոնք անհրաժեշտ են, որպեսզի
յուրաքանչյուր հնարավորության համար հնարավոր լինի վերագրել:
Բիթերը նաև դեր են խաղում տրամաբանության մեջ , փիլիսոփայության և մաթեմատիկայի այդ տարօրինակ
խառնուրդը, որի առաջնային նպատակը որոշ պնդումների ճշմարիտ կամ կեղծ լինելն է: Ճիշտն ու կեղծը
կարող են լինել նաև 1 և 0:
Գլուխ 10. Տրամաբանություն և անջատիչներ
Ի՞նչ է ճշմարտությունը: Արիստոտելը կարծում էր, որ տրամաբանությունը կապ ունի դրա հետ։ Նրա
ուսմունքների ժողովածուն, որը հայտնի է որպես Օրգանոն (որը թվագրվում է մ.թ.ա. չորրորդ դարից)
տրամաբանության թեմայով ամենավաղ ընդարձակ գրությունն է։ Հին հույների համար տրամաբանությունը
ճշմարտության որոնման մեջ լեզուն վերլուծելու միջոց էր և, հետևաբար, համարվում էր փիլիսոփայության
ձև: Արիստոտելի տրամաբանության հիմքը սիլլոգիզմն էր ։ Ամենահայտնի սիլլոգիզմը (որն իրականում չի
հանդիպում Արիստոտելի աշխատություններում).
Բոլոր մարդիկ մահկանացու են.
Սոկրատեսը մարդ է.
Այսպիսով, Սոկրատեսը մահկանացու է:

Սիլլոգիզմում ենթադրվում է, որ երկու նախադրյալները ճիշտ են, և դրանցից եզրակացություն է արվում։


Սոկրատեսի մահկանացությունը կարող է բավականին պարզ թվալ, բայց կան բազմաթիվ սիլլոգիզմների
տարատեսակներ: Օրինակ, նկատի ունեցեք հետևյալ երկու նախադրյալները, որոնք առաջարկել է
տասնիններորդ դարի մաթեմատիկոս Չարլզ Դոջսոնը (նաև հայտնի է որպես Լյուիս Քերոլ).
Բոլոր փիլիսոփաները տրամաբանական են.
Անտրամաբանական մարդը միշտ համառ է։

Եզրակացությունն ամենևին էլ պարզ չէ. (Դա «Որոշ համառ մարդիկ փիլիսոփաներ չեն»: Ուշադրություն
դարձրեք «ոմանք» բառի անսպասելի և անհանգստացնող տեսքին):
Ավելի քան երկու հազար տարի մաթեմատիկոսները պայքարում էին Արիստոտելի տրամաբանության հետ՝
փորձելով այն շտկել՝ օգտագործելով մաթեմատիկական նշաններ և օպերատորներ: Մինչև 19-րդ դարը, միակ
մարդը, ով մոտեցավ Գոտֆրիդ Վիլհելմ ֆոն Լայբնիցն էր (1648–1716), ով կյանքի սկզբում զբաղվեց
տրամաբանությամբ, բայց հետո սկսեց զբաղվել այլ հետաքրքրություններով (օրինակ՝ անկախ հաշվարկներ
հորինելով Իսահակ Նյուտոնի հետ միաժամանակ։ )
Եվ հետո եկավ Ջորջ Բուլը:
Ջորջ Բուլը ծնվել է Անգլիայում 1815թ.-ին մի աշխարհում, որտեղ անկասկած հավանականությունները նրա
դեմ էին: Քանի որ նա կոշիկագործի և նախկին սպասուհու որդի էր, Բրիտանիայի խստաշունչ դասակարգային
կառուցվածքը սովորաբար խանգարում էր Բուլին հասնել իր նախնիներից շատ տարբեր բաների: Բայց
ուսումնատենչ մտքի և իր օգնական հոր (ով մեծ հետաքրքրություններ ուներ գիտության, մաթեմատիկայի և
գրականության նկատմամբ) աջակցությամբ՝ երիտասարդ Ջորջն իրեն տվեց այնպիսի կրթություն, որը
սովորաբար բարձր դասի տղաների արտոնությունն էր. նրա ուսումնասիրությունները ներառում էին
լատիներեն, հունարեն և մաթեմատիկա: Մաթեմատիկայի վերաբերյալ իր վաղ աշխատությունների
արդյունքում 1849 թվականին Բուլը նշանակվեց մաթեմատիկայի առաջին պրոֆեսոր Քուինս քոլեջում,
Քորք, Իռլանդիայում:
«Տրամաբանության մաթեմատիկական վերլուծություն, լինելով ակնարկ դեպի ակնարկ» կարճ գրքում:
դեդուկտիվ պատճառաբանության հաշվարկ (1847), այնուհետև շատ ավելի երկար և հավակնոտ տեքստում՝
« Մտքի օրենքների ուսումնասիրություն, որոնց վրա հիմնված են տրամաբանության և
հավանականությունների մաթեմատիկական տեսությունները» (1854), որն ավելի հարմար է կոչվում « Մտքի
օրենքներ» . Բուլը մահացել է 1864 թվականին 49 տարեկանում՝ անձրևի տակ դասի շտապելուց և
թոքաբորբով հիվանդանալուց հետո։
Բուլի 1854 թվականի գրքի վերնագիրը ենթադրում է հավակնոտ մոտիվացիա. Քանի որ բանական մարդու
ուղեղը տրամաբանություն է օգտագործում մտածելու համար, եթե մենք գտնեինք մի ճանապարհ, որով
տրամաբանությունը կարող է ներկայացվել մաթեմատիկայի միջոցով, մենք նաև կունենայինք
մաթեմատիկական նկարագրություն, թե ինչպես է աշխատում ուղեղը: Իհարկե, մեր օրերում մտքի այս
տեսակետը մեզ բավականին միամիտ է թվում։ (Կամ դա, կամ դա իր ժամանակից շատ առաջ է):
Բուլը հորինել է մի տեսակ հանրահաշիվ, որն արտաքինից և գործում է շատ նման սովորական
հանրահաշիվին: Պայմանական հանրահաշիվում օպերանդները (որոնք սովորաբար տառեր են) նշանակում են
թվեր, իսկ օպերատորները (առավել հաճախ + և x) ցույց են տալիս, թե ինչպես պետք է միավորվեն այդ
թվերը: Հաճախ մենք օգտագործում ենք սովորական հանրահաշիվը նման խնդիրներ լուծելու համար. Անյան
ունի 3 ֆունտ տոֆու: Բեթին երկու անգամ ավելի շատ տոֆու ունի, քան Անյան: Կարմենը 5 ֆունտով ավելի
շատ տոֆու ունի, քան Բեթին: Դեյդրը երեք անգամ ավելի շատ տոֆու ունի, քան Կարմենը: Որքա՞ն տոֆու
ունի Դեյդրեն:
Այս խնդիրը լուծելու համար մենք նախ անգլերենը վերածում ենք թվաբանական հայտարարությունների՝
օգտագործելով չորս տառ՝ նշելով այն ֆունտ տոֆուն, որը չորս կանանցից յուրաքանչյուրն ունի.

A=
3
B=
2x
A
C=
B+
5
D=
3x
C

Մենք կարող ենք փոխարինել այս չորս պնդումները մեկ հայտարարության մեջ և վերջապես կատարել
գումարումներն ու բազմապատկումները.

D=
3x
C
D=
3x
(B +
5)
D=
3x
((2
x A)
+ 5)
D=
3x
((2
x 3)
+ 5)
D=
33

Երբ մենք կատարում ենք պայմանական հանրահաշիվ, մենք հետևում ենք որոշակի կանոնների. Այս
կանոնները, հավանաբար, այնքան են արմատավորվել մեր պրակտիկայում, որ մենք այլևս դրանք չենք
համարում կանոններ և կարող ենք նույնիսկ մոռանալ դրանց անունները: Բայց կանոններն իսկապես ընկած
են մաթեմատիկայի ցանկացած ձևի բոլոր գործողությունների հիմքում:
Առաջին կանոնն այն է, որ գումարումը և բազմապատկումը փոխադարձ են : Դա նշանակում է, որ մենք կարող
ենք անցնել գործողությունների յուրաքանչյուր կողմում գտնվող նշանների շուրջ.

A+
B=
B+
A
Ax
B=
Bx
A

Ընդհակառակը, հանումը և բաժանումը փոխադրական չեն :


Գումարը և բազմապատկումը նույնպես ասոցիատիվ են , այսինքն

A+
(B +
C) =
(A +
B) +
C
Ax
(B x
C) =
(A x
B) x
C

Եվ վերջապես, ասում են, որ բազմապատկումը բաշխվում է գումարման վրա.

Ax
(B +
C) =
(A x
B) +
(A x
C)

Պայմանական հանրահաշվի մեկ այլ առանձնահատկությունն այն է, որ այն միշտ գործ ունի թվերի հետ,
ինչպիսիք են ֆունտ տոֆուները կամ բադերի քանակը կամ գնացքի անցած հեռավորությունները կամ
ընտանիքի անդամների տարիքը: Բուլի հանճարն էր հանրահաշիվը դարձնել ավելի վերացական՝ բաժանելով
այն թվերի հասկացություններից: Բուլյան հանրահաշիվում (ինչպես ի վերջո կոչվեց Բուլի հանրահաշիվը),
օպերանդները վերաբերում են ոչ թե թվերին, այլ դասերին : Դասը պարզապես իրերի խումբ է, որը
հետագայում հայտնի դարձավ որպես մի շարք :
Եկեք խոսենք կատուների մասին: Կատուները կարող են լինել ինչպես արու, այնպես էլ էգ: Հարմարության
համար մենք կարող ենք օգտագործել M տառը՝ արու կատուների դասին, իսկ F՝ էգ կատուների դասին: Հիշեք,
որ այս երկու նշանները չեն ներկայացնում կատուների թվեր: Արու և էգ կատուների թիվը կարող է փոխվել
րոպե առ րոպե, քանի որ նոր կատուներ են ծնվում և ծեր կատուները (ցավոք) մահանում են: Տառերը
նշանակում են կատուների դասեր՝ հատուկ հատկանիշներով կատուներ: Արու կատուներին ակնարկելու
փոխարեն կարելի է պարզապես «Մ» ասել։
Մենք կարող ենք նաև օգտագործել այլ տառեր՝ ներկայացնելու կատուների գույնը. Օրինակ՝ T-ն կարող է
վերաբերել արևայրուք կատուների դասին, B-ն կարող է լինել սև կատուների դասը, W՝ սպիտակ կատուների
դասը, իսկ O-ը՝ կատուների դասին։ բոլոր «այլ» գույները՝ բոլոր կատուները, որոնք դասի T, B կամ W չեն:
Վերջապես (համենայն դեպս, որքան վերաբերում է այս օրինակին), կատուները կարող են լինել կամ
ստերիլիզացված կամ չստերիլիզացված: Եկեք օգտագործենք N տառը՝ ստերիլիզացված կատուների դասին
անդրադառնալու համար, իսկ U՝ չստերիլիզացված կատուների դասին:
Պայմանական (թվային) հանրահաշիվում + և x օպերատորներն օգտագործվում են գումարում և
բազմապատկում նշելու համար։ Բուլյան հանրահաշիվում օգտագործվում են նույն + և x նշանները, և ահա,
որտեղ ամեն ինչ կարող է շփոթեցնել: Բոլորը գիտեն, թե ինչպես կարելի է թվեր գումարել և բազմապատկել
սովորական հանրահաշիվում, բայց ինչպե՞ս ենք մենք գումարում և բազմապատկում դասերը :
Դե, մենք իրականում չենք գումարում և բազմապատկում Բուլյան հանրահաշիվով: Փոխարենը, + և x
նշանները լրիվ այլ բան են նշանակում:
Բուլյան հանրահաշիվում + նշանը նշանակում է երկու դասերի միություն ։ Երկու դասերի միավորումն այն
ամենն է, ինչ առաջին դասում զուգորդվում է երկրորդ դասի ամեն ինչի հետ։ Օրինակ, B + W-ը
ներկայացնում է բոլոր կատուների դասը, որոնք կամ սև են կամ սպիտակ:
Բուլյան հանրահաշիվում x նշանը նշանակում է երկու դասերի հատում : Երկու դասերի խաչմերուկը այն
ամենն է, ինչ կա և՛ առաջին , և՛ երկրորդ դասում: Օրինակ, F x T-ը ներկայացնում է բոլոր կատուների դասը,
որոնք և՛ էգ են, և՛ արևայրուք: Ինչպես սովորական հանրահաշիվում, մենք կարող ենք գրել F x T որպես F·T
կամ պարզապես FT (ինչը նախընտրում էր Բուլը): Դուք կարող եք պատկերացնել երկու տառերը որպես
երկու ածականներ, որոնք ցցված են միասին. «էգ tan» կատուներ:
Պայմանական հանրահաշվի և Բուլյան հանրահաշվի միջև շփոթությունից խուսափելու համար երբեմն U և ∩
նշաններն օգտագործվում են միավորման և հատման համար՝ + և x-ի փոխարեն: Բայց մաթեմատիկայի վրա
Բուլի ազատագրական ազդեցության մի մասը ծանոթ օպերատորների օգտագործումն ավելի վերացական
դարձնելն էր, ուստի ես որոշեցի հավատարիմ մնալ նրա որոշմանը նոր նշաններ չներդնել իր հանրահաշվում:
Փոխանակման, ասոցիատիվ և բաշխման կանոնները գործում են Բուլյան հանրահաշվի համար: Ավելին,
Բուլյան հանրահաշիվում + օպերատորը բաշխվում է x օպերատորի վրա: Սա ճիշտ չէ սովորական
հանրահաշվի համար.

W+
(B x
F) =
(W
+ B)
x
(W
+ F)

Սպիտակ կատուների և սև էգ կատուների միավորումը նույնն է, ինչ երկու միությունների խաչմերուկը՝


սպիտակ կատուների և սև կատուների միությունը և սպիտակ կատուների և էգ կատուների միությունը: Սա
որոշ չափով դժվար է հասկանալ, բայց այն աշխատում է:
Բուլյան հանրահաշիվը լրացնելու համար անհրաժեշտ է ևս երկու նշան: Այս երկու նշանները կարող են
թվերի տեսք ունենալ, բայց դրանք իրականում չեն, որովհետև դրանք երբեմն մի փոքր այլ կերպ են
վերաբերվում, քան թվերը: Բուլյան հանրահաշվում 1 նշանը նշանակում է «տիեզերք», այսինքն՝ այն ամենը,
ինչի մասին մենք խոսում ենք։ Այս օրինակում 1 խորհրդանիշը նշանակում է «բոլոր կատուների դասը»:
Այսպիսով,

M+
F=
1

Սա նշանակում է, որ արու կատուների և էգ կատուների միությունը բոլոր կատուների դասն է։ Նմանապես,


արևայրուքի և սև կատուների և սպիտակ կատուների և այլ գունավոր կատուների միավորումը նույնպես
բոլոր կատուների դասն է.

T+
B+
W+
O=
1

Եվ դուք բոլոր կատուների դասին հասնում եք նաև այսպես.

N+
U=
1

1 նշանը կարող է օգտագործվել մինուս նշանի հետ՝ ցույց տալու համար, որ տիեզերքը բացառում է ինչ-որ
բան: Օրինակ,

1–
Մ
բոլոր կատուների դասն է, բացառությամբ արու կատուների: Տիեզերքը, բացառելով բոլոր արու կատուներին,
նույնն է, ինչ էգ կատուների դասը.

1–
M=
F

Մյուս խորհրդանիշը, որը մեզ անհրաժեշտ է, 0-ն է, իսկ Բուլյան հանրահաշիվում 0-ը նշանակում է դատարկ
դաս՝ ոչնչի դաս: Դատարկ դասը ստացվում է, երբ մենք վերցնում ենք երկու միմյանց բացառող դասերի
խաչմերուկ, օրինակ՝ կատուներ, որոնք և՛ արու են, և՛ էգ.

Fx
M=
0

Ուշադրություն դարձրեք, որ 1 և 0 նշանները երբեմն աշխատում են նույն կերպ Բուլյան հանրահաշիվում,


ինչպես սովորական հանրահաշիվում: Օրինակ, բոլոր կատուների և էգ կատուների խաչմերուկը էգ
կատուների դասն է.

1x
F=
F

Առանց կատուների և էգ կատուների խաչմերուկը առանց կատուների դասն է.

0x
F=
0

Ոչ կատուների և բոլոր էգ կատուների միությունը էգ կատուների դասն է.

0+
F=
F

Բայց երբեմն արդյունքը նույնը չի թվում, ինչ սովորական հանրահաշիվում: Օրինակ, բոլոր կատուների և էգ
կատուների միավորումը բոլոր կատուների դասն է.

1+
F=
1

Սովորական հանրահաշիվում դա այնքան էլ իմաստ չունի:


Քանի որ F-ը բոլոր էգ կատուների դասն է, իսկ (1 – F) բոլոր կատուների դասը, որոնք էգ չեն, այս երկու
դասերի միավորումը 1 է.

F+
(1 –
F) =
1

և երկու դասերի հատումը 0 է:


Fx
(1 –
F) =
0

Պատմականորեն այս ձևակերպումը տրամաբանության մեջ կարևոր հասկացություն է ներկայացնում. այն


կոչվում է Հակասության օրենք և ցույց է տալիս, որ ինչ-որ բան չի կարող լինել և՛ ինքն իրեն, և՛ իր
հակառակը:
Այնտեղ, որտեղ Բուլյան հանրահաշիվն իսկապես տարբերվում է սովորական հանրահաշիվից, այսպիսի
հայտարարություն է.

Fx
F=
F

Հայտարարությունը կատարյալ իմաստ ունի Բուլյան հանրահաշիվում. էգ կատուների և էգ կատուների


խաչմերուկը դեռևս էգ կատուների դասն է: Բայց, անկասկած, այնքան էլ ճիշտ չէր թվա, եթե F-ն մատնանշեր
թվին: Բուլը հաշվի առավ

X2
=X

լինել այն միակ պնդումը, որը տարբերում է նրա հանրահաշիվը սովորական հանրահաշիվից: Բուլյան մեկ այլ
հայտարարություն, որը սովորական հանրահաշվի տեսանկյունից ծիծաղելի է թվում, սա է.

F+
F=
F

Էգ կատուների և էգ կատուների միությունը դեռևս էգ կատուների դասն է։


Բուլյան հանրահաշիվը տալիս է Արիստոտելի սիլլոգիզմների լուծման մաթեմատիկական մեթոդ: Եկեք նորից
նայենք այդ հայտնի սիլլոգիզմի առաջին երկու երրորդին, բայց հիմա օգտագործելով գենդերային չեզոք
լեզուն.
Բոլոր մարդիկ մահկանացու են.
Սոկրատեսը մարդ է.

Մենք կօգտագործենք P-ը՝ ներկայացնելու բոլոր մարդկանց դասը, M-ը՝ մահկանացու իրերի դասը, և S-ը՝
ներկայացնելու Սոկրատեսի դասը: Ի՞նչ է նշանակում ասել, որ «բոլոր մարդիկ մահկանացու են»: Դա
նշանակում է, որ բոլոր մարդկանց դասի և բոլոր մահկանացուների դասի խաչմերուկը բոլոր մարդկանց դասն
է.

Px
M=
P

Սխալ կլինի ասել, որ P x M = M, քանի որ բոլոր մահկանացուների դասը ներառում է կատուներ, շներ և կնձի
ծառեր:
«Սոկրատեսը մարդ է» ասելը նշանակում է, որ Սոկրատեսին (շատ փոքր դաս) պարունակող դասի և բոլոր
մարդկանց դասի (շատ ավելի մեծ դաս) խաչմերուկը Սոկրատեսին պարունակող դասն է.
Sx
P=
S

Քանի որ մենք առաջին հավասարումից գիտենք, որ P-ը հավասար է (P x M), մենք կարող ենք այն
փոխարինել երկրորդ հավասարմամբ.

Sx
(P x
M)

Ասոցիատիվ օրենքով սա նույնն է, ինչ

(S x
P) x
M=
S

Բայց մենք արդեն գիտենք, որ (S x P) հավասար է S, այնպես որ մենք կարող ենք պարզեցնել՝ օգտագործելով
այս փոխարինումը.

Sx
M=
S

Եվ հիմա մենք ավարտեցինք: Այս բանաձևը մեզ ասում է, որ Սոկրատեսի և բոլոր մահկանացուների դասի
հատումը S է, ինչը նշանակում է, որ Սոկրատեսը մահկանացու է: Եթե փոխարենը հայտնաբերեինք, որ (S x
M) հավասար է 0-ի, ապա կեզրակացնեինք, որ Սոկրատեսը մահկանացու չէր: Եթե մենք գտնեինք, որ (S x M)
հավասար է M-ին, ապա պետք է եզրակացություն լիներ, որ Սոկրատեսը միակ մահկանացու բանն էր, իսկ
մնացած ամեն ինչ անմահ էր:
Բուլյան հանրահաշիվը կարող է թվալ որպես չափազանցված՝ ակնհայտ փաստն ապացուցելու համար
(հատկապես հաշվի առնելով, որ Սոկրատեսն իրեն մահկանացու է դրսևորել 2400 տարի առաջ), բայց
Բուլյան հանրահաշիվը կարող է օգտագործվել նաև որոշելու համար, թե արդյոք ինչ-որ բան բավարարում է
որոշակի չափանիշների: Հավանաբար, մի օր դուք մտնում եք կենդանիների խանութ և ասում վաճառողին. «Ես
ուզում եմ արու կատու՝ ստերջացված, սպիտակ կամ շագանակագույն, կամ էգ կատու՝ ստերիլիզացված,
ցանկացած գույնի, բայց սպիտակ, կամ ես կվերցնեմ ցանկացած կատու, որ ունես։ քանի դեռ սև է»։ Եվ
վաճառողն ասում է ձեզ. «Ուրեմն դուք կատու եք ուզում կատուների դասից, որը ներկայացված է հետևյալ
արտահայտությամբ.

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B
Ճիշտ է: Եվ դուք ասում եք, «Այո! Ճիշտ!"
Հաստատելով, որ վաճառողը ճիշտ է, դուք կարող եք հրաժարվել միավորում և խաչմերուկ
հասկացություններից և փոխարենը անցնել ԿԱՄ և ԵՎ բառերին: Ես գրում եմ այս բառերը մեծատառով, քանի
որ բառերը սովորաբար ներկայացնում են հասկացություններ անգլերենում, բայց դրանք կարող են նաև
ներկայացնել բուլյան հանրահաշվի գործողություններ: Երբ դուք ստեղծում եք երկու դասերի միություն, դուք
իրականում ընդունում եք բաներ առաջին կամ երկրորդ դասից: Եվ երբ խաչմերուկ եք կազմում, դուք
ընդունում եք միայն այդ բաները և՛ առաջին, և՛ երկրորդ դասում: Բացի այդ, դուք կարող եք օգտագործել NOT
բառը, որտեղ տեսնում եք 1, որին հաջորդում է մինուս նշանը: Արդյունքում,
● + (նախկինում որպես միավորում) այժմ նշանակում է ԿԱՄ:
● x-ը (նախկինում որպես խաչմերուկ) այժմ նշանակում է ԵՎ:
● 1 – (նախկինում տիեզերքն առանց որևէ բանի) այժմ նշանակում է ՈՉ:
Այսպիսով, արտահայտությունը կարելի է գրել նաև այսպես.

(M
ԵՎ
N
ԵՎ
(W
OR
T))
ԿԱՄ
(F
ԵՎ
N
ԵՎ
(ՈՉ
W))
ԿԱՄ
B

Սա շատ մոտ է քո ասածին: Ուշադրություն դարձրեք, թե ինչպես են փակագծերը պարզաբանում ձեր


մտադրությունները: Դուք ցանկանում եք կատու երեք դասերից մեկից.

(M
ԵՎ
N
ԵՎ
(W
ԿԱՄ
T))
ԿԱՄ
(F
ԵՎ
N
ԵՎ
(ՈՉ
W))
ԿԱՄ
Բ

Գրված այս բանաձևով վաճառողը կարող է կատարել մի բան, որը կոչվում է Բուլյան թեստ : Առանց այդ
մասին մեծ աղմուկ հանելու, ես նրբորեն անցել եմ Բուլյան հանրահաշվի մի փոքր այլ ձևի: Բուլյան
հանրահաշվի այս ձևում տառերն այլևս չեն վերաբերում դասերին: Փոխարենը, այժմ տառերին կարելի է թվեր
վերագրել: Բռնելն այն է, որ նրանց կարելի է վերագրել միայն 0 կամ 1 թիվը: 1 թիվը նշանակում է Այո, ճիշտ
է, կոնկրետ այս կատուն համապատասխանում է այս չափանիշներին: 0 թիվը նշանակում է ոչ, սխալ, այս
կատուն չի բավարարում այս չափանիշներին:
Սկզբում վաճառողը դուրս է բերում չստերիզացված արևայրուք: Ահա ընդունելի կատուների
արտահայտությունը.

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B

և ահա թե ինչպես է այն երևում 0-ով և 1-ով փոխարինված.

(1 x
0x
(0 +
1))
+ (0
x0
x (1

0))
+0

Ուշադրություն դարձրեք, որ միակ նշանները, որոնք նշանակված են 1, M և T են, քանի որ կատուն արու է և
արևայրուք:
Այն, ինչ մենք հիմա պետք է անենք, այս արտահայտությունը պարզեցնելն է։ Եթե այն պարզեցնում է մինչև 1,
ապա կատուն բավարարում է ձեր չափանիշները. եթե այն պարզեցնում է մինչև 0, ապա կատուն չի անում:
Մինչ մենք պարզեցնում ենք արտահայտությունը, նկատի ունեցեք, որ մենք իրականում չենք գումարում և
բազմապատկում, չնայած ընդհանուր առմամբ մենք կարող ենք ձևացնել, որ այդպես ենք: Նույն կանոնների
մեծ մասը կիրառվում է, երբ + նշանակում է ԿԱՄ, իսկ x նշանակում է AND: (Երբեմն ժամանակակից
տեքստերում ^ և ν խորհրդանիշները օգտագործվում են AND-ի և OR-ի փոխարեն x-ի և +-ի փոխարեն: Բայց
ահա, որտեղ + և x նշանները, հավանաբար, առավել իմաստալից են):
Երբ x նշանը նշանակում է AND, հնարավոր արդյունքներն են

0x
0=
0
0x
1=
0
1x
0=
0
1x
1=
1

Այլ կերպ ասած, արդյունքը 1 է միայն այն դեպքում, եթե և՛ ձախ օպերանդը, և՛ աջ օպերանդը 1 են: Այս
գործողությունը գործում է ճիշտ այնպես, ինչպես կանոնավոր բազմապատկումը, և այն կարելի է ամփոփել մի
փոքրիկ աղյուսակում, ինչպես գումարման և բազմապատկման եղանակին: աղյուսակները ներկայացված են
8-րդ գլխում .

0 1
ԵՎ
0 0 0
1 0 1

Երբ + նշանը նշանակում է ԿԱՄ, հնարավոր արդյունքներն են

0+
0=
0
0+
1=
1
1+
0=
1
1+
1=
1

Արդյունքը 1 է, եթե ձախ օպերանդը կամ աջ օպերանդը 1 է: Այս գործողությունը տալիս է արդյունքներ, որոնք
շատ նման են սովորական գումարման արդյունքներին, բացառությամբ, որ այս դեպքում 1 + 1 հավասար է
1-ի: OR գործողությունը կարելի է ամփոփել մեկ այլ փոքրիկ աղյուսակում.

0 1
ԿԱՄ
0 0 1
1 1 1

Մենք պատրաստ ենք օգտագործել այս աղյուսակները արտահայտության արդյունքը հաշվարկելու համար

(1 x
0x
1) +
(0 x
0x
1) +
0=
0+
0+
0=
0

Արդյունքը 0 նշանակում է Ոչ, Սխալ, այս կատվիկը չի անի:


Հաջորդը վաճառողը դուրս է բերում ստերջացված սպիտակ էգը: Բնօրինակ արտահայտությունն էր

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B

Կրկին փոխարինեք 0-երը և 1-երը.

(0 x
1x
(1 +
0))
+ (1
x1
x (1

1))
+0

Եվ պարզեցրեք այն.

(0 x
1x
1) +
(1 x
1x
0) +
0=
0+
0+
0=
0

Եվ մեկ այլ խեղճ կատվիկի պետք է մերժել:


Հաջորդը վաճառողը դուրս է բերում ստերջացված մոխրագույն էգ: (Մոխրագույնը որակվում է որպես «այլ»
գույն՝ ոչ սպիտակ, սև կամ շագանակագույն: Ահա արտահայտությունը.

(0 x
1x
(0 +
0))
+ (1
x1
x (1

0))
+0
Այժմ պարզեցրեք այն.

(0 x
1x
0) +
(1 x
1x
1) +
0=
0+
1+
0=
1

Վերջնական արդյունքը 1 նշանակում է Այո, ճիշտ է, կատվիկը տուն է գտել: (Եվ դա նույնպես ամենասիրունն
էր!)
Այդ երեկո ավելի ուշ, երբ ձագը ոլորված է քնած ձեր գրկում, դուք մտածում եք, թե արդյոք դուք կարող եք
միացնել որոշ անջատիչներ և լամպ, որոնք կօգնեն ձեզ որոշել, թե արդյոք որոշակի ձագեր բավարարում են
ձեր չափանիշները: (Այո, դու տարօրինակ երեխա ես:) Դու չես հասկանում, որ պատրաստվում ես
հայեցակարգային կարևոր բեկում մտցնել: Դուք պատրաստվում եք կատարել որոշ փորձեր, որոնք կմիավորեն
Ջորջ Բուլի հանրահաշիվը էլեկտրական սխեմաների հետ և այդպիսով հնարավոր կդարձնեն երկուական
թվերով աշխատող համակարգիչների նախագծումն ու կառուցումը: Բայց թույլ մի տվեք, որ դա ձեզ վախեցնի:
Փորձը սկսելու համար դուք միացնում եք լամպը և մարտկոցը, ինչպես սովորաբար կկապեիք, բայց մեկի
փոխարեն օգտագործում եք երկու անջատիչ.

Այս կերպ միացված անջատիչները՝ մեկը մյուսի հետևից, ասվում է, որ միացված են շարքով : Եթե փակեք ձախ
անջատիչը, ոչինչ չի պատահում.
Նմանապես, եթե ձախ անջատիչը բաց թողնեք և փակեք աջ անջատիչը, ոչինչ չի ստացվում: Լույսի լամպը
վառվում է միայն այն դեպքում, եթե ձախ և աջ անջատիչը փակ են, ինչպես ցույց է տրված հաջորդ էջում:

Այստեղ հիմնական բառն է և . Ե՛վ ձախ անջատիչը , և՛ աջ անջատիչը պետք է փակ լինեն, որպեսզի հոսանքը
անցնի միացումով:
Այս շրջանը կատարում է մի փոքրիկ վարժություն տրամաբանության մեջ: Փաստորեն, լամպը պատասխանում
է «Երկու անջատիչները փակվա՞ծ են» հարցին։ Այս շղթայի աշխատանքը կարող ենք ամփոփել հետևյալ
աղյուսակում.

Աջ
Ձախ
անջ Լամ
անջ
ատի պ
ատի
չ
չ
Չի
լուս
Բաց Բաց ավո
րվա
ծ
Չի
Փակ լուս
Բաց ված ավո
է րվա
ծ
Չի
Փակ լուս
ված Բաց ավո
է րվա
ծ
Փակ Փակ
ված ված Լայթ
է է

Նախորդ գլխում մենք տեսանք, թե ինչպես երկուական թվանշանները կամ բիթերը կարող են ներկայացնել
տեղեկատվություն՝ թվերից մինչև Ռոջեր Էբերտի բութ մատի ուղղությունը: Մենք կարողացանք ասել, որ 0
բիթը նշանակում է «Էբերտի բութ մատը ցույց է տալիս ներքև», իսկ 1 բիթը նշանակում է «Էբերտի բութ
մատը դեպի վեր է»: Անջատիչը երկու դիրք ունի, ուստի այն կարող է մի քիչ ներկայացնել: Կարելի է ասել, որ
0-ը նշանակում է «անջատիչը բաց է», իսկ 1-ը՝ «անջատիչը փակ է»: Լամպը երկու վիճակ ունի. հետևաբար
այն նույնպես կարող է մի փոքր ներկայացնել: Կարելի է ասել, որ 0-ը նշանակում է «լամպը չի վառվում»,
իսկ 1-ը նշանակում է «լամպը վառված է»: Այժմ մենք պարզապես վերաշարադրում ենք աղյուսակը.

Աջ
Ձախ
անջ Լամ
անջ
ատի պ
ատի
չ
չ
0 0 0
0 1 0
1 0 0
1 1 1

Ուշադրություն դարձրեք, որ եթե փոխենք ձախ և աջ անջատիչը, արդյունքները նույնն են: Մենք իսկապես
պետք չէ բացահայտել, թե որ անջատիչն է: Այսպիսով, աղյուսակը կարող է վերաշարադրվել, որպեսզի
նմանվի AND և OR աղյուսակներին, որոնք ցուցադրվել են ավելի վաղ.

Անջ
ատի
0 1
չներ
շարք
ում
0 0 0
1 0 1

Եվ իսկապես, սա նույնն է , ինչ AND աղյուսակը։ Ստուգեք այն.

0 1
ԵՎ
0 0 0
1 0 1

Այս պարզ շղթան իրականում կատարում է AND գործողություն Բուլյան հանրահաշիվում:


Այժմ փորձեք միացնել երկու անջատիչները մի փոքր այլ կերպ.

Ասվում է, որ այս անջատիչները միացված են զուգահեռաբար : Այս և նախորդ կապի միջև տարբերությունն
այն է, որ այս լամպը կվառվի, եթե փակեք վերին անջատիչը.

կամ փակեք ներքևի անջատիչը.


կամ փակեք երկու անջատիչները.

Լույսի լամպը վառվում է, եթե վերին կամ ստորին անջատիչը փակ է: Այստեղ հիմնական բառը կամ .
Կրկին շրջանը կատարում է տրամաբանության վարժություն: Լույսի լամպը պատասխանում է «Արդյո՞ք որևէ
անջատիչ փակ է» հարցին: Հետևյալ աղյուսակը ամփոփում է, թե ինչպես է աշխատում այս միացումը.

Աջ
Ձախ
անջ Լամ
անջ
ատի պ
ատի
չ
չ
Չի
Բաց Բաց
լուս
ավո
րվա
ծ
Փակ
Բաց ված Լայթ
է
Փակ
ված Բաց Լայթ
է
Փակ Փակ
ված ված Լայթ
է է

Կրկին, օգտագործելով 0-ը՝ բաց անջատիչ կամ չլուսավորված լամպ, իսկ 1-ը՝ փակ անջատիչ կամ վառվող
լամպ, այս աղյուսակը կարող է վերաշարադրվել հետևյալ կերպ.

Աջ
Ձախ
անջ Լամ
անջ
ատի պ
ատի
չ
չ
0 0 0
0 1 1
1 0 1
1 1 1

Կրկին կարևոր չէ, թե արդյոք երկու անջատիչները փոխանակված են, այնպես որ աղյուսակը կարող է նաև
վերաշարադրվել այսպես.

Անջ
ատի
չներ
0 1
զուգ
ահե
ռաբ
ար
0 0 1
1 1 1

Եվ դուք հավանաբար արդեն գուշակել եք, որ սա նույնն է, ինչ Boolean OR:

0 1
ԿԱՄ
0 0 1
1 1 1

ինչը նշանակում է, որ երկու անջատիչներ զուգահեռաբար կատարում են բուլյան OR գործողության


համարժեքը:
Երբ դուք ի սկզբանե մտաք կենդանիների խանութ, դուք վաճառողին ասացիք. «Ես ուզում եմ արու կատու՝
ստերջացված, կա՛մ սպիտակ, կա՛մ շագանակագույն, կա՛մ էգ կատու՝ ստերիլիզացված, ցանկացած գույնի,
բայց սպիտակ, կամ ես կվերցնեմ ցանկացած կատու, որն ունես այնքան ժամանակ: քանի որ այն սև է», և
վաճառողը զարգացրեց այս արտահայտությունը.

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B

Այժմ, երբ դուք գիտեք, որ երկու անջատիչները իրար հաջորդող լարով կատարում են տրամաբանական AND
(որը ներկայացված է կացին նշանով), իսկ երկու անջատիչ զուգահեռաբար կատարում են տրամաբանական
OR (որը ներկայացված է + նշանով), կարող եք միացնել ութ անջատիչ, ինչպես այսպես.

Այս շղթայի յուրաքանչյուր անջատիչ պիտակավորված է տառով՝ նույն տառերով, ինչ Բուլյան
արտահայտության մեջ: ( նշանակում է ՉԻ W և 1 – W գրելու այլընտրանքային եղանակ է): Իսկապես,
եթե դուք անցնեք միացման գծապատկերը ձախից աջ՝ սկսած վերևից և շարժվելով վերևից ներքև, դուք
կհանդիպեք տառերին նույն հաջորդականությամբ, ինչ նրանք հայտնվում են արտահայտության մեջ:
Արտահայտության յուրաքանչյուր x նշանը համապատասխանում է շղթայի մի կետի, որտեղ երկու անջատիչ
(կամ անջատիչների խմբեր) միացված են հաջորդաբար: Արտահայտության յուրաքանչյուր + նշանը
համապատասխանում է շղթայի մի տեղ, որտեղ զուգահեռաբար միացված են երկու անջատիչներ (կամ
անջատիչների խմբեր):
Ինչպես հիշում եք, վաճառողն առաջինը դուրս բերեց չստերիզացված արևայրուքի արու: Փակեք
համապատասխան անջատիչները.
Չնայած M, T և NOT W անջատիչները փակ են, մենք չունենք ամբողջական միացում՝ լույսի լամպը
լուսավորելու համար: Այնուհետև վաճառողը դուրս բերեց ստերջացված սպիտակ էգին.

Կրկին, ճիշտ անջատիչները փակ չեն միացումն ավարտելու համար: Բայց վերջապես վաճառողը դուրս բերեց
ստերջացված մոխրագույն էգ.
Եվ դա բավական է միացումն ավարտելու, լույսի լամպը վառելու և ցույց տալու համար, որ կատվիկը
համապատասխանում է ձեր բոլոր չափանիշներին:
Ջորջ Բուլը երբեք չի միացրել նման միացում: Նա երբեք հուզմունք չի ունեցել՝ տեսնելու բուլյան
արտահայտություն, որն իրագործված է անջատիչների, լարերի և լամպերի մեջ: Խոչընդոտներից մեկը,
իհարկե, այն էր, որ շիկացած լամպը հայտնագործվեց միայն Բուլի մահից 15 տարի անց: Բայց Սամուել
Մորզը ցուցադրել էր իր հեռագիրը 1844 թվականին՝ Բուլի «Մտքի օրենքների» հրապարակումից տասը
տարի առաջ , և հեշտ կլիներ վերևում ներկայացված շղթայի լույսի լամպի փոխարեն հեռագրային ձայնով
փոխարինել։
Բայց ոչ ոք տասնիններորդ դարում կապ չի հաստատել Բուլյան հանրահաշվի AND-երի և OR-ների և պարզ
անջատիչների միացման միջև հաջորդական և զուգահեռ: Ոչ մաթեմատիկոս, ոչ էլեկտրիկ, ոչ հեռագրավար,
ոչ ոք: Նույնիսկ համակարգչային հեղափոխության պատկերակը Չարլզ Բեբիջը (1792–1871), ով
նամակագրություն ուներ Բուլի հետ և գիտեր նրա աշխատանքը, և ով իր կյանքի մեծ մասը պայքարեց՝ նախ
նախագծելով Difference Engine, իսկ հետո՝ Analytical Engine, որը մեկ դար անց կստեղծվեր։
համարվում են ժամանակակից համակարգիչների նախադրյալներ: Այն, ինչ կարող էր օգնել Բեբիջին, մենք
հիմա գիտենք, դա այն գիտակցումն էր, որ, հավանաբար, հաշվարկներ կատարելու համար նախատեսված
փոխանցումների և լծակների փոխարեն, ավելի լավ կլիներ համակարգիչը կառուցել հեռագրային ռելեներից:
Այո, հեռագրական ռելեներ:
Գլուխ 11. Գեյթս (Ոչ Բիլ)
Ինչ-որ հեռավոր ժամանակներում, երբ պարզունակ հաշվարկների քսաներորդ դարի պատմությունը
պարզապես մռայլ հիշողություն է, ինչ-որ մեկը հավանաբար կենթադրի, որ տրամաբանական դարպասներ
կոչվող սարքերը կոչվել են Microsoft Corporation-ի հայտնի համահիմնադիրի անունով: Ոչ այնքան:
Ինչպես շուտով կտեսնենք, տրամաբանական դարպասները շատ ավելի նման են այն սովորական
դարպասներին, որոնց միջով անցնում են ջուրը կամ մարդիկ: Տրամաբանական դարպասները
տրամաբանության մեջ կատարում են պարզ առաջադրանքներ՝ արգելափակելով կամ բաց թողնելով
էլեկտրական հոսանքի հոսքը:
Դուք կհիշեք, թե ինչպես էիք վերջին գլխում մտել կենդանիների խանութ և հայտարարեցիք. «Ես ուզում եմ
արու կատու՝ ստերջացված, կա՛մ սպիտակ, կա՛մ շագանակագույն, կա՛մ էգ կատու՝ ստերիլիզացված,
ցանկացած գույնից բացի սպիտակից, կամ ես կվերցնեմ ցանկացած: կատու ունես, քանի դեռ սև է»։ Սա
ամփոփվում է հետևյալ բուլյան արտահայտությամբ.

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B

և նաև այս շղթայով, որը բաղկացած է անջատիչներից և լույսի լամպից.


Նման շղթան երբեմն կոչվում է ցանց , բացառությամբ, որ մեր օրերում այդ բառը շատ ավելի հաճախ
օգտագործվում է կապակցված համակարգիչներին մատնանշելու համար, այլ ոչ թե պարզապես անջատիչների
հավաքածու:
Չնայած այս շղթան պարունակում է ոչինչ, որը չի հորինվել տասնիններորդ դարում, այդ դարում ոչ ոք երբեք
չի հասկացել, որ բուլյան արտահայտությունները կարող են ուղղակիորեն իրականացվել էլեկտրական
սխեմաներում: Այս համարժեքությունը հայտնաբերվեց միայն 1930-ական թվականներին, հատկապես Կլոդ
Էլվուդ Շենոնի կողմից (ծնված 1916 թ.), որի հանրահայտ 1938 թվականի MIT մագիստրոսական թեզը
վերնագրված էր «Ռելեի և անջատման սխեմաների խորհրդանշական վերլուծություն»: (Տասը տարի անց
Շենոնի «Հաղորդակցության մաթեմատիկական տեսություն» հոդվածը առաջին հրապարակումն էր, որն
օգտագործեց բիթ բառը երկուական թվանշան նշանակելու համար ):
Մինչև 1938 թվականը մարդիկ գիտեին, որ երկու անջատիչները հաջորդաբար միացնելիս երկու
անջատիչները պետք է փակված լինեին, որպեսզի հոսանքը հոսեր, իսկ երբ երկու անջատիչները
զուգահեռաբար միացրիր, մեկը կամ մյուսը պետք է փակվեր: Բայց ոչ ոք Շենոնի հստակությամբ և
խստությամբ ցույց չէր տվել, որ էլեկտրատեխնիկները կարող են օգտագործել Բուլյան հանրահաշվի բոլոր
գործիքները՝ անջատիչներով սխեմաներ նախագծելու համար: Մասնավորապես, եթե դուք կարող եք
պարզեցնել Բուլյան արտահայտությունը, որը նկարագրում է ցանցը, կարող եք համապատասխանաբար
պարզեցնել ցանցը:
Օրինակ, արտահայտությունը, որը ցույց է տալիս այն հատկանիշները, որոնք ցանկանում եք կատվի մեջ,
այսպիսի տեսք ունի.

(M
xN
x
(W
+
T))
+ (F
xN
x (1

W))
+B

Օգտագործելով ասոցիատիվ օրենքը, մենք կարող ենք վերադասավորել փոփոխականները, որոնք համակցված
են AND (x) նշանների հետ և վերաշարադրել արտահայտությունը հետևյալ կերպ.

(N x
Mx
(W
+
T))
+
(N x
Fx
(1 –
W))
+B

Փորձելով պարզաբանել, թե ինչ եմ անելու այստեղ, ես կսահմանեմ X և Y անուններով երկու նոր նշաններ.
X=
Mx
(W
+ T)
Y=
Fx
(1 –
Վտ)

Այժմ ձեր ուզած կատվի արտահայտությունը կարելի է գրել այսպես.

(N x
X) +
(N x
Y) +
B

Ավարտելուց հետո մենք կարող ենք կրկին տեղադրել X և Y արտահայտությունները:


Ուշադրություն դարձրեք, որ N փոփոխականը հայտնվում է երկու անգամ արտահայտության մեջ:
Օգտագործելով բաշխիչ օրենքը՝ արտահայտությունը կարելի է վերաշարադրել այսպես՝ միայն մեկ N-ով.

(N x
(X +
Y))
+B

Հիմա եկեք նորից դնենք X և Y արտահայտությունները.

(N x
((M
x
(W
+
T))
+ (F
x (1

W))
)) +
B

Փակագծերի առատության պատճառով այս արտահայտությունը հազիվ թե պարզեցված թվա։ Բայց այս
արտահայտության մեջ կա մեկ ավելի քիչ փոփոխական, ինչը նշանակում է, որ ցանցում մեկ անջատիչ պակաս
կա: Ահա վերանայված տարբերակը.
Իսկապես, հավանաբար ավելի հեշտ է տեսնել, որ այս ցանցը համարժեք է ավելի վաղ ցանցին, քան ստուգել,
որ արտահայտությունները նույնն են:
Փաստորեն, այս ցանցում դեռևս կա երեք չափազանց շատ անջատիչ: Տեսականորեն ձեզ անհրաժեշտ է
ընդամենը չորս անջատիչ՝ ձեր կատարյալ կատվին սահմանելու համար: Ինչու՞ չորս: Յուրաքանչյուր
անջատիչ մի քիչ է: Դուք պետք է կարողանաք յոլա գնալ սեռի համար մեկ անջատիչով (անջատված է
տղամարդու համար, միացված է իգական սեռի համար), մեկ այլ անջատիչ, որը միացված է ստերիլիզացման
համար, անջատված է չստերիլիզացվածի համար և ևս երկու անջատիչ՝ գույնի համար: Գոյություն ունեն չորս
հնարավոր գույներ (սպիտակ, սև, շագանակագույն և «այլ»), և մենք գիտենք, որ չորս ընտրություն կարելի է
սահմանել 2 բիթով, այնպես որ ձեզ հարկավոր է ընդամենը երկու գունային անջատիչ: Օրինակ, երկու
անջատիչները կարող են անջատված լինել սպիտակի համար, մի անջատիչը միացված է սևի համար, մյուսը
միացված է արևի համար, և երկու անջատիչները միացված են այլ գույների համար:
Եկեք հենց հիմա պատրաստենք կառավարման վահանակ կատու ընտրելու համար: Կառավարման վահանակը
բաղկացած է ընդամենը չորս անջատիչից (ինչպես ձեր պատերին տեղադրված միացման/անջատման
անջատիչները՝ ձեր լույսերը կառավարելու համար) և վահանակի մեջ տեղադրված լուսային լամպ.

Անջատիչները միացված են (փակ), երբ դրանք վերև են, և անջատված են (բաց), երբ ցած են: Կատվի գույնի
երկու անջատիչները որոշակիորեն անհասկանալի են պիտակավորված, վախենում եմ, բայց սա այս
վահանակը նվազագույնի հասցնելու թերությունն է. զույգի ձախ անջատիչը պիտակավորված է B; դա
նշանակում է, որ ձախ անջատիչն ինքնին (ինչպես ցույց է տրված) ցույց է տալիս սև գույնը: Զույգի աջ
անջատիչը պիտակավորված է T; որ միացումն ինքնին նշանակում է շագանակագույն գույն: Երկու
անջատիչները նշանակում են այլ գույներ. այս ընտրությունը պիտակավորված է O: Երկու անջատիչները
նշանակում են սպիտակ գույնը, որը նշված է ներքևում գտնվող W տառով:
Համակարգչային տերմինաբանության մեջ անջատիչները մուտքային սարք են : Մուտքը տեղեկատվություն է,
որը վերահսկում է, թե ինչպես է վարվում սխեման: Այս դեպքում մուտքային անջատիչները
համապատասխանում են 4 բիթ տեղեկատվության, որոնք նկարագրում են կատվին: Ելքային սարքը լույսի
լամպն է: Այս լամպը վառվում է, եթե անջատիչները բնութագրում են բավարար կատու: Էջ 104-ի
կառավարման վահանակում ցուցադրված անջատիչները տեղադրված են էգ չստերիլիզացված սև կատվի
համար: Սա բավարարում է ձեր չափանիշներին, ուստի լամպը վառվում է:
Այժմ մեզ մնում է միայն նախագծել մի շղթա, որը կստիպի այս կառավարման վահանակի աշխատանքը:
Դուք կհիշեք, որ Կլոդ Շենոնի թեզը վերնագրված էր «Ռելեի և անջատիչ սխեմաների խորհրդանշական
վերլուծություն»: Ռելեները, որոնց նա ակնարկում էր, բավականին նման էին հեռագրային ռելեներին, որոնց
մենք հանդիպեցինք 6-րդ գլխում : Շենոնի աշխատության ժամանակ, սակայն, ռելեներն օգտագործվում էին
այլ նպատակներով և, մասնավորապես, հեռախոսային համակարգի հսկայական ցանցում։
Անջատիչների պես, ռելեները կարող են միացվել հաջորդաբար և զուգահեռ՝ տրամաբանության մեջ պարզ
առաջադրանքներ կատարելու համար: Ռելեների այս համակցությունները կոչվում են տրամաբանական
դարպասներ : Երբ ասում եմ, որ այս տրամաբանական դարպասները տրամաբանության մեջ պարզ
առաջադրանքներ են կատարում, նկատի ունեմ հնարավորինս պարզ: Ռելեներն առավելություն ունեն
անջատիչների նկատմամբ, քանի որ ռելեները կարող են միացնել և անջատվել այլ ռելեներով, այլ ոչ թե
մատներով: Սա նշանակում է, որ տրամաբանական դարպասները կարող են համակցվել ավելի բարդ
առաջադրանքներ կատարելու համար, օրինակ՝ թվաբանության մեջ պարզ ֆունկցիաներ: Իսկապես, հաջորդ
գլխում կցուցադրվի, թե ինչպես միացնել անջատիչները, լամպերը, մարտկոցը և հեռագրական ռելեները՝
ավելացնելու մեքենա ստեղծելու համար (թեև այն աշխատում է բացառապես երկուական թվերով):
Ինչպես հիշում եք, հեռագրային համակարգի աշխատանքի համար կարևոր նշանակություն ունեին ռելեները:
Մեծ հեռավորությունների վրա հեռագրական կայանները միացնող լարերը շատ բարձր դիմադրություն
ունեին։ Թույլ ազդանշան ստանալու և նույնական ուժեղ ազդանշան ուղարկելու համար անհրաժեշտ էր
որոշակի մեթոդ: Ռելեն դա արեց՝ օգտագործելով էլեկտրամագնիս՝ անջատիչը կառավարելու համար:
Փաստորեն, ռելեն ուժեղացրել է թույլ ազդանշանը՝ ուժեղ ազդանշան ստեղծելու համար:
Մեր նպատակների համար մենք շահագրգռված չենք օգտագործել ռելեը թույլ ազդանշանը ուժեղացնելու
համար: Մեզ հետաքրքրում է միայն այն գաղափարը, որ ռելեը լինի անջատիչ, որը կարող է կառավարվել ոչ
թե մատներով, այլ էլեկտրականությամբ: Մենք կարող ենք ռելեին միացնել անջատիչով, լույսի լամպով և մի
քանի մարտկոցով, ինչպիսիք են.
Ուշադրություն դարձրեք, որ ձախ կողմում գտնվող անջատիչը բաց է, իսկ լամպը անջատված է: Երբ փակում
եք անջատիչը, ձախ կողմում գտնվող մարտկոցը հոսում է երկաթե ձողի շուրջ մետաղալարերի բազմաթիվ
պտույտների միջով: Երկաթե ձողը դառնում է մագնիսական և ցած է քաշում ճկուն մետաղական կոնտակտը,
որը միացնում է միացումը՝ լույսը միացնելու համար.

Երբ էլեկտրամագնիսը քաշում է մետաղի կոնտակտը, ասվում է, որ ռելեդը գործարկվում է : Երբ անջատիչը
անջատված է, երկաթե ձողը դադարում է մագնիսական լինել, և մետաղական կոնտակտը վերադառնում է իր
նորմալ դիրքին:
Սա լամպը լուսավորելու բավականին անուղղակի ճանապարհ է թվում, և իսկապես այդպես է: Եթե մենք
շահագրգռվեինք միայն լամպի լուսավորությամբ, մենք կարող էինք ամբողջությամբ հրաժարվել ռելեից: Բայց
մեզ չի հետաքրքրում լամպերը: Մենք շատ ավելի հավակնոտ նպատակ ունենք.
Այս գլխում մենք շատ ենք օգտագործելու ռելեներ (և դրանից հետո հազիվ թե տրամաբանական դարպասները
կառուցելուց հետո), ուստի ես ուզում եմ պարզեցնել դիագրամը: Մենք կարող ենք վերացնել լարերի մի մասը՝
օգտագործելով հիմք: Այս դեպքում հիմքերը պարզապես ընդհանուր կապ են ներկայացնում. նրանք պետք չէ
կապված լինել ֆիզիկական երկրի հետ.

Ես գիտեմ, որ սա պարզեցում չի թվում, բայց մենք դեռ չենք ավարտել: Ուշադրություն դարձրեք, որ երկու
մարտկոցների բացասական տերմինալները միացված են գետնին: Այսպիսով, ցանկացած վայրում մենք
տեսնում ենք նման բան.

եկեք այն փոխարինենք մեծատառ V-ով (որը նշանակում է լարում ), ինչպես արեցինք Գլուխ 5- ում և 6-րդ
գլխում : Այժմ մեր ռելեն ունի հետևյալ տեսքը.
Երբ անջատիչը փակ է, հոսանք է հոսում V-ի և գետնի միջև էլեկտրամագնիսի կծիկներով: Սա հանգեցնում է
նրան, որ էլեկտրամագնիսը քաշում է ճկուն մետաղական կոնտակտը: Դա միացնում է շղթան V-ի, լույսի
լամպի և հողի միջև: Լամպը վառվում է.

Ռելեի այս դիագրամները ցույց են տալիս երկու լարման աղբյուր և երկու հիմք, բայց այս գլխի բոլոր
դիագրամներում բոլոր V-ները կարող են միացված լինել միմյանց, և բոլոր հիմքերը կարող են միացված լինել
միմյանց: Այս և հաջորդ գլխի ռելեների և տրամաբանական դարպասների բոլոր ցանցերը կպահանջեն միայն
մեկ մարտկոց, թեև այն կարող է մեծ մարտկոց լինել: Օրինակ, նախորդ գծապատկերը կարող է վերագծվել
միայն մեկ մարտկոցով, այսպես.
Բայց այն, ինչ մենք պետք է անենք ռելեների հետ, այս դիագրամը այնքան էլ պարզ չէ: Ավելի լավ է խուսափել
շրջանաձև սխեմաներից և նայել ռելեին, ինչպես նախկինում կառավարման վահանակը, մուտքերի և ելքերի
առումով .

Եթե մուտքի միջոցով հոսում է հոսանք (օրինակ, եթե անջատիչը միացնում է մուտքը V-ին), էլեկտրամագնիսը
գործարկվում է, և ելքը լարում է:
Պարտադիր չէ, որ ռելեի մուտքը անջատիչ լինի, և ռելեի ելքը չպետք է լինի լամպ: Մեկ ռելեի ելքը կարող է
միացված լինել մեկ այլ ռելեի մուտքին, օրինակ՝ այսպես.
Երբ դուք միացնում եք անջատիչը, գործարկվում է առաջին ռելեը, որն այնուհետև լարում է ապահովում
երկրորդ ռելեին: Երկրորդ ռելեը գործարկվում է, և լույսը միանում է.

Ռելեների միացումը տրամաբանական դարպասների կառուցման բանալին է:


Իրականում լույսի լամպը կարող է միացվել ռելեին երկու եղանակով. Ուշադրություն դարձրեք ճկուն մետաղի
կտորին, որը քաշվում է էլեկտրամագնիսով: Հանգստի ժամանակ դա հպվում է մեկ կոնտակտի; երբ
էլեկտրամագնիսը քաշում է այն, այն հարվածում է մեկ այլ շփման: Մենք օգտագործում էինք այդ ստորին
կոնտակտը որպես ռելեի ելք, բայց մենք կարող էինք նույնքան լավ օգտագործել վերին կոնտակտը: Երբ մենք
օգտագործում ենք այս կոնտակտը, ռելեի ելքը հակադարձվում է, և լույսի լամպը միանում է, երբ մուտքային
անջատիչը բաց է.
Եվ երբ մուտքային անջատիչը փակ է, լամպը դուրս է գալիս.

Օգտագործելով անջատիչների տերմինաբանությունը, ռելեի այս տեսակը կոչվում է կրկնակի նետման ռելե:
Այն ունի երկու ելք, որոնք էլեկտրականորեն հակառակ են, երբ մեկը լարում ունի, մյուսը չունի:
Ի դեպ, եթե դուք դժվարանում եք պատկերացնել, թե ինչպիսի տեսք ունեն ժամանակակից ռելեները, կարող եք
տեսնել մի քանիսը հարմար թափանցիկ փաթեթավորմամբ ձեր տեղական Radio Shack-ում: Ոմանք,
ինչպիսիք են ծանր ռելեները, որոնք ունեն Radio Shack 275-206 և 275-214 մասեր, մոտավորապես
սառույցի խորանարդի չափ են: Ներքին մասերը պատված են թափանցիկ պլաստիկ պատյանով, այնպես որ
կարող եք տեսնել էլեկտրամագնիսը և մետաղական կոնտակտները: Շղթաները, որոնք ես նկարագրելու եմ այս
և հաջորդ գլխում, կարող են կառուցվել Radio Shack-ի համար 275-240 ռելեների միջոցով, որոնք ավելի
փոքր են (մոտավորապես Chiclet-ի չափով) և ավելի էժան (հատը 2,99 դոլար):
Ինչպես երկու անջատիչները կարող են միացվել հաջորդաբար, այնպես էլ երկու ռելե կարող են միացվել
հաջորդաբար.

Վերին ռելեի ելքը լարում է մատակարարում երկրորդ ռելեին: Ինչպես տեսնում եք, երբ երկու անջատիչները
բաց են, լամպը չի վառվում: Մենք կարող ենք փորձել փակել վերին անջատիչը.
Դեռևս լույսի լամպը չի վառվում, քանի որ ներքևի անջատիչը դեռ բաց է, և այդ ռելեը չի գործարկվում: Մենք
կարող ենք փորձել բացել վերին անջատիչը և փակել ստորին անջատիչը.
Լամպը դեռ չի վառվում։ Հոսանքը չի կարող հասնել լամպին, քանի որ առաջին ռելեը չի գործարկվում: Լամպը
լուսավորելու միակ միջոցը երկու անջատիչները փակելն է.
Այժմ երկու ռելեներն էլ գործարկվում են, և հոսանքը կարող է հոսել V-ի, լույսի լամպի և հողի միջև:
Ինչպես երկու անջատիչները, որոնք միացված են իրար հաջորդաբար, այս երկու ռելեները կատարում են մի
փոքր վարժություն տրամաբանության մեջ: Լամպը վառվում է միայն այն դեպքում, եթե երկու ռելեներն էլ
գործարկվեն: Այս երկու ռելեները միացված շարքով հայտնի են որպես ԵՎ դարպաս : Չափից դուրս
նկարելուց խուսափելու համար էլեկտրիկ ինժեներները հատուկ խորհրդանիշ ունեն AND դարպասի համար:
Այդ խորհրդանիշն ունի հետևյալ տեսքը.

Սա չորս հիմնական տրամաբանական դարպասներից առաջինն է: AND դարպասն ունի երկու մուտք (այս
դիագրամի ձախ կողմում) և մեկ ելք (աջ կողմում): Դուք հաճախ կտեսնեք AND դարպասը գծված այնպես,
ինչպես սա է՝ մուտքերը ձախ կողմում, իսկ ելքը՝ աջ: Դա պայմանավորված է նրանով, որ մարդիկ, ովքեր սովոր
են կարդալ ձախից աջ, նույնպես սիրում են ձախից աջ կարդալ էլեկտրական դիագրամները: Բայց AND
դարպասը նույնքան լավ կարելի է նկարել վերևում, աջում կամ ներքևում գտնվող մուտքերով:
Բնօրինակ սխեման երկու ռելեներով լարերով միացված երկու անջատիչով և լույսի լամպով այսպիսի տեսք
ուներ.
Օգտագործելով AND դարպասի նշանը, այս նույն շղթան այսպիսի տեսք ունի.

Ուշադրություն դարձրեք, որ AND դարպասի այս խորհրդանիշը ոչ միայն զբաղեցնում է երկու ռելեների
տեղը, որոնք միացված են հաջորդաբար, այլ նաև ենթադրում է, որ վերին ռելեը միացված է լարմանը, և երկու
ռելեները միացված են գետնին: Կրկին, լամպը լուսավորվում է միայն այն դեպքում, եթե և՛ վերին , և՛ ներքևի
անջատիչը փակ են: Այդ իսկ պատճառով այն կոչվում է ԵՎ դարպաս :
AND դարպասի մուտքերը պարտադիր չէ, որ միացված լինեն անջատիչներին, և պարտադիր չէ, որ ելքը
միացված լինի լույսի լամպին: Այն, ինչի հետ մենք իրականում գործ ունենք այստեղ, լարումն է մուտքերում և
լարումը ելքի վրա: Օրինակ, մեկ AND դարպասի ելքը կարող է լինել մուտքագրում երկրորդ AND դարպասի,
այսպես.
Այս լամպը կվառվի միայն այն դեպքում, եթե բոլոր երեք անջատիչները փակ լինեն: Միայն այն դեպքում, երբ
վերին երկու անջատիչները փակ են, առաջին AND դարպասի ելքը կգործարկի առաջին ռելեը երկրորդ AND
դարպասում: Ներքևի անջատիչը գործարկում է երկրորդ ռելեը երկրորդ AND դարպասում:
Եթե մենք համարում ենք լարման բացակայությունը որպես 0, իսկ լարման առկայությունը որպես 1, ապա
AND դարպասի ելքը կախված է հետևյալ մուտքերից.

Ինչպես երկու անջատիչների դեպքում, AND-ի դարպասը նույնպես կարելի է նկարագրել այս փոքրիկ
աղյուսակում.

0 1
ԵՎ
0 0 0
1 0 1

Հնարավոր է նաև AND դարպասներ պատրաստել երկուից ավելի մուտքերով: Օրինակ, ենթադրենք, որ դուք
միացնում եք երեք ռելեներ հաջորդաբար.
Լամպը վառվում է միայն այն դեպքում, եթե բոլոր երեք անջատիչները փակ են: Այս կոնֆիգուրացիան
արտահայտվում է այս խորհրդանիշով.

Այն կոչվում է 3 մուտքով ԵՎ դարպաս:


Հաջորդ տրամաբանական դարպասը ներառում է երկու ռելեներ, որոնք զուգահեռաբար միացված են այսպես.
Ուշադրություն դարձրեք, որ երկու ռելեների ելքերը միացված են միմյանց: Այս միացված ելքը այնուհետև
ապահովում է էլեկտրական լամպի էներգիան: Երկու ռելեներից որևէ մեկը բավարար է լամպը լուսավորելու
համար: Օրինակ, եթե փակենք վերին անջատիչը, լամպը վառվում է: Լամպը հոսանք է ստանում ձախ ռելեից:
Նմանապես, եթե վերևի անջատիչը բաց թողնենք, բայց ներքևի անջատիչը փակենք, լամպը վառվում է.
Լամպը նաև վառվում է, եթե երկու անջատիչները փակ են.
Այն, ինչ մենք ունենք այստեղ, մի իրավիճակ է, երբ լամպը լուսավորվում է, եթե վերին կամ ստորին
անջատիչը փակ է: Այստեղ հիմնական բառը կամ է , ուստի սա կոչվում է ԿԱՄ դարպաս : Էլեկտրական
ինժեներները OR դարպասի համար օգտագործում են խորհրդանիշ, որն ունի հետևյալ տեսքը.

Այն ինչ-որ չափով նման է AND դարպասի խորհրդանիշին, բացառությամբ, որ մուտքային կողմը կլորացված
է, ինչպես O-ն OR-ում: (Դա կարող է օգնել ձեզ պահել դրանք ուղիղ:)
OR դարպասի ելքը մատակարարում է լարում, եթե երկու մուտքերից որևէ մեկն ունի լարում: Կրկին, եթե
ասենք, որ լարման բացակայությունը 0 է, իսկ լարման առկայությունը՝ 1, ապա OR դարպասն ունի չորս
հնարավոր վիճակ.
Նույն կերպ, ինչպես մենք ամփոփեցինք AND դարպասի ելքը, մենք կարող ենք ամփոփել OR դարպասի ելքը.

0 1
ԿԱՄ
0 0 1
1 1 1

ԿԱՄ դարպասները կարող են նաև ունենալ ավելի քան երկու մուտք: (Նման դարպասի ելքը 1 է, եթե
մուտքերից որևէ մեկը 1 է, ելքը 0 է միայն, եթե բոլոր ելքերը 0 են):
Ավելի վաղ ես բացատրեցի, թե ինչպես են ռելեները, որոնք մենք օգտագործում ենք, կոչվում են կրկնակի
նետման ռելեներ, քանի որ ելքը կարող է միացվել երկու տարբեր եղանակներով: Սովորաբար, լամպը չի
վառվում, երբ անջատիչը բաց է.

Երբ անջատիչը փակ է, լամպը լուսավորվում է:


Որպես այլընտրանք, դուք կարող եք օգտագործել մյուս կոնտակտը, որպեսզի լամպը վառվի, երբ անջատիչը
բաց է .
Այս դեպքում անջատիչը փակելիս լամպը մարում է: Այս կերպ միացված մեկ ռելեը կոչվում է ինվերտոր :
Inverter-ը տրամաբանական դարպաս չէ (տրամաբանական դարպասները միշտ ունեն երկու կամ ավելի
մուտքեր), բայց, այնուամենայնիվ, այն հաճախ շատ օգտակար է: Այն ներկայացված է հատուկ խորհրդանիշով,
որն ունի հետևյալ տեսքը.

Այն կոչվում է ինվերտոր, քանի որ այն հակադարձում է 0-ը (առանց լարման) 1-ի (լարման) և հակառակը.

Ինվերտորի, AND դարպասի և ԿԱՄ դարպասի միջոցով մենք կարող ենք սկսել կառավարման վահանակի
լարերը միացնել՝ իդեալական կատվիկի ընտրությունը ավտոմատացնելու համար: Սկսենք անջատիչներից:
Առաջին անջատիչը փակ է իգական սեռի և բաց արական սեռի համար: Այսպիսով, մենք կարող ենք
առաջացնել երկու ազդանշան, որոնք մենք կանվանենք F և M, այսպես.

Երբ F-ը 1 է, M-ը կլինի 0 և հակառակը: Նմանապես, երկրորդ անջատիչը փակ է ստերիլիզացված կատվի
համար և բաց է չստերիլիզացված կատվի համար.
Հաջորդ երկու անջատիչները ավելի բարդ են: Տարբեր համակցություններում այս անջատիչները պետք է նշեն
չորս տարբեր գույներ: Ահա երկու անջատիչները, երկուսն էլ միացված են լարման.

Երբ երկու անջատիչները բաց են (ինչպես ցույց է տրված), նրանք ցույց են տալիս սպիտակ գույնը: Ահա թե
ինչպես կարելի է օգտագործել երկու ինվերտորներ և մեկ AND դարպաս՝ ազդանշան ստեղծելու համար, որը
ես կանվանեմ W, որը լարում է (1), եթե ընտրեք սպիտակ կատու, և ոչ լարում (0), եթե ոչ.

Երբ անջատիչները բաց են, երկու ինվերտորների մուտքերը 0 են: Ինվերտորների ելքերը (որոնք մուտքեր են
դեպի AND դարպաս) այսպիսով երկուսն էլ 1 են: Դա նշանակում է, որ AND դարպասի ելքը 1 է: Եթե
անջատիչներից որևէ մեկը փակ, AND դարպասի ելքը կլինի 0:
Սև կատու նշելու համար մենք փակում ենք առաջին անջատիչը: Սա կարելի է իրականացնել մեկ ինվերտորի
և AND դարպասի միջոցով.

AND դարպասի ելքը կլինի 1 միայն այն դեպքում, եթե առաջին անջատիչը փակ է, իսկ երկրորդը բաց է:
Նմանապես, եթե երկրորդ անջատիչը փակ է, մենք ուզում ենք արևի կատու.
Եվ եթե երկու անջատիչները փակ են, մենք ուզում ենք «այլ» գույնի կատու.

Հիմա եկեք միավորենք բոլոր չորս փոքր սխեմաները մեկ մեծ շղթայի մեջ: (Ինչպես սովորաբար, սև կետերը
ցույց են տալիս շղթայի լարերի միջև կապը, առանց սև կետերի հատվող լարերը միացված չեն :)

Այո, ես գիտեմ, որ կապերի այս շարքն այժմ շատ բարդ է թվում: Բայց եթե շատ ուշադիր հետևեք, եթե նայեք
յուրաքանչյուր ԵՎ դարպասի երկու մուտքերին, որպեսզի տեսնեք, թե որտեղից են նրանք գալիս և փորձեք
անտեսել, թե ուր են նրանք գնում, ապա կտեսնեք, որ միացումն աշխատում է: Եթե երկու անջատիչներն էլ
անջատված են, W ելքը կլինի 1, իսկ մնացածը կլինի 0: Եթե առաջին անջատիչը փակ է, B ելքը կլինի 1, իսկ
մնացածը կլինի 0, և այլն:
Որոշ պարզ կանոններ կարգավորում են, թե ինչպես կարող եք միացնել դարպասները և ինվերտորները. Մեկ
դարպասի (կամ ինվերտորի) ելքը կարող է լինել մեկ կամ մի քանի այլ դարպասների (կամ ինվերտորների)
մուտքը: Բայց երկու կամ ավելի դարպասների (կամ ինվերտերների) ելքերը երբեք չեն միացված միմյանց:
Չորս AND դարպասներից և երկու ինվերտորներից բաղկացած այս շղթան կոչվում է 2-գիծ-4-գիծ
ապակոդավորիչ : Մուտքը երկու բիթ է, որոնք տարբեր համակցություններում կարող են ներկայացնել չորս
տարբեր արժեքներ: Ելքը չորս ազդանշան է, որոնցից միայն մեկն է ցանկացած պահի 1, կախված երկու
մուտքային արժեքներից: Նմանատիպ սկզբունքներով դուք կարող եք պատրաստել 3-ից 8 տող
ապակոդավորիչ կամ 4-տողից 16 տող ապակոդավորիչ և այլն:
Կատուների ընտրության արտահայտության պարզեցված տարբերակն էր

(N x
((M
x
(W
+
T))
+ (F
x (1

W))
)) +
B

Այս արտահայտության յուրաքանչյուր + նշանի համար շղթայում պետք է լինի ԿԱՄ դարպաս:
Յուրաքանչյուր x նշանի համար պետք է լինի AND դարպաս:

Շղթայի սխեմայի ձախ կողմում գտնվող նշանները նույն հաջորդականությամբ են, ինչ արտահայտության մեջ:
Այս ազդանշանները գալիս են ինվերտորներով միացված անջատիչներից և 2 տողից 4 տող
ապակոդավորիչից: Ուշադրություն դարձրեք արտահայտության (1 – W) մասի ինվերտորի օգտագործմանը:
Այժմ դուք կարող եք ասել, «Դա շատ ռելեներ է», և այո, դա ճիշտ է: Յուրաքանչյուր AND դարպասում և OR
դարպասում կա երկու ռելե, և յուրաքանչյուր ինվերտորի համար մեկ ռելե: Ես կասեի, որ միակ իրատեսական
պատասխանն է՝ «ընտելացեք դրան»: Առաջիկա գլուխներում մենք շատ ավելի շատ ռելեներ կօգտագործենք:
Պարզապես երախտապարտ եղեք, որ իրականում ստիպված չեք լինի դրանք գնել և լարերը տանել:
Այս գլխում մենք կանդրադառնանք ևս երկու տրամաբանական դարպասներին: Երկուսն էլ օգտագործում են
ռելեի ելքը, որը սովորաբար լարման առկայություն ունի, երբ ռելեն անջատված է: (Սա ինվերտորում
օգտագործվող ելքն է:) Օրինակ, այս կազմաձևում մեկ ռելեից ելքը էներգիա է մատակարարում երկրորդ
ռելեին: Երկու մուտքերն անջատված լինելու դեպքում լույսի լամպը միացված է՝
Եթե վերին անջատիչը փակ է, լամպը անջատվում է.
Լույսն անջատվում է, քանի որ երկրորդ ռելեին այլևս էլեկտրաէներգիա չի մատակարարվում: Նմանապես,
եթե ներքևի անջատիչը փակ է, լույսը նույնպես անջատված է.
Եվ եթե երկու անջատիչները փակ են, լույսի լամպն անջատված է.
Այս պահվածքը ճիշտ հակառակն է, ինչ տեղի է ունենում OR դարպասի հետ: Այն կոչվում է ՈՉ ԿԱՄ կամ,
ավելի հակիրճ, ՈՉ : Սա NOR դարպասի խորհրդանիշն է.

Դա նույնն է, ինչ OR-ի խորհրդանիշը, բացառությամբ ելքի վրա փոքր շրջանակի: Շրջանակը նշանակում է
շրջվել : NOR-ը նույնն է, ինչ

NOR դարպասի ելքը ներկայացված է հետևյալ աղյուսակում.

NO 0 1
R
0 1 0
1 0 0

Այս աղյուսակը ցույց է տալիս OR դարպասի արդյունքներին հակառակ, որոնք 1 են, եթե երկու մուտքերից
որևէ մեկը 1 է, և 0, միայն եթե երկու մուտքերն էլ 0 են:
Եվ երկու ռելեին միացնելու ևս մեկ եղանակ ցուցադրված է այստեղ.

Այս դեպքում երկու ելքերը միացված են, ինչը նման է OR կոնֆիգուրացիայի, բայց օգտագործելով մյուս
կոնտակտները: Լույսի լամպը միացված է, երբ երկու անջատիչները բաց են:
Լույսի լամպը մնում է միացված, երբ վերին անջատիչը փակ է.
Նմանապես, լույսի լամպը մնում է միացված, երբ ներքևի անջատիչը փակ է.
Միայն այն դեպքում, երբ երկու անջատիչները փակ են, լամպը անջատվում է.
Այս պահվածքը ճիշտ հակառակ է AND-ի դարպասին: Սա կոչվում է NOT AND կամ, ավելի հակիրճ, NAND :
NAND դարպասը գծված է ճիշտ այնպես, ինչպես AND դարպասը, բայց ելքի մոտ շրջանագիծ է, ինչը
նշանակում է, որ ելքը AND դարպասի հակառակն է.

NAND դարպասն ունի հետևյալ վարքագիծը.

ՆԱ 0 1
ՆԴ
0 1 1
1 1 0

Ուշադրություն դարձրեք, որ NAND դարպասի ելքը հակառակ է AND դարպասին: AND դարպասի ելքը 1 է
միայն այն դեպքում, եթե երկու մուտքերն էլ 1 են; հակառակ դեպքում ելքը 0 է:
Այս պահին մենք դիտարկել ենք էլեկտրահաղորդման ռելեների չորս տարբեր եղանակներ, որոնք ունեն երկու
մուտք և մեկ ելք: Յուրաքանչյուր կոնֆիգուրացիա իրեն մի փոքր այլ կերպ է պահում: Ռելեները նկարելուց և
նորից նկարելուց խուսափելու համար մենք դրանք անվանել ենք տրամաբանական դարպասներ և որոշել ենք
դրանք ներկայացնելու համար օգտագործել նույն նշանները, որոնք օգտագործվում են էլեկտրատեխնիկների
կողմից: Հատուկ տրամաբանական դարպասի ելքը կախված է մուտքագրումից, որն ամփոփված է այստեղ.

Այսպիսով, մենք ունենք չորս տրամաբանական դարպասներ և ինվերտեր: Գործիքների այս զանգվածը
լրացնելը սովորական հին ռելե է.

Սա կոչվում է բուֆեր , և սա դրա խորհրդանիշն է.

Դա նույն խորհրդանիշն է, ինչ ինվերտորը, բայց առանց փոքր շրջանագծի: Բուֆերը ուշագրավ է նրանով, որ
շատ բան չի անում: Բուֆերի ելքը նույնն է, ինչ մուտքագրվածը.
Բայց դուք կարող եք օգտագործել բուֆեր, երբ մուտքային ազդանշանը թույլ է: Դուք կհիշեք, որ սա էր
պատճառը, որ շատ տարիներ առաջ հեռագրով օգտագործվեցին ռելեներ: Կամ բուֆերը կարող է օգտագործվել
ազդանշանը մի փոքր հետաձգելու համար: Սա աշխատում է, քանի որ ռելեը մի փոքր ժամանակ է պահանջում՝
վայրկյանի որոշ հատված, որպեսզի գործարկվի:
Այսուհետ գրքում դուք կտեսնեք ռելեների շատ քիչ գծագրեր: Փոխարենը, հաջորդող սխեմաները կկառուցվեն
բուֆերներից, ինվերտորներից, չորս հիմնական տրամաբանական դարպասներից և ավելի բարդ սխեմաներից
(ինչպես 2-Line-to-4-Line Decoder) կառուցված այս տրամաբանական դարպասներից: Այս բոլոր մյուս
բաղադրիչները, իհարկե, պատրաստված են ռելեներից, բայց իրականում պետք չէ նայել ռելեներին:
Ավելի վաղ 2-Line-to-4-Line Decoder-ը կառուցելիս մենք տեսանք մի փոքրիկ միացում, որն այսպիսի
տեսք ուներ.

Երկու մուտքեր շրջվում են և դառնում մուտքեր AND դարպասի համար: Երբեմն նման կոնֆիգուրացիան
գծվում է առանց ինվերտորների.

Նկատեք փոքր շրջանակները AND դարպասի մուտքի մոտ: Այդ փոքր շրջանակները նշանակում են, որ
ազդանշաններն այդ կետում շրջված են. 0-ը (առանց լարման) դառնում է 1 (լարում) և հակառակը:
Երկու շրջված մուտքերով AND դարպասն անում է ճիշտ նույն բանը, ինչ NOR դարպասը.

Արդյունքը 1 է միայն այն դեպքում, եթե երկու մուտքերն էլ 0 են:


Նմանապես, OR դարպասը շրջված երկու մուտքերով համարժեք է NAND դարպասին.

Արդյունքը 0 է միայն այն դեպքում, եթե երկու մուտքերն էլ 1 են:


Դե Մորգանի օրենքների էլեկտրական իրականացումը : Օգոստոս Դե Մորգանը Վիկտորիաներայի մեկ այլ
մաթեմատիկոս էր, ինը տարով մեծ, քան Բուլը, ում գիրքը « Ֆորմալ տրամաբանություն» հրատարակվեց
1847 թվականին, նույն օրը (պատմությունը շարունակվում է) Բուլի «Տրամաբանության մաթեմատիկական
վերլուծություն» աշխատության հետ ։ Իսկապես, Բուլը ոգեշնչվել էր հետաքննել տրամաբանությունը շատ
հրապարակային վեճով, որը ծավալվում էր Դե Մորգանի և մեկ այլ բրիտանացի մաթեմատիկոսի միջև, որը
ներառում էր գրագողության մեղադրանքներ: (Դե Մորգանն արդարացվել է պատմության կողմից:) Շատ վաղ
Դե Մորգանը գիտակցեց Բուլի խորաթափանցության կարևորությունը: Նա անշահախնդիր կերպով քաջալերեց
Բուլին և օգնեց նրան ճանապարհին, և այսօր, ցավոք, գրեթե մոռացված է, բացառությամբ նրա հայտնի
օրենքների:
Դե Մորգանի օրենքներն առավել պարզ արտահայտված են այսպես.

A-ն և B-ն երկու բուլյան օպերանդներ են: Առաջին արտահայտության մեջ դրանք շրջված են, այնուհետև
զուգակցվում են Boolean AND օպերատորի հետ: Սա նույնն է, ինչ երկու օպերանդները միավորել Բուլյան
OR օպերատորի հետ և հետո շրջել արդյունքը (որը NOR է): Երկրորդ արտահայտության մեջ երկու
օպերանդները շրջված են և այնուհետև միացվում են Բուլյան OR օպերատորի հետ։ Սա նույնն է, ինչ
օպերանդները համատեղել բուլյան AND օպերատորի հետ և հետո շրջել (որը NAND-ն է):
Դե Մորգանի օրենքները կարևոր գործիք են բուլյան արտահայտությունները պարզեցնելու և, հետևաբար,
սխեմաների պարզեցման համար: Պատմականորեն դա այն էր, ինչ իրականում նշանակում էր Կլոդ Շենոնի
թուղթը էլեկտրատեխնիկների համար: Բայց սխեմաների մոլուցքի պարզեցումը այս գրքում լուրջ
մտահոգություն չի լինի: Գերադասելի է գործերը գործի դնել, քան հնարավորինս պարզ կերպով աշխատել: Եվ
այն, ինչ մենք պատրաստվում ենք աշխատել հետո, ոչ պակաս, քան ավելացնող մեքենա:
Գլուխ 12. Երկուական ավելացման մեքենա
Գումարը թվաբանական գործողություններից ամենահիմնականն է, այնպես որ, եթե մենք ցանկանում ենք
համակարգիչ կառուցել (և դա իմ թաքնված օրակարգն է այս գրքում), մենք նախ պետք է իմանանք, թե ինչպես
կառուցել մի բան, որը գումարում է երկու թվեր: Երբ դուք անմիջապես հասնեք դրան, հավելումը պարզապես
միակ բանն է , որ անում են համակարգիչները: Եթե մենք կարողանանք կառուցել ինչ-որ բան, որը
ավելացնում է, ապա մենք լավ ճանապարհին ենք կառուցելու մի բան, որն օգտագործում է գումարումը նաև
հանելու, բազմապատկելու, բաժանելու, հաշվարկելու հիփոթեքային վճարումները, հրթիռներին դեպի Մարս
ուղղորդելու, շախմատ խաղալու և մեր հեռախոսի հաշիվները խախտելու համար:
Ավելացնող մեքենան, որը մենք կկառուցենք այս գլխում, կլինի մեծ, կոպիտ, դանդաղ և աղմկոտ, գոնե
ժամանակակից կյանքի հաշվիչների և համակարգիչների համեմատ: Ամենահետաքրքիրն այն է, որ մենք
պատրաստվում ենք կառուցել այս ավելացնող մեքենան ամբողջովին պարզ էլեկտրական սարքերից, որոնց
մասին մենք սովորել ենք նախորդ գլուխներում՝ անջատիչներ, լույսի լամպեր, լարեր, մարտկոց և ռելեներ,
որոնք նախապես միացված են տարբեր տրամաբանական դարպասներին: Այս ավելացնող մեքենան չի
պարունակի ոչինչ, որը հորինված չէ առնվազն 120 տարի առաջ: Եվ իսկապես հաճելին այն է, որ մենք
ստիպված չենք իրականում որևէ բան կառուցել մեր կենդանի սենյակներում. փոխարենը, մենք կարող ենք
կառուցել այս ավելացնող մեքենան թղթի վրա և մեր մտքում:
Այս ավելացնող մեքենան ամբողջությամբ կաշխատի երկուական թվերով և չի ունենա ժամանակակից
հարմարություններ: Դուք չեք կարողանա ստեղնաշար օգտագործել՝ նշելու համարները, որոնք ցանկանում եք
ավելացնել. փոխարենը դուք կօգտագործեք մի շարք անջատիչներ: Արդյունքները ցույց տալու համար թվային
էկրանի փոխարեն, այս ավելացնող մեքենան կունենա մի շարք լամպեր:
Բայց այս մեքենան անպայման կավելացնի երկու թվեր, և դա կանի այնպես, ինչպես համակարգիչները թվեր
են ավելացնում:
Երկուական թվեր ավելացնելը շատ նման է տասնորդական թվերի ավելացմանը: Երբ ցանկանում եք
ավելացնել երկու տասնորդական թվեր, ինչպիսիք են 245-ը և 673-ը, խնդիրը բաժանում եք ավելի պարզ
քայլերի: Յուրաքանչյուր քայլ պահանջում է միայն մի զույգ տասնորդական թվանշան ավելացնել: Այս
օրինակում դուք սկսում եք 5 գումարած 3-ով: Խնդիրը շատ ավելի արագ է ընթանում, եթե ձեր կյանքի
ընթացքում ինչ-որ ժամանակ մտապահել եք հավելումների աղյուսակը:
Տասնորդական և երկուական թվեր ավելացնելու միջև մեծ տարբերությունն այն է, որ դուք օգտագործում եք
շատ ավելի պարզ աղյուսակ երկուական թվերի համար.

0 1
+
0 0 1
1 1 10

Եթե դուք իրականում մեծացել եք կետերի համայնքում և անգիր սովորել այս սեղանը դպրոցում, գուցե
բարձրաձայն վանկարկեիք.
0-ին գումարած 0 հավասար է 0-ի:
0-ին գումարած 1-ը հավասար է 1-ի:
1-ին գումարած 0-ը հավասար է 1-ի:
1-ին գումարած 1-ը հավասար է 0-ի, տեղափոխեք 1-ը:
Դուք կարող եք վերաշարադրել գումարման աղյուսակը առաջատար զրոներով, որպեսզի յուրաքանչյուր
արդյունք լինի 2-բիթանոց արժեք.

0 1
+
0 00 01
1 01 10

Այսպես դիտելով, երկուական թվերի գումարման արդյունքը 2 բիթ է, որոնք կոչվում են գումարի բիթ և
փոխադրման բիթ (ինչպես «1-ին գումարած 1-ը հավասար է 0-ի, կրիր 1-ը»): Այժմ մենք կարող ենք
երկուական գումարման աղյուսակը բաժանել երկու աղյուսակի, առաջինը՝ գումարի բիթերի համար.

+
0 1
գում
ար
0 0 1
1 1 0

իսկ երկրորդը՝ կրելու բիտի համար.

+ 0 1
կրել
0 0 0
1 0 1

Հարմար է այս կերպ նայել երկուական գումարումներին, քանի որ մեր ավելացնող մեքենան կանի գումարներ
և փոխադրումներ առանձին: Երկուական ավելացնող մեքենայի կառուցումը պահանջում է, որ մենք
նախագծենք մի շղթա, որն իրականացնում է այս գործողությունները: Բացառապես երկուական տարբերակով
աշխատելը չափազանց պարզեցնում է խնդիրը, քանի որ շղթայի բոլոր մասերը` անջատիչները, լույսի
լամպերը և լարերը, կարող են լինել երկուական թվանշաններ:
Ինչպես տասնորդական գումարման դեպքում, մենք սյունակ առ սյունակ ավելացնում ենք երկու երկուական
թվեր՝ սկսած ամենաաջ սյունակով.

Ուշադրություն դարձրեք, որ երբ մենք ավելացնում ենք երրորդ սյունակը աջից, 1-ը տեղափոխվում է հաջորդ
սյունակ: Սա կրկնվում է աջից վեցերորդ, յոթերորդ և ութերորդ սյունակներում:
Ի՞նչ չափի երկուական թվեր ենք ուզում ավելացնել: Քանի որ մենք կառուցում ենք մեր ավելացման մեքենան
միայն մեր մտքում, մենք կարող ենք կառուցել այն, որը շատ երկար թվեր է ավելացնում: Բայց եկեք խելամիտ
լինենք և որոշենք ավելացնել երկուական թվեր մինչև 8 բիթ: Այսինքն՝ մենք ցանկանում ենք ավելացնել
երկուական թվեր, որոնք կարող են տատանվել 0000-0000-ից մինչև 1111-1111, կամ տասնորդական
0-ից մինչև 255: Երկու 8-բիթանոց թվերի գումարը կարող է լինել մինչև 1-1111-1110 կամ 510:
Մեր երկուական ավելացնող մեքենայի կառավարման վահանակը կարող է այսպիսի տեսք ունենալ.

Մենք այս վահանակի վրա ունենք ութ անջատիչների երկու շարք: Անջատիչների այս հավաքածուն մուտքային
սարքն է, և մենք այն կօգտագործենք երկու 8-բիթանոց թվերը «մուտքագրելու» համար: Այս մուտքային
սարքում անջատիչը անջատված է (ներքև) 0-ի համար և միացված է (վերև) 1-ի համար, ինչպես ձեր տան
պատի անջատիչները: Վահանակի ներքևում գտնվող ելքային սարքը ինը լամպերի շարք է: Այս լամպերը
ցույց կտան պատասխանը: Չլուսավորված լամպը 0 է, իսկ վառված լամպը 1 է: Մեզ պետք է ինը լամպ, քանի
որ երկու 8-բիթանոց թվերի գումարը կարող է լինել 9-բիթանոց:
Ավելացնող մեքենայի մնացած մասը բաղկացած կլինի տրամաբանական դարպասներից, որոնք միմյանց
միացված են տարբեր ձևերով: Անջատիչները կգործարկեն ռելեները տրամաբանական դարպասներում, որոնք
այնուհետև կմիացնեն ճիշտ լույսերը: Օրինակ, եթե մենք ցանկանում ենք ավելացնել 0110-0101 և
1011-0110 (նախորդ օրինակում ներկայացված երկու թվերը), մենք նետում ենք համապատասխան
անջատիչները, ինչպես ցույց է տրված հաջորդ էջում:

Լամպերը վառվում են՝ ցույց տալու համար 1-0001-1011-ի պատասխանը: (Դե, հուսանք, այնուամենայնիվ,
այդպես է: Մենք դեռ չենք կառուցել այն):
Վերջին գլխում ես նշեցի, որ այս գրքում շատ ռելեներ եմ օգտագործելու: 8-բիթանոց ավելացման մեքենան,
որը մենք կառուցում ենք այս գլխում, պահանջում է ոչ պակաս, քան 144 ռելե՝ 18-ը 8 զույգ բիթերից
յուրաքանչյուրի համար, որոնք մենք ավելացնում ենք միասին: Եթե ես ձեզ ցույց տայի ավարտված շրջանն
ամբողջությամբ, դուք հաստատ կզարմանաք: Ոչ մի կերպ որևէ մեկը կարող է հասկանալ 144 ռելեները,
որոնք տարօրինակ ձևերով միացված են իրար: Փոխարենը, մենք այս խնդրին մոտենալու ենք փուլերով՝
օգտագործելով տրամաբանական դարպասները:
Միգուցե դուք անմիջապես տեսաք կապ տրամաբանական դարպասների և երկուական գումարման միջև, երբ
նայեցիք փոխադրման բիտի աղյուսակին, որն առաջանում է երկու 1-բիթանոց թվերի գումարումից:

+ 0 1
կրել
0 0 0
1 0 1

Դուք, հավանաբար, հասկացել եք, որ սա նույնական է վերջին գլխում ցուցադրված AND դարպասի ելքին.

0 1
ԵՎ
0 0 0
1 0 1

Այսպիսով, AND դարպասը հաշվարկում է փոխադրման բիթ երկու երկուական թվանշանների գումարման
համար:
Ահա՜ Մենք հաստատ առաջընթաց ենք գրանցում: Մեր հաջորդ քայլը կարծես որոշ ռելեների համոզելն է
վարվել այսպես.

+
0 1
գում
ար
0 0 1
1 1 0

Սա երկուական զույգ թվանշաններ ավելացնելու խնդրի մյուս կեսն է: Գումարի բիթը պարզվում է, որ այնքան
էլ պարզ չէ, որքան տեղափոխման բիթը, բայց մենք կհասնենք դրան:
Առաջին բանը, որ պետք է գիտակցել, այն է, որ OR դարպասը մոտ է մեր ուզածին, բացառությամբ ներքևի աջ
անկյունում գտնվող դեպքի.

0 1
ԿԱՄ
0 0 1
1 1 1

NAND դարպասը նույնպես մոտ է մեր ուզածին, բացառությամբ վերին ձախ անկյունում գտնվող դեպքի.

ՆԱ 0 1
ՆԴ
0 1 1
1 1 0

Այսպիսով, եկեք միացնենք և՛ OR դարպասը, և՛ NAND դարպասը նույն մուտքերին.

Հետևյալ աղյուսակը ամփոփում է այս OR և NAND դարպասների ելքերը և համեմատում է այն, ինչ մենք
ցանկանում ենք ավելացնող մեքենայի համար.

Այն,
NA ինչ
Աղբ ԿԱՄ
ND մենք
արկ Դուր
A In դուր ուզո
ղ ս
ս ւմ
ենք
0 0 0 1 0
0 1 1 1 1
1 0 1 1 1
1 1 1 0 0

Ուշադրություն դարձրեք, որ այն, ինչ մենք ուզում ենք, 1 է միայն այն դեպքում, եթե OR դարպասից և NAND
դարպասից ելքը երկուսն էլ 1 են: Սա ենթադրում է, որ այս երկու ելքերը կարող են մուտք գործել AND
դարպասի համար.

Եվ վերջ։
Ուշադրություն դարձրեք, որ այս ամբողջ շղթայի համար դեռևս կա ընդամենը երկու մուտք և մեկ ելք: Երկու
մուտքերը մտնում են ինչպես OR, այնպես էլ NAND դարպաս: OR և NAND դարպասների ելքերը մտնում են
AND դարպաս, և դա մեզ տալիս է հենց այն, ինչ մենք ուզում ենք.
NA
Աղբ ԿԱՄ ԵՎ
ND
արկ Դուր ԴՈՒ
A In դուր
ղ ս ՐՍ
ս
0 0 0 1 0
0 1 1 1 1
1 0 1 1 1
1 1 1 0 0

Իրականում կա անուն, թե ինչ է անում այս միացումը: Այն կոչվում է Exclusive OR gate կամ, ավելի
հակիրճ, XOR gate: Այն կոչվում է Exclusive OR gate, քանի որ ելքը 1 է, եթե A մուտքը 1 է կամ B մուտքը
1, բայց ոչ երկուսն էլ: Այսպիսով, ԿԱՄ դարպաս, NAND դարպաս և AND դարպաս նկարելու փոխարեն,
մենք կարող ենք օգտագործել այն խորհրդանիշը, որն օգտագործում են էլեկտրատեխնիկները XOR դարպասի
համար.

Այն շատ նման է OR դարպասին, բացառությամբ, որ այն ունի մեկ այլ կոր գիծ մուտքային կողմում: XOR
դարպասի պահվածքը ներկայացված է այստեղ.

XO 0 1
R
0 0 1
1 1 0

XOR դարպասը վերջնական տրամաբանական դարպասն է, որը ես մանրամասն նկարագրում եմ այս գրքում:
(Վեցերորդ դարպասը երբեմն հայտնվում է էլեկտրատեխնիկայում: Այն կոչվում է համընկնում կամ
համարժեք դարպաս , քանի որ ելքը 1 է միայն այն դեպքում, եթե երկու մուտքերը նույնն են: Համընկնման
դարպասը նկարագրում է XOR դարպասի ելքը հակառակ, ուստի այս դարպասի խորհրդանիշն է. նույնը, ինչ
XOR դարպասը, բայց մի փոքր շրջանով ելքի վերջում:)
Եկեք վերանայենք այն, ինչ մենք գիտենք մինչ այժմ: Երկու երկուական թվերի գումարումով ստացվում է
գումարի բիթ և տեղափոխման բիթ.

Այս արդյունքները ստանալու համար կարող եք օգտագործել հետևյալ երկու տրամաբանական դարպասները.
Երկու երկուական թվերի գումարը տրվում է XOR դարպասի ելքով, իսկ տեղափոխման բիթը՝ AND դարպասի
ելքով։ Այսպիսով, մենք կարող ենք միավորել AND դարպասը և XOR դարպասը՝ ավելացնելու երկու
երկուական թվանշաններ, որոնք կոչվում են A և B:

Եվ AND դարպասը և XOR դարպասը նկարելու և վերագծելու փոխարեն կարող եք պարզապես նկարել
այսպիսի տուփ.

Այս տուփը կոչվում է Half Adder ինչ-որ պատճառով: Անշուշտ, այն ավելացնում է երկու երկուական
թվանշան և տալիս է գումարի բիթ և կրելու բիթ: Բայց երկուական թվերի ճնշող մեծամասնությունը 1 բիթից
երկար է: Այն, ինչ չի կարողանում անել Half Adder-ը, նախորդ հավելումից հնարավոր տեղափոխման բիթ
ավելացնելն է: Օրինակ, ենթադրենք, որ մենք ավելացնում ենք հետևյալ երկուական թվերը.

Մենք կարող ենք օգտագործել Half Adder-ը միայն ամենաաջ սյունակի գումարման համար. 1-ին գումարած
1-ը հավասար է 0-ի, կրում է 1-ը: Աջից երկրորդ սյունակի համար մենք իսկապես պետք է գումարենք երեք
երկուական թվեր՝ փոխադրման պատճառով: Եվ դա վերաբերում է բոլոր հաջորդ սյունակներին: Երկու
երկուական թվերի յուրաքանչյուր հաջորդ գումարումը կարող է ներառել նախորդ սյունակից փոխանցվող բիթ:
Երեք երկուական թվեր ավելացնելու համար մեզ անհրաժեշտ է երկու կես գումարող և ԿԱՄ դարպաս՝ լարով
այս կերպ.
Սա հասկանալու համար սկսեք A և B մուտքագրումներից դեպի ձախ կողմում գտնվող առաջին
կիսահավաքիչը: Արդյունքը գումար է և կրում: Այդ գումարը պետք է ավելացվի նախորդ սյունակի
տեղափոխմանը, այնպես որ դրանք մուտքագրում են երկրորդ կես ավելացնողին: Երկրորդ կես գումարողից
ստացված գումարը վերջնական գումարն է: Կիսահավասարիչներից երկու «Կատարում»ները մուտք են ԿԱՄ
դարպաս: Դուք կարող եք մտածել, որ այստեղ անհրաժեշտ է մեկ այլ Half Adder, և դա, անշուշտ, կաշխատի:
Բայց եթե անցնեք բոլոր հնարավորությունների միջով, կտեսնեք, որ երկու կես գումարողներից կատարվող
գործողությունները երբեք երկուսն էլ հավասար չեն 1-ի: OR դարպասը բավարար է դրանք ավելացնելու
համար, քանի որ OR դարպասը նույնն է, ինչ XOR դարպասը, եթե մուտքերը երբեք երկուսն էլ 1 չեն:
Այդ գծապատկերը գծելու և վերագծելու փոխարեն, մենք կարող ենք այն անվանել « Ամբողջ գումարող» .

Հետևյալ աղյուսակը ամփոփում է Full Adder-ի մուտքերի բոլոր հնարավոր համակցությունները և


արդյունքում ստացված ելքերը.

Ներ Գում Իրա


Աղբ
ս ար կան
արկ
A In տան դուր ացն
ղ
ել ս ել
0 0 0 0 0
0 1 0 1 0
1 0 0 1 0
1 1 0 0 1
0 0 1 1 0
0 1 1 0 1
1 0 1 0 1
1 1 1 1 1

Այս գլխի սկզբում ես ասացի, որ մեզ անհրաժեշտ կլինի 144 ռելե մեր ավելացնող մեքենայի համար: Ահա թե
ինչպես ես դա հասկացա. Յուրաքանչյուր AND, OR և NAND դարպաս պահանջում է 2 ռելե: Այսպիսով,
XOR դարպասը ներառում է 6 ռելե: Half Adder-ը XOR դարպաս է և AND դարպաս, այնպես որ Half
Adder-ը պահանջում է 8 ռելե: Յուրաքանչյուր Full Adder-ն իրենից ներկայացնում է երկու կես
ավելացնող և OR դարպաս, կամ 18 ռելե: Մեզ անհրաժեշտ է 8 լրիվ ավելացուցիչ մեր 8-բիթանոց
ավելացնող մեքենայի համար: Դա 144 ռելե է:
Հիշեք մեր սկզբնական կառավարման վահանակը՝ անջատիչներով և լամպերով.

Այժմ մենք կարող ենք սկսել անջատիչները և լամպերը միացնել Full Adder-ին:
Նախ միացրեք երկու ամենաաջ անջատիչները և ամենաաջ լույսի լամպը Full Adder-ին.

Երբ սկսում եք ավելացնել երկու երկուական թվեր, ձեր ավելացրած թվերի առաջին սյունակը տարբերվում է:
Դա տարբերվում է, քանի որ յուրաքանչյուր հաջորդ սյունակ կարող է ներառել նախորդ սյունակից
տեղափոխման բիթ: Առաջին սյունակը չի ներառում փոխանցման բիթ, ինչի պատճառով էլ ամբողջական
ավելացնողին փոխանցվող մուտքը միացված է գետնին: Դա նշանակում է 0 բիթ: Երկուական թվանշանների
առաջին զույգի ավելացումը, իհարկե, կարող է հանգեցնել փոխանցման բիտի: Այդ կատարման ելքը մուտք է
հաջորդ սյունակում:
Հաջորդ երկու թվանշանների և հաջորդ լույսի լամպի համար դուք օգտագործում եք Full Adder-ը, որը
հաղորդվել է հետևյալ կերպ.
Առաջին Full Adder-ից կատարվող ելքը մուտք է այս երկրորդ Full Adder-ին: Թվանշանների
յուրաքանչյուր հաջորդ սյունակ միացված է նույն կերպ: Յուրաքանչյուր ելք մեկ սյունակից փոխադրում է
հաջորդ սյունակին:
Վերջապես ութերորդ և վերջին զույգ անջատիչները միացված են վերջին Full Adder-ին.

Այստեղ վերջնական ելքը գնում է իններորդ լույսի լամպին:


Մենք ավարտեցինք:
Ահա ևս մեկ միջոց՝ դիտելու ութ ամբողջական ավելորդների այս հավաքածուն, որոնցից յուրաքանչյուրը
ծառայում է որպես հաջորդ Carry In-ի մուտքագրում.
Ահա ամբողջական 8-բիթանոց հավելիչը, որը կազմված է որպես մեկ տուփ: Մուտքերը պիտակավորված են A
0- ից A 7- ից և B 0 -ից B 7- ից : Արդյունքները պիտակավորված են S 0- ից մինչև S 7 (գումարի համար).

Սա բազմաբիթ թվի առանձին բիթերը պիտակավորելու սովորական եղանակ է: A 0 , B 0 և S 0 բիթերը


ամենաքիչ նշանակալից կամ ամենաաջ բիթերն են : A 7 , B 7 և S 7 բիթերը ամենակարևոր , կամ ամենաձախ
բիթերն են : Օրինակ, ահա թե ինչպես են այս բաժանորդագրված տառերը կիրառվելու 0110-1001
երկուական համարի վրա.

Բաժանորդները սկսվում են 0-ից և բարձրանում են ավելի նշանակալի թվանշանների համար, քանի որ դրանք
համապատասխանում են երկուսի հզորությունների ցուցիչներին.

Եթե երկուսի յուրաքանչյուր հզորությունը բազմապատկեք դրա տակ գտնվող թվանշանով և գումարեք,
կստանաք 0110-1001 տասնորդական համարժեքը, որը 64 + 32 + 8 + 1 կամ 105 է:
Մեկ այլ կերպ, որը կարող է գծվել 8-bit Adder-ը, այսպիսին է.
Կրկնակի գծի սլաքները ունեն 8 ներքուստ՝ ցույց տալու համար, որ յուրաքանչյուրը ներկայացնում է ութ
առանձին ազդանշանների խումբ: Դրանք պիտակավորված են A 7 …A 0 , B 7 …B 0 և S 7 …S 0 ՝ նաև
8-բիթանոց թվեր նշելու համար:
Մեկ 8-բիթանոց ավելացնող սարք ստեղծելուց հետո կարող եք մյուսը կառուցել: Այնուհետև հեշտ է դառնում
կասկադացնել դրանք երկու 16-բիթանոց թվեր ավելացնելու համար.

Աջ կողմում գտնվող «Cry Out of the Adder»-ը միացված է ձախ կողմում գտնվող «Cry Out of the
Adder»-ին: Ձախ կողմում գտնվող գումարիչը մուտքագրում է երկու գումարվող թվերի ամենակարևոր ութ
թվանշանները և որպես արդյունք ստեղծում է արդյունքի ամենակարևոր ութ թվանշանները:
Եվ հիմա կարող եք հարցնել .
Հիմնականում, այո: Բայց ոչ ճշգրիտ:
Նախ, ավելացուցիչները կարող են պատրաստվել ավելի արագ, քան այս մեկը: Եթե նայեք, թե ինչպես է
աշխատում այս շղթան, ապա հաջորդ զույգը գումարելու համար պահանջվում է ելք ամենաքիչ նշանակալի
զույգ թվերից, իսկ երկրորդ զույգից՝ երրորդ զույգի ավելացման համար, և այլն: առաջ. Ավելացնողի
ընդհանուր արագությունը հավասար է Full Adder բաղադրիչի արագության բիթերի թվին: Սա կոչվում է
ալիքային փոխանցում : Ավելի արագ գումարողներն օգտագործում են լրացուցիչ սխեմաներ, որոնք կոչվում են
առաջադիմություն , որն արագացնում է այս գործընթացը:
Երկրորդ (և ամենակարևորը), համակարգիչներն այլևս չեն օգտագործում ռելեներ: Այնուամենայնիվ, նրանք
մի ժամանակ արեցին: 1930-ականներին կառուցված առաջին թվային համակարգիչները օգտագործում էին
ռելեներ և ավելի ուշ վակուումային խողովակներ: Այսօրվա համակարգիչները օգտագործում են
տրանզիստորներ: Երբ օգտագործվում են համակարգիչներում, տրանզիստորները հիմնականում գործում են
այնպես, ինչպես ռելեները, բայց (ինչպես մենք կտեսնենք) դրանք շատ ավելի արագ են, շատ ավելի փոքր և
շատ ավելի հանգիստ, շատ ավելի քիչ էներգիա են ծախսում և շատ ավելի էժան են: 8-բիթանոց ավելացնող
սարքի կառուցման համար դեռևս պահանջվում է 144 տրանզիստոր (ավելին, եթե դուք փոխարինում եք
ալիքային կրիչը դեպի առաջ նայող սարքով), բայց միացումը միկրոսկոպիկ է:
Գլուխ 13. Բայց ի՞նչ կասեք հանման մասին:
Այն բանից հետո, երբ դուք ինքներդ ձեզ համոզեցիք, որ ռելեները իսկապես կարող են միացված լինել
երկուական թվեր ավելացնելու համար, կարող եք հարցնել. «Բայց ինչ վերաբերում է հանմանը»: Վստահ
եղեք, որ դուք չեք նեղացնում ձեզ՝ այսպիսի հարցեր տալով. դու իրականում բավականին ընկալունակ ես:
Գումարը և հանումը որոշ առումներով լրացնում են միմյանց, սակայն երկու գործողությունների մեխանիզմը
տարբեր է: Հավելումը հետևողականորեն շարժվում է թվանշանների ամենաաջ սյունակից դեպի ամենաձախ
սյունակը: Մեկ սյունակից յուրաքանչյուր փոխանցում ավելացվում է հաջորդ սյունակին: Այնուամենայնիվ,
մենք չենք իրականացնում հանում. մենք պարտք ենք վերցնում , և դա ներառում է էապես տարբեր մեխանիզմ՝
խառնաշփոթ ետ ու առաջ:
Օրինակ, եկեք նայենք տիպիկ փոխառությամբ բեռնված հանման խնդրին.

Դա անելու համար մենք սկսում ենք ամենաաջ սյունակից: Սկզբում մենք տեսնում ենք, որ 6-ը 3-ից մեծ է,
ուստի մենք պետք է 5-ից վերցնենք 1-ը, այնուհետև 13-ից հանենք 6-ը, որը 7-ն է: Այնուհետև մենք պետք է
հիշենք, որ մենք վերցրել ենք 1-ը 5-ից, այնպես որ դա իսկապես 4 է: և այս 4-ը 7-ից փոքր է, ուստի մենք
2-ից վերցնում ենք 1-ը և 14-ից հանում ենք 7-ը, ինչը 7 է: Այնուհետև մենք պետք է հիշենք, որ մենք
վերցրել ենք 1-ը 2-ից, այնպես որ դա իսկապես 1 է, այնուհետև մենք հանում ենք 1-ը: այն ստանալու համար
0: Մեր պատասխանը 77 է.

Հիմա ինչպե՞ս ենք մենք երբևէ համոզելու տրամաբանական դարպասների մի խումբ անցնել նման
այլասերված տրամաբանության միջով:
Դե, մենք չենք պատրաստվում փորձել: Փոխարենը, մենք կօգտագործենք մի փոքրիկ հնարք, որը թույլ է տալիս
մեզ հանել առանց փոխառության: Սա կուրախացնի Պոլոնիուսին («Ոչ վարկառու, ոչ էլ փոխատու լինի») և
մեզ՝ նույնպես։ Ավելին, հանումը մանրամասն ուսումնասիրելը օգտակար է, քանի որ այն ուղղակիորեն
առնչվում է համակարգչում բացասական թվերը պահելու համար երկուական կոդերի օգտագործման
եղանակին:
Այս բացատրության համար ես պետք է անդրադառնամ հանվող երկու թվերին: Նրանց հատուկ անուններն են
մինուենդ և ենթահող : Ենթածախը հանվում է մինուենդից, և արդյունքը տարբերությունն է .

Առանց փոխառության հանելու համար դուք նախ հանում եք ենթակետը ոչ թե մինուենդից, այլ 999-ից.
Այստեղ դուք օգտագործում եք 999, քանի որ թվերն ունեն 3 նիշ: Եթե թվերը ունեին 4 նիշ, ապա դուք
կօգտագործեիք 9999-ը: 9-երի տողից մի հանելուց ստացվում է մի թիվ, որը կոչվում է ինըների լրացում :
176-ի ինըների լրացումը 823-ն է: Եվ այն աշխատում է հակառակ ուղղությամբ. 823-ի ինների լրացումը
176-ն է: Ինչ լավ է սա. Անկախ նրանից, թե ինչ ենթակառուցվածք է, ինըների լրացումը հաշվելը երբեք
պարտք չի պահանջում :
Այն բանից հետո, երբ դուք հաշվարկում եք ենթակետի ինը լրացումները, այն ավելացնում եք սկզբնական
մինուենդին.

Եվ վերջապես ավելացնում եք 1 և հանում 1000.

Դուք ավարտեցիք: Արդյունքը նույնն է, ինչ նախկինում, և ոչ մի անգամ պարտք չեք վերցրել:
Ինչու է սա աշխատում: Հանման սկզբնական խնդիրն է

253

176
թթ

Եթե որևէ թիվ գումարվի և հանվի այս արտահայտությանը, արդյունքը կլինի նույնը: Այսպիսով, եկեք
գումարենք 1000 և հանենք 1000.

253

176
+
100
0–
100
0 թթ

Այս արտահայտությունը համարժեք է

253

176
+
999
+1

100
0

Այժմ տարբեր թվերը կարող են վերախմբավորվել հետևյալ կերպ.

253
+
(99
9–
176
)+
1–
100
0

Եվ սա նույնական է այն հաշվարկին, որը ես ցուցադրեցի՝ օգտագործելով ինըների լրացումը: Մեկ հանումը
փոխարինեցինք երկու հանումով և երկու գումարումով, բայց ընթացքում ազատվեցինք բոլոր գարշելի
փոխառություններից։
Իսկ եթե ենթահողն ավելի մեծ է, քան մինուենդը: Օրինակ, հանման խնդիրը կարող է լինել

Սովորաբար, դուք կնայեիք սրան և կասեիք. «Հմմմ: Ես տեսնում եմ, որ ենթահողն ավելի մեծ է, քան
մինուենդը, ուստի ես պետք է փոխարկեմ երկու թվերը, կատարեմ հանումը և հիշեմ, որ արդյունքն իսկապես
բացասական թիվ է»: Դուք կարող եք դրանք փոխել ձեր գլխում և գրել պատասխանն այսպես.

Այս հաշվարկն առանց փոխառության կատարելը մի փոքր տարբերվում է նախորդ օրինակից: Դուք սկսում եք
նախկինի պես՝ հանելով ենթակետը (253) 999-ից՝ ստանալով ինըների լրացումը.

Այժմ ավելացրեք ինըների լրացումը սկզբնական մինուենդին.


Նախկին խնդրի այս պահին դուք կարողացաք ավելացնել 1 և հանել 1000՝ վերջնական արդյունք ստանալու
համար: Բայց այս դեպքում այդ ռազմավարությունը լավ չի աշխատի: Դուք պետք է հանեք 1000-ը 923-ից, և
դա իսկապես նշանակում է 1000-ից հանել 923-ը, և դա պահանջում է փոխառություն:
Փոխարենը, քանի որ մենք արդյունավետորեն ավելացրել ենք 999 ավելի վաղ, եկեք հանենք 999-ը հիմա.

Երբ մենք տեսնում ենք դա, մենք հասկանում ենք, որ մեր պատասխանը կլինի բացասական թիվ, և որ մենք
իսկապես պետք է անցնենք երկու թվերի շուրջ՝ հանելով 922-ը 999-ից: Սա կրկին չի ներառում
փոխառություն, և պատասխանն այնպիսին է, ինչպիսին մենք ակնկալում ենք.

Այս նույն տեխնիկան կարող է օգտագործվել նաև երկուական թվերի հետ և իրականում ավելի պարզ է, քան
տասնորդական թվերի դեպքում: Տեսնենք, թե ինչպես է այն աշխատում:
Հանման սկզբնական խնդիրն էր

Երբ այս թվերը վերածվում են երկուականի, խնդիրը դառնում է

Քայլ 1. 11111111 (որը հավասար է 255):

Երբ մենք աշխատում էինք տասնորդական թվերի հետ, ենթահամակարգը հանվում էր ինը տողից, և արդյունքը
կոչվում էր ինների լրացում: Երկուական թվերի դեպքում ենթակետը հանվում է միավորների տողից, և
արդյունքը կոչվում է մեկերի լրացում : Բայց ուշադրություն դարձրեք, որ մենք իրականում պետք չէ հանում
անել, որպեսզի հաշվարկենք դրանց լրացումը: Դա պայմանավորված է նրանով, որ սկզբնական թվի
յուրաքանչյուր 0 բիթը դառնում է 1 բիթ նրանց լրացման մեջ, իսկ յուրաքանչյուր 1 բիթը դառնում է 0 բիթ:
Այդ իսկ պատճառով, դրանց լրացումը երբեմն կոչվում է նաև ժխտում կամ հակադարձ : (Այս պահին դուք
կարող եք հիշել 11-րդ գլխից , որ մենք կառուցել ենք մի բան, որը կոչվում է ինվերտեր, որը փոխում է 0-ը
1-ի և 1-ը 0-ի):
Քայլ 2. Ավելացրե՛ք ենթահամակարգի լրացումները մինուենդում.

Քայլ 3. Արդյունքին ավելացրեք 1.

Քայլ 4. հանել 100000000 (որը հավասար է 256).

Արդյունքը տասնորդականում համարժեք է 77-ի:


Եկեք նորից փորձենք՝ հակադարձված երկու թվերով: Տասնորդականում հանման խնդիրն է

իսկ երկուական տարբերակում սա այսպիսին է.

Քայլ 1. 11111111-ից հանեք ենթաբաժինը: Դուք ստանում եք դրանց լրացումը.

Քայլ 2. Ավելացրե՛ք ենթահամակարգի լրացումները մինուենդում.


Հիմա արդյունքից ինչ-որ կերպ պետք է հանել 11111111-ը։ Երբ սկզբնական ենթահողն ավելի փոքր է, քան
մինուենդը, դուք կատարում եք այս առաջադրանքը՝ ավելացնելով 1 և հանելով 100000000: Բայց դուք չեք
կարող այս կերպ հանել առանց փոխառության: Այսպիսով, մենք այս արդյունքը հանում ենք 11111111-ից.

Կրկին, այս ռազմավարությունը իսկապես նշանակում է, որ մենք պարզապես շրջում ենք բոլոր բիթերը՝
արդյունք ստանալու համար: Պատասխանը կրկին 77 է, բայց իրականում –77:
Այս պահին մենք ունենք բոլոր գիտելիքները, որոնք մեզ անհրաժեշտ են վերջին գլխում մշակված ավելացման
մեքենան փոփոխելու համար, որպեսզի այն կարողանա կատարել հանում, ինչպես նաև գումարում: Որպեսզի
սա շատ բարդ չդառնա , այս նոր գումարող և հանող մեքենան հանումներ կկատարի միայն այն դեպքում, երբ
ենթակետը փոքր է մինուենդից, այսինքն, երբ արդյունքը դրական թիվ է:
Ավելացնող մեքենայի միջուկը տրամաբանական դարպասներից հավաքված 8-բիթանոց Ադդերն էր.

Ինչպես հավանաբար հիշում եք, A0-ից A7 և B0-ից B7 մուտքերը միացված էին անջատիչներին, որոնք
ցույց էին տալիս երկու 8-բիթանոց արժեքներ, որոնք պետք է ավելացվեն: Carry In մուտքը միացված էր
գետնին: S0-ից S7-ի ելքերը միացված էին ութ լամպերի, որոնք ցուցադրում էին ավելացման արդյունքը:
Քանի որ հավելումը կարող է հանգեցնել 9-բիթանոց արժեքի, «Cry Out» ելքը նույնպես միացված է
իններորդ լույսի լամպին:
Կառավարման վահանակն այսպիսի տեսք ուներ.
Այս դիագրամում անջատիչները պետք է ավելացնեն 183 (կամ 10110111) և 22 (00010110)՝
ստանալով 205 կամ 11001101 արդյունք, ինչպես ցույց է տրված լույսի լամպերի շարքում:
Երկու 8-բիթանոց թվեր ավելացնելու և հանելու նոր կառավարման վահանակը պարզապես մի փոքր
փոփոխվել է: Այն ներառում է լրացուցիչ անջատիչ, որը ցույց է տալիս, թե արդյոք մենք ցանկանում ենք
ավելացնել կամ հանել:

Դուք անջատում եք այս անջատիչը գումարման համար և միացնում հանելու համար, ինչպես նշված է պիտակի
վրա: Նաև արդյունքները ցուցադրելու համար օգտագործվում են միայն ամենաաջ ութ լամպերը: Իններորդ
լույսի լամպն այժմ պիտակավորված է «Գերհոսող/Հոսք»: Այս լամպը ցույց է տալիս, որ հաշվարկվում է մի
թիվ, որը չի կարող ներկայացվել ութ լամպերով: Դա տեղի կունենա, եթե գումարումը առաջացնում է 255-ից
մեծ թիվ (դա կոչվում է գերհոսք) կամ եթե հանումը առաջացնում է բացասական թիվ (ներհոսք): Հանման
դեպքում բացասական թիվ կստեղծվի, եթե ենթահողն ավելի մեծ է, քան մինուենդը:
Ավելացնող մեքենայի հիմնական հավելումը որոշ սխեմաներ են, որոնք հաշվարկում են 8-բիթանոց թվի
լրացումը: Հիշեք, որ դրանց լրացումը համարժեք է ինվերտացիոն բիթերին, ուստի 8-բիթանոց թվի լրացումը
հաշվարկելու համար կարող է թվալ նույնքան պարզ, որքան ութ ինվերտորները.
Այս շղթայի խնդիրն այն է, որ այն միշտ շրջում է իր մեջ մտնող բիթերը: Մենք փորձում ենք ստեղծել մեքենա,
որը կատարում է և՛ գումարում, և՛ հանում, այնպես որ սխեման պետք է շրջի բիթերը միայն այն դեպքում, եթե
կատարվում է հանում: Ավելի լավ միացումն այսպիսի տեսք ունի.

Invert պիտակավորված մեկ ազդանշան մուտքագրվում է ութ XOR (բացառիկ OR) դարպասներից
յուրաքանչյուրին: Հիշեցնենք, որ XOR-ը ցուցաբերում է հետևյալ վարքագիծը.

XO 0 1
R
0 0 1
1 1 0

Այսպիսով, եթե Invert ազդանշանը 0 է, XOR դարպասների ութ ելքերը նույնն են, ինչ ութ մուտքերը:
Օրինակ, եթե մուտքագրված է 01100001, ապա ելքային է 01100001: Եթե Invert ազդանշանը 1 է, ապա
ութ մուտքային ազդանշանները շրջված են: Եթե մուտքագրված է 01100001, ելք է ստացվում 10011110:
Ones' Complement պիտակով տուփի մեջ .
Ones' Complement տուփը, 8-bit Adder տուփը և վերջին բացառիկ OR դարպասն այժմ կարող են
միացված լինել այսպես.

Ուշադրություն դարձրեք երեք ազդանշաններին, որոնք բոլորը պիտակավորված են SUB : Սա


«Ավելացնել/հանել» անջատիչն է: Այս ազդանշանը 0 է, եթե պետք է կատարվի գումար, և 1, եթե պետք է
կատարվի հանում: Հանման համար B մուտքերը (անջատիչների երկրորդ շարքը) բոլորը շրջվում են Ones
Complement-ի սխեմայով, նախքան գումարիչը մտնելը: Նաև հանման համար գումարման արդյունքին
ավելացնում եք 1՝ գումարողի CI (Carry In) մուտքագրումը դնելով 1-ի։
SUB ազդանշանը և ավելացնողի CO (Carry Out) ելքը նույնպես մտնում են XOR դարպաս, որն
օգտագործվում է Overflow/Underflow լամպը լուսավորելու համար: Եթե SUB ազդանշանը 0 է (ինչը
նշանակում է, որ կատարվում է լրացում), լամպը կվառվի, եթե ավելացնողի CO ելքը 1 է: Սա նշանակում է,
որ ավելացման արդյունքը 255-ից մեծ է:
Եթե հանում է կատարվում, և եթե ենթակետը (B անջատիչները) փոքր է մինուենդից (A անջատիչներ), ապա
նորմալ է, որ CO ելքը գումարողից 1 է: Սա ներկայացնում է 100000000-ը, որը պետք է հանվի վերջին
քայլում: . Այսպիսով, Overflow/Underflow լամպը վառվում է միայն այն դեպքում, եթե ավելորդից CO
ելքը 0 է: Սա նշանակում է, որ ենթահոսքը մեծ է մինուենդից և արդյունքը բացասական է: Վերևում
ցուցադրված սարքը նախատեսված չէ բացասական թվեր ցուցադրելու համար:
Դուք, անշուշտ, պետք է ուրախ լինեք, որ հարցրիք. «Բայց ինչ վերաբերում է հանմանը»:
Այս գլխում ես խոսել եմ բացասական թվերի մասին, բայց դեռ չեմ նշել, թե ինչ տեսք ունեն բացասական
երկուական թվերը: Դուք կարող եք ենթադրել, որ ավանդական բացասական նշանն օգտագործվում է
երկուականի հետ այնպես, ինչպես այն տասնորդական է: Օրինակ, –77-ը երկուական տարբերակով գրված է
որպես –1001101: Դուք, անշուշտ, կարող եք դա անել, բայց երկուական թվեր օգտագործելու նպատակներից
մեկն այն է, որ ներկայացնենք ամեն ինչ ՝ օգտագործելով 0-ներ և 1-ներ, նույնիսկ փոքր նշաններ, ինչպիսիք
են բացասական նշանը:
Իհարկե, դուք կարող եք պարզապես օգտագործել մեկ այլ բիթ բացասական նշանի համար: Դուք կարող եք այդ
հավելյալ բիթը դարձնել 1 բացասական թվի համար, իսկ 0՝ դրական թվի համար, ինչը կաշխատի, թեև
բավական հեռու չի գնում: Բացասական թվերը ներկայացնելու ևս մեկ լուծում կա, որը նաև տրամադրում է
բացասական և դրական թվեր միասին գումարելու անհարմար մեթոդ: Այս այլ մեթոդի թերությունն այն է, որ
դուք պետք է ժամանակից շուտ որոշեք, թե քանի թվանշան է պահանջվում բոլոր թվերի համար, որոնց կարող
եք հանդիպել:
Եկեք մի պահ մտածենք այս մասին։ Դրական և բացասական թվեր գրելու առավելությունն այն է, որ դրանք
կարող են ընդմիշտ շարունակվել: Մենք պատկերացնում ենք 0-ը որպես դրական թվերի անվերջ հոսքի
միջնամաս, որն անջատվում է մի ուղղությամբ, իսկ բացասական թվերի անսահման հոսքը մյուս ուղղությամբ:


–1,0
00,
000
–99
9,9
99

–3
–2
–1 0
12
3…
999
,99
9
1,0
00,
000

Բայց ենթադրենք, մեզ պետք չէ անսահման թվով թվեր։ Ենթադրենք, մենք ի սկզբանե գիտենք, որ մեր
հանդիպած յուրաքանչյուր թիվ կլինի որոշակի տիրույթում:
Եկեք դիտարկենք չեկային հաշիվը, որտեղ մարդիկ երբեմն բացասական թվեր են տեսնում: Ենթադրենք, որ
մենք երբեք չենք ունենում ավելի քան 500 ԱՄՆ դոլար մեր չեկային հաշվում, և որ բանկը մեզ տվել է 500
ԱՄՆ դոլար առանց վերադարձի սահմանաչափ: Սա նշանակում է, որ մեր չեկային հաշվի մնացորդը միշտ մի
թիվ է $499-ից – $500-ի միջև: Ենթադրենք նաև, որ մենք երբեք չենք դնում 500 դոլար, մենք երբեք չենք
գրում 500 դոլարից ավելի չեկ, և գործ ունենք միայն դոլարով և թքած ունենք ցենտների վրա:
Պայմանների այս փաթեթը նշանակում է, որ թվերի շարքը, որոնց հետ մենք գործ ունենք մեր չեկային հաշիվն
օգտագործելիս, ներառում է -500-ից մինչև 499-ը: Դա ընդհանուր առմամբ 1000 թիվ է: Այս
սահմանափակումը ենթադրում է, որ մենք կարող ենք օգտագործել ընդամենը երեք տասնորդական թվանշան և
ոչ մի բացասական նշան՝ ներկայացնելու մեզ անհրաժեշտ բոլոր թվերը: Խաբեությունն այն է, որ մեզ
իսկապես պետք չեն դրական թվեր, որոնք տատանվում են 500-ից մինչև 999: Դա այն պատճառով է, որ մենք
արդեն հաստատել ենք, որ մեզ անհրաժեշտ առավելագույն դրական թիվը 499-ն է: Այսպիսով, 500-ից 999-ի
եռանիշ թվերը կարող են իրականում ներկայացնել բացասական թվեր: . Ահա թե ինչպես է այն աշխատում.

Նշա
նակ
ելով
–50
0,
մենք
օգտ
ագո
րծու
մ
ենք
500
:
Նշա
նակ
ելով
–49
9,
մենք
օգտ
ագո
րծու
մ
ենք
501
:
Նշա
նակ
ելով
–49
8,
մենք
օգտ
ագո
րծու
մ
ենք
502
:
(յադ
ա,
յադ
ա,
յադ
ա)
–2
նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
998
:
-1
նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
999
:
0
նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
000
:
1
նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
001
:
2
նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
002
:
(յադ
ա,
յադ
ա,
յադ
ա)
497

նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
497
-ը։
498

նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
498
-ը։
499

նշան
ակել
ու
համ
ար
մենք
օգտ
ագո
րծու
մ
ենք
499
-ը։

Այլ կերպ ասած, յուրաքանչյուր եռանիշ թիվ, որը սկսվում է 5, 6, 7, 8 կամ 9 թվերով, իրականում
բացասական թիվ է: Թվերն այսպես գրելու փոխարեն.

–50
0
–49
9
–49
8…
–4
–3
–2
–1 0
12
34

497
498
499

մենք դրանք գրում ենք այսպես.

500
501
502

996
997
998
999
000
001
002
003
004

497
498
499

Ուշադրություն դարձրեք, որ սա ձևավորում է մի շարք շրջանակ: Ամենացածր բացասական թիվը (500)


կարծես շարունակվում է ամենաբարձր դրական թվից (499): Իսկ 999 թիվը (որը իրականում –1 է) զրոյից
մեկով պակաս է։ Եթե 1-ը գումարենք 999-ին, սովորաբար կստանանք 1000: Բայց քանի որ գործ ունենք
միայն երեք թվանշանի հետ, այն իրականում 000 է:
Նշման այս տեսակը կոչվում է տասնի լրացում : Եռանիշ բացասական թիվը տասի լրացման փոխարկելու
համար այն հանում ենք 999-ից և ավելացնում 1։ Օրինակ՝ տասի լրացման մեջ –255 գրելու համար այն
999-ից հանեք և ստացեք 744, ապա գումարեք 1 և ստացեք 745:
Դուք հավանաբար լսել եք, որ ասում են, որ «հանումը պարզապես գումարում է բացասական թվերի
օգտագործմամբ»: Ինչին, հավանաբար, պատասխանել եք՝ «Այո, բայց դուք դեռ պետք է հանեք դրանք»: Դե,
օգտագործելով տասնյակի լրացումը, դուք ընդհանրապես չեք հանում թվերը: Ամեն ինչ հավելում է։
Ենթադրենք, որ դուք ունեք 143 ԱՄՆ դոլարի ընթացիկ հաշվի մնացորդ: Դուք գրում եք 78 դոլարի չեկ: Դա
նշանակում է, որ դուք պետք է բացասական 78 դոլար ավելացնեք 143 դոլարին: Տասնյակի լրացման մեջ
–78-ը գրված է որպես 999 –078 + 1 կամ 922: Այսպիսով, մեր նոր մնացորդը կազմում է $143 + $922,
որը հավասար է (անտեսելով գերհոսքը) $65: Եթե մենք այնուհետև գրում ենք $150 դոլարի չեկ, ապա պետք
է ավելացնենք –150, որը տասներկու լրացման մեջ հավասար է 850-ի: Այսպիսով, մեր նախորդ մնացորդը՝
065 գումարած 850, հավասար է 915-ի՝ մեր նոր մնացորդի: Սա իրականում համարժեք է –$85-ին:
Երկուականում համարժեք համակարգը կոչվում է երկուսի լրացում : Ենթադրենք, որ մենք աշխատում ենք
8-բիթանոց թվերի հետ։ Դրանք տատանվում են 00000000-ից մինչև 11111111, որոնք սովորաբար
համապատասխանում են 0-ից 255 տասնորդական թվերին: Բայց եթե դուք նույնպես ցանկանում եք
արտահայտել բացասական թվեր, ապա յուրաքանչյուր 8-բիթանոց թիվ, որը սկսվում է 1-ով, իրականում
կներկայացնի բացասական թիվ, ինչպես ցույց է տրված հետևյալ աղյուսակում: :

Տաս
Երկո նորդ
ւակ ակա
ան ն
100

000
128
00
100

000
127
01
100

000
126
10
100

000
125
11

111
111 -3
01
111
111 -2
10
111
111 -1
11
000
000 0
00
000
000 1
01
000
000 2
10

011
111 124
00
011
111 125
01
011
111 126
10
011
111 127
11

Թվերի շրջանակը, որը դուք կարող եք ներկայացնել, այժմ սահմանափակված է –128-ից մինչև +127:
Առավել նշանակալից (ամենաձախ) բիթը հայտնի է որպես նշանի բիթ : Նշանի բիթը 1 է բացասական թվերի
համար, իսկ 0՝ դրական թվերի համար։
Երկուսի լրացումը հաշվարկելու համար նախ հաշվե՛ք մեկերի լրացումը, այնուհետև ավելացրեք 1: Սա
համարժեք է բոլոր թվանշանները շրջելու և 1-ի գումարմանը: Օրինակ, 125 տասնորդական թիվը
01111101 է: Երկուսի լրացման մեջ –125 արտահայտելու համար նախ շրջեք 01111101 թվանշանները
ստանալու համար 10000010, այնուհետև ավելացրեք 1 և ստացեք 10000011: Դուք կարող եք ստուգել
արդյունքը՝ օգտագործելով նախորդ աղյուսակը: Հետ գնալու համար արեք նույնը` շրջեք բոլոր բիթերը և
ավելացրեք 1:
Այս համակարգը մեզ հնարավորություն է տալիս արտահայտել դրական և բացասական թվեր՝ առանց
բացասական նշաններ օգտագործելու։ Այն նաև թույլ է տալիս մեզ ազատորեն ավելացնել դրական և
բացասական թվեր՝ օգտագործելով միայն գումարման կանոնները: Օրինակ, եկեք ավելացնենք –127 և 124-ի
երկուական համարժեքները: Օգտագործելով նախորդ աղյուսակը որպես խաբեության թերթիկ, սա պարզապես

Արդյունքը տասնորդականով համարժեք է –3-ին:


Այստեղ դուք պետք է ուշադրություն դարձնեք վարարման և ներհոսքի պայմաններին: Դա այն դեպքում, երբ
գումարման արդյունքը 127-ից մեծ է կամ –128-ից փոքր: Օրինակ, ենթադրենք, որ ինքն իրեն ավելացնում եք
125.
Քանի որ բարձր բիթը դրված է 1-ի, արդյունքը պետք է մեկնաբանվի որպես բացասական թիվ,
մասնավորապես –6-ի երկուական համարժեք: Նման մի բան տեղի է ունենում, երբ –125-ը ավելացվում է
ինքն իրեն.

Մենք ի սկզբանե որոշեցինք, որ սահմանափակվում ենք 8-բիթանոց թվերով, ուստի արդյունքի ամենաձախ
թվանշանը պետք է անտեսվի: Աջ 8 բիթերը համարժեք են +6-ի:
Ընդհանուր առմամբ, դրական և բացասական թվեր պարունակող գումարման արդյունքը անվավեր է, եթե երկու
օպերանդների նշանի բիթերը նույնն են, բայց արդյունքի նշանի բիթերը տարբեր են:
Այժմ մենք ունենք երկուական թվերի օգտագործման երկու տարբեր եղանակներ: Երկուական թվերը կարող են
լինել կամ ստորագրված կամ անստորագիր : Չստորագրված 8-բիթանոց թվերը տատանվում են 0-ից մինչև
255: Ստորագրված 8-բիթանոց համարները տատանվում են –128-ից մինչև 127: Թվերի մասին ոչինչ չի
ասի, թե արդյոք դրանք ստորագրված են, թե անստորագիր: Օրինակ, ենթադրենք, ինչ-որ մեկն ասում է. «Ես
ունեմ 8-բիթանոց երկուական թիվ, և արժեքը 10110110 է: Ո՞րն է տասնորդական համարժեքը»: Դուք նախ
պետք է հետաքրքրվեք. «Ստորագրվա՞ծ է, թե՞ անստորագիր թիվ, կարող է լինել –74 կամ 182»:
Սա բիթերի խնդիրն է. դրանք զրո և մեկ են և ձեզ ոչինչ չեն ասում իրենց մասին :
Գլուխ 14. Հետադարձ կապ և ֆլիպ-ֆլոպներ
Բոլորը գիտեն, որ էլեկտրականությունը ստիպում է իրերը շարժվել: Սովորական տան շուրջ կարճ հայացք
նետելը բացահայտում է էլեկտրական շարժիչներ այնպիսի սարքերում, ինչպիսիք են ժամացույցները,
օդափոխիչները, սննդի մշակողները և կոմպակտ սկավառակի նվագարկիչները: Էլեկտրականությունը նաև
ստիպում է բարձրախոսների կոնները թրթռալ՝ առաջացնելով ձայներ, խոսք և երաժշտություն ստերեո
համակարգից և հեռուստացույցից: Բայց թերևս ամենապարզ և էլեգանտ ձևը, որով էլեկտրականությունը
ստիպում է իրերը շարժվել, ցուցադրվում է սարքերի մի դասով, որոնք արագորեն անհետանում են, երբ դրանք
փոխարինում են էլեկտրոնային գործընկերները: Ես անդրադառնում եմ սքանչելի ռետրո էլեկտրական
ազդանշաններին և զանգերին:
Դիտարկենք ռելեը, որը միացված է այս կերպ անջատիչով և մարտկոցով.

Եթե սա ձեզ մի փոքր տարօրինակ է թվում, դուք չեք պատկերացնում բաներ: Մենք դեռ չենք տեսել ռելե, որը
միացված է այսքանին: Սովորաբար ռելեն լարով է, որպեսզի մուտքն անջատված լինի ելքից: Այստեղ ամեն
ինչ մեկ մեծ շրջանակ է: Եթե փակում եք անջատիչը, ապա միացումն ավարտվում է.

Ավարտված միացումն ստիպում է էլեկտրամագնիսին ցած քաշել ճկուն կոնտակտը.


Բայց երբ կոնտակտը փոխում է դիրքը, միացումն այլևս ամբողջական չէ, ուստի էլեկտրամագնիսը կորցնում է
իր մագնիսականությունը, և ճկուն կոնտակտը նորից շրջվում է:

որը, իհարկե, նորից ամբողջացնում է շրջանը։ Այն, ինչ տեղի է ունենում, հետևյալն է. Քանի դեռ անջատիչը
փակ է, մետաղական կոնտակտը ետ ու առաջ է գնում՝ հերթափոխով փակելով շղթան և բացելով այն, ամենայն
հավանականությամբ ձայն է հանում: Եթե կոնտակտը կատաղի ձայն է տալիս, դա բզզոց է: Եթե դրա վրա
մուրճ ամրացնեք և մետաղական գոնգ ապահովեք, ապա կունենաք էլեկտրական զանգի պատրաստում:
Դուք կարող եք ընտրել այս ռելեին միացնելու մի քանի եղանակից՝ ազդանշան ստեղծելու համար: Ահա դա
անելու ևս մեկ եղանակ՝ օգտագործելով սովորական լարման և հողային նշանները.
11-րդ գլխի ինվերտորը : Շղթան կարելի է ավելի պարզ գծել այսպես.

Ինչպես հիշում եք, ինվերտորի ելքը 1 է, եթե մուտքը 0 է, և 0, եթե մուտքը 1 է: Այս շղթայի վրա անջատիչը
փակելը հանգեցնում է նրան, որ ինվերտորի ռելեը հերթափոխով բացվում և փակվում է: Կարող եք նաև
միացնել ինվերտորը առանց անջատիչի, որպեսզի անընդհատ գործի.

Այս նկարը կարող է թվալ, թե տրամաբանական հակասություն է ցույց տալիս, քանի որ ինվերտորի ելքը
ենթադրվում է, որ հակառակ մուտքային է, բայց այստեղ ելքը մուտքն է : Այնուամենայնիվ, հիշեք, որ
ինվերտորն իրականում ընդամենը ռելե է, և ռելեը մի փոքր ժամանակ է պահանջում մի վիճակից մյուսը
փոխելու համար: Այսպիսով, եթե նույնիսկ մուտքը նույնն է, ինչ ելքը, ելքը շուտով կփոխվի՝ դառնալով մուտքի
հակադարձ (որը, իհարկե, փոխում է մուտքը, և այլն, և այլն):
Ո՞րն է այս շղթայի ելքը: Դե, ելքը արագ փոխվում է լարում ապահովելու և լարում չապահովելու միջև: Կամ,
կարելի է ասել, ելքը արագ փոխվում է 0-ի և 1-ի միջև :
Այս շղթան կոչվում է օսլիլատոր : Այն էապես տարբերվում է այն ամենից, ինչ մենք մինչ այժմ դիտարկել
ենք: Նախորդ բոլոր շղթաները փոխել են իրենց վիճակը միայն անջատիչ փակող կամ բացող մարդու
միջամտությամբ։ Օսլիլատորը, սակայն, մարդ չի պահանջում. այն հիմնականում աշխատում է ինքն իրեն:
Իհարկե, մեկուսացված օսլիլատորն այնքան էլ օգտակար չի թվում: Այս գլխում և հաջորդ մի քանի
գլուխներում մենք կտեսնենք, որ այլ սխեմաների հետ կապված նման միացումն ավտոմատացման կարևոր
մասն է: Բոլոր համակարգիչները ունեն ինչ-որ տատանվող, որը ստիպում է մնացած ամեն ինչ շարժվել
համաժամանակյա:
Օսլիլատորի ելքը հերթափոխվում է 0-ի և 1-ի միջև: Այդ փաստը խորհրդանշելու սովորական եղանակն
այսպիսի գծապատկերն է.
Սա հասկացվում է որպես գրաֆիկի տեսակ: Հորիզոնական առանցքը ներկայացնում է ժամանակը, իսկ
ուղղահայացը ցույց է տալիս, թե արդյոք ելքը 0 է, թե 1:

Այս ամենը իսկապես ասում է, որ ժամանակի ընթացքում տատանվող ելքը կանոնավոր կերպով հերթափոխվում
է 0-ի և 1-ի միջև: Այդ պատճառով, տատանվողին երբեմն հաճախ անվանում են ժամացույց, քանի որ
հաշվելով տատանումների քանակը՝ կարող եք որոշել ժամանակը (տեսակի):
Որքա՞ն արագ կաշխատի տատանիչը: Այսինքն՝ ռելեի մետաղական կոնտակտը որքան արագ կթրթռա հետ ու
առաջ։ Քանի՞ անգամ վայրկյանում: Դա ակնհայտորեն կախված է նրանից, թե ինչպես է կառուցված ռելեը:
Հեշտությամբ կարելի է պատկերացնել մի մեծ, ամուր ռելե, որը դանդաղորեն ետ ու առաջ է պտտվում, և
փոքր, թեթև ռելե, որն արագ բզզում է:
Օսլիլատորի ցիկլը սահմանվում է որպես այն միջակայքը, որի ընթացքում տատանվող ելքը փոխվում է և
այնուհետև վերադառնում է այնտեղ, որտեղ սկսվել է .

Մեկ ցիկլի համար պահանջվող ժամանակը կոչվում է օսլիլատորի ժամանակաշրջան ։ Ենթադրենք, որ մենք
դիտարկում ենք որոշակի օսլիլատոր, որն ունի 0,05 վայրկյան պարբերություն: Այնուհետև մենք կարող ենք
հորիզոնական առանցքը պիտակավորել վայրկյանների ընթացքում՝ սկսած որոշ կամայական ժամանակից, որը
մենք նշում ենք որպես 0:

Օսլիլատորի հաճախականությունը 1 բաժանված է պարբերության վրա : Այս օրինակում, եթե տատանվող


պարբերությունը 0,05 վայրկյան է, ապա տատանվող հաճախականությունը 1 ÷ 0,05 է կամ 20 ցիկլ
վայրկյանում : Վայրկյանում քսան անգամ տատանվող ելքը փոխվում է և հետ է փոխվում:
Ցիկլերը վայրկյանում բավականին ինքնըստինքյան տերմին է, որը շատ նման է ժամում մղոնների կամ
ֆունտների մեկ քառակուսի դյույմի կամ կալորիաների մեկ մատուցման համար : Բայց ցիկլերը մեկ
վայրկյանում այլևս շատ չեն օգտագործվում: Ի հիշատակ Հենրիխ Ռուդոլֆ Հերցի (1857–1894), ով
առաջին մարդն էր, ով փոխանցեց և ստացավ ռադիոալիքներ, այժմ դրա փոխարեն օգտագործվում է հերց
բառը։ Այս օգտագործումը սկզբում սկսվել է Գերմանիայում 1920-ականներին, այնուհետև տասնամյակների
ընթացքում ընդլայնվել է այլ երկրներում:
Այսպիսով, մենք կարող ենք ասել, որ մեր oscillator-ն ունի 20 հերց հաճախականություն, կամ (կարճ ասած)
20 Հց:
Իհարկե, մենք պարզապես կռահեցինք մեկ կոնկրետ օսլիլատորի իրական արագությամբ: Այս գլխի ավարտին
մենք կկարողանանք կառուցել մի բան, որը թույլ կտա մեզ իրականում չափել տատանվող արագությունը:
Այս նախաձեռնությունը սկսելու համար եկեք նայենք մի զույգ NOR դարպասներին, որոնք լարերով լարված
են որոշակի ձևով: Դուք կհիշեք, որ NOR դարպասի ելքը լարում է միայն այն դեպքում, եթե երկու մուտքերն էլ
լարումներ չեն.

NO 0 1
R
0 1 0
1 0 0

Ահա մի շղթա երկու NOR դարպասներով, երկու անջատիչներով և լույսի լամպով.

Ուշադրություն դարձրեք տարօրինակ ճեղքված լարերին. ձախ կողմում գտնվող NOR դարպասի ելքը մուտք է
դեպի աջ NOR դարպասը, իսկ աջ NOR դարպասի ելքը մուտք է դեպի ձախ NOR դարպաս: Սա հետադարձ
կապի տեսակ է : Իրոք, ինչպես տատանվում է, ելքը հետ է պտտվում և դառնում մուտքային: Այս
յուրահատկությունը բնորոշ կլինի այս գլխի սխեմաների մեծ մասի համար:
Սկզբում այս շղթայում հոսող միակ հոսանքը ձախ NOR դարպասի ելքից է: Դա պայմանավորված է նրանով,
որ այդ դարպասի երկու մուտքերն էլ 0 են: Այժմ փակեք վերին անջատիչը: Ձախ NOR դարպասից ելքը
դառնում է 0, ինչը նշանակում է, որ աջ NOR դարպասից ելքը դառնում է 1, և լույսի լամպը միանում է.
Կախարդությունը տեղի է ունենում, երբ դուք այժմ բացում եք վերին անջատիչը: Քանի որ NOR դարպասի
ելքը 0 է, եթե մուտքերից որևէ մեկը 1 է, ձախ NOR դարպասի ելքը մնում է նույնը, և լույսը մնում է վառված.

Հիմա սա տարօրինակ է, չե՞ք ասի: Երկու անջատիչներն էլ բաց են, նույնը, ինչ առաջին գծագրում, բայց հիմա
լույսի լամպը միացված է: Այս իրավիճակը, անշուշտ, տարբերվում է այն ամենից, ինչ մենք նախկինում տեսել
ենք: Սովորաբար շղթայի ելքը կախված է բացառապես մուտքերից: Այստեղ կարծես թե այդպես չէ: Ավելին,
այս պահին կարող եք փակել և բացել այդ վերին անջատիչը, և լույսը մնում է վառված։ Այդ անջատիչը
հետագա ազդեցություն չունի շղթայի վրա, քանի որ ձախ NOR դարպասի ելքը մնում է 0:
Այժմ փակեք ստորին անջատիչը: Քանի որ աջ NOR դարպասի մուտքերից մեկն այժմ 1 է, ելքը դառնում է 0,
իսկ լամպը մարվում է: Ձախ NOR դարպասի ելքը դառնում է 1:

Այժմ դուք կարող եք բացել ներքևի անջատիչը, և լույսի լամպը անջատված է մնում.
Մենք վերադարձել ենք այնտեղ, որտեղ սկսել ենք: Այս պահին դուք կարող եք փակել և բացել ներքևի
անջատիչը՝ առանց որևէ այլ ազդեցության լամպի վրա: արդյունքում
● Վերին անջատիչի փակումը հանգեցնում է նրան, որ լամպը միանում է, և այն մնում է միացված,
երբ վերին անջատիչը բացվում է:
● Ներքևի անջատիչի փակումը հանգեցնում է նրան, որ լույսի լամպը անջատվում է, և այն
անջատված է մնում, երբ ներքևի անջատիչը բացվում է:
Այս շղթայի տարօրինակությունն այն է, որ երբեմն, երբ երկու անջատիչները բաց են, լույսը միացված է, և
երբեմն, երբ երկու անջատիչները բաց են, լույսն անջատված է: Կարելի է ասել, որ այս շղթան ունի երկու
կայուն վիճակ , երբ երկու անջատիչները բաց են։ Նման շղթան կոչվում է մատով խփել , բառ, որն
օգտագործվում է նաև լողափի սանդալների և քաղաքական գործիչների մարտավարության համար:
Ֆլիփ-ֆլոպը թվագրվում է 1918 թվականից՝ անգլիացի ռադիոֆիզիկոս Ուիլյամ Հենրի Էքկլսի
(1875–1966) և FW Jordan-ի (որոնց մասին կարծես թե շատ բան հայտնի չէ) աշխատություններով։
Flip-flop սխեման պահպանում է տեղեկատվություն : Այն «հիշում է». Մասնավորապես, նախկինում
ցուցադրված flip-flop-ը հիշում է, թե որ անջատիչն է վերջին անգամ փակվել: Եթե ձեր
ճանապարհորդության ընթացքում պատահաբար հանդիպեք նման մատների վրա և տեսնեք, որ լույսը միացված
է, կարող եք ենթադրել, որ դա վերին անջատիչն էր, որը վերջերս փակվել էր. եթե լույսն անջատված է,
ստորին անջատիչը վերջերս փակվել է:
Շրջանակը շատ նման է սղոցի: Ճանապարհային սղոցն ունի երկու կայուն վիճակ՝ երբեք երկար չմնալով այդ
անկայուն միջին դիրքում: Ճանապարհին նայելուց դուք միշտ կարող եք պարզել, թե որ կողմն է ամենավերջին
ցած նետվել:
Թեև դա դեռևս չի երևում, բայց ֆլիպ-ֆլոպները կարևոր գործիքներ են: Նրանք հիշողություն են
ավելացնում սխեմայի մեջ, որպեսզի այն պատմի, թե ինչ է եղել նախկինում: Պատկերացրեք՝ փորձում եք
հաշվել, եթե ոչինչ չեք հիշում: Դուք չէիք իմանա, թե ինչ թվի եք հասել, և ինչ թիվ է հաջորդում: Նմանապես,
շղթան , որը հաշվում է (որը ես ձեզ ցույց կտամ ավելի ուշ այս գլխում) կարիք ունեն ֆլիպ-ֆլոպների:
Գոյություն ունեն մի քանի տարբեր տեսակի ֆլիպ-ֆլոպներ: Այն, ինչ ես հենց նոր ցույց տվեցի,
ամենապարզն է և կոչվում է RS (կամ Reset-Set) flip-flop: Երկու NOR դարպասներն ավելի հաճախ
գծվում և պիտակվում են, ինչպես հաջորդ էջի վերևի գծապատկերում՝ դրան սիմետրիկ տեսք հաղորդելու
համար:
Արդյունքը, որը մենք օգտագործում էինք լամպի համար, ավանդաբար կոչվում է Q: Բացի այդ, կա երկրորդ
ելք, որը կոչվում է (արտասանվում է Q բար ), որը հակառակ է Q-ին: Եթե Q-ն 0 է, ապա 1 է և
հակառակը: Երկու մուտքերը կոչվում են S՝ set-ի համար և R՝ վերակայման համար : Դուք կարող եք մտածել
այս բայերի մասին, որոնք նշանակում են «Q-ն սահմանել 1-ին» և «վերակայել Q-ն 0-ի»: Երբ S-ը 1 է (որը
համապատասխանում է նախորդ գծապատկերում վերին անջատիչը փակելուն), Q-ն դառնում է 1 և
դառնում 0: Երբ R-ը 1 է (համապատասխանում է ավելի վաղ գծապատկերում ներքևի անջատիչը փակելուն),
Q դառնում է 0 և դառնում 1: երկու մուտքերն էլ 0 են, ելքը ցույց է տալիս, արդյոք Q-ն վերջին անգամ
դրվել է, թե՞ վերակայվել է: Այս արդյունքներն ամփոփված են հետևյալ աղյուսակում.

Մու Արդյ
տքա ունք
գրու ներ
մներ

Ս Ռ Ք

1 0 1 0
0 1 0 1

0 0 Ք

Արգ
1 1 ելվա
ծէ

Սա կոչվում է ֆունկցիաների աղյուսակ կամ տրամաբանական աղյուսակ կամ ճշմարտության աղյուսակ : Այն
ցույց է տալիս ելքերը, որոնք առաջանում են մուտքերի որոշակի համակցություններից: Քանի որ RS
flip-flop-ում կա ընդամենը երկու մուտք, մուտքերի համակցությունների թիվը չորսն է: Սրանք
համապատասխանում են վերնագրերի տակ գտնվող աղյուսակի չորս տողերին:
Ուշադրություն դարձրեք ներքևից երկրորդ տողին, երբ S-ը և R-ը երկուսն էլ 0 են: Արդյունքները նշված են
որպես Q և : Սա նշանակում է, որ Q-ն և ելքերը մնում են այն, ինչ եղել են մինչև S և R մուտքերը
դառնալը 0: Աղյուսակի վերջին տողը ցույց է տալիս, որ իրավիճակը, երբ S և R մուտքերը երկուսն էլ 1 են,
արգելված է կամ անօրինական : Սա չի նշանակում, որ դուք կկալանավորվեք դա անելու համար, բայց եթե այս
շղթայում երկու մուտքերն էլ 1 են, երկու ելքերը 0 են, ինչը խախտում է Q-ի հակառակը լինելու գաղափարը:
Այսպիսով, երբ դուք նախագծում եք միացում, որն օգտագործում է RS flip-flop, խուսափեք
իրավիճակներից, երբ S և R մուտքերը երկուսն էլ 1 են:
RS flip-flop-ը հաճախ գծվում է որպես փոքրիկ տուփ, որի երկու մուտքերն ու երկու ելքերը պիտակավորված
են այսպես.

RS flip-flop-ը, անշուշտ, հետաքրքիր է որպես շղթայի առաջին օրինակ, որը կարծես «հիշում» է, թե երկու
մուտքերից որն է վերջին անգամ լարումը: Այն, ինչ պարզվում է, շատ ավելի օգտակար է, այնուամենայնիվ, մի
սխեմա է, որը հիշում է, թե արդյոք որոշակի ազդանշանը եղել է 0 կամ 1 ժամանակի որոշակի կետում :
Եկեք մտածենք, թե ինչպես պետք է վարվի նման միացում, նախքան իրականում փորձենք այն կառուցել: Այն
կունենա երկու մուտք: Եկեք նրանցից մեկին անվանենք Data : Ինչպես բոլոր թվային ազդանշանները,
Տվյալների մուտքագրումը կարող է լինել 0 կամ 1: Եկեք մյուսին անվանենք Hold That Bit , որը թվային
համարժեքն է այն մարդուն, որն ասում է «Պահիր այդ միտքը»: Սովորաբար Hold That Bit ազդանշանը 0 է,
որի դեպքում Տվյալների ազդանշանը չի ազդում շղթայի վրա: Երբ Hold That Bit-ը 1 է, միացումն
արտացոլում է Տվյալների ազդանշանի արժեքը: Hold That Bit ազդանշանն այնուհետև կարող է
վերադառնալ 0, այդ ժամանակ միացումը հիշում է տվյալների ազդանշանի վերջին արժեքը: Տվյալների
ազդանշանի ցանկացած փոփոխություն հետագա ազդեցություն չունի:
Այլ կերպ ասած, մենք ուզում ենք մի բան, որն ունի հետևյալ գործառույթների աղյուսակը.

Մու Արդյ
տքա ունք
գրու ներ
մներ
Պահ
Տվյ
իր
ալնե Ք
այդ
ր
բիթը
0 1 0
1 1 1
0 0 Ք
1 0 Ք

Առաջին երկու դեպքերում, երբ Hold That Bit ազդանշանը 1 է, Q ելքը նույնն է, ինչ Տվյալների
մուտքագրումը։ Երկրորդ երկու դեպքերում, երբ Hold That Bit ազդանշանը 0 է, Q ելքը նույնն է, ինչ
նախկինում էր։ Երկրորդ երկու դեպքերում նկատեք, որ երբ Hold That Bit-ը 0 է, Q ելքը նույնն է, անկախ
նրանից, թե որն է տվյալների մուտքագրումը: Ֆունկցիոնալ աղյուսակը կարելի է մի փոքր պարզեցնել,
այսպես.
Մու Արդյ
տքա ունք
գրու ներ
մներ
Պահ
Տվյ
իր
ալնե Ք
այդ
ր
բիթը
0 1 0
1 1 1
X 0 Ք

X-ը նշանակում է «թքած ունենալ»: Կարևոր չէ, թե որն է տվյալների մուտքագրումը, քանի որ եթե Hold
That Bit մուտքագրումը 0 է, Q ելքը նույնն է, ինչ նախկինում էր:
«Hold That Bit» ազդանշանի իրականացումը, որը հիմնված է մեր առկա RS ֆլիպ-ֆլոպի վրա, պահանջում
է, որ մենք մուտքագրման վերջում ավելացնենք երկու AND դարպասներ, ինչպես հաջորդ էջի վերևի
գծապատկերում:

Հիշեցնենք, որ AND դարպասի ելքը 1 է միայն այն դեպքում, եթե երկու մուտքերն էլ 1 են: Այս դիագրամում Q
ելքը 0 է, իսկ ելքը ՝ 1:
Քանի դեռ Hold That Bit ազդանշանը 0 է, Set ազդանշանը չի ազդում ելքերի վրա.

Նմանապես, Վերականգնման ազդանշանը ազդեցություն չունի.


Միայն այն դեպքում, երբ Hold That Bit ազդանշանը 1 է, այս սխեման կգործի նույն կերպ, ինչպես
նախկինում ցուցադրված սովորական RS ֆլիպ-ֆլոպը.

Այն իրեն պահում է սովորական RS ֆլիպ-ֆլոպի նման, քանի որ այժմ վերին AND դարպասի ելքը նույնն է,
ինչ Reset ազդանշանը, իսկ ստորին AND դարպասի ելքը նույնն է, ինչ Set ազդանշանը:
Բայց մենք դեռ չենք հասել մեր նպատակին։ Մենք ուզում ենք միայն երկու մուտքագրում, ոչ թե երեք: Ինչպե՞ս
է դա արվում: Եթե հիշում եք RS flip-flop-ի սկզբնական գործառույթների աղյուսակը, այն դեպքը, երբ Set-ը
և Reset-ը երկուսն էլ 1-ն էին, արգելված էր, ուստի մենք ցանկանում ենք խուսափել դրանից: Եվ շատ իմաստ
չունի, որ Set և Reset ազդանշաններն այժմ երկուսն էլ լինեն 0, քանի որ դա պարզապես այն դեպքն է, երբ
ելքը չի փոխվել: Մենք կարող ենք նույն բանն իրականացնել այս շղթայում՝ Hold That Bit-ը դնելով 0-ի:
Այսպիսով, իմաստ ունի, որ եթե Set-ը 1 է, Reset-ը 0 է; և եթե Set-ը 0 է, Reset-ը 1 է: Տվյալներ կոչվող
ազդանշանը կարող է համարժեք լինել Set-ին, իսկ տվյալների շրջված ազդանշանը կարող է լինել Reset
ազդանշան.
Այս դեպքում երկու մուտքերն էլ 0 են, իսկ Q ելքը՝ 0 (ինչը նշանակում է, որ 1 է)։ Քանի դեռ Hold That
Bit-ը 0 է, Տվյալների մուտքագրումը չի ազդում շղթայի վրա.

Բայց երբ Hold That Bit-ը 1 է, շղթան արտացոլում է Տվյալների մուտքագրման արժեքը.

Q ելքը այժմ նույնն է, ինչ Տվյալների մուտքագրումը, և հակառակն է: Այժմ Hold That Bit-ը կարող է
վերադառնալ 0:

Շղթան այժմ հիշում է Տվյալների արժեքը, երբ Hold That Bit-ը վերջին 1-ն էր, անկախ նրանից, թե ինչպես
է փոխվում տվյալները: Տվյալների ազդանշանը կարող է, օրինակ, վերադառնալ 0՝ առանց ելքի վրա
ազդեցության.
Այս սխեման կոչվում է մակարդակով գործարկվող D-տիպի ֆլիպ-ֆլոպ : D- ն նշանակում է Տվյալներ:
Level-triggered նշանակում է, որ flip-flop-ը պահպանում է Տվյալների մուտքագրման արժեքը, երբ Hold
That Bit մուտքագրումը գտնվում է որոշակի մակարդակի վրա , այս դեպքում՝ 1: (Մենք շուտով
կանդրադառնանք մակարդակով գործարկվող flip-flops-ի այլընտրանքին: )
Սովորաբար, երբ գրքում հայտնվում է նման միացում, մուտքագրումը չի պիտակավորված Hold That Bit:
Այն սովորաբար կոչվում է Ժամացույց : Իհարկե, այս ազդանշանն իսկական ժամացույց չէ, բայց երբեմն այն
կարող է ունենալ ժամացույցի նման հատկանիշներ, ինչը նշանակում է, որ այն կարող է կանոնավոր կերպով
ետ ու առաջ անցնել 0-ի և 1-ի միջև: Բայց առայժմ Ժամացույցի մուտքագրումը պարզապես ցույց է տալիս,
թե երբ պետք է պահպանվի Տվյալների մուտքագրումը.

Եվ սովորաբար, երբ ցուցադրվում է ֆունկցիաների աղյուսակը, Տվյալները կրճատվում են որպես D , իսկ


Ժամացույցը կրճատվում է որպես Clk :

Մու Արդյ
տքա ունք
գրու ներ
մներ
Q-բ
Դ Կլկ Ք
ար
0 1 0 1
1 1 1 0
Q-բ
X 0 Ք
ար
Այս շղթան հայտնի է նաև որպես մակարդակով գործարկվող D-տիպի սողնակ , և այդ տերմինը պարզապես
նշանակում է, որ սխեման միանում է տվյալների մեկ բիթին և պահում այն հետագա օգտագործման համար:
Շղթան կարելի է անվանել նաև 1-բիթանոց հիշողություն : Ես ցույց կտամ 16-րդ գլխում, թե այս
ֆլիպ-ֆլոպներից որքան շատերը կարող են միացված լինել միասին, որպեսզի ապահովեն հիշողության շատ
բիթ:
Սողնակներում բազմաբիթ արժեք պահելը հաճախ օգտակար է: Ենթադրենք, որ ցանկանում եք օգտագործել
12-րդ գլխի ավելացման մեքենան՝ երեք 8-բիթանոց թվեր միասին ավելացնելու համար: Դուք պետք է
մուտքագրեք առաջին համարը անջատիչների առաջին փաթեթում, իսկ երկրորդ համարը անջատիչների
երկրորդ փաթեթում, ինչպես միշտ, բայց հետո պետք է գրեք արդյունքը: Այնուհետև դուք պետք է մուտքագրեք
այդ արդյունքը մի շարք անջատիչների վրա, իսկ երրորդ համարը մուտքագրեք մյուս անջատիչների վրա: Դուք
իսկապես չպետք է ունենաք միջանկյալ արդյունք: Դուք պետք է կարողանաք այն օգտագործել անմիջապես
առաջին հաշվարկից:
Եկեք լուծենք այս խնդիրը սողնակների միջոցով: Եկեք հավաքենք ութ սողնակ տուփի մեջ: Ութ սողնակներից
յուրաքանչյուրն օգտագործում է երկու NOR դարպասներ և երկու AND դարպասներ և մեկ ինվերտոր,
ինչպես ցույց է տրված նախկինում: Ժամացույցի մուտքերը բոլորը միացված են: Ահա արդյունքի փաթեթը.

Այս սողնակը կարող է խնայել միանգամից 8 բիթ: Վերևի ութ մուտքերը պիտակավորված են D 0- ից մինչև D
7 , իսկ ներքևի ութ ելքերը պիտակավորված են Q 0- ից մինչև Q 7 : Ձախ կողմում մուտքագրվածը Ժամացույցն
է: Ժամացույցի ազդանշանը սովորաբար 0 է: Երբ Ժամացույցի ազդանշանը 1 է, D մուտքերի 8 բիթ արժեքը
փոխանցվում է Q ելքերին: Երբ Ժամացույցի ազդանշանը վերադառնում է 0-ի, այդ 8-բիթանոց արժեքը մնում
է այնտեղ մինչև հաջորդ անգամ, երբ Ժամացույցի ազդանշանը կլինի 1:
8-բիթանոց սողնակը կարող է գծվել նաև ութ Տվյալների մուտքերով և ութ Q ելքերով՝ խմբավորված միասին,
ինչպես տեսնում եք հաջորդ էջում:

Ահա 8-բիթանոց հավելիչը.


Սովորաբար (անտեսելով այն, ինչ արեցինք հանումով վերջին գլխում), ութ A մուտքերը և ութ B մուտքերը
միացված են անջատիչներին, CI (Carry In) մուտքը միացված է գետնին, իսկ ութ S (Sum) ելքերը և CO (
Իրականացնել) միացված են լամպերին:
Այս վերանայված տարբերակում 8-բիթանոց ավելացնողի ութ S ելքերը կարող են միացված լինել ինչպես
լույսի լամպերին, այնպես էլ 8-բիթանոց սողնակի D մուտքերին: Պահպանել պիտակավորված անջատիչը
կարող է լինել սողնակների Ժամացույցի մուտքագրումը՝ արդյունքը հավաքողից փրկելու համար.

2-Line-to-1-Line Selector պիտակավորված վանդակը թույլ է տալիս անջատիչով ընտրել՝ արդյոք


ցանկանում եք, որ B մուտքերը գումարողին գան անջատիչների երկրորդ շարքից, թե՞ սողնակների Q ելքերից:
Դուք փակում եք անջատիչը՝ 8-բիթանոց սողնակից ելքերը ընտրելու համար: 2-տողից 1-տող ընտրիչը
օգտագործում է հետևյալ սխեմաներից ութը.

Եթե Select մուտքագրումը 1 է, ապա OR դարպասի ելքը նույնն է, ինչ B մուտքը: Դա պայմանավորված է
նրանով, որ վերևի AND դարպասի ելքը նույնն է, ինչ B մուտքը, իսկ ներքևի AND դարպասի ելքը 0 է:
Նմանապես, եթե Select մուտքագրումը 0 է, ելքը նույնն է, ինչ A մուտքագրումը: Սա ամփոփված է հետևյալ
գործառույթների աղյուսակում.

Մու Արդյ
տքա ունք
գրու ներ
մներ
Ընտ
Ա Բ Ք
րել
0 0 X 0
0 1 X 1
1 x 0 0
1 x 1 1

Վերանայված ավելացման մեքենայի մեջ ցուցադրված տուփը ներառում է այս 1-բիթանոց ընտրիչներից ութը:
Ընտրել բոլոր մուտքերը միացված են միասին:
Այս վերանայված ավելացնող մեքենան այնքան էլ լավ չի մշակում «Cry Out» ազդանշանը: Եթե երկու թվերի
գումարումը հանգեցնում է այն բանին, որ «Cry Out» ազդանշանը լինի 1, ապա ազդանշանն անտեսվում է,
երբ հաջորդ թիվը ավելացվում է: Հնարավոր լուծումներից մեկն այն է, որ «Ավելացնողը», «Սողնակը» և
«Ընտրիչը» լինեն բոլոր 16 բիթ լայնությամբ կամ առնվազն: ավելի լայն, քան ամենամեծ գումարը, որը դուք
կհանդիպեք: Ես իսկապես չեմ լուծի այս խնդիրը մինչև 17-րդ գլուխը :
Ավելացնող մեքենայի ավելի հետաքրքիր մոտեցումը վերացնում է ութ անջատիչների մի ամբողջ շարք: Բայց
նախ մենք պետք է մի փոքր փոփոխենք D-տիպի ֆլիպ-ֆլոպը՝ ավելացնելով OR դարպաս և մուտքային
ազդանշան, որը կոչվում է Clear : Clear մուտքագրումը սովորաբար 0 է: Բայց երբ այն 1 է, Q ելքը դառնում
է 0, ինչպես ցույց է տրված այստեղ.
Այս ազդանշանը ստիպում է Q-ին լինել 0՝ անկախ մյուս մուտքային ազդանշաններից՝ փաստորեն մաքրելով
ֆլիպ-ֆլոպը:
Ինչո՞ւ է մեզ դա պետք, կարող եք հարցնել: Ինչու՞ մենք չենք կարող մաքրել ֆլիպ-ֆլոպը՝ Տվյալների
մուտքագրումը դնելով 0-ի, իսկ Ժամացույցի մուտքագրումը 1-ի: Դե, միգուցե մենք չկարողանանք ճշգրիտ
վերահսկել, թե ինչ է կատարվում Տվյալների մուտքագրման մեջ: Միգուցե մենք ունենք այս սողնակներից
ութից բաղկացած մի շարք, որոնք միացված են 8-բիթանոց ավելացնողի ելքերին, այսպես.

«Ավելացնել հիմա » պիտակավորված անջատիչը վերահսկում է սողնակում ժամացույցի մուտքագրումը:


Այս գումարիչը կարող է ավելի հեշտ օգտագործել, քան նախորդը, հատկապես, եթե ձեզ անհրաժեշտ է
ավելացնել թվերի երկար ցուցակ: Դուք սկսում եք սեղմելով Մաքրել անջատիչը: Այդ գործողությունը
հանգեցնում է նրան, որ սողնակների ելքը դառնում է 0՝ անջատելով բոլոր լույսերը և նաև մուտքերի երկրորդ
խումբը սահմանում է 8-բիթանոց հավելիչը բոլոր 0-ների վրա: Մուտքագրում եք առաջին համարը և սեղմում
«Ավելացնել» կոճակը: Այդ թիվը հայտնվում է լույսերի վրա։ Այնուհետև մուտքագրեք երկրորդ համարը և
կրկին սեղմեք Ավելացնել կոճակը: Անջատիչների կողմից ստեղծված թիվը ավելացվում է նախորդ
ընդհանուրին, և այն հայտնվում է լույսերի վրա: Պարզապես շարունակեք մուտքագրել ավելի շատ թվեր և
սեղմել Ավելացնել անջատիչը:
Ես ավելի վաղ նշել էի, որ մեր նախագծած D-տիպի ֆլիպ-ֆլոպը մակարդակով գործարկվել է : Սա
նշանակում է, որ Ժամացույցի մուտքագրումը պետք է փոխի իր մակարդակը 0-ից մինչև 1, որպեսզի
տվյալների մուտքագրման արժեքը պահվի սողնակում: Բայց այն ժամանակահատվածում, երբ Ժամացույցի
մուտքագրումը 1 է, Տվյալների մուտքագրումը կարող է փոխվել. Տվյալների մուտքագրման ցանկացած
փոփոխություն, մինչդեռ Ժամացույցի մուտքագրումը 1 է, կարտացոլվի Q-ի և ելքերի արժեքներում :
Որոշ ծրագրերի համար միանգամայն բավարար է մակարդակով գործարկվող Ժամացույցի մուտքագրումը:
Սակայն այլ հավելվածների համար նախընտրելի է «Clock» մուտքագրումը , որը գործարկվում է եզրով :
Եզրային ձգան հանգեցնում է ելքերի փոփոխմանը միայն այն ժամանակ, երբ Ժամացույցը անցում է
կատարում 0-ից 1-ի : Ինչպես մակարդակով գործարկվող flip-flop-ի դեպքում, երբ Ժամացույցի
մուտքագրումը 0 է, Տվյալների մուտքագրման ցանկացած փոփոխություն չի ազդում ելքերի վրա: Եզրային
գործարկվող ֆլիպ-ֆլոպի տարբերությունն այն է, որ Տվյալների մուտքագրման փոփոխությունները նույնպես
չեն ազդում ելքերի վրա, երբ Ժամացույցի մուտքագրումը 1 է: Տվյալների մուտքագրումը ազդում է
արդյունքների վրա միայն այն պահին, երբ Ժամացույցը փոխվում է 0-ից 1-ի:
Եզրային գործարկվող D-տիպի ֆլիպ-ֆլոպը կառուցված է RS ֆլիպ-ֆլոպների երկու փուլից՝ միացված
այսպես.

Այստեղ գաղափարն այն է, որ Ժամացույցի մուտքագրումը վերահսկում է և՛ առաջին, և՛ երկրորդ փուլը: Բայց
ուշադրություն դարձրեք, որ առաջին փուլում ժամացույցը շրջված է: Սա նշանակում է, որ առաջին փուլն
աշխատում է ճիշտ այնպես, ինչպես D-տիպի ֆլիպ-ֆլոպը, բացառությամբ, որ Տվյալների մուտքագրումը
պահվում է, երբ Ժամացույցը 0 է: Երկրորդ փուլի ելքերը մուտքեր են առաջին փուլին, և դրանք պահվում են,
երբ Ժամացույցը գտնվում է: 1. Ընդհանուր արդյունքն այն է, որ Տվյալների մուտքագրումը պահպանվում է,
երբ Ժամացույցը փոխվում է 0-ից 1-ի:
Եկեք ավելի սերտ նայենք: Ահա ֆլիպ-ֆլոպը հանգստի վիճակում՝ և՛ Տվյալների, և՛ Ժամացույցի մուտքերը 0,
և Q ելքը՝ 0:
Այժմ փոխեք տվյալների մուտքագրումը 1:

Սա փոխում է առաջին flip-flop փուլը, քանի որ շրջված Ժամացույցի մուտքագրումը 1 է: Բայց երկրորդ
փուլը մնում է անփոփոխ, քանի որ չշրջված Ժամացույցի մուտքագրումը 0 է: Այժմ փոխեք Ժամացույցի
մուտքագրումը 1-ի:
Սա հանգեցնում է երկրորդ փուլի փոփոխության, և Q ելքը դառնում է 1: Տարբերությունն այն է, որ
Տվյալների մուտքագրումն այժմ կարող է փոխվել (օրինակ, վերադառնալ 0-ի), առանց ազդելու Q ելքի վրա.

Q-ն և ելքերը կարող են փոխվել միայն այն պահին, երբ Ժամացույցի մուտքագրումը փոխվում է 0-ից 1-ի:
Edge-triggered D-type flip-flop-ի գործառույթների աղյուսակը պահանջում է նոր խորհրդանիշ, որը
վերև ուղղված սլաք է (↑): Այս նշանը ցույց է տալիս ազդանշան, որը անցում է կատարում 0-ից 1:

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

0 ↑ 0 1
1 ↑ 1 0
X 0 Ք

Սլաքը ցույց է տալիս, որ Q ելքը դառնում է նույնը, ինչ Տվյալների մուտքագրումը, երբ Ժամացույցը անցում է
կատարում 0-ից 1-ի: Սա հայտնի է որպես Ժամացույցի ազդանշանի դրական անցում : ( Բացասական
անցումը 1-ից 0-ի անցումն է:) Flip-flop-ն ունի այսպիսի դիագրամ.

Փոքր անկյան փակագիծը ցույց է տալիս, որ մատնահարդարիչը միացված է եզրին:


Այժմ ես ուզում եմ ձեզ ցույց տալ մի շղթա, որն օգտագործում է եզրային գործարկման D-տիպի ֆլիպ-ֆլոպը,
որը դուք չեք կարող կրկնօրինակել մակարդակով գործարկվող տարբերակի հետ: Դուք կհիշեք տատանվողը,
որը մենք կառուցեցինք այս գլխի սկզբում: Օքսիլյատորի ելքը փոփոխվում է 0-ից 1-ի միջև.

Եկեք միացնենք թրթռիչի ելքը եզրային D տիպի ֆլիպ-ֆլոպի ժամացույցի մուտքագրմանը: Եվ եկեք միացնենք
ելքը D մուտքագրին.

Flip-flop-ի ելքը ինքնին մուտք է flip-flop-ին: Դա արձագանք է հետադարձ կապի վրա: (Գործնականում սա
կարող է խնդիր առաջացնել: Օսցիլյատորը կառուցված է ռելեից, որը պտտվում է ետ ու առաջ որքան կարող է
արագ: Օսլիլատորի ելքը միացված է այն ռելեներին, որոնք կազմում են ֆլիպ-ֆլոպը: Այս մյուս ռելեները
գուցե չկարողանա պահպանել տատանվող արագությունը: Այս խնդիրներից խուսափելու համար ենթադրենք,
որ տատանվողում օգտագործվող ռելեը շատ ավելի դանդաղ է, քան այս սխեմաների այլ վայրերում
օգտագործվող ռելեները:)
Տեսնելու համար, թե ինչ է տեղի ունենում այս շղթայում, եկեք նայենք ֆունկցիայի աղյուսակին, որը ցույց է
տալիս տարբեր փոփոխությունները: Սկզբում ասենք, որ Ժամացույցի մուտքագրումը 0 է, իսկ Q ելքը՝ 0: Դա
նշանակում է, որ ելքը 1 է, որը միացված է D մուտքագրին.

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք
1 0 0 1

Երբ Ժամացույցի մուտքագրումը փոխվում է 0-ից 1-ի, Q ելքը կդառնա նույնը, ինչ D մուտքագրումը.

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

1 0 0 1
1 ↑ 1 0

Բայց քանի որ ելքը փոխվում է 0-ի, D մուտքագրումը նույնպես կփոխվի 0-ի: Ժամացույցի մուտքագրումն
այժմ 1 է:

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

1 0 0 1
1 ↑ 1 0
0 1 1 0

Ժամացույցի մուտքագրումը վերածվում է 0-ի՝ առանց ելքերի վրա ազդելու.

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

1 0 0 1
1 ↑ 1 0
0 1 1 0
0 0 1 0

Այժմ Ժամացույցի մուտքագրումը կրկին փոխվում է 1-ի: Քանի որ D մուտքագրումը 0 է, Q ելքը դառնում է 0,
իսկ ելքը՝ 1:
Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

1 0 0 1
1 ↑ 1 0
0 1 1 0
0 0 1 0
0 ↑ 0 1

Այսպիսով, D մուտքագրումը նույնպես դառնում է 1:

Մու Արդյ
տքա ունք
գրու ներ
մներ

Դ Կլկ Ք

1 0 0 1
1 ↑ 1 0
0 1 1 0
0 0 1 0
0 ↑ 0 1
1 1 0 1

Այն, ինչ տեղի է ունենում այստեղ, կարելի է ամփոփել շատ պարզ. Ամեն անգամ, երբ Ժամացույցի
մուտքագրումը փոխվում է 0-ից 1-ի, Q ելքը փոխվում է կամ 0-ից 1-ի կամ 1-ից 0-ի: Իրավիճակն ավելի
պարզ է, եթե նայենք ժամանակի գծապատկերին.

Երբ Ժամացույցի մուտքագրումը գնում է 0-ից 1, D-ի արժեքը (որը նույնն է, ինչ ) փոխանցվում է Q-ին,
այդպիսով նաև փոխվում է և D-ն Ժամացույցի մուտքագրման հաջորդ անցման համար 0-ից 1-ի:
Եթե oscillator-ի հաճախականությունը 20 Հց է (ինչը նշանակում է վայրկյանում 20 ցիկլ), ապա Q ելքի
հաճախականությունը դրա կեսն է կամ 10 Հց: Այդ իսկ պատճառով, նման միացում, որի արդյունքում ելքը
ուղղվում է դեպի Flip-flop-ի տվյալների մուտքագրումը, հայտնի է նաև որպես հաճախականության
բաժանարար :
Իհարկե, հաճախականության բաժանարարից ստացված ելքը կարող է լինել մեկ այլ հաճախականության
բաժանարարի ժամացույցի մուտքագրումը՝ հաճախականությունը ևս մեկ անգամ բաժանելու համար: Ահա
դրանցից երեքի դասավորությունը.

Եկեք նայենք չորս ազդանշաններին, որոնք ես պիտակել եմ այդ դիագրամի վերևում.

Ես կխոստովանեմ, որ ես սկսել և ավարտել եմ այս գծապատկերը հարմար տեղում, բայց դրանում ոչ մի


անազնիվ բան չկա. շղթան նորից ու նորից կկրկնի այս օրինաչափությունը: Բայց դուք գիտե՞ք դրա մասին
որևէ ծանոթ բան:
Ես ձեզ հուշում կտամ. Եկեք այս ազդանշանները նշենք 0-ով և 1-ով.
Դեռ տեսնո՞ւմ ես։ Փորձեք դիագրամը պտտել 90 աստիճանով ժամացույցի սլաքի ուղղությամբ և կարդալ
4-բիթանոց թվերը: Նրանցից յուրաքանչյուրը համապատասխանում է տասնորդական թվին 0-ից մինչև 15.

Տաս
Երկո նորդ
ւակ ակա
ան ն
000
0
0
000
1
1
001
2
0
001
3
1
010
4
0
010
5
1
011
6
0
011
7
1
100
8
0
100
9

101
10

101
11

110
12

110
13

111
14

111
15

Այսպիսով, այս շղթան ոչ պակաս բան չի անում, քան երկուական թվերով հաշվելը , և որքան շատ
ֆլիպ-ֆլոպներ ավելացնենք շղթային, այնքան այն կհաշվի: Ես մատնանշեցի 8-րդ գլխում , որ երկուական
թվերի աճող հաջորդականության դեպքում թվանշանների յուրաքանչյուր սյունակ հերթափոխվում է 0-ի և 1-ի
միջև՝ աջ կողմում գտնվող սյունակի հաճախականության կեսով: Հաշվիչը նմանակում է սա: Ժամացույցի
ազդանշանի յուրաքանչյուր դրական անցման ժամանակ հաշվիչի ելքերը աճում են , այսինքն՝ ավելանում են
1-ով:
Եկեք իրար լարենք ութ մատնահետքեր և դնենք տուփի մեջ.

Սա կոչվում է ալիքային հաշվիչ, քանի որ յուրաքանչյուր ֆլիպ-ֆլոպի ելքը դառնում է հաջորդ ֆլիպ-ֆլոպի
ժամացույցի մուտքագրումը: Փոփոխությունները հաջորդաբար անցնում են փուլերի միջով, և վերջում
գտնվող ֆլիպ-ֆլոպները կարող են մի փոքր հետաձգվել փոփոխության մեջ: Ավելի բարդ հաշվիչներ
համաժամանակյա են , որոնցում բոլոր ելքերը փոխվում են միաժամանակ:
Ես պիտակավորել եմ արդյունքները Q 0 -ից մինչև Q 7 : Դրանք դասավորված են այնպես, որ շղթայի առաջին
ֆլիպ-ֆլոպի ելքը (Q 0 ) լինի աջ ծայրում: Այսպիսով, եթե դուք միացնեիք լամպերը այս ելքերին, կարող եք
կարդալ 8-բիթանոց թիվը: Նման հաշվիչի ժամանակային դիագրամը կարող է ցույց տալ բոլոր ութ ելքերը
առանձին, կամ կարող է ցույց տալ դրանք միասին, այսպես.

Ժամացույցի յուրաքանչյուր դրական անցման ժամանակ Q-ի որոշ ելքեր կարող են փոխվել, իսկ որոշները՝ ոչ,
բայց դրանք միասին արտացոլում են աճող երկուական թվեր:
Ես ավելի վաղ այս գլխում ասացի, որ մենք կհայտնաբերենք տատանումների հաճախականությունը որոշելու
ինչ-որ միջոց: Սա այն է. Եթե դուք միացնեք օսլիլատորը 8-բիթանոց հաշվիչի ժամացույցի մուտքագրմանը,
հաշվիչը ձեզ ցույց կտա, թե քանի ցիկլ է անցել տատանվողը: Երբ ընդհանուր թիվը հասնում է 11111111-ի
(255 տասնորդականով), այն վերադառնում է մինչև 00000000: Թերևս այս հաշվիչը օգտագործելու
ամենահեշտ ձևը օսլիլատորի հաճախականությունը որոշելու համար ութ լամպ միացնելն է 8-բիթանոց
հաշվիչի ելքերին: Այժմ սպասեք, մինչև բոլոր ելքերը լինեն 0 (այսինքն, երբ լամպերից ոչ մեկը չի վառվի) և
միացրեք վայրկյանաչափը: Դադարեցրեք վայրկյանաչափը, երբ բոլոր լույսերը նորից մարեն: Դա այն
ժամանակն է, որն անհրաժեշտ է օսլիլատորի 256 ցիկլերի համար: Ասեք, որ դա 10 վայրկյան է: Այսպիսով,
օսլիլատորի հաճախականությունը կազմում է 256 ÷ 10 կամ 25,6 Հց:
Երբ flip-flops-ը ձեռք է բերում առանձնահատկություններ, նրանք նաև բարդանում են: Այս մեկը կոչվում է
եզրային գործարկմամբ D-տիպի ֆլիպ-ֆլոպ՝ նախադրված և հստակ .

Նախադրված և Մաքրել մուտքերը փոխարինում են Ժամացույցի և Տվյալների մուտքագրումները: Սովորաբար


այս երկու մուտքերը 0 են: Երբ Preset մուտքագրումը 1 է, Q դառնում է 1 և դառնում 0: Երբ Clear
մուտքագրումը 1 է, Q դառնում է 0 և դառնում 1: (RS Flip-flop-ի Set և Reset մուտքերի նման, Preset
և Clear-ը չպետք է լինի 1 միաժամանակ:

Մու Արդյ
տքա ունք
գրու ներ
մներ
Նախ
ընտ
Clr Դ Կլկ Ք
րակ
ան
1 0 X X 1 0
0 1 X X 0 1
0 0 0 ↑ 0 1
0 0 1 ↑ 1 0

0 0 X 0 Ք

Եզրային գործարկվող D-տիպի ֆլիպ-ֆլոպի դիագրամը նախադրված և հստակ տեսք ունի հետևյալ կերպ.

Այժմ մենք համոզել ենք հեռագրական ռելեներին գումարել, հանել և հաշվել երկուական թվերով: Սա
բավականին ձեռքբերում է, հատկապես հաշվի առնելով, որ ամբողջ սարքավորումը, որը մենք օգտագործում
էինք, հասանելի էր ավելի քան հարյուր տարի առաջ: Մենք դեռ շատ բան ունենք բացահայտելու: Բայց եկեք
հիմա մի փոքր ընդմիջենք իրերը կառուցելուց և ևս մեկ նայենք թվային հիմքերին:
Գլուխ 15. Բայթեր և վեցանկյուն
տվյալների ուղիների հայեցակարգը : Շղթայի ողջ ընթացքում 8-բիթանոց արժեքները տեղափոխվում են մի
բաղադրիչից մյուսը: Ութ բիթանոց արժեքները մուտքեր են ավելացնողների, սողնակների և տվյալների
ընտրիչների, ինչպես նաև ելքեր այս միավորներից: Ութ բիթային արժեքները նույնպես սահմանվում են
անջատիչներով և ցուցադրվում են լույսի լամպերով: Այսպիսով, այս սխեմաներում տվյալների ուղին ունի 8
բիթ լայնություն : Բայց ինչու՞ 8 բիթ: Ինչու՞ ոչ 6 կամ 7 կամ 9 կամ 10:
12-րդ գլխի սկզբնական ավելացման մեքենայի վրա , որն աշխատում էր 8-բիթանոց արժեքներով: Բայց
իրականում ոչ մի պատճառ չկա, թե ինչու պետք է այն կառուցվեր այդպես: Ութ բիթն այն ժամանակ թվում էր,
թե հարմար քանակություն է . Եվ միգուցե ես պարզապես մի փոքր նենգ էի, քանի որ այժմ խոստովանում եմ, որ
ես գիտեի (և գուցե դուք նույնպես), որ 8 բիթ տվյալները հայտնի են որպես բայթ :
Բայթ բառը առաջացել է IBM-ում, հավանաբար մոտ 1956 թվականին: Բառը ծագել է bite բառից , բայց
գրվել է y-ով , որպեսզի ոչ ոք բառը չշփոթի բիթի հետ : Որոշ ժամանակ բայթը նշանակում էր պարզապես
տվյալների որոշակի ուղու բիթերի քանակը: Սակայն 1960-ականների կեսերին, կապված IBM
System/360-ի (նրանց բիզնես համակարգիչների մեծ համալիրի) զարգացման հետ, բառը սկսեց նշանակել
8 բիթանոց խումբ:
Որպես 8-բիթանոց մեծություն, բայթը կարող է արժեքներ ընդունել 00000000-ից մինչև 11111111: Այս
արժեքները կարող են ներկայացնել դրական ամբողջ թվեր 0-ից մինչև 255, կամ եթե բացասական թվեր
ներկայացնելու համար օգտագործվում են երկու լրացումներ, դրանք կարող են ներկայացնել ինչպես դրական,
այնպես էլ բացասական ամբողջ թվեր: միջակայքը –128-ից մինչև 127: Կամ որոշակի բայթը կարող է
պարզապես ներկայացնել 2 8 կամ 256 տարբեր բաներից մեկը :
Պարզվում է, որ 8-ը, իրոք, բիթերի գեղեցիկ չափ է: Բայթը ճիշտ է, մեկից ավելի ձևերով: Պատճառներից
մեկը, որ IBM-ը ձգվում էր դեպի 8-բիթանոց բայթ, թվերը BCD անունով հայտնի ձևաչափով պահելու
հեշտությունն էր (որը ես նկարագրելու եմ 23-րդ գլխում ): Բայց ինչպես կտեսնենք հաջորդ գլուխներում,
միանգամայն պատահականորեն բայտը իդեալական է տեքստը պահելու համար, քանի որ գրավոր լեզուների
մեծ մասը ամբողջ աշխարհում (բացառությամբ չինարենում, ճապոներենում և կորեերենում օգտագործվող
գաղափարագրերից) կարող է ներկայացվել ավելի քիչ, քան 256 նիշ: Բայթը նաև իդեալական է սև-սպիտակ
լուսանկարներում մոխրագույն երանգները ներկայացնելու համար, քանի որ մարդու աչքը կարող է
տարբերակել մոխրագույնի մոտավորապես 256 երանգներ: Եվ որտեղ 1 բայթը անբավարար է (օրինակ,
չինական, ճապոներեն և կորեերենի վերոհիշյալ գաղափարագրերը ներկայացնելու համար), 2 բայթը, որը
թույլ է տալիս ներկայացնել 2 16 կամ 65,536 իրեր, սովորաբար լավ է աշխատում:
Կես բայթը, այսինքն՝ 4 բիթը, երբեմն կոչվում է նիբլ ( և երբեմն գրվում է nybble ), բայց այս բառը
խոսակցության մեջ այնքան հաճախ չի հայտնվում, որքան բայթը :
Քանի որ բայթերը շատ են հայտնվում համակարգիչների ինտերիերում, հարմար է դրանց արժեքներին
հնարավորինս հակիրճ կերպով անդրադառնալ: 10110110 ութ երկուական թվանշանները, օրինակ, անշուշտ
հստակ են, բայց հազիվ թե հակիրճ:
Իհարկե, մենք միշտ կարող էինք բայթերին անդրադառնալ իրենց տասնորդական համարժեքներով, բայց դա
պահանջում է երկուականից տասնորդականի փոխակերպում, ինչը առանձնապես տհաճ հաշվարկ չէ, բայց,
իհարկե, անհանգստություն: Ես ցույց տվեցի մի մոտեցում 8-րդ գլխում , որը բավականին պարզ է: Քանի որ
յուրաքանչյուր երկուական թվանշան համապատասխանում է 2-ի հզորությանը, մենք կարող ենք պարզապես
գրել երկուական թվի թվանշանները և ներքևում 2-ի հզորությունները: Բազմապատկեք յուրաքանչյուր
սյունակ և գումարեք արտադրանքները: Ահա 10110110-ի փոխակերպումը.

Տասնորդական թիվը երկուականի վերածելը մի փոքր ավելի անհարմար է: Դուք սկսում եք տասնորդական
թվից և բաժանում եք՝ նվազեցնելով 2-ի հզորությունները: Յուրաքանչյուր բաժանման համար գործակիցը
երկուական թվանշան է, իսկ մնացորդը բաժանվում է 2-ի հաջորդ ամենափոքր հզորության վրա: Ահա 182-ի
վերածումը երկուականի.

Գլուխ 8-ն ունի այս տեխնիկայի ավելի ընդարձակ նկարագրությունը: Անկախ նրանից, երկուականի և
տասնորդականի միջև փոխակերպումը սովորաբար այն չէ, որ կարելի է անել առանց թղթի և մատիտի կամ
շատ պրակտիկայի:
8-րդ գլխում մենք իմացանք նաև օկտալ կամ բազային-8 թվային համակարգի մասին: Օկտալը օգտագործում է
միայն 0, 1, 2, 3, 4, 5, 6 և 7 թվանշանները: Օկտալի և երկուականի միջև փոխակերպումը դիպուկ է: Այն
ամենը, ինչ ձեզ հարկավոր է հիշել, յուրաքանչյուր ութնիշի 3-բիթանոց համարժեքն է, ինչպես ցույց է տրված
հաջորդ էջի աղյուսակում:

Երկո Օկտ
ւակ ալ
ան
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Եթե ունեք երկուական թիվ (օրինակ՝ 10110110), սկսեք ամենաաջ թվանշաններից: 3 բիթից բաղկացած
յուրաքանչյուր խումբ ութնիշ է.
Այսպիսով, 10110110 բայթը կարող է արտահայտվել որպես 266 ութնիշ թվեր: Սա, անշուշտ, ավելի
լակոնիկ է, և օկտալը իսկապես լավ մեթոդ է բայթերը ներկայացնելու համար: Բայց օկտալը մի փոքր խնդիր
ունի.
Բայթերի երկուական ներկայացումները տատանվում են 00000000-ից մինչև 11111111: Բայթերի
օկտալային ներկայացումները տատանվում են 000-ից մինչև 377: Ինչպես պարզ է նախորդ օրինակում, 3
բիթը համապատասխանում է միջին և ամենաաջ օկտալ թվանշաններին, բայց միայն 2 բիթն է
համապատասխանում ամենաձախ օկտալին: թվանշան. Սա նշանակում է, որ 16-բիթանոց թվի օկտալ
ներկայացում

նույնը չէ, ինչ 16-բիթանոց թիվը կազմող 2 բայթերի օկտալային ներկայացումները

Որպեսզի բազմաբայթ արժեքների ներկայացումները համապատասխանեն առանձին բայթերի ներկայացմանը,


մենք պետք է օգտագործենք համակարգ, որտեղ յուրաքանչյուր բայթ բաժանված է հավասար թվով բիթերի: Դա
նշանակում է, որ մենք պետք է բաժանենք յուրաքանչյուր բայթ չորս արժեքների՝ յուրաքանչյուրը 2 բիթ (դա
կլինի 4-րդ հիմքը) կամ երկու արժեք՝ յուրաքանչյուրը 4 բիթ (հիմք 16):
Հիմք 16 . Հիմա դա մի բան է, որը մենք դեռ չենք նայել, և լավ պատճառներով: Բազային-16 թվային
համակարգը կոչվում է տասնվեցական , և նույնիսկ բառն ինքնին խառնաշփոթ է: Բառերի մեծ մասը, որոնք
սկսվում են վեցանկյուն նախածանցով (օրինակ՝ վեցանկյուն կամ վեցանկյուն կամ վեցանկյուն) վերաբերում
են ինչ-որ բանի վեցին: Ենթադրվում է, որ տասնվեցականը նշանակում է տասնվեց : Եվ չնայած Microsoft-ի
տեխնիկական հրատարակությունների ոճի ձեռնարկը հստակ նշում է. «Մի կրճատեք որպես վեցանկյուն »,
բոլորը միշտ անում են, և ես նույնպես:
Դա տասնվեցամյակի միակ յուրահատկությունը չէ։ Տասնորդականում մենք հաշվում ենք այսպես.

01
23
45
67
89
10
11
12

Ութնյակում, կհիշեք, մեզ այլևս 8 և 9 թվանշաններ պետք չեն:

01
23
45
67
10
11
12

Նմանապես, բազային-4 թվային համակարգին նույնպես պետք չէ 4, 5, 6 կամ 7:

01
23
10
11
12

Եվ երկուականին, իհարկե, անհրաժեշտ է միայն 0 և 1:

01
10
11
100

Բայց տասնվեցականը տարբեր է, քանի որ այն պահանջում է ավելի շատ թվեր, քան տասնորդական:
Տասնվեցական թվով հաշվելը մոտավորապես հետևյալն է.

01
23
45
67
89
???
???
10
11
12

որտեղ 10-ը (արտասանվում է մեկ-զրո ) իրականում 16 TEN է : Հարցական նշանները ցույց են տալիս, որ
տասնվեցական թվեր ցուցադրելու համար մեզ անհրաժեշտ է ևս վեց նշան: Որոնք են այս խորհրդանիշները:
որտեղի՞ց են նրանք գալիս։ Դե, դրանք մեզ ավանդույթի համաձայն չեն փոխանցվել, ինչպես մեր թվերի
մնացած խորհրդանիշները, ուստի ռացիոնալ բանը, որ պետք է անել, վեց նոր խորհրդանիշ կազմելն է,
օրինակ.

Ի տարբերություն մեր թվերի մեծ մասի համար օգտագործվող խորհրդանիշների, դրանք ունեն այն
առավելությունը, որ հեշտ է հիշել և նույնականացնել իրենց իրական թվերի հետ: Կա 10 գալոնանոց կովբոյի
գլխարկ, ֆուտբոլ (թիմում 11 խաղացող), մեկ տասնյակ բլիթ, սև կատու (կապված անհաջող 13-ի հետ),
լիալուսին, որը տեղի է ունենում նորալուսնից մոտ երկու շաբաթ (14 օր) հետո, և դանակ, որը մեզ հիշեցնում
է Հուլիոս Կեսարի սպանությունը մարտի 15-ին (15-րդ օրը):
Յուրաքանչյուր բայթ կարող է արտահայտվել որպես երկու տասնվեցական թվանշան: Այլ կերպ ասած,
տասնվեցական թվանշանը համարժեք է 4 բիթին կամ 1 բիթին: Հաջորդ էջի աղյուսակը ցույց է տալիս, թե
ինչպես կարելի է փոխարկել երկուականի, տասնվեցականի և տասնորդականի միջև:
Տաս Տաս Տաս Տաս
Երկո
Երկո նվեց նորդ նվեց նորդ
ւակ
ւակ ակա ակա ակա ակա
ան
ան ն ն ն ն
000 100
0 0 8 8
0 0
000 100
1 1 9 9
1 1թ

001 101
2 2 10
0 0թ

001 101
3 3 11
1 1թ

010 110
4 4 12
0 0թ

010 110
5 5 13
1 1թ

011 111
6 6 14
0 0թ

011 111
7 7 15
1 1թ

Ահա թե ինչպես կարելի է ներկայացնել 10110110 բայթը տասնվեցական.

Եվ կարևոր չէ, թե գործ ունենք բազմաբայթ թվերի հետ.

Մեկ բայթը միշտ ներկայացված է տասնվեցական թվանշաններով:


Ցավոք, (կամ գուցե, ձեր օգնության համար), մենք իսկապես չենք օգտագործելու ֆուտբոլային գնդակներ և
բլիթներ տասնվեցական թվեր գրելու համար: Կարելի էր այդպես վարվել, բայց այդպես չեղավ։ Փոխարենը,
տասնվեցական համակարգը ապահովում է, որ բոլորն իսկապես շփոթվեն և այդպես մնան: Այդ վեց
բացակայող տասնվեցական թվանշանները իրականում ներկայացված են լատինական այբուբենի առաջին վեց
տառերով, այսպես.

01
23
45
67
89
ABC
DEF
10
11
12

Հետևյալ աղյուսակը ցույց է տալիս իրական փոխակերպումը երկուականի, տասնվեցականի և


տասնորդականի միջև.

Տաս Տաս
Երկո նվեց նորդ
ւակ ակա ակա
ան ն ն
000
0 0
0
000
1 1
1
001
2 2
0
001
3 3
1
010
4 4
0
010
5 5
1
011
6 6
0
011
7 7
1
100
8 8
0
100
9 9

101
Ա 10

101
Բ 11

110
Գ 12

110
Դ 13

111
Ե 14

111
Ֆ 15

Այսպիսով, 10110110 բայթը կարող է ներկայացվել տասնվեցական B6 թվով առանց ձեր ֆուտբոլ
նկարելու: Ինչպես կհիշեք նախորդ գլուխներից, ես թվերի հիմքերը նշել եմ ըստ ենթագրերի, ինչպիսիք են.

101
101
10T
WO

երկուականի համար և

231
2
ՉՈՐ
Ս

չորրորդականի համար և

266
ՈՒԹ

ութնյակի համար և

182
ՏԵՆ

տասնորդականի համար։ Նույն համակարգը շարունակելու համար մենք կարող ենք օգտագործել

B6S
IXT
EEN

տասնվեցականի համար: Բայց դա ակնհայտորեն չափազանցված է: Բարեբախտաբար, տասնվեցական թվերը


նշելու մի քանի այլ, տափակիչ, մեթոդներ տարածված են: Թվերը կարող եք նշել հետևյալ կերպ.

B6
HEX

Այս գրքում ես հիմնականում կօգտագործեմ շատ տարածված մոտեցում, որը փոքրատառ h է ՝ թվին հետևելով,
ինչպես.

B6h

Տասնվեցական թվի մեջ յուրաքանչյուր թվանշանի դիրքերը համապատասխանում են 16-ի հզորություններին.


9A48Ch տասնվեցական թիվն է

9A4
8Ch
=9
x
100
00h
+
Ax
100
0h
+
4x
100
ժ+
8x
10 ժ
+
Cx

Սա կարելի է գրել 16-ի ուժերով.

9A4
8Ch
=9
x
164
+
Ax
163
+
4x
162
+
8x
161
+
Cx
160

Կամ օգտագործելով այդ հզորությունների տասնորդական համարժեքները.

9A4
8Ch
=9
x
65,
536
+
Ax
409
6+
4x
256
+
8x
16
+
Cx
1

Ուշադրություն դարձրեք, որ թվի միանիշ թվանշանները (9, A, 4, 8 և C) գրելիս անհասկանալիություն չկա՝


առանց թվանշանի հիմքը նշելու համար: 9-ը 9-ն է՝ լինի դա տասնորդական, թե տասնվեցական: Իսկ A-ն
ակնհայտորեն տասնվեցական է՝ տասնորդականում համարժեք է 10-ին:
Բոլոր թվանշանները տասնորդականի վերածելը թույլ է տալիս իրականում կատարել հաշվարկը.

9A4
8Ch
=9
x
65,
536
+
10 x
409
6+
4x
256
+
8x
16
+
12 x
1

Իսկ պատասխանը՝ 631948։ Ահա թե ինչպես են տասնորդական թվերը վերածվում տասնորդականի:


Ահա ցանկացած 4 նիշանոց տասնորդական թիվը տասնորդականի փոխարկելու ձևանմուշ.

Օրինակ, ահա 79ACh-ի փոխակերպումը: Հիշեք, որ A և C տասնորդական թվանշանները տասնորդական 10


և 12 են, համապատասխանաբար.

Տասնորդական թվերը տասնվեցականի վերածելու համար սովորաբար պահանջվում են բաժանումներ: Եթե


թիվը 255 կամ ավելի փոքր է, դուք գիտեք, որ այն կարող է ներկայացվել 1 բայթով, որը երկու տասնվեցական
թվանշան է: Այդ երկու թվանշանները հաշվելու համար թիվը բաժանիր 16-ի, որպեսզի ստացվի գործակիցը և
մնացորդը։ Եկեք օգտագործենք ավելի վաղ օրինակ՝ 182 տասնորդական թիվը: 182-ը բաժանեք 16-ի և
ստացեք 11 (որ տասնվեցականում B է) մնացորդով 6: Տասնվեցական համարժեքը B6h է:
Եթե տասնորդական թիվը, որը ցանկանում եք փոխարկել, փոքր է 65,536-ից, տասնվեցական համարժեքը
կունենա չորս նիշ կամ ավելի քիչ: Ահա այսպիսի թիվը տասնվեցականի փոխարկելու ձևանմուշ.

Դուք սկսում եք ամբողջ տասնորդական թիվը դնելով վերին ձախ անկյունում գտնվող վանդակում: Դա ձեր
առաջին դիվիդենտն է: Բաժանել 4096-ի` առաջին բաժանարարի: Գործակիցը գնում է դիվիդենտից ներքև
գտնվող վանդակում, իսկ մնացորդը գնում է դիվիդենտից աջ կողմում գտնվող վանդակում: Այդ մնացորդը նոր
շահաբաժինն է, որը դուք բաժանում եք 256-ի: Ահա 31,148-ի վերածումը տասնվեցականի:

Իհարկե, 10 և 12 տասնորդական թվերը համապատասխանում են տասնվեցական A-ին և C-ին: Արդյունքը


79ACh է:
Այս տեխնիկայի հետ կապված խնդիրներից մեկն այն է, որ դուք հավանաբար ցանկանում եք օգտագործել
հաշվիչը բաժանումների համար, բայց հաշվիչները չեն ցույց տալիս մնացորդները: Եթե հաշվիչի վրա
բաժանեք 31148-ը 4096-ի, ապա կստանաք 7,6044921875: Մնացածը հաշվարկելու համար պետք է
4096-ը բազմապատկել 7-ով (28672 ստանալու համար) և այն հանել 31148-ից։ Կամ 4096-ը
բազմապատկել 0,6044921875-ով, քանորդի կոտորակային մասը: (Մյուս կողմից, որոշ հաշվիչներ կարող
են փոխակերպվել տասնորդականի և տասնվեցականի միջև):
Տասնորդական թվերը 65535-ից մինչև վեցանկյունի փոխարկելու մեկ այլ մոտեցում ներառում է նախ թիվը
2 բայթի բաժանելը` բաժանելով 256-ի: Այնուհետև յուրաքանչյուր բայթի համար բաժանեք 16-ի: Ահա դա
անելու ձևանմուշը.

Սկսեք վերևից: Յուրաքանչյուր բաժանման դեպքում գործակիցը գնում է բաժանարարից ներքև գտնվող ձախ
կողմում գտնվող վանդակում, իսկ մնացածը գնում է աջ կողմում գտնվող վանդակում: Օրինակ, ահա
51,966-ի փոխարկումը.
Տասնվեցական թվերն են 12, 10, 15 և 14 կամ CAFE, որն ավելի շատ բառի է նման, քան թվի: (Եվ եթե գնաք
այնտեղ, կարող եք պատվիրել ձեր սուրճը 56,495):
Ինչպես յուրաքանչյուր այլ թվային բազայի համար, կա գումարման աղյուսակ, որը կապված է
տասնվեցականի հետ.

0 1 2 3 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ
+
0 0 1 2 3 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ
1 1 2 3 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10
2 2 3 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11
3 3 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12
4 4 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13
5 5 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14
6 6 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14 15
7 7 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14 15 16
8 8 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14 15 16 17
9 9 Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14 15 16 17 18
Ա Ա Բ Գ Դ Ե Ֆ 10 11 12 13 14 15 16 17 18 19
Բ Բ Գ Դ Ե Ֆ 10 11 12 13 14 15 16 17 18 19 1Ա
Գ Գ Դ Ե Ֆ 10 11 12 13 14 15 16 17 18 19 1Ա 1Բ
Դ Դ Ե Ֆ 10 11 12 13 14 15 16 17 18 19 1Ա 1Բ 1C
Ե Ե Ֆ 10 11 12 13 14 15 16 17 18 19 1Ա 1Բ 1C 1D
Ֆ Ֆ 10 11 12 13 14 15 16 17 18 19 1Ա 1Բ 1C 1D 1E

Դուք կարող եք օգտագործել աղյուսակը և սովորական տեղափոխման կանոնները տասնվեցական թվեր


ավելացնելու համար.
Դուք կհիշեք 13-րդ գլխից , որ կարող եք օգտագործել երկու լրացումներ՝ բացասական թվեր ներկայացնելու
համար: Եթե դուք գործ ունեք 8-բիթանոց ստորագրված արժեքների հետ երկուական տարբերակով, ապա
բացասական թվերը բոլորը սկսվում են 1-ով: Վեցանկյուն թվանշաններով երկնիշ թվերը բացասական են, եթե
սկսվում են 8, 9, A, B, C, D, E-ով, կամ F, քանի որ այս տասնվեցական թվանշանների երկուական
պատկերները բոլորը սկսվում են 1-ով: Օրինակ, 99h-ը կարող է ներկայացնել կամ տասնորդական 153 (եթե
գիտեք, որ գործ ունեք 1 բայթանոց անստորագիր թվերի հետ) կամ տասնորդական –103 (եթե գործ ունեք):
ստորագրված համարներ):
Կամ 99h բայթը կարող է իրականում լինել 99 թիվը տասնորդականում: Սա, իհարկե, որոշակի գրավչություն
ունի, բայց կարծես թե խախտում է այն ամենը, ինչ մենք սովորել ենք մինչ այժմ: Ես կբացատրեմ, թե ինչպես է
այն աշխատում 23-րդ գլխում : Բայց հաջորդիվ պետք է խոսեմ հիշողության մասին։
Գլուխ 16. Հիշողության համախմբում
Երբ մենք ամեն առավոտ արթնանում ենք քնից, հիշողությունը լրացնում է դատարկ տեղը: Մենք հիշում ենք,
թե որտեղ ենք, ինչ ենք արել նախորդ օրը և ինչ ենք նախատեսում անել այսօր: Այս հիշողությունները կարող
են հապճեպ կամ դրիբլ ունենալ, և միգուցե մի քանի րոպե հետո կարող են պահպանվել մի քանի
բացթողումներ («Զվարճալի է, ես չեմ հիշում, որ գուլպաներս քնելու եմ հագել»), բայց ընդհանուր առմամբ
մենք սովորաբար կարող ենք նորից հավաքել մեր կյանքը և հասնել բավականաչափ շարունակականություն՝
մեկ այլ օր սկսելու համար:
Իհարկե, մարդկային հիշողությունը այնքան էլ կարգավորված չէ: Փորձեք ինչ-որ բան հիշել ավագ դպրոցի
երկրաչափության մասին, և հավանաբար կսկսեք մտածել այն երեխայի մասին, ով նստել էր ձեր առջև կամ
այն օրը, երբ ուսուցիչը պատրաստվում էր բացատրել, թե ինչ է նշանակում QED-ը:
Ոչ էլ մարդկային հիշողությունն անխոհեմ է: Իսկապես, գիրը հավանաբար հորինվել է հատուկ՝
փոխհատուցելու մարդկային հիշողության թերությունները: Երևի անցյալ գիշեր դուք հանկարծակի
արթնացաք ժամը 3:00-ին սցենարի հիանալի գաղափարով: Դուք վերցրել եք գրիչն ու թուղթը, որը հատուկ
այդ նպատակով պահում եք ձեր մահճակալի կողքին, և գրել եք, որպեսզի չմոռանաք: Հաջորդ առավոտ դուք
կարող եք կարդալ հանճարեղ միտքը և սկսել աշխատել սցենարի վրա։ («Boy meets girl w. car chase &
explosions»? Այսքանո՞վ:) Կամ գուցե ոչ:
Մենք գրում ենք , իսկ հետո կարդում ենք : Մենք պահպանում ենք և ավելի ուշ առբերում ենք : Մենք պահում
ենք և հետագայում մուտք ենք գործում : Հիշողության ֆունկցիան այդ երկու իրադարձությունների միջև եղած
տեղեկատվությունը անփոփոխ պահելն է: Ամեն անգամ, երբ մենք տեղեկատվություն ենք պահում, մենք
օգտագործում ենք տարբեր տեսակի հիշողություններ: Թուղթը լավ միջոց է տեքստային տեղեկատվության
պահպանման համար, իսկ մագնիսական ժապավենը լավ է աշխատում երաժշտության և ֆիլմերի համար:
Հեռագրային ռելեները նույնպես, երբ հավաքվում են տրամաբանական դարպասների մեջ, այնուհետև
ֆլիպֆլոպներում, կարող են տեղեկատվություն պահել: Ինչպես տեսանք, flip-flop-ը կարող է պահել 1 բիթ:
Սա շատ տեղեկատվություն չէ, բայց սկիզբ է: Երբ մենք իմանանք, թե ինչպես պահել 1 բիթ, մենք
հեշտությամբ կարող ենք պահել 2, կամ 3 կամ ավելի:
14-րդ գլխում մենք հանդիպեցինք մակարդակով գործարկվող D-տիպի ֆլիպ-ֆլոպին, որը պատրաստված է
ինվերտորից, երկու AND դարպասներից և երկու NOR դարպասներից.

Երբ Ժամացույցի մուտքագրումը 1 է, Q ելքը նույնն է, ինչ Տվյալների մուտքագրումը: Բայց երբ Clock
մուտքագրումը դառնում է 0, Q ելքը պահում է Տվյալների մուտքագրման վերջին արժեքը: Տվյալների
մուտքագրման հետագա փոփոխությունները չեն ազդում ելքերի վրա, քանի դեռ Ժամացույցի մուտքագրումը
կրկին չի հասել 1-ի: Flip-flop-ի տրամաբանական աղյուսակը հետևյալն է.

Մու Արդյ
տքա ունք
գրու ներ
մներ
Q-բ
Դ Կլկ Ք
ար
0 1 0 1
1 1 1 0
Q-բ
X 0 Ք
ար

14-րդ գլխում այս ֆլիպ-ֆլոպը ներկայացված էր մի քանի տարբեր սխեմաներում, բայց այս գլխում այն
կօգտագործվի միայն մեկ եղանակով՝ 1 բիթ տեղեկատվություն պահելու համար: Այդ իսկ պատճառով, ես
պատրաստվում եմ վերանվանել մուտքերն ու ելքերը, որպեսզի դրանք ավելի համապատասխան լինեն այդ
նպատակին.

Սա նույն flip-flop-ն է, բայց այժմ Q ելքը կոչվում է Data Out, իսկ Ժամացույցի մուտքագրումը (որը
սկսվել է 14-րդ գլխում որպես Hold That Bit ) կոչվում է Գրել: Ինչպես մենք կարող ենք գրել որոշ
տեղեկություններ թղթի վրա, այնպես էլ Write ազդանշանը հանգեցնում է տվյալների մուտքագրման
ազդանշանի գրառմանը կամ պահպանմանը շղթայում : Սովորաբար, Write մուտքագրումը 0 է, և Data In
ազդանշանը չի ազդում ելքի վրա: Բայց երբ մենք ցանկանում ենք պահպանել Data In ազդանշանը
flip-flop-ում, մենք գրում ենք մուտքագրումը 1, իսկ հետո նորից 0: Ինչպես նշեցի 14-րդ գլխում , այս
տեսակի սխեման կոչվում է նաև սողնակ, քանի որ այն կապվում է տվյալների վրա: Ահա թե ինչպես մենք
կարող ենք ներկայացնել 1-բիթանոց սողնակ՝ առանց բոլոր առանձին բաղադրիչները նկարելու.

Բավականին հեշտ է մի քանի 1-բիթանոց սողնակներ հավաքել բազմաբիթ սողնակում: Պարզապես պետք է
միացնել Գրելու ազդանշանները.
Այս 8-բիթանոց սողնակն ունի ութ մուտք և ութ ելք: Բացի այդ, սողնակն ունի մեկ մուտք, որը կոչվում է
Write, որը սովորաբար 0 է: Այս սողնակում 8-բիթանոց արժեք պահելու համար գրեք մուտքագրումը
դարձրեք 1, այնուհետև կրկին 0: Այս սողնակը կարող է գծվել նաև որպես մեկ տուփ, ինչպես.

Կամ 1-բիթանոց սողնակին ավելի համապատասխան լինելու համար այն կարելի է նկարել այսպես.

Ութ 1-բիթանոց սողնակ հավաքելու մեկ այլ եղանակ այնքան էլ պարզ չէ, որքան սա: Ենթադրենք, մենք ուզում
ենք միայն մեկ Data In ազդանշան և մեկ Data Out ազդանշան: Բայց մենք ցանկանում ենք, որ կարողանանք
պահպանել Data In ազդանշանի արժեքը օրվա ընթացքում ութ տարբեր ժամանակներում, կամ գուցե ութ
տարբեր ժամանակներում հաջորդ րոպեի ընթացքում: Եվ մենք նաև ցանկանում ենք հետագայում ստուգելու
այդ ութ արժեքները՝ նայելով միայն մեկ Data Out ազդանշանին:
Այլ կերպ ասած, մեկ 8-բիթանոց արժեք պահելու փոխարեն, ինչպես 8-բիթանոց սողնակում, մենք ցանկանում
ենք պահպանել ութ առանձին 1-բիթանոց արժեք:
Ինչու՞ ենք մենք ուզում դա անել այսպես: Դե, գուցե այն պատճառով, որ մենք ունենք միայն մեկ լամպ:
Մենք գիտենք, որ մեզ անհրաժեշտ է ութ 1-բիթանոց սողնակ: Եկեք հիմա չանհանգստանանք, թե իրականում
ինչպես են տվյալները պահվում այս սողնակներում: Եկեք նախ կենտրոնանանք այս ութ սողնակների Data
Out ազդանշանների ստուգման վրա՝ օգտագործելով միայն մեկ լամպ: Իհարկե, մենք միշտ կարող էինք
ստուգել յուրաքանչյուր սողնակի ելքը՝ ձեռքով լամպը սողնակից սողնակ տեղափոխելով, բայց մենք
կնախընտրեինք դրանից մի փոքր ավելի ավտոմատացված բան: Փաստորեն, մենք կցանկանայինք անջատիչներ
օգտագործել՝ ընտրելու համար, թե ութ 1-բիթանոց սողնակներից որն ենք ուզում նայել:
Քանի՞ անջատիչ է մեզ անհրաժեշտ: Եթե մենք ուզում ենք ինչ-որ բան ընտրել ութ տարրերից, մեզ
անհրաժեշտ է երեք անջատիչ: Երեք անջատիչ կարող է ներկայացնել ութ տարբեր արժեքներ՝ 000, 001,
010, 011, 100, 101, 110 և 111:
Այսպիսով, ահա մեր ութ 1-բիթանոց սողնակները, երեք անջատիչները, լույսի լամպը և մեկ այլ բան, որը մեզ
անհրաժեշտ է անջատիչների և լույսի լամպի միջև.

«Ուրիշ բանն» այն խորհրդավոր տուփն է, որի վրա ութ մուտք կա, իսկ ձախում՝ երեք մուտք: Փակելով և
բացելով երեք անջատիչները՝ մենք կարող ենք ընտրել, թե ութ մուտքերից որն է ուղղորդվում դեպի արկղի
ներքևի ելքը: Այս ելքը լուսավորում է լամպը:
Այսպիսով, ի՞նչ է իրականում «Ի՞նչ է սա»: Մենք նախկինում հանդիպել ենք նման բանի, թեև ոչ այնքան շատ
մուտքերով: Դա նման է շղթայի, որը մենք օգտագործել ենք 14-րդ գլխում առաջին վերանայված ավելացման
մեքենայի մեջ: Այն ժամանակ մեզ անհրաժեշտ էր մի բան, որը թույլ էր տալիս ընտրել՝ արդյոք անջատիչների
շարքը կամ սողնակից ստացված ելքը օգտագործվելու է որպես ներածում գումարողին: Այդ գլխում այն
կոչվում էր 2-տողից 1 տող ընտրիչ: Այստեղ մեզ անհրաժեշտ է 8 տողից 1 տող տվյալների ընտրիչ .
8-ից 1 Ընտրիչն ունի ութ տվյալների մուտքագրում (ցուցադրված է վերևում) և երեք Ընտրել մուտքագրում
(ցուցադրված է ձախ կողմում): Ընտրել մուտքերը ընտրում են, թե տվյալների մուտքագրումներից որն է
հայտնվում Արդյունքում: Օրինակ, եթե Select մուտքերը 000 են, Ելքը նույնն է, ինչ D 0-ը : Եթե Ընտրել
մուտքերը 111 են, ելքը նույնն է, ինչ D 7-ը : Եթե Ընտրել մուտքերը 101 են, ելքը նույնն է, ինչ D 5-ը : Ահա
տրամաբանական աղյուսակը.

Մու Արդյ
տքա ունք
գրու ներ
մներ
S2 S1 S0 Ք
0 0 0 D0
0 0 1 D1
0 1 0 D2
0 1 1 D3
1 0 0 D4
1 0 1 D5
1 1 0 D6
1 1 1 D7

8-ից 1-ի ընտրիչը կառուցված է երեք ինվերտորներից, ութ 4 մուտքային AND դարպասներից և 8 մուտքով
ԿԱՄ դարպասից, այսպես.
Այժմ, սա բավականին մազոտ միացում է, բայց թերևս միայն մեկ օրինակ կհամոզի ձեզ, որ այն աշխատում է:
Ենթադրենք S 2- ը 1 է, S 1- ը 0 է, իսկ S 0- ը 1 է: Վերևից վեցերորդ AND դարպասի մուտքերը ներառում են S
0 , 1 , S 2 , որոնք բոլորը 1 են: Ոչ մի այլ AND դարպաս չունի այս երեք մուտքերը: , այնպես որ մյուս AND
դարպասները կունենան 0 ելք: Վերևից վեցերորդ AND դարպասը, հնարավոր է, ունենա 0 ելք, եթե D 5-ը 0 է:
Կամ կունենա 1 ելք, եթե D 5-ը 1 է: Նույնը գնում է դեպի OR դարպասը ծայր աջ կողմում: Այսպիսով, եթե
Select մուտքերը 101 են, Արդյունքը նույնն է, ինչ D 5-ը :
Եկեք ամփոփենք այն, ինչ մենք փորձում ենք անել այստեղ: Մենք փորձում ենք լարել ութ 1-բիթանոց
սողնակներ, որպեսզի դրանք կարողանան առանձին գրվել՝ օգտագործելով մեկ Տվյալների մուտքագրման
ազդանշան և անհատապես հետազոտվել՝ օգտագործելով մեկ Data Out ազդանշանի միջոցով: Մենք արդեն
հաստատել ենք, որ կարող ենք ընտրել Տվյալների ելքային ազդանշան ութ սողնակներից մեկից՝
օգտագործելով 8-ից 1 ընտրիչ, ինչպես ցույց է տրված հաջորդ էջում:
Մենք ավարտեցինք ճանապարհի կեսը: Այժմ, երբ մենք հաստատել ենք, թե ինչ է մեզ անհրաժեշտ ելքային
կողմի համար, եկեք նայենք մուտքային կողմին:
Մուտքային կողմը ներառում է Տվյալների մուտքագրման ազդանշանները և Գրելու ազդանշանը: Սողնակների
մուտքային կողմում մենք կարող ենք միացնել Տվյալների մուտքագրման բոլոր ազդանշանները միասին: Բայց
մենք չենք կարող միացնել ութ Գրելու ազդանշանները, քանի որ մենք ցանկանում ենք, որ կարողանանք
յուրաքանչյուր սողնակում առանձին գրել: Մենք ունենք մեկ Գրելու ազդանշան, որը պետք է ուղղորդվի
սողնակներից մեկին (և միայն մեկին).
Այս առաջադրանքն իրականացնելու համար մեզ անհրաժեշտ է ևս մեկ միացում, որը փոքր-ինչ նման է 8-ից 1
ընտրիչին, բայց իրականում անում է հակառակը: Սա 3-ից 8 ապակոդավորիչն է : Մենք նախկինում տեսել ենք
նաև տվյալների պարզ ապակոդավորիչ, երբ անջատիչները միացնում ենք մեր իդեալական կատվի գույնը
Գլուխ 11 -ում ընտրելու համար :
3-ից 8 ապակոդավորիչն ունի ութ ելք: Ցանկացած ժամանակ, բացառությամբ մեկի, բոլոր Արդյունքները 0
են: Բացառություն է կազմում այն Արդյունքը, որն ընտրվում է S 0 , S 1 և S 2 մուտքերով: Այս ելքը նույնն է,
ինչ տվյալների մուտքագրումը:
Կրկին ուշադրություն դարձրեք, որ վերևից վեցերորդ AND դարպասի մուտքերը ներառում են S 0 , 1 , S 2 :
Ոչ մի այլ AND դարպաս չունի այս երեք մուտքերը: Այսպիսով, եթե Select մուտքերը 101 են, ապա մյուս
բոլոր AND դարպասները կունենան 0 ելք: Վերևից վեցերորդ AND դարպասը, հնարավոր է, ունենա 0 ելք,
եթե տվյալների մուտքագրումը 0 է, կամ ելքը 1, եթե տվյալների մուտքագրումը: է 1. Ահա ամբողջական
տրամաբանական աղյուսակը.

Մու Արդյ
տքա ունք
գրու ներ
մներ
S2 S1 S0 O7 O6 O5 O4 O4 O2 O1 O0
Տվյ
0 0 0 0 0 0 0 0 0 0 ալնե
ր
Տվյ
0 0 1 0 0 0 0 0 0 ալնե 0
ր
Տվյ
0 1 0 0 0 0 0 0 ալնե 0 0
ր
Տվյ
0 1 1 0 0 0 0 ալնե 0 0 0
ր
Տվյ
1 0 0 0 0 0 ալնե 0 0 0 0
ր
Տվյ
1 0 1 0 0 ալնե 0 0 0 0 0
ր
Տվյ
1 1 0 0 ալնե 0 0 0 0 0 0
ր
Տվյ
1 1 1 ալնե 0 0 0 0 0 0 0
ր

Եվ ահա ամբողջական միացումը 8 սողնակներով.

Ուշադրություն դարձրեք, որ ապակոդավորիչի և ընտրիչի երեք ազդանշանները նույնն են, և որ ես այդ երեք
ազդանշանները նաև պիտակավորել եմ Հասցե : Ինչպես փոստային արկղի համարը, այս 3-բիթանոց հասցեն
որոշում է, թե ութ 1-բիթանոց սողնակներից որն է հղում: Մուտքային կողմում, Հասցեի մուտքագրումը
որոշում է, թե որ սողնակը կգործարկի Write ազդանշանը տվյալների մուտքագրումը պահելու համար:
Ելքային կողմում (նկարի ներքևում) Հասցեի մուտքագրումը վերահսկում է 8-ից 1 ընտրիչը՝ ութ
սողնակներից մեկի ելքը ընտրելու համար:
Սողնակների այս կոնֆիգուրացիան երբեմն հայտնի է որպես կարդալու/գրելու հիշողություն , բայց ավելի
հաճախ որպես պատահական մուտքի հիշողություն կամ RAM (արտասանվում է նույնը, ինչ կենդանին):
RAM-ի այս հատուկ կոնֆիգուրացիան պահպանում է ութ առանձին 1-բիթ արժեքներ: Այն կարելի է
ներկայացնել այսպես.

Այն կոչվում է հիշողություն , քանի որ այն պահպանում է տեղեկատվություն: Այն կոչվում է կարդալ/գրել
հիշողություն, քանի որ դուք կարող եք նոր արժեք պահել յուրաքանչյուր սողնակում (այսինքն՝ գրել արժեքը)
և որովհետև կարող եք որոշել, թե ինչ է պահվում յուրաքանչյուր սողնակում (այսինքն, հետագայում կարող եք
կարդալ արժեքը): Այն կոչվում է պատահական մուտքի հիշողություն, քանի որ ութ սողնակներից
յուրաքանչյուրը կարող է կարդալ կամ գրվել՝ պարզապես փոխելով Հասցեի մուտքերը: Ի հակադրություն,
հիշողության որոշ այլ տեսակներ պետք է ընթերցվեն հաջորդաբար, այսինքն՝ դուք պետք է կարդաք 100
հասցեում պահված արժեքը՝ նախքան 101 հասցեում պահված արժեքը կարդալը:
RAM-ի որոշակի կոնֆիգուրացիան հաճախ կոչվում է RAM զանգված : Այս կոնկրետ RAM զանգվածը
կազմակերպված է այնպես, որ կոչվում է կրճատ ձևով 8 x 1 (արտասանվում է ութ առ մեկ ): Զանգվածի ութ
արժեքներից յուրաքանչյուրը 1 բիթ է: Բազմապատկեք երկու արժեքները՝ ստանալով բիթերի ընդհանուր
թիվը, որոնք կարող են պահվել RAM զանգվածում:
RAM զանգվածները կարող են համակցվել տարբեր ձևերով: Օրինակ, դուք կարող եք վերցնել երկու 8 x 1
RAM զանգված և դասավորել դրանք այնպես, որ դրանք հասցեագրվեն նույն ձևով.
Երկու 8 x 1 RAM զանգվածների Address և Write մուտքերը միացված են, ուստի արդյունքը կլինի 8 x 2
RAM զանգված.

Այս RAM զանգվածը պահում է ութ արժեք, բայց դրանցից յուրաքանչյուրը ունի 2 բիթ չափ:
Կամ երկու 8 x 1 RAM զանգվածները կարող են համակցվել մոտավորապես այնպես, ինչպես առանձին
սողնակները համակցված են՝ օգտագործելով 2-ից-1 ընտրիչ և 1-ից 2 ապակոդավորիչ, ինչպես ցույց է
տրված հաջորդ էջում:
Ընտրել մուտքագրումը, որը գնում է և՛ ապակոդավորիչ, և՛ Ընտրիչ, ըստ էության, ընտրում է երկու 8 x 1
RAM զանգվածների միջև: Դա իսկապես չորրորդ հասցեի տող է: Այսպիսով, սա իրականում 16 x 1 RAM
զանգված է.

Այս RAM զանգվածը պահում է 16 արժեք, որոնցից յուրաքանչյուրը 1 բիթ է:


Արժեքների քանակը, որոնք պահում է RAM զանգվածը, ուղղակիորեն կապված է Հասցեների
մուտքագրումների քանակի հետ: Առանց Հասցեի մուտքագրման (ինչը վերաբերում է 1-բիթանոց և
8-բիթանոց սողնակին), կարող է պահպանվել միայն մեկ արժեք: Հասցեի մեկ մուտքագրման դեպքում
հնարավոր է երկու արժեք: Հասցեի երկու մուտքագրման դեպքում չորս արժեք է պահվում: Հասցեի երեք
մուտքագրմամբ՝ ութ արժեք, և չորս Հասցեի մուտքագրմամբ՝ տասնվեց արժեք: Հարաբերությունն ամփոփվում
է այս հավասարմամբ.

Արժ
եքնե
րի
քան
ակը
RA
M
զան
գվա
ծում
=2
Հաս
ցենե
րի
մուտ
քագր
ման
թիվը

Ես ցույց տվեցի, թե ինչպես կարելի է ստեղծել RAM-ի փոքր զանգվածներ, և դժվար չէ պատկերացնել ավելի
մեծերը: Օրինակ
Այս RAM զանգվածը պահպանում է ընդհանուր առմամբ 8196 բիթ, կազմակերպված որպես ութ բիթ 1024
արժեք: Հասցեի մուտքագրում կա տասը, քանի որ 2 10-ը հավասար է 1024-ի: Կան ութ տվյալների
մուտքագրում և ութ տվյալների ելքեր:
Այլ կերպ ասած, այս RAM զանգվածը պահում է 1024 բայթ: Դա նման է փոստի 1024 փոստարկղով:
Նրանցից յուրաքանչյուրը ներսում ունի 1 բայթի տարբեր արժեք (որը կարող է կամ ոչ ավելի լավ լինել, քան
անպետք փոստը):
Հազար քսանչորս բայթը հայտնի է որպես կիլոբայթ , և այստեղ շատ շփոթություն է: Կիլոյի նախածանցը
(հունարեն khilioi , նշանակում է հազար) առավել հաճախ օգտագործվում է մետրային համակարգում։
Օրինակ՝ կիլոգրամը 1000 գրամ է, իսկ կիլոմետրը՝ 1000 մետր։ Բայց այստեղ ես ասում եմ, որ կիլոբայթը
1024 բայթ է, ոչ թե 1000 բայթ:
Խնդիրն այն է, որ մետրային համակարգը հիմնված է 10-ի հզորությունների վրա, իսկ երկուական թվերը
հիմնված են 2-ի հզորությունների վրա, և երբեք երկուսը չեն հանդիպի: 10-ի հզորություններն են 10, 100,
1000, 10000, 100000 և այլն: 2-ի ուժերն են 2, 4, 8, 16, 32, 64 և այլն: Չկա 10-ի ամբողջական
հզորություն, որը հավասար է 2-ի որոշ անբաժանելի հզորության:
Բայց մեկ-մեկ նրանք մոտենում են: Այո, 1000-ը բավականին մոտ է 1024-ին, կամ ավելի մաթեմատիկորեն
ասած՝ օգտագործելով «մոտավորապես հավասար» նշանը.

210

103

Այս հարաբերություններում ոչ մի կախարդական բան չկա: Այն ենթադրում է միայն, որ 2-ի որոշակի
հզորությունը մոտավորապես հավասար է 10-ի որոշակի հզորությանը: Այս փոքրիկ տարօրինակությունը
թույլ է տալիս մարդկանց հեշտությամբ անդրադառնալ մեկ կիլոբայթ հիշողության, երբ նրանք իսկապես
նկատի ունեն 1024 բայթ:
Կիլոբայթը հապավում է K կամ KB: Վերևում ցուցադրված RAM զանգվածը, կարելի է ասել, պահում է
1024 բայթ կամ 1 կիլոբայթ կամ 1K կամ 1 ԿԲ:
Այն, ինչ դուք չեք ասում, այն է, որ 1 ԿԲ RAM զանգվածը պահում է 1000 բայթ կամ (անգլերեն) «հազար
բայթ»: Այն հազարից ավելի է, այն 1024 է: Որպեսզի թվալ, թե գիտեք, թե ինչի մասին եք խոսում, դուք ասում
եք կամ «1K» կամ «մեկ կիլոբայթ»:
Հիշողության մեկ կիլոբայթն ունի ութ տվյալների մուտքագրում, ութ տվյալների ելք և տասը հասցեի
մուտքագրում: Քանի որ բայթերը հասանելի են տասը Հասցե մուտքագրմամբ, RAM զանգվածը պահում է 2 10
բայթ: Ամեն անգամ, երբ մենք ավելացնում ենք մեկ այլ հասցեի մուտքագրում, մենք կրկնապատկում ենք
հիշողության ծավալը: Հետևյալ հաջորդականության յուրաքանչյուր տող ներկայացնում է հիշողության
կրկնապատկում.

1
կիլո
բայթ
=
102
4
բայթ
=
210
բայթ

103
բայթ
2
կիլո
բայթ
=
204
8
բայթ
=
211
բայթ
4
կիլո
բայթ
=
409
6
բայթ
=
212
բայթ
8
կիլո
բայթ
=
819
2
բայթ
=
213
բայթ
16
կիլո
բայթ
=
16,
384
բայթ
=
214
բայթ
32
կիլո
բայթ
=
32,
768
բայթ
=
215
բայթ
64
կիլո
բայթ
=
65,
536
բայթ
=
216
բայթ
128
կիլո
բայթ
=
131
,07
2
բայթ
=
217
բայթ
256
կիլո
բայթ
=
262
,14
4
բայթ
=
218
բայթ
512
կիլո
բայթ
=
524
,28
8
բայթ
=
219
բայթ
1,0
24
կիլո
բայթ
=
1,0
48,
576
բայթ
=
220
բայթ

106
բայթ

Նկատի ունեցեք, որ ձախ կողմում ցուցադրված կիլոբայթների թիվը նույնպես 2-ի ուժ է:
մեգաբայթ անվանել : (Հունարեն megas բառը նշանակում է մեծ :) Մեգաբայթը կրճատվում է ՄԲ: Իսկ
հիշողության կրկնապատկումը շարունակվում է.

1
մեգ
աբա
յթ =
1,0
48,
576
բայթ
=
220
բայթ

106
բայթ
2
մեգ
աբա
յթ =
2,0
97,
152
բայթ
=
221
բայթ
4
մեգ
աբա
յթ =
4,1
94,
304
բայթ
=
222
բայթ
8
մեգ
աբա
յթ =
8,3
88,
608
բայթ
=
223
բայթ
16
մեգ
աբա
յթ =
16,
777
,21
6
բայթ
=
224
բայթ
32
մեգ
աբա
յթ =
33,
554
,43
2
բայթ
=
225
բայթ
64
մեգ
աբա
յթ =
67,
108
,86
4
բայթ
=
226
բայթ
128
մեգ
աբա
յթ =
134
,21
7,7
28
բայթ
=
227
բայթ
256
մեգ
աբա
յթ =
268
,43
5,4
56
բայթ
=
228
բայթ
512
մեգ
աբա
յթ =
536
,87
0,9
12
բայթ
=
229
բայթ
1,0
24
մեգ
աբա
յթ =
1,0
73,
741
,82
4
բայթ
=
230
բայթ

109
բայթ

Հունարեն աշխատանքը gigas նշանակում է հսկա , ուստի 1024 մեգաբայթը կոչվում է գիգաբայթ , որը
հապավում է ԳԲ:
Նմանապես , տերաբայթը ( թերասը նշանակում է հրեշ ) հավասար է 2 40 բայթ (մոտավորապես 10 12 ) կամ
1,099,511,627,776 բայթ: Terabyte-ը հապավում է TB:
Կիլոբայթը մոտավորապես հազար բայթ է, մեգաբայթը՝ մոտավորապես մեկ միլիոն բայթ, գիգաբայթը՝
մոտավորապես միլիարդ բայթ, իսկ տերաբայթը՝ մոտավորապես տրիլիոն բայթ:
Բարձրանալով դեպի այն շրջանները, որտեղ քչերն են ճանապարհորդել, petabyte- ը հավասար է 2 50 բայթ
կամ 1,125,899,906,842,624 բայթ, որը մոտավորապես 10 15 է կամ կվադրիլիոն: Էկզաբայթը հավասար է
2 60 բայթ կամ 1,152,921,504,606,846,976 բայթ, մոտավորապես 10 18 կամ քվինտիլիոն:
Պարզապես այստեղ մի փոքր հիմնավորում ապահովելու համար, տնային համակարգիչները, որոնք ձեռք են
բերվել այս գրքի գրման ժամանակ (1999 թ.) սովորաբար ունենում են 32 ՄԲ կամ 64 ՄԲ կամ երբեմն 128
ՄԲ պատահական մուտքի հիշողություն: (Եվ դեռ շատ մի շփոթվեք. ես ոչինչ չեմ նշել կոշտ սկավառակների
մասին, ես խոսում եմ միայն RAM-ի մասին): Դա 33,554,432 բայթ է կամ 67,108,864 բայթ կամ
134,217,728 բայթ:
Մարդիկ, իհարկե, սղագրությամբ են խոսում։ Ինչ-որ մեկը, ով ունի 65,536 բայթ հիշողություն, կասի. «Ես
ունեմ 64K (և ես այցելու եմ 1980 թվականից): Ինչ-որ մեկը, ով ունի 33,554,432 բայթ, կասի. «Ես ունեմ
32 մեգ»: Այդ հազվագյուտ մարդը, ով ունի 1,073,741,824 բայթ հիշողություն, կասի. «Ես համերգ ունեմ (և
ես երաժշտություն չեմ խոսում):
Երբեմն մարդիկ վերաբերվում են կիլոբիթներին կամ մեգաբիթներին (նկատում բիթերը , քան բայթերը ), բայց
դա հազվադեպ է լինում: Գրեթե միշտ, երբ մարդիկ խոսում են հիշողության մասին, նրանք խոսում են բայթերի
քանակով, ոչ թե բիթերի: (Իհարկե, բայթերը բիթերի վերածելու համար, բազմապատկեք 8-ով:) Սովորաբար,
երբ խոսակցության ընթացքում հայտնվում են կիլոբիթները կամ մեգաբիթները, դա կապված է մետաղալարով
փոխանցվող տվյալների հետ և տեղի է ունենում այնպիսի արտահայտություններով, ինչպիսիք են
«կիլոբիթ/վայրկյանում» կամ «մեգաբիթ վայրկյանում»: Օրինակ, 56K մոդեմը վերաբերում է վայրկյանում
56 կիլոբիթին, ոչ թե կիլոբայթին:
Այժմ, երբ մենք գիտենք, թե ինչպես կառուցել RAM ցանկացած զանգված, որը ցանկանում ենք, եկեք շատ
դուրս չգանք վերահսկողությունից: Առայժմ, եկեք պարզապես ենթադրենք, որ մենք հավաքել ենք 65,536
բայթ հիշողություն.
Ինչու՞ 64 ԿԲ: Ինչու ոչ 32 ԿԲ կամ 128 ԿԲ: Քանի որ 65,536-ը գեղեցիկ կլոր թիվ է : 216 -ն է ։ Այս RAM
զանգվածն ունի 16-բիթանոց հասցե: Այսինքն՝ հասցեն ուղիղ 2 բայթ է։ Տասնվեցականում հասցեն
տատանվում է 0000h-ից մինչև FFFFh:
Ինչպես ես ակնարկեցի ավելի վաղ, 64 ԿԲ-ը 1980 թվականին գնված անհատական համակարգիչների
սովորական ծավալն էր, թեև այն կառուցված չէր հեռագրական ռելեներից: Բայց դուք իսկապես կարո՞ղ եք
նման բան կառուցել ռելեների միջոցով: Հավատում եմ, որ դուք դա հաշվի չեք առնի: Մեր դիզայնը
պահանջում է ինը ռելե հիշողության յուրաքանչյուր բիտի համար, ուստի ընդհանուր 64K x 8 RAM
զանգվածը պահանջում է դրանցից գրեթե 5 միլիոն:
Մեզ համար ձեռնտու կլինի ունենալ կառավարման վահանակ, որը թույլ կտա մեզ կառավարել այս ամբողջ
հիշողությունը՝ արժեքներ գրել հիշողության մեջ կամ ուսումնասիրել դրանք: Նման կառավարման վահանակն
ունի 16 անջատիչ՝ հասցեն նշելու համար, 8 անջատիչ՝ սահմանելու 8-բիթանոց արժեք, որը մենք
ցանկանում ենք գրել հիշողության մեջ, ևս մեկ անջատիչ՝ բուն Write ազդանշանի համար, և 8 լամպ՝
որոշակի 8-բիթանոց արժեք ցուցադրելու համար, ինչպես: ցուցադրված է հետևյալ էջում։

Բոլոր անջատիչները ցուցադրվում են իրենց անջատված (0) դիրքերում: Ես նաև ներառել եմ անջատիչ, որը
պիտակավորված է Takeover : Այս անջատիչի նպատակն է թույլ տալ, որ այլ սխեմաներ օգտագործեն նույն
հիշողությունը, որին միացված է կառավարման վահանակը: Երբ անջատիչը դրված է 0-ի վրա (ինչպես ցույց է
տրված), կառավարման վահանակի մնացած անջատիչները ոչինչ չեն անում: Այնուամենայնիվ, երբ
անջատիչը դրված է 1-ի վրա, կառավարման վահանակն ունի բացառիկ վերահսկողություն հիշողության վրա:
Սա աշխատանք է մի խումբ 2-ից 1 ընտրողների համար: Փաստորեն, մեզ անհրաժեշտ է դրանցից 25-ը՝ 16-ը՝
Address ազդանշանների համար, 8-ը՝ Տվյալների մուտքագրման անջատիչների համար, ևս մեկը՝ Write
անջատիչի համար: Ահա շղթան.
Երբ Takeover անջատիչը բաց է (ինչպես ցույց է տրված), 64K x 8 RAM զանգվածի հասցեի, տվյալների
մուտքագրման և գրելու մուտքերը գալիս են արտաքին ազդանշաններից, որոնք ցուցադրված են 2-ից-1
Ընտրիչների վերևի ձախ մասում: Երբ Takeover անջատիչը փակ է, Հասցեի, Տվյալների մուտքագրման և
Գրելու ազդանշանները RAM զանգվածին գալիս են կառավարման վահանակի անջատիչներից: Երկու
դեպքում էլ, RAM-ի զանգվածից Data Out ազդանշանները գնում են դեպի ութ լամպ և, հնարավոր է, մեկ այլ
տեղ:
Ես 64K x 8 RAM զանգված կնկարեմ այսպիսի կառավարման վահանակով հետևյալ կերպ.
Երբ Takeover անջատիչը փակ է, դուք կարող եք օգտագործել 16 Հասցե անջատիչները՝ 65,536
հասցեներից որևէ մեկը ընտրելու համար: Լույսի լամպերը ձեզ ցույց են տալիս տվյալ հասցեում հիշողության
մեջ պահվող 8-բիթանոց արժեքը: Դուք կարող եք օգտագործել 8 Տվյալների անջատիչները՝ նոր արժեք
սահմանելու համար, և կարող եք այդ արժեքը գրել հիշողության մեջ՝ օգտագործելով Write անջատիչը:
64K x 8 RAM զանգվածը և կառավարման վահանակը, անշուշտ, կարող են օգնել ձեզ հետևել ցանկացած
65,536 8-բիթանոց արժեքներին, որոնք կարող են անհրաժեշտ լինել: Բայց մենք բաց ենք թողել նաև մեկ այլ
բանի հնարավորությունը, միգուցե ինչ-որ այլ սխեմաներ՝ օգտագործելու մեր պահած արժեքները
հիշողության մեջ և գրելու այլ արժեքներ:
Հիշողության հետ կապված ևս մեկ բան պետք է հիշեք, և դա շատ կարևոր է. Երբ ես ներկայացրի
տրամաբանական դարպասների հայեցակարգը 11-րդ գլխում , ես դադարեցի նկարել առանձին ռելեներ, որոնք
կազմում են այս դարպասները: Մասնավորապես, ես այլևս չեմ նշել, որ ամեն ռելե միացված է ինչ-որ
էլեկտրաէներգիայի մատակարարմանը։ Ամեն անգամ, երբ ռելեը գործարկվում է, էլեկտրականությունը
հոսում է էլեկտրամագնիսի պարույրների միջով և իր տեղում պահում մետաղական կոնտակտը:
Այսպիսով, եթե ունեք 64K x 8 RAM զանգված, որը մինչև ծայրը լցված է ձեր նախընտրած 65,536
բայթերով, և դուք անջատում եք դրա հոսանքը, ի՞նչ է տեղի ունենում: Բոլոր էլեկտրամագնիսները կորցնում
են իրենց մագնիսականությունը և բարձր ձայնով բոլոր ռելեի կոնտակտները վերադառնում են իրենց
չաշխատող վիճակներին: Իսկ այս RAM-ի պարունակությունը? Նրանք բոլորը գնում են POOF! Անցել է
ընդմիշտ:
Ահա թե ինչու պատահական մուտքի հիշողությունը կոչվում է նաև անկայուն հիշողություն: Այն պահանջում
է մշտական էլեկտրաէներգիայի մատակարարում իր պարունակությունը պահպանելու համար:
Գլուխ 17. Ավտոմատացում
Մարդկային տեսակը հաճախ զարմանալիորեն հնարամիտ է և աշխատասեր, բայց միևնույն ժամանակ
խորապես ծույլ է: Պարզից էլ պարզ է, որ մենք՝ մարդիկս, չենք սիրում աշխատել։ Աշխատանքի հանդեպ այս
զզվանքն այնքան ծայրահեղ է, և մեր հնարամտությունն այնքան սուր է, որ մենք ցանկանում ենք անհամար
ժամեր տրամադրել՝ նախագծելով և կառուցելով սարքեր, որոնք կարող են մի քանի րոպե հեռացնել մեր
աշխատանքային օրվանից: Քիչ երևակայություններ են ավելի շատ ցնցում մարդկային հաճույքների
կենտրոնը, քան ցանցաճոճում հանգստանալու տեսլականը, որը դիտում է ինչ-որ նորաստեղծ միջոց, որը մենք
հենց նոր կառուցեցինք, որը հնձում է սիզամարգը:
Վախենում եմ, որ այս էջերում չցուցադրեմ մարգագետինների ավտոմատ հնձող մեքենայի պլաններ: Բայց այս
գլխում, ավելի ու ավելի բարդ մեքենաների առաջընթացի միջոցով, ես կավտոմատացնեմ թվերի գումարման և
հանման գործընթացը: Ես գիտեմ, որ սա հազիվ թե ցնցող հնչի: Բայց այս գլխի վերջնական մեքենան այնքան
բազմակողմանի կլինի, որ կկարողանա լուծել գրեթե ցանկացած խնդիր, որն օգտագործում է գումարում և
հանում, և որն իրոք ներառում է բազմաթիվ խնդիրներ:
Իհարկե, բարդության հետ մեկտեղ գալիս են բարդություններ, ուստի դրանցից մի քանիսը կարող են կոպիտ
լինել: Ոչ ոք ձեզ չի մեղադրի, եթե դուք սահեցնեք տանջալի մանրամասները: Երբեմն դուք կարող եք
ըմբոստանալ և խոստանալ, որ այլևս երբեք չեք դիմի էլեկտրական կամ մեխանիկական օգնություն
մաթեմատիկական խնդրի համար: Բայց հավատարիմ մնացեք ինձ, քանի որ այս գլխի վերջում մենք կհայտնենք
մի մեքենա, որը կարող ենք օրինական կերպով անվանել համակարգիչ :
Վերջին գումարիչը, որին մենք նայեցինք, 14-րդ գլխում էր : Այդ տարբերակը ներառում էր 8-բիթանոց
սողնակ, որը կուտակում էր ութ անջատիչների մեկ հավաքածուի վրա մուտքագրված գործող ընդհանուր
գումարը.
Ինչպես հիշում եք, 8-բիթանոց սողնակն օգտագործում է flip-flops 8-բիթանոց արժեք պահելու համար: Այս
սարքն օգտագործելու համար նախ մի պահ սեղմեք Մաքրել անջատիչը՝ սողնակում պահված
պարունակությունը բոլոր զրոյի վրա դնելու համար: Այնուհետև դուք օգտագործում եք անջատիչները ձեր
առաջին համարը մուտքագրելու համար: Ավելացնողը պարզապես ավելացնում է այս թիվը սողնակի
զրոյական ելքին, ուստի արդյունքը ձեր մուտքագրած թիվն է: Սեղմելով «Ավելացնել» անջատիչը, այդ թիվը
պահվում է սողնակում և միացնում որոշ լամպեր՝ այն ցուցադրելու համար: Այժմ դուք տեղադրում եք երկրորդ
համարը անջատիչների վրա: Ավելացնողն այս մեկն ավելացնում է սողնակում պահվող թվին: «Ավելացնել»
կոճակը կրկին սեղմելով՝ ընդհանուր գումարը պահվում է սողնակում և ցուցադրվում՝ օգտագործելով
լամպերը: Այս կերպ դուք կարող եք ավելացնել թվերի մի ամբողջ շարան և ցուցադրել ընթացիկ ընդհանուր
թիվը: Սահմանափակումը, իհարկե, այն է, որ ութ լամպերը չեն կարող ցուցադրել 255-ից ավելի ընդհանուր
թիվը:
Այն ժամանակ, երբ ես ձեզ ցույց տվեցի այս միացումը 14-րդ գլխում , միակ սողնակները, որոնք ես
ներկայացրել էի մինչ այժմ, միացված էին մակարդակով : Մակարդակով գործարկվող սողնակում Ժամացույցի
մուտքագրումը պետք է գնա 1-ի, այնուհետև վերադառնա 0-ի, որպեսզի սողնակը ինչ-որ բան պահի: Այն
ժամանակահատվածում, երբ Ժամացույցի մուտքագրումը 1 է, սողնակի տվյալների մուտքերը կարող են
փոխվել, և այդ փոփոխությունները կազդեն պահված արդյունքի վրա: Ավելի ուշ այդ գլխում ես ներկայացրեցի
ծայրով ձգվող սողնակները: Այս սողնակները պահպանում են իրենց արժեքները այն կարճ պահին, երբ
Ժամացույցի մուտքագրումը անցնում է 0-ից 1-ի: Եզրային գործարկվող սողնակները հաճախ փոքր-ինչ ավելի
հեշտ են օգտագործել, ուստի ես ուզում եմ ենթադրել, որ այս գլխի բոլոր սողնակները ծայրի ձգան են:
Սողնակը, որն օգտագործվում է ընդհանուր թվերի կուտակման համար, կոչվում է կուտակիչ : Բայց մենք
ավելի ուշ կտեսնենք այս գլխում, որ կուտակիչը պարզապես պետք չէ կուտակել: Կուտակիչը հաճախ սողնակ
է, որը սկզբում պահում է մեկ թիվ, ապա այդ թիվը գումարած կամ մինուս մեկ այլ թիվ:
Վերևում ցուցադրված ավելացման մեքենայի հետ կապված մեծ խնդիրը բավականին ակնհայտ է. ասենք, որ
ունեք 100 երկուական թվերի ցուցակ, որոնք ցանկանում եք գումարել միասին: Դու նստում ես ավելացնող
մեքենայի մոտ և համառորեն մուտքագրում ես յուրաքանչյուր թիվը և կուտակում գումարը: Բայց երբ
ավարտում ես, հայտնաբերում ես, որ ցուցակի թվերից մի քանիսը սխալ էին: Այժմ դուք պետք է նորից անեք
ամբողջը:
Բայց գուցե ոչ: Նախորդ գլխում մենք օգտագործեցինք գրեթե 5 միլիոն ռելե՝ 64 ԿԲ հիշողություն
պարունակող RAM զանգված ստեղծելու համար: Մենք նաև միացրել ենք կառավարման վահանակը
(ցուցադրված է 204-րդ էջում), որը թույլ է տալիս փակել Takeover պիտակով անջատիչը և բառացիորեն
ստանձնել այս RAM զանգվածի ամբողջ գրությունն ու ընթերցումը անջատիչների միջոցով:
Եթե դուք մուտքագրեիք բոլոր 100 երկուական թվերը այս RAM զանգվածում, այլ ոչ ուղղակիորեն
ավելացնող մեքենայի մեջ, մի քանի ուղղումներ կատարելը շատ ավելի հեշտ կլիներ:
Այսպիսով, այժմ մենք բախվում ենք RAM զանգվածը կուտակվող ավելացնողին միացնելու մարտահրավերին:
Բավական ակնհայտ է, որ RAM Data Out ազդանշանները փոխարինում են անջատիչներին, բայց թերևս
այնքան էլ ակնհայտ չէ, որ 16-բիթանոց հաշվիչը (ինչպես մենք կառուցեցինք 14-րդ գլխում) կարող է
կառավարել RAM զանգվածի հասցեների ազդանշանները: Տվյալների մուտքագրման և գրելու
ազդանշանները RAM-ին անհրաժեշտ չեն այս միացումում.
Սա, անշուշտ, երբևէ հայտնագործված հաշվարկային սարքավորումների ամենահեշտ կտորը չէ: Այն
օգտագործելու համար նախ պետք է փակեք Clear պիտակով անջատիչը: Սա մաքրում է սողնակի
պարունակությունը և սահմանում է 16-բիթանոց հաշվիչի ելքը 0000h: Այնուհետև փակում եք Takeover
անջատիչը RAM-ի կառավարման վահանակի վրա: Այնուհետև կարող եք մուտքագրել 8-բիթանոց թվերի մի
շարք, որոնք ցանկանում եք ավելացնել՝ սկսած 0000h RAM հասցեից: Եթե ունեք 100 համար, ապա այս
թվերը կպահեք 0000h-ից մինչև 0063h հասցեներում: (Դուք նաև պետք է սահմանեք RAM զանգվածի
բոլոր չօգտագործված գրառումները 00h-ի վրա): Այնուհետև կարող եք բացել RAM-ի կառավարման
վահանակի Takeover անջատիչը (որպեսզի կառավարման վահանակն այլևս վերահսկի RAM զանգվածը) և
բացեք Clear անջատիչը: Այնուհետև պարզապես նստեք և դիտեք թարթող լամպերը:
Ահա թե ինչպես է այն աշխատում. Երբ Clear անջատիչը առաջին անգամ բացվում է, RAM զանգվածի
հասցեն 0000h է: Այդ հասցեում RAM զանգվածում պահվող 8-բիթանոց արժեքը ներածում է ավելացնողին:
Ավելացնողի մյուս մուտքը 00ժ է, քանի որ սողնակը նույնպես մաքրված է:
Օքսիլյատորը ժամացույցի ազդանշան է տալիս՝ ազդանշան, որը շատ արագ փոխվում է 0-ի և 1-ի միջև:
Clear անջատիչը բացելուց հետո, երբ ժամացույցը փոխվում է 0-ից 1-ի, միաժամանակ երկու բան է տեղի
ունենում. սողնակը պահում է գումարը գումարողից, իսկ 16-բիթանոց հաշվիչը ավելանում է՝ այդպիսով
անդրադառնալով RAM զանգվածի հաջորդ արժեքին: Clear անջատիչը բացելուց հետո առաջին անգամ
ժամացույցը փոխվում է 0-ից 1, սողնակը պահում է առաջին արժեքը, իսկ հաշվիչը աճում է մինչև 0001h:
Երկրորդ անգամ սողնակը պահպանում է առաջին և երկրորդ արժեքների գումարը, իսկ հաշվիչը աճում է
մինչև 0002h: Եվ այսպես շարունակ։
Իհարկե, ես այստեղ որոշ ենթադրություններ եմ անում: Ամենից առաջ ես ենթադրում եմ, որ օսլիլատորը
բավականաչափ դանդաղ է, որպեսզի թույլ տա, որ մնացած սխեմաները աշխատեն: Ժամացույցի
յուրաքանչյուր հարվածի հետ մեկտեղ շատ ռելեներ պետք է գործարկեն այլ ռելեներ, նախքան վավերական
գումարը հայտնվի գումարիչի ելքում:
Այս շրջանի խնդիրն այն է, որ մենք այն կանգնեցնելու ճանապարհ չունենք: Ինչ-որ պահի լույսի լամպերը
կդադարեն թարթել, քանի որ RAM զանգվածի մնացած բոլոր թվերը կլինեն 00h: Այդ ժամանակ դուք կարող
եք կարդալ երկուական գումարը: Բայց երբ հաշվիչը ի վերջո հասնում է FFFFh-ին, այն կշրջվի ( ինչպես
մեքենայի վազաչափը) մինչև 0000h, և այս ավտոմատացված գումարիչը կսկսի նորից թվերը ավելացնել
արդեն հաշվարկված գումարին:
Այս ավելացնող մեքենան ունի նաև այլ խնդիրներ: Այն ընդամենը գումարում է, և այն ամենը, ինչ
ավելացնում է, 8-բիթանոց թվեր են: Ոչ միայն RAM զանգվածի յուրաքանչյուր թիվը սահմանափակվում է
255-ով, այլև գումարը սահմանափակվում է 255-ով: Գումարը նաև չունի թվեր հանելու միջոց, թեև
հնարավոր է, որ դուք օգտագործում եք բացասական թվեր երկու լրացումների մեջ, որի դեպքում այս մեքենան
սահմանափակվում է -128-ից մինչև 127 թվերի մշակմամբ: Ավելի մեծ թվեր ավելացնելու ակնհայտ
եղանակներից մեկը ( օրինակ՝ 16-բիթանոց արժեքներ) նշանակում է կրկնապատկել RAM զանգվածի,
ավելացնողի և փականի լայնությունը, ինչպես նաև ապահովել ևս ութ լամպ: Բայց դուք, հնարավոր է, դեռ
պատրաստ չլինեք կատարել այդ ներդրումը:
Իհարկե, ես նույնիսկ չէի նշի այս խնդիրները, քանի դեռ չիմանայի, որ դրանք ի վերջո լուծելու ենք: Բայց
խնդիրը, որի վրա ես նախ ուզում եմ կենտրոնանալ, մեկ այլ խնդիր է: Իսկ եթե կարիք չունենայիք մեկ մեծ
գումարով 100 թիվ գումարել: Ի՞նչ կլիներ, եթե փոխարենը ցանկանայիք օգտագործել ավտոմատացված
գումարիչ՝ ավելացնելու 50 զույգ թվեր՝ 50 տարբեր գումարներ ստանալու համար: Կամ գուցե դուք
կցանկանայիք բավականաչափ բազմակողմանի մեքենա՝ զույգ թվեր միասին ավելացնելու համար, կամ 10
թվեր միասին, կամ 100: Եվ ցանկանում եք, որ բոլոր արդյունքները հասանելի լինեն ձեր հարմար
ուսումնասիրության համար:
Նախկինում ցուցադրված ավտոմատացված հավելիչը ցուցադրում է գործարկման ընդհանուր գումարը
սողնակին միացված մի շարք լամպերի վրա: Այս մոտեցումը լավ չէ, եթե ցանկանում եք գումարել 50 զույգ
թվեր՝ 50 տարբեր գումարներ ստանալու համար: Փոխարենը, դուք հավանաբար ցանկանում եք, որ
արդյունքները հետ պահվեն RAM զանգվածում: Այդ կերպ դուք կարող եք օգտագործել RAM-ի կառավարման
վահանակը՝ ձեր հարմարության դեպքում արդյունքները ուսումնասիրելու համար: Այդ կառավարման
վահանակն ունի իր սեփական լամպերը հատուկ այդ նպատակով:
Սա նշանակում է, որ մենք կարող ենք ազատվել սողնակին միացված լույսի լամպերից: Բայց փոխարենը,
սողնակից ելքը պետք է միացված լինի RAM զանգվածի տվյալների մուտքագրմանը, որպեսզի գումարները
կարողանան գրել RAM-ում.
Այս գծապատկերում ես վերացրել եմ նաև ավտոմատացված հավելիչի որոշ այլ մասեր, մասնավորապես,
օսլիլատորը և Clear switch-ը: Ես դրանք հանեցի, քանի որ այլևս ակնհայտ չէ, թե որտեղից են Clear և
Clock մուտքերը հաշվիչին և սողնակին: Ավելին, այժմ, երբ մենք օգտվել ենք RAM տվյալների
մուտքագրումից, մեզ անհրաժեշտ է RAM Write ազդանշանը կառավարելու միջոց:
Այսպիսով, եկեք մի պահ չանհանգստանանք շրջանի համար և փոխարենը կենտրոնանանք այն խնդրի վրա, որը
մենք փորձում ենք լուծել: Այն, ինչ մենք փորձում ենք անել այստեղ, ավտոմատացված հավելիչի
կազմաձևումն է, որպեսզի այն սահմանափակված չլինի միայն մի շարք թվերի վազող ընդհանուր գումարի
կուտակմամբ: Մենք ցանկանում ենք ունենալ լիակատար ազատություն, թե քանի թվեր ենք մենք ավելացնում
և որքան տարբեր գումարներ են պահվում RAM-ում հետագա փորձաքննության համար:
Օրինակ, ենթադրենք, որ մենք ցանկանում ենք գումարել երեք թվեր, այնուհետև գումարել երկու թվեր, ապա
գումարել ևս երեք թվեր: Մենք կարող ենք պատկերացնել այս թվերը մուտքագրել RAM զանգվածի մեջ, որը
սկսվում է 0000h հասցեից, որպեսզի հիշողության պարունակությունը այսպիսի տեսք ունենա.
Ահա թե ինչպես ես կցուցադրեմ հիշողության մի հատված այս գրքում: Արկղերը ներկայացնում են
հիշողության պարունակությունը: Հիշողության յուրաքանչյուր բայթ գտնվում է տուփի մեջ: Այդ տուփի
հասցեն ձախ կողմում է։ Ոչ բոլոր հասցեները պետք է նշվեն, քանի որ հասցեները հաջորդական են, և դուք
միշտ կարող եք պարզել, թե ինչ հասցեն է վերաբերում որոշակի տուփին: Աջ կողմում կան այս հիշողության
վերաբերյալ որոշ մեկնաբանություններ: Այս հատուկ մեկնաբանությունները ցույց են տալիս, որ մենք
ցանկանում ենք, որ ավտոմատացված գումարողը պահի երեք գումարները դատարկ տուփերում: (Չնայած այս
տուփերը դատարկ են, հիշողությունը պարտադիր չէ, որ դատարկ լինի: Հիշողությունը միշտ պարունակում է
ինչ-որ բան , նույնիսկ եթե դա պարզապես պատահական տվյալներ է: Բայց հիմա այն օգտակար ոչինչ չի
պարունակում:)
Այժմ ես գիտեմ, որ դուք գայթակղվում եք կիրառել ձեր տասնվեցական թվաբանությունը և ինքներդ լրացնել
փոքրիկ տուփերը: Բայց այս ցույցի իմաստը դա չէ: Մենք ցանկանում ենք, որ ավտոմատացված հավելումը
կատարի հավելումները մեզ փոխարեն:
Փոխանակ ստիպելու ավտոմատացված ավելորդին անել միայն մեկ բան, որն առաջին տարբերակում
ներառում էր RAM հասցեի բովանդակության ավելացում 8-բիթանոց սողնակին, որը ես անվանել եմ
կուտակիչ, մենք իրականում ցանկանում ենք, որ այն հիմա անի չորս տարբեր բաներ : Լրացում սկսելու համար
մենք ցանկանում ենք, որ այն հիշողությունից բայթ փոխանցի կուտակիչ: Ես այս գործողությունը կանվանեմ
Load : Երկրորդ գործողությունը, որը մենք պետք է կատարենք, հիշողության մեջ բայթ ավելացնելն է
կուտակիչի բովանդակությանը: Երրորդ, մենք պետք է գումար վերցնենք կուտակիչում և պահենք այն
հիշողության մեջ: Վերջապես, մեզ պետք է ինչ-որ միջոց՝ դադարեցնելու ավտոմատացված հավելիչը:
Մանրամասնորեն, այն, ինչ մենք ցանկանում ենք, որ ավտոմատացված հավելիչը անի այս կոնկրետ
օրինակում, հետևյալն է.
● Բեռնեք արժեքը 0000h հասցեում կուտակիչում:
● Կուտակիչին ավելացրեք արժեքը 0001h հասցեում:
● ավելացրեք կուտակիչին:
● Պահպանեք կուտակիչի պարունակությունը 0003h հասցեում:
● Բեռնեք արժեքը 0004h հասցեում կուտակիչում:
● ավելացրեք կուտակիչին:
● Պահպանեք կուտակիչի պարունակությունը 0006h հասցեում:
● Բեռնեք արժեքը 0007h հասցեում կուտակիչում:
● Կուտակիչին ավելացրեք արժեքը 0008h հասցեում:
● ավելացրեք կուտակիչին:
● Պահպանեք կուտակիչի պարունակությունը 000Ah հասցեում:
● Դադարեցրեք ավտոմատացված ավելացնողի աշխատանքը:
Ուշադրություն դարձրեք, որ ինչպես սկզբնական ավտոմատացված գումարման դեպքում, հիշողության
յուրաքանչյուր բայթ դեռ հասցեագրվում է հաջորդաբար՝ սկսած 0000h-ից: Բնօրինակ ավտոմատացված
հավելիչը պարզապես ավելացրել է այդ հասցեի հիշողության պարունակությունը կուտակիչի
պարունակությանը: Որոշ դեպքերում մենք դեռ ցանկանում ենք դա անել։ Բայց մենք նաև երբեմն ցանկանում
ենք բեռնել կուտակիչն ուղղակիորեն հիշողության մեջ արժեքով կամ պահել կուտակիչի պարունակությունը
հիշողության մեջ: Եվ ամեն ինչ ավարտվելուց հետո մենք ցանկանում ենք, որ ավտոմատացված հավելիչը
պարզապես դադարեցնի, որպեսզի կարողանա ուսումնասիրել RAM զանգվածի բովանդակությունը:
Ինչպե՞ս կարող ենք դա իրականացնել: Դե, բավական չէ պարզապես RAM-ում մի շարք թվեր մուտքագրել և
սպասել, որ ավտոմատացված գումարողը ճիշտ բան կանի: RAM-ի յուրաքանչյուր համարի համար մեզ
անհրաժեշտ է նաև ինչ-որ թվային կոդ, որը ցույց է տալիս, թե ինչ պետք է անի ավտոմատ հավելիչը՝ Բեռնել,
Ավելացնել, Պահել կամ Կասեցնել :
Թերևս այս կոդերը պահելու ամենահեշտ (բայց, իհարկե, ոչ ամենաէժան) միջոցը RAM-ի մի ամբողջ
առանձին զանգվածում է: Այս երկրորդ RAM զանգվածը հասանելի է RAM-ի սկզբնական զանգվածի հետ
միաժամանակ: Բայց ավելացվող թվեր պարունակելու փոխարեն, այն պարունակում է կոդեր, որոնք ցույց են
տալիս, թե ավտոմատացված գումարողը ինչ պետք է անի համապատասխան հասցեի հետ սկզբնական RAM
զանգվածում: Այս երկու RAM զանգվածները կարող են պիտակավորվել Data (սկզբնական RAM զանգված)
և Code (նորը).
Մենք արդեն հաստատել ենք, որ մեր նոր ավտոմատացված հավելիչը պետք է կարողանա գումարներ գրել
սկզբնական RAM զանգվածում (պիտակավորված Տվյալներ ): Սակայն RAM-ի նոր զանգվածը
(պիտակավորված Code ) կգրվի բացառապես կառավարման վահանակի միջոցով:
Մեզ պետք է չորս կոդ այն չորս գործողությունների համար, որոնք ցանկանում ենք անել նոր ավտոմատացված
հավելիչը: Այս կոդերը կարող են լինել այն ամենը, ինչ մենք ցանկանում ենք նշանակել: Ահա չորս
հնարավորություն.

Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
Կաս
եցնե FFh
լ
Այսպիսով, իմ նոր շարադրած օրինակում հավելումների երեք հավաքածուները կատարելու համար դուք պետք
է օգտագործեք կառավարման վահանակը՝ Code RAM զանգվածում հետևյալ արժեքները պահելու համար.

Դուք կարող եք համեմատել այս RAM զանգվածի բովանդակությունը RAM զանգվածի հետ, որը
պարունակում է այն տվյալները, որոնք մենք ցանկանում ենք ավելացնել (ցուցադրված է 211-րդ էջում):
Դուք նկատում եք, որ Code RAM-ի յուրաքանչյուր կոդը համապատասխանում է տվյալների RAM-ի
արժեքին, որը պետք է բեռնվի կամ ավելացվի կուտակիչում, կամ կոդը ցույց է տալիս, որ արժեքը պետք է հետ
պահվի հիշողության մեջ: Նման ձևով օգտագործվող թվային կոդերը հաճախ կոչվում են հրահանգների կոդեր ,
կամ գործառնական կոդեր , կամ (առավել հակիրճ) օպերացիոն կոդեր : Նրանք «հանձնարարում են»
սխեմաներին կատարել որոշակի «գործողություն»:
Ինչպես արդեն նշեցի, 8-բիթանոց սողնակի ելքը սկզբնական ավտոմատացված հավելիչում պետք է
մուտքագրվի Data RAM զանգվածին: Ահա թե ինչպես է աշխատում Store-ի հրահանգը։ Անհրաժեշտ է ևս
մեկ փոփոխություն. ի սկզբանե, 8-bit Adder-ի ելքը 8-բիթանոց սողնակի մուտքն էր: Բայց հիմա, Load
հրահանգը կատարելու համար , Data RAM զանգվածի ելքը երբեմն պետք է լինի 8-բիթանոց սողնակին
մուտքը: Անհրաժեշտ է 2-տողից 1-տող տվյալների ընտրիչ: Վերանայված ավտոմատացված հավելիչը նման է
հաջորդ էջի նկարին:
Այս դիագրամում մի քանի կտոր բացակայում է, բայց այն ցույց է տալիս 8-բիթանոց տվյալների բոլոր
ուղիները տարբեր բաղադրիչների միջև: 16-բիթանոց հաշվիչն ապահովում է RAM երկու զանգվածների
հասցե: Տվյալների RAM զանգվածի ելքը գնում է 8-bit Adder, ինչպես միշտ, կատարել Add հրահանգը:
Բայց 8-բիթանոց սողնակին մուտքը կարող է լինել կամ Data RAM զանգվածի ելքը ( Load հրահանգի
դեպքում ), կամ ավելացնողի ելքը ( Ավելացման հրահանգի դեպքում ): Այս իրավիճակը պահանջում է 2-ը-1
Ընտրիչ: Սողնակի ելքը պտտվում է դեպի ավելացնողը, ինչպես միշտ, բայց դա նաև Data RAM զանգվածի
տվյալների մուտքն է Store-ի հրահանգի համար :
Այն, ինչ բացակայում է այս դիագրամից, բոլոր փոքր ազդանշաններն են, որոնք վերահսկում են այս
բաղադրիչները, որոնք միասին հայտնի են որպես հսկիչ ազդանշաններ: Դրանք ներառում են Clock և Clear
մուտքերը 16-բիթանոց հաշվիչին, Clock և Clear մուտքերը 8-բիթանոց սողնակին, Write մուտքագրումը
Data RAM զանգվածին և Select մուտքագրումը 2-ից 1 ընտրիչին: Այս ազդանշաններից մի քանիսն
ակնհայտորեն հիմնված կլինեն Code RAM զանգվածի ելքի վրա: Օրինակ, Select մուտքագրումը 2-ից 1
Ընտրիչին պետք է լինի 0 (ընտրելով Data RAM-ի ելքը), եթե Code RAM զանգվածի ելքը ցույց է տալիս
Load հրահանգ : Data RAM զանգվածում Write մուտքագրումը պետք է լինի 1 միայն այն դեպքում, երբ
opcode-ը Store-ի հրահանգ է: Այս հսկիչ ազդանշանները կարող են առաջանալ տրամաբանական
դարպասների տարբեր համակցություններով:
Լրացուցիչ սարքավորումների նվազագույն քանակի և նոր opcode-ի ավելացմամբ մենք կարող ենք նաև
համոզել այս շղթան հանել մի թիվը կուտակիչի արժեքից: Առաջին քայլը գործառնական ծածկագրերի
աղյուսակի ընդլայնումն է.

Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
հան
21ժ
ել
Կաս
եցնե FFh
լ

Ավելացնել և հանել կոդերը տարբերվում են միայն կոդի արժեքի ամենաքիչ կարևոր բիթով, որը մենք
կանվանենք C 0 : Եթե գործողության կոդը 21 ժամ է, ապա սխեման պետք է անի նույն բանը, ինչ անում է Add
հրահանգի դեպքում, բացառությամբ, որ տվյալների RAM զանգվածից դուրս եկող տվյալները շրջվում են,
նախքան այն մտնեն ավելացուցիչ, և փոխադրման մուտքագրումը դեպի գումարիչը սահմանված է 1. C 0
ազդանշանը կարող է կատարել երկու առաջադրանքներն էլ այս վերանայված ավտոմատացված գումարիչում,
որը ներառում է ինվերտոր.
Հիմա ենթադրենք, որ ուզում ենք միասին գումարել 56h և 2Ah, ապա գումարից հանել 38h: Դուք կարող եք
դա անել հետևյալ կոդերով և երկու RAM զանգվածներում պահվող տվյալների միջոցով.
Load գործողությունից հետո կուտակիչը պարունակում է 56h արժեքը: Ավելացնել գործողությունից հետո
կուտակիչը պարունակում է 56h և 2Ah կամ 80h գումարը: Subtract գործողությունը հանգեցնում է
տվյալների RAM զանգվածի (38h) հաջորդ արժեքի բիթերի շրջմանը: Շրջված C7h արժեքը ավելացվում է
80h-ի, իսկ ավելողի փոխադրման մուտքագրումը սահմանվում է 1:

Արդյունքը 48ժ. (Տասնորդականում 86-ին գումարած 42 հանած 56-ը հավասար է 72-ի):


Մշտական խնդիր, որը դեռ պատշաճ կերպով չի լուծվել, 8-բիթանոց տվյալների սակավ լայնությունն է
ավելացնողի և մնացած ամեն ինչ, որ կցված է դրան: Նախկինում միակ լուծումը, որը ես առաջարկել եմ,
երկու 8-բիթանոց ավելացուցիչների (և հիմնականում մնացած ամեն ինչից երկուսը) միացնելն է՝
16-բիթանոց սարքեր ստանալու համար:
Բայց շատ ավելի էժան լուծում հնարավոր է: Ենթադրենք, որ ցանկանում եք ավելացնել երկու 16-բիթանոց
թիվ, օրինակ.

Այս 16-բիթանոց հավելումը նույնն է, ինչ այս ամենաաջ բայթը առանձին ավելացնելը (հաճախ կոչվում է
ցածր կարգի բայթ).

և այնուհետև ամենաձախ կամ բարձր կարգի բայթը.


99D7h արդյունքի համար։ Այսպիսով, եթե երկու 16-բիթանոց թվերը պահենք հիշողության մեջ այսպես.

D7h արդյունքը կպահվի 0002h հասցեում, իսկ 99h արդյունքը կպահվի 0005h հասցեում:
Իհարկե, սա անընդհատ չի աշխատի: Այն աշխատում է այն թվերի համար, որոնք ես ընտրել եմ որպես օրինակ,
բայց ի՞նչ, եթե երկու 16-բիթանոց համարները, որոնք պետք է ավելացվեն, լինեին 76ABh և 236Ch: Այդ
դեպքում, 2 ցածր կարգի բայթ ավելացնելը հանգեցնում է հետևյալի.

Այս փոխանցումը պետք է ավելացվի 2 բարձր կարգի բայթերի գումարին.

9A17h վերջնական արդյունքի համար:


Կարո՞ղ ենք ուժեղացնել մեր ավտոմատացված ավելացման մեքենայի սխեմաներ՝ երկու 16-բիթանոց թվեր
ճիշտ ավելացնելու համար: Այո, մենք կարող ենք. Այն ամենը, ինչ մեզ անհրաժեշտ է, այն է, որ պահենք
«Care Out» բիթը 8-բիթանոց Ավելացնողից, երբ առաջին գումարումը կատարվի, և այնուհետև
օգտագործենք «Cry Out» բիթը որպես «Cry Out» բիթ հաջորդ ավելացման համար: Ինչպե՞ս կարելի է մի
քիչ փրկել: 1-բիթանոց սողնակով, իհարկե; այս անգամ սողնակը հայտնի է որպես «Carry latch» :
Carry սողնակն օգտագործելու համար անհրաժեշտ է գործառնական այլ կոդ: Եկեք այն անվանենք Add with
Carry : Երբ դուք 8-բիթանոց թվեր եք գումարում, օգտագործում եք սովորական հին Ավելացնել հրահանգը:
Փոխադրման մուտքագրումը դեպի ավելացուցիչը 0 է, իսկ հաղորդիչից ստացվող ելքը փակվում է Carry
սողնակում (թեև այն ընդհանրապես պետք չէ օգտագործել):
Եթե ցանկանում եք միասին ավելացնել երկու 16-բիթանոց թվեր, դուք օգտագործում եք սովորական
Ավելացնել հրահանգը ցածր կարգի բայթեր ավելացնելու համար: Փոխադրման մուտքագրումը դեպի
գումարիչը 0 է, իսկ փոխանցման ելքը փակվում է Carry սողնակում: 2 բարձր կարգի բայթ ավելացնելու
համար դուք օգտագործում եք նոր Add with Carry հրահանգը: Այս դեպքում երկու թվերն ավելացվում են՝
օգտագործելով «Carry» սողնակի ելքը՝ որպես գումարիչին փոխանցվող մուտք: Այսպիսով, եթե առաջին
հավելումը հանգեցրեց տեղափոխման, ապա այդ տեղափոխման բիթն օգտագործվում է երկրորդ գումարման
մեջ: Եթե տեղափոխում չի ստացվում, ապա Carry սողնակից ելքը 0 է:
Եթե դուք հանում եք մեկ 16-բիթանոց թիվը մյուսից, ձեզ հարկավոր է ևս մեկ նոր հրահանգ. սա կոչվում է
Subtract with Borrow : Սովորաբար Subtract հրահանգը պահանջում է, որ դուք շրջեք
ենթակառուցվածքը և սահմանեք 1-ի փոխադրման մուտքագրումը: 1-ի կատարումը նորմալ է և սովորաբար
պետք է անտեսվի: Այնուամենայնիվ, եթե հանում եք 16-բիթանոց թիվը, այդ ելքը պետք է պահվի Carry
սողնակում: Երկրորդ հանման դեպքում գումարողին փոխանցվող մուտքը պետք է սահմանվի որպես Carry
սողնակ:
Նոր Add with Carry և Subtract with Borrow օպերացիաներով մենք մինչ այժմ ունենք ընդհանուր յոթ
օպերատիվ կոդ.

Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
հան
21ժ
ել
Ավել
ացն
ել
22ժ
Car
ry-ի
հետ
Նվա
զեցն
ել 23 ժ
պար
տքով
Կաս
եցնե FFh
լ

Ավելացնողին ուղարկված թիվը շրջվում է Subtract կամ Subtract with Borrow գործողության համար:
Ավելացնողի ելքը տվյալների մուտքագրումն է Carry սողնակին: Սողնակը միացված է ամեն անգամ, երբ
կատարվում է Add, Subtract, Add with Carry կամ Subtract with Borrow գործողությունը: 8-bit
Adder-ի փոխադրման մուտքագրումը սահմանվում է 1-ի, երբ կատարվում է Subtract գործողություն կամ
երբ Carry սողնակի տվյալների ելքը 1 է, և կատարվում է Add with Carry կամ Subtract with Borrow
գործողություն:
Հիշեք, որ Add with Carry հրահանգը հանգեցնում է նրան, որ 8-bit Adder-ի փոխադրման մուտքագրումը
սահմանվում է 1-ի միայն այն դեպքում, եթե նախորդ Add or Add with Carry հրահանգը հանգեցրել է ելք
ավելացնողի կողմից: Այսպիսով, դուք օգտագործում եք Add with Carry հրահանգը, երբ ավելացնում եք
բազմաբայթ թվեր, անկախ նրանից, թե այդ գործողությունն իրականում անհրաժեշտ է, թե ոչ: Նախկինում
ցուցադրված 16-բիթանոց հավելումը ճիշտ կոդավորելու համար դուք օգտագործում եք

Սա ճիշտ է աշխատում՝ անկախ թվերից:


Այս երկու նոր օպերացիոն կոդերի շնորհիվ մենք մեծապես ընդլայնել ենք մեքենայի շրջանակը: Մենք այլևս
սահմանափակված չենք 8-բիթանոց արժեքներ ավելացնելով: Add with Carry հրահանգի կրկնակի
օգտագործմամբ մենք այժմ կարող ենք ավելացնել 16-բիթանոց արժեքներ, 24-բիթանոց արժեքներ,
32-բիթանոց արժեքներ, 40-բիթանոց արժեքներ և այլն: Ենթադրենք, մենք ցանկանում ենք ավելացնել
7A892BCDh և 65A872FFh 32-բիթանոց արժեքները: Մեզ անհրաժեշտ է մեկ Add հրահանգ և երեք Add
with Carry հրահանգներ.
Իհարկե, իրականում այս թվերը հիշողության մեջ դնելը ամենաշատ վարձատրվող աշխատանքը չէ:
Երկուական թվերը ներկայացնելու համար ոչ միայն պետք է օգտագործեք անջատիչներ, այլև թվերը չեն
պահվում հաջորդական հասցեներում: Օրինակ՝ 7A892BCDh թիվը մտնում է 0000h, 0003h, 0006h և
0009h հասցեները՝ սկսած ամենաքիչ նշանակալից բայթով: Վերջնական արդյունք ստանալու համար դուք
պետք է ուսումնասիրեք 0002h, 0005h, 0008h և 000Bh հասցեներում գտնվող արժեքները:
Ավելին, մեր ավտոմատացված ավելացման ներկայիս դիզայնը թույլ չի տալիս արդյունքների կրկնակի
օգտագործումը հետագա հաշվարկներում: Ենթադրենք՝ ուզում ենք երեք 8-բիթանոց թիվ գումարել, ապա այդ
գումարից հանել 8-բիթանոց թիվ և պահպանել արդյունքը։ Դա կպահանջի Load հրահանգ, երկու Add
հրահանգ, Subtract և Store : Բայց ի՞նչ կլիներ, եթե մենք ցանկանայինք նաև այլ թվեր հանել այդ
սկզբնական գումարից: Այդ գումարը հասանելի չէ։ Մենք պետք է վերահաշվարկենք այն ամեն անգամ, երբ
դրա կարիքը ունենայինք:
Խնդիրն այն է, որ մենք ստեղծել ենք ավտոմատ հավելիչ, որը հասցեագրում է Code հիշողությանը և
տվյալների հիշողությանը միաժամանակ և հաջորդաբար՝ սկսած 0000h հասցեից: Կոդի հիշողության
յուրաքանչյուր հրահանգ համապատասխանում է նույն հասցեում գտնվող Տվյալների հիշողության մի վայրին:
Երբ Store-ի հրահանգը ինչ-որ բան պահում է Տվյալների հիշողության մեջ, այդ արժեքը հետագայում չի
կարող հետ բեռնվել կուտակիչում:
Այս խնդիրը շտկելու համար ես պատրաստվում եմ հիմնարար և տանջալից փոփոխություն կատարել
ավտոմատացված ավելացման մեջ, որը սկզբում խելագարորեն բարդ կթվա: Բայց ժամանակի ընթացքում դուք
կտեսնեք (հուսով եմ), որ դա ճկունության լայն դուռ է բացում:
Գնացի՜նք. Ներկայումս մենք ունենք յոթ օպերացիոն ծածկագիր.
Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
հան
21ժ
ել
Ավել
ացն
ել
22ժ
Car
ry-ի
հետ
Նվա
զեցն
ել 23 ժ
պար
տքով
Կաս
եցնե FFh
լ

Այս կոդերից յուրաքանչյուրը հիշողության մեջ զբաղեցնում է 1 բայթ: Բացառությամբ Halt կոդի, ես այժմ
ցանկանում եմ, որ այս հրահանգներից յուրաքանչյուրը պահանջի 3 բայթ հիշողություն: Առաջին բայթը կլինի
հենց կոդը, իսկ հաջորդ 2 բայթը կլինի 16-բիթանոց հիշողության տեղ: Load հրահանգի համար այդ հասցեն
ցույց է տալիս մի տեղ Data RAM զանգվածում, որը պարունակում է կուտակիչում բեռնվող բայթը: Add,
Subtract, Add with Carry և Subtract with Borrow հրահանգների համար այդ հասցեն ցույց է տալիս
այն բայթի գտնվելու վայրը, որը պետք է ավելացվի կամ հանվի կուտակիչին: Խանութի հրահանգի համար
հասցեն ցույց է տալիս, թե որտեղ պետք է պահվի կուտակիչի պարունակությունը:
Օրինակ, ամենապարզ գործը, որը կարող է անել ընթացիկ ավտոմատացված գումարիչը, երկու թվեր միասին
ավելացնելն է: Դա անելու համար դուք կարգավորում եք Code և Data RAM զանգվածները հետևյալ կերպ.
Վերանայված ավտոմատացված գումարման մեջ յուրաքանչյուր հրահանգ (բացի Halt-ից ) պահանջում է 3
բայթ.

Հրահանգի կոդերից յուրաքանչյուրին (բացի Halt-ից ) հաջորդում է 2 բայթ, որոնք ցույց են տալիս
16-բիթանոց հասցե Data RAM զանգվածում: Այս երեք հասցեները լինում են 0000h, 0001h և 0002h,
բայց դրանք կարող են լինել ցանկացած բան:
Ավելի վաղ ես ցույց տվեցի, թե ինչպես կարելի է ավելացնել 16-բիթանոց զույգ թվեր, մասնավորապես՝
76ABh և 232 Ch, օգտագործելով Add and Add with Carry հրահանգները: Բայց մենք պետք է պահեինք
այս թվերի 2 ցածր կարգի բայթերը 0000h և 0001h հիշողության վայրերում, իսկ 2 բարձր կարգի բայթերը
0003h և 0004h: Հավելման արդյունքը պահվել է 0002h և 0005h:
Այս փոփոխությամբ մենք կարող ենք երկու թվերն ու արդյունքը պահել ավելի ռացիոնալ ձևով, և գուցե
հիշողության մի տարածքում, որը նախկինում երբեք չենք օգտագործել.

Այս վեց վայրերը պարտադիր չէ, որ բոլորը միասին լինեն այսպես: Դրանք կարող են ցրվել ցանկացած
վայրում ամբողջ 64 ԿԲ տվյալների RAM զանգվածում: Այս հիշողության վայրերում այս արժեքներն
ավելացնելու համար դուք պետք է կարգավորեք հրահանգները Code RAM զանգվածում, ինչպես հետևյալը.
Ուշադրություն դարձրեք, որ 4001h և 4003h հասցեներում տեղակայված 2 ցածր կարգի բայթերը սկզբում
ավելացվում են, իսկ արդյունքը պահվում է 4005h հասցեում: Բարձր կարգի 2 բայթերը (4000h և 4002h
հասցեներում) ավելացվում են Add with Carry հրահանգով, և արդյունքը պահվում է 4004h հասցեում։ Եվ
եթե մենք հանենք «Halt» հրահանգը և ավելացնենք ավելի շատ հրահանգներ Code հիշողության մեջ, ապա
հետագա հաշվարկը կարող է հետագայում օգտագործել սկզբնական թվերը և դրանց գումարը՝ պարզապես
հղում անելով այս հիշողության հասցեներին:
Այս դիզայնի իրականացման բանալին կոդի RAM զանգվածի տվյալների թողարկումն է երեք 8-բիթանոց
սողնակների մեջ: Այս սողնակներից յուրաքանչյուրը պահում է 3 բայթ հրահանգի բայթերից մեկը: Առաջին
սողնակը պահում է հրահանգի կոդը, երկրորդ սողնակը պահում է հասցեի բարձր կարգի բայթը, իսկ երրորդ
սողնակը պահում է ցածր կարգի հասցեի բայթը: Երկրորդ և երրորդ սողնակների ելքը դառնում է Data RAM
զանգվածի 16-բիթանոց հասցեն.
Հիշողությունից հրահանգ ստանալու գործընթացը հայտնի է որպես հրահանգի բեռնում : Մեր մեքենայում
յուրաքանչյուր հրահանգ ունի 3 բայթ երկարություն, և այն վերցվում է հիշողությունից 1 բայթ
միաժամանակ; հրահանգների բեռնումը պահանջում է ժամացույցի ազդանշանի երեք ցիկլ: Ամբողջ
հրահանգների ցիկլը պահանջում է Ժամացույցի ազդանշանի չորրորդ ցիկլը: Այս փոփոխությունները,
անշուշտ, բարդացնում են կառավարման ազդանշանները:
Ասում են, որ մեքենան կատարում է հրահանգ, երբ այն կատարում է մի շարք գործողություններ՝ ի
պատասխան հրահանգի կոդի: Բայց այնպես չէ, որ մեքենան կենդանի է կամ որևէ այլ բան: Այն չի վերլուծում
մեքենայի կոդը և որոշում, թե ինչ անել: Մեքենայի յուրաքանչյուր կոդ պարզապես յուրօրինակ կերպով
հրահրում է տարբեր կառավարման ազդանշաններ, որոնք ստիպում են մեքենան կատարել տարբեր բաներ:
Ուշադրություն դարձրեք, որ այս մեքենան ավելի բազմակողմանի դարձնելով, մենք նաև դանդաղեցրել ենք
այն: Օգտագործելով նույն օսցիլյատորը՝ այն թվեր է ավելացնում առաջին ավտոմատացված գումարողի
արագության միայն մեկ չորրորդով, որը ես ցույց տվեցի այս գլխում: Սա ինժեներական սկզբունքի արդյունք է,
որը հայտնի է որպես TANSTAAFL (արտասանվում է tans toffle ), որը նշանակում է «Անվճար ճաշ չկա»:
Սովորաբար, երբ մեքենան մի կերպ ավելի լավն եք դարձնում, արդյունքում տուժում է մեկ այլ բան:
Եթե դուք իրականում նման մեքենա կառուցեիք ռելեներից, ապա շղթայի հիմնական մասը ակնհայտորեն
կկազմեն 64 ԿԲ RAM երկու զանգվածները: Իրոք, շատ ավելի վաղ դուք կարող էիք խնայել այս
բաղադրիչները և որոշել, որ սկզբում ձեզ անհրաժեշտ կլինի ընդամենը 1 ԿԲ հիշողություն: Եթե համոզվեիք,
որ ամեն ինչ պահել եք 0000h-ից մինչև 03FFh հասցեներում, 64 ԿԲ-ից քիչ հիշողություն օգտագործելը
լավ կստացվի:
Այնուամենայնիվ, դուք, հավանաբար, ոգևորված չէիք, որ ձեզ անհրաժեշտ է երկու RAM զանգված: Իսկ
իրականում դու չես անում: Ես ի սկզբանե ներկայացրեցի RAM-ի երկու զանգված՝ մեկը կոդի և մեկը
տվյալների համար, որպեսզի ավտոմատացված գումարողի ճարտարապետությունը հնարավորինս պարզ և
պարզ լինի: Բայց հիմա, երբ մենք որոշել ենք յուրաքանչյուր հրահանգը դարձնել 3 բայթ, իսկ երկրորդ և
երրորդ բայթերը ցույց են տալիս հասցեն, որտեղ գտնվում են տվյալները, այլևս անհրաժեշտ չէ ունենալ
երկու առանձին RAM զանգված: Ե՛վ կոդը, և՛ տվյալները կարող են պահվել RAM-ի նույն զանգվածում:
Դա անելու համար մենք պետք է ունենանք 2-ից 1 ընտրիչ՝ որոշելու, թե ինչպես է հասցեագրված RAM
զանգվածը: Սովորաբար հասցեն 16-բիթանոց հաշվիչն է, ինչպես նախկինում: RAM Data Out-ը դեռ
միացված է երեք սողնակներին, որոնք փակում են հրահանգի կոդը և 2 հասցեի բայթ, որոնք ուղեկցում են
յուրաքանչյուր հրահանգին: Բայց 16-բիթանոց հասցեն երկրորդ մուտքն է 2-ից-1 ընտրիչին: Հասցեի
փակումից հետո այս ընտրիչը թույլ է տալիս փակված հասցեն լինել RAM զանգվածի հասցեի մուտքագրումը.

Մենք շատ առաջընթաց ենք գրանցել: Այժմ հնարավոր է մուտքագրել հրահանգները և տվյալները մեկ RAM
զանգվածում: Օրինակ, հաջորդ էջի դիագրամը ցույց է տալիս, թե ինչպես կարելի է գումարել երկու
8-բիթանոց թվեր և հանել երրորդը:
Ինչպես միշտ, հրահանգները սկսվում են 0000h-ից, քանի որ հենց այստեղ է, որ հաշվիչը սկսում է մուտք
գործել RAM զանգված, երբ այն վերականգնվել է: Վերջնական Halt հրահանգը պահվում է 000Ch
հասցեում: Մենք կարող էինք երեք թվերն ու արդյունքները պահել RAM զանգվածի ցանկացած վայրում
(իհարկե, բացառությամբ առաջին 13 բայթերի, քանի որ այդ հիշողության վայրերը զբաղված են
հրահանգներով), բայց մենք ընտրեցինք տվյալները՝ սկսած 0010h հասցեից:
Հիմա ենթադրենք, որ դուք հայտնաբերեցիք, որ այդ արդյունքին պետք է ավելացնեք ևս երկու թիվ: Դե, դուք
կարող եք փոխարինել բոլոր այն հրահանգները, որոնք դուք մուտքագրել եք նոր հրահանգներով, բայց միգուցե
դուք չեք ցանկանում դա անել: Միգուցե դուք կնախընտրեիք պարզապես շարունակել նոր հրահանգները՝
սկսած այս հրահանգների վերջից՝ նախ փոխարինելով « Halt» հրահանգը 000Ch հասցեում նոր Load
հրահանգով: Բայց ձեզ հարկավոր է նաև երկու նոր Ավելացնել հրահանգներ, Store-ի հրահանգ և նոր
Կասեցնել հրահանգ: Ձեր միակ խնդիրն այն է, որ դուք ունեք որոշ տվյալներ պահված 0010h հասցեում:
Դուք պետք է տեղափոխեք այդ տվյալները ինչ-որ տեղ ավելի բարձր հիշողության հասցեով: Եվ հետո դուք
պետք է փոխեք հրահանգները, որոնք վերաբերում են այդ հիշողության հրահանգներին:
Հմմ, դու կարծում ես. Միգուցե կոդի և տվյալների միավորումը մեկ RAM զանգվածի մեջ այնքան էլ թեժ
գաղափար չէր, ի վերջո: Բայց ես ձեզ վստահեցնում եմ, որ նման խնդիր վաղ թե ուշ կառաջանար: Այսպիսով,
եկեք լուծենք այն: Այս դեպքում, միգուցե այն, ինչ կցանկանայիք անել, այն է, որ մուտքագրեք նոր
հրահանգները՝ սկսած 0020h հասցեից և նոր տվյալները 0030h հասցեում:

Ուշադրություն դարձրեք, որ առաջին Load հրահանգը վերաբերում է հիշողության 0013h դիրքին, որտեղ
պահվել է առաջին հաշվարկի արդյունքը:
Այսպիսով, այժմ մենք ունենք որոշ հրահանգներ՝ սկսած 0000h հասցեից, որոշ տվյալներ՝ սկսած 0010h-ից,
ևս մի քանի հրահանգներ՝ 0020h, և մի քանի այլ տվյալներ՝ 0030h: Մենք ցանկանում ենք թույլ տալ, որ
ավելացման ավտոմատացված մեքենան սկսի 0000h-ից և կատարի բոլոր հրահանգները:
Մենք գիտենք, որ մենք պետք է հեռացնենք 000Ch հասցեում գտնվող այդ Halt հրահանգը, և հեռացնել
ասելով ես իսկապես նկատի ունեմ այն փոխարինել այլ բանով: Բայց դա բավարա՞ր է։ Խնդիրն այն է, որ ինչով
էլ փոխարինենք Halt հրահանգը, այն մեկնաբանվելու է որպես հրահանգի բայթ: Եվ այսպես, դրանից հետո
յուրաքանչյուր 3 բայթ պահվող բայթերը՝ 000Fh, 0012h, և 0015h, և 0018h, և 001Bh և 001Eh: Իսկ
եթե այս բայթերից մեկը լինի 11 ժամ: Դա խանութի հրահանգն է: Իսկ ի՞նչ կլիներ, եթե այդ Store-ի
հրահանգին հետևող 2 բայթերը պատահաբար վերաբերում էին 0023h հասցեին: Դա կստիպի մեքենան գրել
կուտակիչի բովանդակությունը այդ հասցեում: Բայց այդ հասցեն արդեն մի կարևոր բան է պարունակում։ Եվ
նույնիսկ եթե նման բան տեղի չունենա, հաջորդ հրահանգի բայթը, որը հավաքողը վերականգնում է
հիշողությունից 001Eh հասցեից հետո, կլինի 0021h հասցեում, ոչ թե 0020h, որտեղ մեր հաջորդ իրական
հրահանգն է պատահում:
Արդյո՞ք մենք բոլորս համաձա՞յն ենք, որ չենք կարող պարզապես հեռացնել Halt հրահանգը 000Ch
հասցեում և հուսալ լավագույնին:
Բայց այն, ինչով մենք կարող ենք փոխարինել, նոր հրահանգ է, որը կոչվում է Jump : Դա էլ ավելացնենք մեր
ռեպերտուարին։

Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
հան
21ժ
ել
Ավել
ացն
ել
22ժ
Car
ry-ի
հետ
Նվա
զեցն
ել 23 ժ
պար
տքով
Ցատ
30 ժ
կել
Կաս
եցնե FFh
լ

Սովորաբար, այս ավտոմատացված հավելիչը հաջորդաբար ուղղում է RAM զանգվածին: Անցնելու հրահանգը
ստիպում է մեքենան փոխել այդ օրինաչափությունը: Փոխարենը, այն սկսում է հասցեագրել RAM
զանգվածին այլ նշված հասցեով: Նման հրահանգը երբեմն կոչվում է նաև մասնաճյուղի հրահանգ կամ Գոտո ,
ինչպես «գնա մեկ այլ տեղ»:
Նախորդ օրինակում մենք կարող ենք փոխարինել Halt հրահանգը 000Ch հասցեում Jump հրահանգով.
Jump հրահանգի կոդը է : Հետևյալ 16-բիթանոց հասցեն ցույց է տալիս հաջորդ հրահանգի հասցեն, որը
պետք է կարդալ ավտոմատացված գումարիչը:
Այսպիսով, նախորդ օրինակում ավտոմատացված գումարողը սկսվում է 0000h-ից, ինչպես միշտ, և
կատարում է Load հրահանգ, Add , Subtract և Store : Այնուհետև այն կատարում է Jump հրահանգը և
շարունակվում է 0020h հասցեում՝ Load-ով , երկու Ավելացնել հրահանգներով, Store-ով և վերջապես
կանգ առնելով :
Jump հրահանգը ազդում է 16-բիթանոց հաշվիչի վրա: Ամեն անգամ, երբ ավտոմատացված հավելիչը
հանդիպում է Jump հրահանգի, հաշվիչը պետք է ինչ-որ կերպ ստիպված լինի դուրս բերել այդ նոր հասցեն,
որը հետևում է Jump հրահանգի կոդին: Սա իրականացվում է՝ օգտագործելով 16-բիթանոց հաշվիչը կազմող
D- տիպի ֆլիպ-ֆլոպների Preset և Clear մուտքերը.

Հիշեք, որ Նախադրված և Մաքրել մուտքերը երկուսն էլ պետք է լինեն 0 նորմալ աշխատանքի համար: Բայց
եթե Preset-ը 1 է, Q-ն դառնում է 1: Իսկ եթե Clear-ը 1 է, Q-ն դառնում է 0:
Եթե ցանկանում եք բեռնել մեկ flip-flop նոր արժեքով (որը ես կկոչեմ A հասցեի համար), կարող եք լարել
այն այսպես.
Սովորաբար Set It ազդանշանը 0 է: Այդ դեպքում, Flip-flop-ի Նախադրված մուտքը 0 է: Clear
մուտքագրումը նույնպես 0 է, եթե Reset ազդանշանը 1-ն է: Սա թույլ է տալիս, որ flip-flop-ը մաքրվի Set
It-ից անկախ: ազդանշան. Երբ Set It ազդանշանը 1 է, Preset մուտքը կլինի 1, իսկ Clear մուտքը կլինի 0,
եթե A-ն 1 է: Եթե A-ն 0 է, Preset մուտքը կլինի 0, իսկ Clear մուտքը կլինի 1: Սա նշանակում է, որ Q կլինի
սահմանել A-ի արժեքը:
Մեզ պետք է դրանցից մեկը 16-բիթանոց հաշվիչի յուրաքանչյուր բիտի համար: Որոշակի արժեքով
բեռնվելուց հետո հաշվիչը կշարունակի հաշվել այդ արժեքից:
Հակառակ դեպքում փոփոխությունները լուրջ չեն: 16-բիթանոց հասցեն, որը փակված է RAM զանգվածից,
մուտք է և՛ 2-ից 1 ընտրիչին (որը թույլ է տալիս այս հասցեն լինել հասցեի մուտքագրում RAM զանգվածին),
և՛ 16-բիթանոց հաշվիչի՝ Set It ֆունկցիայի համար:

Ակնհայտ է, որ մենք պետք է ապահովենք, որ Set It ազդանշանը լինի 1 միայն այն դեպքում, եթե հրահանգի
կոդը 30 ժամ է, և հասցեն փակված է:
Jump հրահանգը , անշուշտ, օգտակար է: Բայց դա գրեթե այնքան օգտակար չէ, որքան հրահանգը, որը երբեմն
ցատկում է, բայց ոչ միշտ: Նման հրահանգը հայտնի է որպես պայմանական թռիչք , և , հավանաբար,
լավագույն միջոցը՝ ցույց տալու, թե որքան օգտակար կարող է լինել նման հրահանգը, հարց տալն է . Օրինակ,
ինչպե՞ս կարող ենք արդյունք ստանալ այնպիսի պարզ բանի համար, ինչպիսին A7h-ն անգամ 1Ch-ն է:
Հեշտ, չէ՞: Երկու 8-բիթանոց արժեքների բազմապատկման արդյունքը 16-բիթանոց արդյունք է:
Հարմարության համար բազմապատկման մեջ ներգրավված բոլոր երեք թվերն արտահայտվում են որպես
16-բիթանոց արժեքներ: Առաջին աշխատանքն է որոշել, թե որտեղ եք ցանկանում տեղադրել թվերն ու
արտադրանքը.

Բոլորը գիտեն, որ A7h-ը և 1Ch-ը (որ տասնորդականում 28 է) բազմապատկելը նույնն է, ինչ A7h-ի 28
գումարումը: Այսպիսով, 16-բիթանոց գտնվելու վայրը 1004h և 1005h հասցեներում իրականում կլինի
կուտակված գումարում: Ահա այդ վայրում մեկ անգամ A7h ավելացնելու կոդը.

Այս վեց հրահանգների ավարտից հետո 1004h և 1005h հիշողության վայրերում 16-բիթանոց արժեքը
կկազմի A7h անգամ 1: Հետևաբար, այս վեց հրահանգները պետք է կրկնվեն ևս 27 անգամ, որպեսզի այդ
16-բիթանոց արժեքը հավասար լինի A7h-ի և 1Ch-ի: . Դուք կարող եք հասնել դրան՝ մուտքագրելով այս վեց
հրահանգները ևս 27 անգամ՝ սկսած 0012h հասցեից: Կամ կարող եք 0012h-ին տեղադրել «Կանգ»
հրահանգ և սեղմել «Վերականգնել» կոճակը 28 անգամ՝ վերջնական պատասխանը ստանալու համար:
Իհարկե, այս երկու տարբերակներից ոչ մեկն իդեալական չէ: Նրանք երկուսն էլ պահանջում են, որ դուք
ինչ-որ բան անեք՝ մուտքագրեք մի շարք հրահանգներ կամ սեղմեք «Վերականգնել» կոճակը, մի քանի անգամ,
որը համաչափ է թվերից մեկի բազմապատկման հետ: Իհարկե, դուք չէիք ցանկանա ընդհանրացնել այս
գործընթացը 16-բիթանոց արժեքների համար, որոնք ցանկանում եք բազմապատկել:
Jump հրահանգը դնեք 0012h: Այս հրահանգը ստիպում է հաշվիչը նորից սկսել 0000h-ից.

Սա, անշուշտ, կատարում է հնարք (մի տեսակ): Առաջին անգամ 16-բիթանոց արժեքը 1004h և 1005h
հիշողության վայրերում հավասար կլինի A7h 1-ի: Այնուհետև Jump հրահանգը կվերադառնա վերև:
Երկրորդ փուլի վերջում 16-բիթանոց արդյունքը կհավասարվի A7h-ի 2-ի: Ի վերջո, այն կհավասարվի
A7h-ի անգամ 1Ch-ի, բայց դրան արգելք չկա: Այն պարզապես շարունակում է գնալ և գնալ և գնալ:
Jump հրահանգն է , որը նորից սկսում է գործընթացը միայն այնքան անգամ, որքան անհրաժեշտ է: Դա
պայմանական թռիչքն է: Եվ դա իրականում այնքան էլ դժվար չէ իրականացնել: Առաջին բանը, որ մենք
կցանկանայինք ավելացնել, 1-բիթանոց սողնակն է, որը նման է Carry սողնակին: Սա կկոչվի Զրո սողնակ ,
քանի որ այն կփակվի 1-ի արժեքը միայն այն դեպքում, եթե 8-բիթանոց ավելացնողի ելքը բոլորը զրո են:

Այդ 8-բիթանոց NOR դարպասի ելքը 1 է միայն այն դեպքում, եթե բոլոր մուտքերը 0 են: Ինչպես «Clock»
մուտքագրումը «Carry» սողնակում, «Zero» սողնակի Clock մուտքագրումը արժեք է փակում միայն այն
դեպքում, երբ «Ավելացնել, հանել, ավելացնել «Carry»-ով կամ ավելացնել : Subtract with Borrow
հրահանգը կատարվում է: Այս փակված արժեքը հայտնի է որպես Զրո դրոշ : Զգույշ եղեք, որովհետև կարող է
թվալ, թե այն աշխատում է հետընթաց. Զրոյական դրոշակը 1 է, եթե գումարողի ելքը բոլոր զրոներն են, և Զրո
դրոշակը 0 է, եթե գումարողի ելքը բոլոր զրոները չէ:
Carry սողնակով և Zero սողնակով մենք կարող ենք ընդլայնել մեր հրահանգների ռեպերտուարը չորսով.

Գոր
ծողո Կոդ
ւթյու
ն
Բեռն
10 ժ
ել
Խան
11ժ
ութ
Ավել
ացն 20 ժ
ել
հան
21ժ
ել
Ավել
ացն
ել
22ժ
Car
ry-ի
հետ
Նվա
զեցն
ել 23 ժ
պար
տքով
Ցատ
30 ժ
կել
Անց
նել,
31ժ
եթե
զրո
Jum
p If
32 ժ
Car
ry
Անց
նել,
եթե 33 ժ
ոչ
զրո
Անց
նել,
եթե
34 ժ
չկա
տար
ել
Կաս
եցնե FFh
լ

Օրինակ, Jump If Not Zero հրահանգը ցատկում է նշված հասցե միայն այն դեպքում, եթե Zero կողպեքի
ելքը 0 է: Այլ կերպ ասած, թռիչք չի լինի , եթե վերջին Add, Subtract, Add with Carry կամ Subtract
with Borrow հրահանգը : հանգեցրեց 0-ի: Այս դիզայնի իրականացումը պարզապես հավելում է
կառավարման ազդանշաններին, որոնք իրականացնում են սովորական Jump հրամանը. Եթե հրահանգը Jump
If Not Zero է , ապա Set It ազդանշանը 16-բիթանոց հաշվիչի վրա գործարկվում է միայն այն դեպքում, եթե
Zero դրոշը: 0 է։
Այժմ այն ամենը, ինչ անհրաժեշտ է վերևում ցուցադրված կոդը երկու թվով բազմապատկելու համար,
հետևյալ հրահանգներն են՝ սկսած 0012h հասցեից.

Առաջին անգամ 16-բիթանոց դիրքը 0004h և 0005h պարունակում է A7h 1 անգամ, ինչպես մենք արդեն
հաստատել ենք: Այստեղ հրահանգները բեռնում են բայթը 1003h վայրից կուտակիչում: Սա 1 Ch. Այս
բայթը ավելացվում է արժեքին 001Eh վայրում: Պատահում է, որ սա կանգառի հրահանգն է, բայց, իհարկե,
դա նաև վավեր թիվ է: FFh 1Ch-ին ավելացնելը նույնն է, ինչ 1 Ch-ից 1 հանելը, հետևաբար արդյունքը
կլինի 1Bh: Սա 0 չէ, ուստի Zero դրոշը 0 է: 1Bh բայթը պահվում է 1003h հասցեում: Հաջորդը Jump If
Not Zero հրահանգն է: Զրոյական դրոշակը սահմանված չէ 1-ի վրա, ուստի թռիչքը տեղի է ունենում:
Հաջորդ հրահանգը 0000h հասցեում գտնվող հրահանգն է:
Հիշեք, որ Store-ի հրահանգը չի ազդում Zero դրոշի վրա: Zero դրոշի վրա ազդում է միայն Add, Subtract,
Add with Carry կամ Subtract with Borrow հրահանգը, ուստի այն կմնա նույն արժեքը, որը սահմանվել
էր այս հրահանգներից մեկի վերջին անգամ:
Երկրորդ անգամ 16-բիթանոց դիրքը 1004h և 1005h կպարունակի A7h արժեքը՝ 2 անգամ: 1Bh արժեքը
ավելացվում է FFh-ին՝ 1Ah արդյունք ստանալու համար: Դա 0 չէ, ուստի վերադարձ դեպի վերև:
Քսանութերորդ անգամ 16-բիթանոց գտնվելու վայրը 1004h և 1005h կպարունակի A7h արժեքը 1Ch-ի
վրա: 1003h գտնվելու վայրում կլինի 1 արժեքը: Սա կավելացվի FFh-ին և արդյունքը կլինի զրո: Զրոյական
դրոշը կսահմանվի: Այսպիսով, Jump If Not Zero հրահանգը հետ չի անցնի 0000h: Փոխարենը, հաջորդ
հրահանգը կանգառ է : Մենք ավարտեցինք:
Ես հիմա պնդում եմ, որ վերջապես մենք հավաքել ենք սարքաշարի մի կտոր, որը մենք կարող ենք ազնվորեն
անվանել համակարգիչ : Անշուշտ, դա պարզունակ համակարգիչ է, բայց, այնուամենայնիվ, այն համակարգիչ
է: Տարբերությունը պայմանական թռիչքն է: Վերահսկվող կրկնությունը կամ շրջադարձն այն է, ինչը
բաժանում է համակարգիչները հաշվիչներից: Ես հենց նոր ցույց տվեցի, թե ինչպես է պայմանական թռիչքի
հրահանգը թույլ տալիս այս մեքենային բազմապատկել երկու թվեր: Նույն կերպ այն կարող է նաև բաժանել
երկու թվեր։ Ավելին, այն չի սահմանափակվում 8-բիթանոց արժեքներով: Այն կարող է գումարել, հանել,
բազմապատկել և բաժանել 16-բիթանոց, 24-բիթանոց, 32-բիթանոց կամ նույնիսկ ավելի մեծ թվեր: Եվ եթե
դա կարող է անել, կարող է հաշվարկել քառակուսի արմատները, լոգարիթմները և եռանկյունաչափական
ֆունկցիաները:
Այժմ, երբ մենք համակարգիչ ենք հավաքել, կարող ենք սկսել օգտագործել այնպիսի բառեր, որոնք հնչում են,
կարծես մենք խոսում ենք համակարգիչների մասին:
Կոնկրետ համակարգիչը, որը մենք հավաքել ենք, դասակարգվում է որպես թվային համակարգիչ, քանի որ այն
աշխատում է դիսկրետ թվերով: Ժամանակին կային նաև անալոգային համակարգիչներ, որոնք այժմ
հիմնականում անհետացել են: (Թվային տվյալները դիսկրետ տվյալներ են . տվյալներ, որոնք ունեն որոշակի
հստակ արժեքներ: Անալոգային տեղեկատվությունը շարունակական է և տատանվում է ամբողջ տիրույթում):
Թվային համակարգիչը բաղկացած է չորս հիմնական մասերից՝ պրոցեսոր, հիշողություն , առնվազն մեկ
մուտքային սարք և առնվազն մեկ ելքային սարք: Մեր մեքենայում հիշողությունը 64 ԿԲ RAM զանգված է:
Մուտքային և ելքային սարքերը անջատիչների և լույսի լամպերի շարքերն են RAM զանգվածի կառավարման
վահանակի վրա: Այս անջատիչները և լամպերը թույլ են տալիս մեզ (այս շոուի մարդկանց) թվեր դնել
հիշողության մեջ և ուսումնասիրել արդյունքները:
Պրոցեսորը մնացած ամեն ինչն է։ Պրոցեսորը կոչվում է նաև կենտրոնական պրոցեսոր կամ պրոցեսոր:
Ավելի պատահական, պրոցեսորը երբեմն կոչվում է համակարգչի ուղեղ , բայց ես կցանկանայի խուսափել
նման տերմինաբանության օգտագործումից, հիմնականում այն պատճառով, որ այն, ինչ մենք նախագծել ենք
այս գլխում, դժվար թե ինձ ուղեղի նման լինի: ( Միկրոպրոցեսոր բառը շատ տարածված է մեր օրերում:
Միկրոպրոցեսորը պարզապես պրոցեսոր է, որը տեխնոլոգիայի օգտագործման շնորհիվ, որը ես նկարագրելու
եմ 18-րդ գլխում , շատ փոքր է: Այն, ինչ մենք ստեղծել ենք այս գլխում ռելեներից, դժվար թե կարող է
սահմանվել որպես միկրո որևէ բան! )
Մեր ստեղծած պրոցեսորը 8-բիթանոց պրոցեսոր է: Կուտակիչն ունի 8 բիթ լայնություն, իսկ տվյալների
ուղիների մեծ մասը՝ 8 բիթ: Միակ 16-բիթանոց տվյալների ուղին RAM զանգվածի հասցեն է: Եթե դրա
համար օգտագործեինք 8 բիթ, մենք կսահմանափակվեինք 256 բայթ հիշողության փոխարեն, քան 65,536
բայթ, և դա բավականին սահմանափակող կլիներ:
Պրոցեսորն ունի մի քանի բաղադրիչ. Ես արդեն հայտնաբերել եմ կուտակիչը , որը պարզապես սողնակ է, որը
պահում է համարը պրոցեսորի ներսում: Մեր համակարգչում 8-բիթանոց ինվերտորը և 8-բիթանոց հավելիչը
միասին կարելի է անվանել թվաբանական տրամաբանական միավոր կամ ALU: Մեր ALU-ն կատարում է
միայն թվաբանություն, մասնավորապես գումարում և հանում: Մի փոքր ավելի բարդ համակարգիչներում
(ինչպես կտեսնենք) ALU-ն կարող է նաև կատարել տրամաբանական գործառույթներ, ինչպիսիք են AND,
OR և XOR: 16-բիթանոց հաշվիչը կոչվում է Ծրագրի հաշվիչ :
Համակարգիչը, որը մենք ստեղծել ենք, կառուցված է ռելեներից, լարերից, անջատիչներից և լամպերից: Այս
բոլոր բաները ապարատային են : Ի հակադրություն, հրահանգները և այլ թվերը, որոնք մենք մուտքագրում
ենք հիշողության մեջ, կոչվում են ծրագրակազմ : Այն «փափուկ» է, քանի որ այն կարելի է փոխել շատ ավելի
հեշտ, քան սարքաշարը:
Երբ մենք խոսում ենք համակարգիչների մասին, ծրագրակազմ բառը գրեթե հոմանիշ է համակարգչային
ծրագիր կամ, ավելի պարզ, ծրագիր տերմինի հետ : Գրելու ծրագրերը հայտնի են որպես համակարգչային
ծրագրավորում : Համակարգչային ծրագրավորումն այն է, ինչ ես անում էի, երբ որոշեցի հրահանգների
շարքը, որը թույլ կտա մեր համակարգչին բազմապատկել երկու թվեր միասին:
Ընդհանուր առմամբ, համակարգչային ծրագրերում մենք կարող ենք տարբերակել կոդը (որը վերաբերում է
հենց հրահանգներին) և տվյալների միջև , որոնք այն թվերն են, որոնցով մանիպուլյացիա է անում կոդը:
Երբեմն տարբերությունն այնքան էլ ակնհայտ չէ, որքան այն ժամանակ, երբ Halt հրահանգը կրկնակի
պարտականություն էր որպես թիվ –1:
Համակարգչային ծրագրավորումը երբեմն կոչվում է նաև կոդ գրել կամ կոդավորում , ինչպես, օրինակ՝ «Ես
անցկացրել եմ իմ արձակուրդը կոդավորելով» կամ «Այսօր առավոտյան մինչև յոթն արթնացել էի՝ ինչ-որ կոդ
հանելով»: Երբեմն համակարգչային ծրագրավորողները հայտնի են որպես կոդավորիչներ , թեև ոմանք դա
կարող են նվաստացուցիչ տերմին համարել: Նման ծրագրավորողները կարող են նախընտրել կոչվել
ծրագրային ապահովման ինժեներներ :
Գործառնական կոդերը, որոնց արձագանքում է պրոցեսորը (օրինակ՝ 10h և 11h Load and Store ) հայտնի
են որպես մեքենայի կոդեր կամ մեքենայի լեզու : Լեզու տերմինը օգտագործվում է, քանի որ այն նման է
խոսակցական կամ գրավոր մարդկային լեզվին, քանի որ մեքենան «հասկանում է» այն և արձագանքում դրան:
Ես ակնարկում էի այն հրահանգները, որոնք մեր մեքենան կատարում է բավականին երկար
արտահայտություններով, օրինակ՝ Add with Carry : Սովորաբար, մեքենայի կոդերին տրվում են կարճ
մնեմոնիկներ, որոնք գրված են մեծատառերով:
Այս մնեմոնիկները կարող են լինել 2 կամ 3 տառի կարճ: Ահա մեքենայի կոդերի հնարավոր մնեմոնիկայի մի
շարք, որոնք մեր համակարգիչը ճանաչում է.

Գոր Մնե
ծողո Կոդ մոնի
ւթյու կ
ն
Բեռն LO
10 ժ
ել D
Խան
11ժ STO
ութ
ԱՎ
Ավել
ԵԼԱ
ացն 20 ժ
ՑՆԵ
ել
Լ
ԵՆ
հան
21ժ ԹԱ
ել
ԿԱ
Ավել
ացն
ել AD
22ժ
Car C
ry-ի
հետ
Նվա
զեցն
ել 23 ժ SBB
պար
տքով
Ցատ
30 ժ JMP
կել
Անց
նել,
31ժ Ջ.Զ
եթե
զրո
Jum
p If
32 ժ JC
Car
ry
Անց
նել,
եթե 33 ժ JNZ
ոչ
զրո
Անց
նել,
եթե
34 ժ JNC
չկա
տար
ել
Կաս
եցնե FFh HLT
լ

Այս մնեմոնիկները հատկապես օգտակար են, երբ համակցվում են մի քանի այլ դյուրանցումների հետ:
Օրինակ՝ «Բեռնել բայթը 1003h հասցեում կուտակիչում» երկարատև բան ասելու փոխարեն, մենք կարող
ենք փոխարենը գրել հայտարարությունը.
LOD A, [1003h]

A- ն և [1003] -ը , որոնք հայտնվում են մնեմոնիկի աջ կողմում, կոչվում են արգումենտներ , որոնք ցույց են


տալիս, թե ինչ է կատարվում այս կոնկրետ Load հրահանգի հետ: Փաստարկները գրված են ձախ կողմում
գտնվող նպատակակետով (A-ն նշանակում է կուտակիչ) և աղբյուրը ՝ աջ կողմում: Փակագծերը ցույց են
տալիս, որ կուտակիչը պետք է բեռնված լինի ոչ թե 1003h արժեքով, այլ հիշողության մեջ 1003h հասցեում
պահվող արժեքով:
Նմանապես, «Add byte at address 001Eh to accumulator» հրահանգը կարող է կրճատվել հետևյալ
կերպ.
ADD A,[001Eh]

և «Պահպանել կուտակիչի բովանդակությունը 1003h հասցեում» է


STO [1003h],Ա

Ուշադրություն դարձրեք, որ նպատակակետը ( Խանութի հրահանգի հիշողության վայրը) դեռ ձախ կողմում է,
իսկ աղբյուրը՝ աջ կողմում: Կուտակիչի պարունակությունը պետք է պահվի հիշողության մեջ 1003h
հասցեում: «Անցնել 0000h, եթե զրոյական դրոշը 1 չէ» բառակապակցությունը ավելի հակիրճ է գրված.
JNZ 0000h

Փակագծերը չեն օգտագործվում այս հրահանգում, քանի որ հրահանգը ցատկում է դեպի 0000h հասցե, այլ
ոչ դեպի այն արժեքը, որը կարող է պահվել 0000h հասցեում:
Հարմար է այս հրահանգները գրել այս տեսակի սղագրությամբ, քանի որ հրահանգները կարող են
հաջորդաբար թվարկվել ընթեռնելի ձևով, որը մեզանից չի պահանջում հիշողության վայրերի տուփեր
նկարել: Նշելու համար, որ կոնկրետ հրահանգը պահվում է որոշակի հասցեում, կարող եք օգտագործել
տասնվեցական հասցեն, որին հաջորդում է երկու կետ, օրինակ.
0000h: LOD A, [1005h]

Եվ ահա թե ինչպես կարող ենք նշել որոշակի հասցեում պահվող որոշ տվյալներ.
1000h: 00h, A7h
1002h: 00h, 1Ch
1004h: 00h, 00h

Ստորակետերով բաժանված 2 բայթը ցույց է տալիս, որ առաջին բայթը պահվում է ձախ կողմում գտնվող
հասցեում, իսկ երկրորդ բայթը պահվում է հաջորդ հասցեում: Այս երեք տողերը համարժեք են
1000h: 00h, A7h, 00h, 1Ch, 00h, 00h

Այսպիսով, բազմապատկման ամբողջ ծրագիրը կարող է գրվել որպես այսպիսի հայտարարությունների շարք.
0000h՝ LOD A,[1005h]
ADD A,[1001h]
STO [1005h],A

LOD A,[1004h]
ADC A,[1000h]
STO [1004h],A

LOD A,[1003h]
ADD A,[001Eh]
STO [1003h],A

JNZ 0000h

001Eh: HLT

1000h: 00h, A7h


1002h: 00h, 1Ch
1004h: 00h, 00h

սպիտակ տարածության խելամիտ օգտագործումը պարզապես ամբողջ ծրագիրն ավելի ընթեռնելի դարձնելն է
ինձ և ձեզ նման մարդկանց համար:
Կոդ գրելիս ավելի լավ է չօգտագործել իրական թվային հասցեներ, քանի որ դրանք կարող են փոխվել:
Օրինակ, եթե դուք որոշել եք թվերը պահել հիշողության վայրերում 2000h-ից մինչև 20005h, ապա ձեզ
հարկավոր է նաև վերաշարադրել հայտարարություններից շատերը: Ավելի լավ է օգտագործել պիտակներ ՝
հիշատակելու տեղանքները հիշողության մեջ: Այս պիտակները պարզապես բառեր են, կամ դրանք գրեթե
բառերի տեսք ունեն, այսպես.
ՍԿԻԶԲ. LOD A,[ԱՐԴՅՈՒՆՔ + 1]
ԱՎԵԼԱՑՆԵԼ A,[NUM1 + 1]
STO [ԱՐԴՅՈՒՆՔ + 1],A

LOD A,[ԱՐԴՅՈՒՆՔ]
ADC A,[NUM1]
STO [ԱՐԴՅՈՒՆՔ],A

LOD A,[NUM2 + 1]
Ավելացրե՛ք A,[NEG1]
STO [NUM2 + 1],A

JNZ BEGIN

NEG1՝ HLT

NUM1: 00h, A7h


NUM2: 00h, 1Ch
ԱՐԴՅՈՒՆՔ՝ 00h, 00h

NUM1, NUM2 և RESULT պիտակները վերաբերում են հիշողության այն վայրերին, որտեղ պահվում են 2
բայթ: Այս հայտարարություններում NUM1 + 1, NUM2 + 1 և RESULT + 1 պիտակները վերաբերում են
կոնկրետ պիտակից հետո երկրորդ բայթին: Ուշադրություն դարձրեք HLT հրահանգի NEG1 ( բացասական )
պիտակին :
Ի վերջո, եթե կա հնարավորություն, որ դուք մոռանաք, թե ինչ են անում այս հայտարարությունները, կարող եք
ավելացնել փոքրիկ մեկնաբանություններ , որոնք անգլերեն են և իրական հայտարարություններից
բաժանված են ստորակետով.
ՍԿԻԶԲ. LOD A,[ԱՐԴՅՈՒՆՔ + 1]
Ավելացրե՛ք A,[NUM1 + 1]; Ավելացնել ցածր կարգի բայթ
STO [ԱՐԴՅՈՒՆՔ + 1],A

LOD A,[ԱՐԴՅՈՒՆՔ]
ADC A,[NUM1] ; Ավելացնել բարձր կարգի բայթ
STO [RESULT],A

LOD A,[NUM2 + 1]
ADD A,[NEG1] ; Նվազեցում երկրորդ թիվը
STO [NUM2 + 1],A

JNZ BEGIN

NEG1: HLT

NUM1: 00h, A7h


NUM2: 00h, 1Ch
ԱՐԴՅՈՒՆՔԸ: 00h, 00h

Ես ձեզ այստեղ ցույց եմ տալիս համակարգչային ծրագրավորման լեզվի մի տեսակ, որը հայտնի է որպես
assembly լեզու : Դա փոխզիջում է մեքենայի կոդի մերկ թվերի և հրահանգների մեր անգլերեն
նկարագրությունների բառացիության միջև՝ զուգորդված հիշողության հասցեների խորհրդանշական
ներկայացումներով: Մարդիկ երբեմն շփոթվում են մեքենայական կոդի և անսամբլի լեզվի միջև եղած
տարբերության հարցում, քանի որ նրանք իրականում նույն բանին նայելու երկու տարբեր եղանակներ են:
Ասամբլեայի լեզվով յուրաքանչյուր հայտարարություն համապատասխանում է մեքենայի կոդի որոշակի
բայթերին:
Եթե դուք ծրագիր գրեիք համակարգչի համար, որը մենք ստեղծել ենք այս գլխում, հավանաբար կցանկանայիք
այն նախ գրել (թղթի վրա) անսամբլի լեզվով: Այնուհետև, երբ դուք գոհ էիք, որ այն հիմնականում ճիշտ է և
պատրաստ է փորձարկման, դուք կհավաքեք այն ձեռքով : Սա նշանակում է, որ դուք ձեռքով կվերափոխեք
յուրաքանչյուր անսամբլի լեզվի հայտարարություն մեքենայի կոդի, դեռևս թղթի վրա: Այդ պահին դուք կարող
եք անջատիչների միջոցով մուտքագրել մեքենայի կոդը RAM զանգված և գործարկել ծրագիրը , ինչը
նշանակում է թույլ տալ, որ մեքենան կատարի հրահանգները:
Երբ դուք սովորում եք համակարգչային ծրագրավորման հասկացությունները, երբեք վաղ չէ ծանոթանալ
սխալների հետ : Երբ կոդավորում եք, հատկապես մեքենայի կոդով, շատ հեշտ է սխալվել: Թիվը սխալ
մուտքագրելը բավական վատ է, բայց ի՞նչ է տեղի ունենում, երբ սխալ եք մուտքագրում հրահանգի կոդը: Եթե
դուք մուտքագրեք 11 ժ ( Պահպանման հրահանգ), երբ իսկապես ցանկանում էիք մուտքագրել 10 ժ (
Բեռնման հրահանգ), մեքենան ոչ միայն չի բեռնվի այն համարով, որը պետք է, այլև այդ թիվը կվերագրվի այն
ամենով, ինչ պատահի: կուտակիչը։
Որոշ սխալներ կարող են անկանխատեսելի արդյունքներ ունենալ: Ենթադրենք, դուք օգտագործում եք Jump
հրահանգը, որպեսզի ցատկեք մի վայր, որը չի պարունակում վավեր հրահանգի կոդ: Կամ ենթադրենք, որ դուք
պատահաբար օգտագործում եք «Store»-ի հրահանգը՝ հրահանգները գրելու համար: Ամեն ինչ կարող է
պատահել (և հաճախ պատահում է):
Նույնիսկ իմ բազմապատկման ծրագրում սխալ կա: Եթե այն գործարկեք երկու անգամ, ապա երկրորդ անգամ
դրա միջով A7h-ը կբազմապատկվի 256-ով և այդ արդյունքը կավելացվի արդեն հաշվարկված արդյունքին:
Դա պայմանավորված է նրանով, որ ծրագիրը մեկ անգամ գործարկելուց հետո 1003h հասցեի համարը կլինի
0: Երկրորդ անգամ գործարկելու դեպքում այդ արժեքին կավելացվի FFh: Արդյունքը 0 չի լինի, ուստի
ծրագիրը կշարունակի աշխատել այնքան ժամանակ, քանի դեռ չի գործել:
Մենք տեսանք, որ այս մեքենան կարող է բազմապատկել, և նույն կերպ այն կարող է նաև կատարել բաժանում:
Ես նաև պնդում եմ, որ այս մեքենան կարող է օգտագործել այս պարզունակ ֆունկցիաները՝ քառակուսի
արմատներ, լոգարիթմներ և եռանկյունաչափական ֆունկցիաներ կատարելու համար: Այն ամենը, ինչ
մեքենային անհրաժեշտ է, սարքավորումն է՝ ավելացնելու և հանելու համար, ինչպես նաև պայմանական
ցատկման հրահանգներ օգտագործելու ձև՝ համապատասխան կոդը գործարկելու համար: Ինչպես կարող է
ասել ծրագրավորողը, «մնացածը ես կարող եմ անել ծրագրային ապահովման մեջ»:
Իհարկե, այս ծրագիրը կարող է բավականին բարդ լինել: Գրվել են բազմաթիվ ամբողջական գրքեր, որոնք
նկարագրում են այն ալգորիթմները , որոնք ծրագրավորողները օգտագործում են կոնկրետ խնդիրներ լուծելու
համար։ Մենք դեռ պատրաստ չենք դրան: Մենք մտածել ենք ամբողջ թվերի մասին և չենք մտածել, թե ինչպես
ներկայացնել տասնորդական կոտորակները համակարգչում: Ես դրան կանդրադառնամ 23-րդ գլխում :
Ես մի քանի անգամ նշել եմ, որ այս սարքերը ստեղծելու բոլոր սարքավորումները հասանելի են եղել ավելի
քան հարյուր տարի առաջ: Բայց քիչ հավանական է, որ այս գլխում ցուցադրված համակարգիչը կարող էր
ստեղծվել այդ ժամանակ: Դրա նախագծման մեջ անուղղակի հասկացություններից շատերը ակնհայտ չէին,
երբ ռելե համակարգիչները առաջին անգամ ստեղծվեցին 1930-ականների կեսերին և սկսեցին հասկանալ
միայն մոտ 1945 թվականին: Մինչ այդ, օրինակ, մարդիկ դեռ փորձում էին կառուցել համակարգիչներ, որոնք
ներքինում օգտագործեին տասնորդական թվեր, քան երկուական: Իսկ համակարգչային ծրագրերը միշտ չէ, որ
պահվում էին հիշողության մեջ, փոխարենը երբեմն կոդավորված էին թղթե ժապավենի վրա: Մասնավորապես,
համակարգիչների ստեղծման սկզբնական շրջանում հիշողությունը թանկ էր և ծավալուն: Հինգ միլիոն
հեռագրական ռելեներից 64 ԿԲ RAM զանգված կառուցելը հարյուր տարի առաջ նույնքան անհեթեթ կլիներ,
որքան հիմա:
Ժամանակն է պատկերացնել մեր արածը և վերանայել հաշվողական և հաշվողական սարքերի ու մեքենաների
պատմությունը: Թերևս մենք կգտնենք, որ ի վերջո մենք կարիք չունենք ստեղծելու այս մշակված ռելեային
համակարգիչը: Ինչպես նշեցի 12-րդ գլխում , ռելեները ի վերջո փոխարինվեցին էլեկտրոնային սարքերով,
ինչպիսիք են վակուումային խողովակները և տրանզիստորները: Միգուցե մենք նաև պարզենք, որ ինչ-որ մեկը
կառուցել է մի բան, որը համարժեք է մեր մշակած պրոցեսորին և հիշողությանը, բայց որը կարող է
տեղավորվել ձեր ձեռքի ափի մեջ:
Գլուխ 18. Abaci-ից մինչև Chips
Արձանագրված պատմության ընթացքում մարդիկ հայտնագործել են բազմաթիվ խելացի գաջեթներ և
մեքենաներ՝ համընդհանուր փնտրտուքի մեջ՝ մաթեմատիկական հաշվարկները մի փոքր ավելի հեշտացնելու
համար: Թեև մարդկային տեսակը թվացյալ բնածին թվային կարողություն ունի, մենք նաև հաճախակի
օգնություն ենք պահանջում: Մենք հաճախ կարող ենք պատկերացնել այնպիսի խնդիրներ, որոնք մենք ինքներս
հեշտությամբ չենք կարող լուծել:
Թվային համակարգերի զարգացումը կարող է դիտվել որպես վաղ գործիք, որն օգնում է մարդկանց հետևել
ապրանքներին և ունեցվածքին: Շատ մշակույթներ, ներառյալ հին հույները և բնիկ ամերիկացիները, թվում է,
որ հաշվվել են նաև խճաքարերի կամ հացահատիկի միջուկների օգնությամբ: Եվրոպայում դա հանգեցրեց
հաշվելու տախտակներին, իսկ Մերձավոր Արևելքում՝ ծանոթ շրջանակի և ուլունքի աբակուսին.

Թեև սովորաբար կապված է ասիական մշակույթների հետ, աբակուսը, կարծես, ներմուծվել է Չինաստան
առևտրականների կողմից մոտ 1200 թվականին:
Ոչ ոք երբեք իրոք չի վայելել բազմապատկումն ու բաժանումը, բայց քչերն են այդ ամենի համար արել: Այդ
քչերից մեկն էր շոտլանդացի մաթեմատիկոս Ջոն Նապիերը (1550–1617): Նա հորինել է լոգարիթմներ՝
այդ գործողությունները պարզեցնելու հատուկ նպատակով։ Երկու թվերի արտադրյալը պարզապես նրանց
լոգարիթմների գումարն է։ Այսպիսով, եթե ձեզ անհրաժեշտ է բազմապատկել երկու թվեր, ապա դրանք
փնտրեք լոգարիթմների աղյուսակում, գումարեք աղյուսակի թվերը և այնուհետև օգտագործեք աղյուսակը
հակառակ ուղղությամբ՝ գտնելու իրական արտադրյալը:
Լոգարիթմների աղյուսակների կառուցումը զբաղեցրել է հետագա 400 տարիների մեծագույն մտքերը,
մինչդեռ մյուսները նախագծել են փոքրիկ հարմարանքներ՝ այս աղյուսակների փոխարեն օգտագործելու
համար: Սլայդի կանոնը երկար պատմություն ունի, որը սկսվում է Էդմունդ Գյունթերի (1581–1626)
լոգարիթմական սանդղակով և ճշգրտված Ուիլյամ Օութրեդի կողմից (1574–1660): Սլայդների կանոնների
պատմությունը փաստորեն ավարտվեց 1976 թվականին, երբ Keuffel & Esser ընկերությունը ներկայացրեց
իր վերջին արտադրված սլայդերի կանոնը Վաշինգտոնի Սմիթսոնյան ինստիտուտին: Մահվան պատճառը եղել
է ձեռքի հաշվիչը:
Նապիերը նաև հորինել է մեկ այլ բազմապատկման օժանդակ միջոց, որը բաղկացած է թվերի շերտերից,
որոնք սովորաբար գրված են ոսկորի, եղջյուրի կամ փղոսկրի վրա և, հետևաբար, կոչվում են Նապիերի
ոսկորներ : Ամենավաղ մեխանիկական հաշվիչը Նապիերի ոսկորների որոշակի ավտոմատացված տարբերակն
էր, որը կառուցվել էր մոտ 1620 թվականին Վիլհելմ Շիկարդի կողմից (1592–1635): Փոխկապակցված
անիվների, շարժակների և լծակների վրա հիմնված այլ հաշվիչներ գրեթե նույնքան հին են: Մեխանիկական
հաշվիչների առավել նշանակալից շինարարներից երկուսն էին մաթեմատիկոսներ և փիլիսոփաներ Բլեզ
Պասկալը (1623–1662) և Գոթֆրիդ Վիլհելմ ֆոն Լայբնիցը (1646–1716):
Դուք, անկասկած, կհիշեք, թե ինչ անհանգստություն էր կրելու բիթը և՛ սկզբնական 8-բիթանոց ավելացնողի,
և՛ համակարգչի մեջ, որը (ի թիվս այլ բաների) ավտոմատացնում էր 8 բիթից ավելի լայն թվերի գումարումը:
Տեղափոխումը սկզբում թվում է, թե հավելման մի փոքր տարօրինակություն է, բայց մեքենաների ավելացման
ժամանակ տեղափոխումն իսկապես հիմնական խնդիրն է: Եթե դուք նախագծել եք ավելացնող մեքենա, որն
անում է ամեն ինչ, բացի տեղափոխումից, դուք ոչ մի տեղ մոտ չեք ավարտին:
Թե որքանով է հաջողությամբ զբաղվում բեռնափոխադրումը, հին հաշվիչ մեքենաների գնահատման բանալին
է: Օրինակ, կրելու մեխանիզմի Պասկալի դիզայնն արգելում էր մեքենային հանել: Հանեցնելու համար
ինըների լրացումը պետք է ավելացվեր այնպես, ինչպես ես ցույց տվեցի 13-րդ գլխում : Հաջողակ
մեխանիկական հաշվիչներ, որոնք իրական մարդիկ կարող էին օգտագործել, հասանելի չէին մինչև
տասնիններորդ դարի վերջը:
Հետաքրքիր գյուտերից մեկը, որը հետագայում պետք է ազդեցություն ունենար հաշվողական տեխնիկայի
պատմության վրա, ինչպես նաև մեծ ազդեցություն կունենար տեքստիլ արդյունաբերության վրա,
ավտոմատացված ջուլհակն էր, որը մշակել էր Ջոզեֆ Մարի Ժակարդը (1752–1834): Ժակարդի ջուլհակը
(մոտ 1801 թ.) օգտագործեց մետաղական բացիկներ, որոնց վրա անցքերով անցքեր էին (նման դաշնամուր
նվագարկչի)՝ գործվածքներում նախշերի հյուսումը վերահսկելու համար։ Ժակարդի սեփական
շրջագայությունը սև և սպիտակ մետաքսով ինքնադիմանկար էր, որը պահանջում էր մոտ 10000 քարտ:
Տասնութերորդ դարում (և իսկապես մինչև 1940-ական թվականները) համակարգիչը վարձու թվեր
հաշվարկող մարդ էր: Լոգարիթմների աղյուսակները միշտ անհրաժեշտ էին, իսկ եռանկյունաչափական
աղյուսակները կարևոր էին ծովային նավարկության համար՝ օգտագործելով աստղերն ու մոլորակները: Եթե
ցանկանում էիք հրապարակել աղյուսակների նոր հավաքածու, ապա կվարձեիք մի խումբ համակարգիչներ,
կգործարկեիք դրանք, ապա կհավաքեիք բոլոր արդյունքները: Սխալները կարող են ի հայտ գալ այս
գործընթացի ցանկացած փուլում, իհարկե, սկզբնական հաշվարկից մինչև վերջնական էջերի տպագրման
տեսակի կարգավորումը:
Մաթեմատիկական աղյուսակներից սխալները վերացնելու ցանկությունը դրդել է Չարլզ Բեբիջի
(1791–1871) աշխատանքը՝ բրիտանացի մաթեմատիկոս և տնտեսագետ, ով եղել է Սամուել Մորզի գրեթե
ճշգրիտ ժամանակակիցը։
Այն ժամանակ մաթեմատիկական աղյուսակները (օրինակ՝ լոգարիթմների) չեն ստեղծվել աղյուսակի
յուրաքանչյուր մուտքի համար փաստացի լոգարիթմի հաշվարկով: Սա չափազանց երկար կպահանջի:
Փոխարենը, լոգարիթմները հաշվարկվել են ընտրված թվերի համար, իսկ հետո դրանց միջև եղած թվերը
հաշվարկվել են ինտերպոլացիայի միջոցով՝ օգտագործելով այն, ինչ կոչվում է տարբերություններ
համեմատաբար պարզ հաշվարկներում:
Մոտավորապես 1820 թվականից սկսած՝ Բեբիջը հավատում էր, որ կարող է նախագծել և կառուցել մի
մեքենա, որը կավտոմատացնի սեղանի կառուցման գործընթացը՝ ընդհուպ մինչև տպագրության համար
նախատեսված տիպը: Սա կվերացնի սխալները: Նա մտահղացավ Difference Engine-ը, և հիմնականում դա
մեծ մեխանիկական ավելացնող մեքենա էր: Բազմանիշ տասնորդական թվերը ներկայացված էին շարժական
անիվներով, որոնք կարող էին լինել 10 դիրքերից որևէ մեկում: Բացասականները մշակվել են՝
օգտագործելով տասը լրացնողը: Չնայած որոշ վաղ մոդելների, որոնք ցույց էին տալիս, որ Բաբիջի դիզայնը
լավ է և բրիտանական կառավարության որոշ դրամաշնորհներ (իհարկե, երբեք բավարար), Difference
Engine-ը երբեք չի ավարտվել: Բեբիջը լքեց դրա վրա աշխատանքը 1833 թվականին:
Այդ ժամանակ, սակայն, Բեբիջը ավելի լավ պատկերացում ուներ։ Այն կոչվում էր «Անալիտիկ շարժիչ», և
կրկնվող նախագծման և վերափոխման միջոցով (մի քանի փոքր մոդելներով և իրականում կառուցված դրա
մասերով) այն սպառեց Բաբբիջին մինչև մահը: Վերլուծական շարժիչը համակարգչին ամենամոտ բանն է,
որն առաջարկում է տասնիններորդ դարը: Բեբիջի ձևավորման մեջ այն ուներ պահեստ (համեմատելի է
հիշողության մասին մեր հայեցակարգի հետ) և ջրաղաց (թվաբանական միավոր): Բազմապատկումը կարելի է
կարգավորել կրկնվող գումարումով, իսկ բաժանումը կրկնվող հանումով:
Անալիտիկ շարժիչի ամենահետաքրքիրն այն է, որ այն կարող է ծրագրավորվել քարտերի միջոցով, որոնք
հարմարեցված են Jacquard-ի նախշերով հյուսված ջուլհակներում օգտագործվող քարտերից: Ինչպես ասում
է Ավգուստա Ադա Բայրոնը՝ Լովլեյսի կոմսուհին (1815–1852), (իտալացի մաթեմատիկոսի կողմից
Բաբբիջի վերլուծական շարժիչի մասին գրված հոդվածի իր թարգմանության մեջ), «կարելի է ասել, որ
վերլուծական շարժիչը հյուսում է հանրահաշվական օրինաչափություններ, ինչպես Ժակարդ ջուլհակը
հյուսում է ծաղիկներ և տերևներ»։
Բեբիջը, թվում է, առաջին մարդն է, ով հասկացել է համակարգիչների մեջ պայմանական թռիչքի
կարևորությունը: Ահա Ադա Բայրոնը կրկին. « Այսպիսով, գործողությունների ցիկլը պետք է ընկալվի որպես
գործողությունների ցանկացած շարք , որը կրկնվում է մեկից ավելի անգամ : Դա հավասարապես ցիկլ է , լինի
դա կրկնվի միայն երկու անգամ , թե անորոշ թվով անգամ. Դա ընդհանրապես տեղի ունեցող կրկնության
փաստն է , որը կազմում է այն այդպիսին: Վերլուծության շատ դեպքերում կա մեկ կամ մի քանի ցիկլերի
կրկնվող խումբ , այսինքն՝ ցիկլի ցիկլ կամ ցիկլերի ցիկլ :
Թեև ի վերջո 1853 թվականին հոր և որդի Գեորգ և Էդվարդ Շոյցների կողմից ստեղծվեց
տարբերությունների շարժիչը, Բեբիջի շարժիչները երկար տարիներ մոռացվեցին, միայն 1930-ականներին
վերածնվեցին, երբ մարդիկ սկսեցին փնտրել քսաներորդ դարի հաշվողականության արմատները: Այդ
ժամանակ այն ամենը, ինչ արել էր Բեբիջը, արդեն գերազանցվել էր հետագա տեխնոլոգիայով, և նա քիչ բան
ուներ առաջարկելու քսաներորդ դարի համակարգչային ինժեներին, բացի ավտոմատացման վաղաժամ
տեսլականից:
Հաշվարկների պատմության մեջ ևս մեկ կարևոր իրադարձություն առաջացավ Ամերիկայի Միացյալ
Նահանգների Սահմանադրության I հոդվածի 2-րդ բաժնից: Ի թիվս այլ բաների, այս բաժինը կոչ է անում
մարդահամար անցկացնել տասը տարին մեկ անգամ: 1880 թվականի մարդահամարի ժամանակ
տեղեկություններ էին կուտակվել տարիքի, սեռի և ազգային ծագման վերաբերյալ։ Հավաքված տվյալների
մշակումը տևել է մոտ յոթ տարի:
Վախենալով, որ 1890 թվականի մարդահամարի մշակումը տևելու է ավելի քան մեկ տասնամյակ,
Մարդահամարի գրասենյակը ուսումնասիրեց համակարգի ավտոմատացման հնարավորությունը և ընտրեց
Հերման Հոլերիտի (1860–1929) մշակած մեխանիզմը, ով աշխատել էր որպես վիճակագիր 1880 թվականի
մարդահամարի ժամանակ։
Հոլերիթի պլանը ներառում էր 6 ⅝ x 3 ¼ դյույմ չափի մանիլայի դակիչ քարտեր: (Քիչ հավանական է, որ
Հոլերիթը գիտեր Չարլզ Բեբիջի կողմից իր վերլուծական շարժիչը ծրագրավորելու համար քարտերի
օգտագործման մասին, բայց նա գրեթե անկասկած ծանոթ էր Ժակարդի ջուլհակի մեջ քարտերի
օգտագործմանը): ընդհանուր 288 պաշտոնի համար: Այս պաշտոնները ներկայացնում էին մարդահամարի
ժամանակ հաշվառված անձի որոշակի հատկանիշներ: Մարդահամարն անցկացնողը նշել է այս բնութագրերը՝
բացելով ¼ դյույմ քառակուսի անցքեր քարտի համապատասխան դիրքերում:

Այս գիրքը հավանաբար այնքան է սովորեցրել ձեզ մտածել երկուական կոդերով, որ կարող եք անմիջապես
ենթադրել, որ 288 հնարավոր հարվածներով քարտը կարող է 288 բիթ տեղեկատվություն պահել: Բայց
քարտերը այդպես չօգտագործվեցին:
Օրինակ, մարդահամարի քարտը, որն օգտագործվում է զուտ երկուական համակարգում, կունենա մեկ դիրք
սեքսի համար: Դա կլինի կա՛մ բռունցքով հարվածել տղամարդու համար, կա՛մ առանց բռունցքով հարվածել
էգին (կամ հակառակը): Բայց Հոլերիթի քարտերը սեքսի համար երկու դիրք ունեին։ Մի դիրքը բռունցքով
հարվածել է արական, մյուսը՝ իգական սեռի: Նմանապես, մարդահամարը նշել է առարկայի տարիքը՝ երկու
հարված կատարելով: Առաջին հարվածը նշանակեց հինգ տարեկան տարիքային տիրույթ՝ 0-ից 4, 5-ից 9,
10-ից 14-ը և այլն: Երկրորդ բռունցքը հինգ դիրքերից մեկում էր, որը ցույց էր տալիս ճշգրիտ տարիքը այդ
միջակայքում: Տարիքը կոդավորելու համար պահանջվում էր քարտի վրա ընդհանուր 28 դիրք: Մաքուր
երկուական համակարգը կպահանջի ընդամենը 7 դիրք՝ 0-ից 127-ի ցանկացած տարիքի կոդավորման համար:
Մենք պետք է ներենք Հոլերիթին մարդահամարի տեղեկատվության գրանցման երկուական համակարգ
չկիրառելու համար. Տարիքը երկուական թվերի վերածելը մի փոքր չափազանց մեծ էր 1890 թվականի
մարդահամար կատարողներից պահանջելու համար: Կա նաև գործնական պատճառ, թե ինչու դակված
քարտերի համակարգը չի կարող ամբողջովին երկուական լինել: Երկուական համակարգը կստեղծեր դեպքեր,
երբ բոլոր անցքերը (կամ գրեթե բոլորը) կծկվեն՝ քարտը դարձնելով շատ փխրուն և կառուցվածքային
առումով անառողջ:
Մարդահամարի տվյալները հավաքվում են այնպես, որ դրանք հնարավոր լինի հաշվել կամ աղյուսակավորել :
Դուք, իհարկե, ուզում եք իմանալ, թե քանի մարդ է ապրում յուրաքանչյուր մարդահամարային թաղամասում,
բայց հետաքրքիր է նաև տեղեկություններ ստանալ բնակչության տարիքային բաշխվածության մասին: Դրա
համար Հոլերիթը ստեղծեց աղյուսակավորման մեքենա, որը համատեղում էր ձեռքի աշխատանքը և
ավտոմատացումը: Օպերատորը սեղմել է յուրաքանչյուր քարտի վրա 288 զսպանակով կապող տախտակ:
Քարտերում անցքերին համապատասխանող կապում են շփվում սնդիկի ավազանի հետ, որն ավարտում է
էլեկտրական միացում, որը գործարկում է էլեկտրամագնիս, որը մեծացնում է տասնորդական հաշվիչը:
Հոլերիթը նաև էլեկտրամագնիսներ է օգտագործել քարտերը տեսակավորող մեքենայի մեջ։ Օրինակ, դուք
կարող եք կուտակել տարիքային առանձին վիճակագրություն յուրաքանչյուր զբաղմունքի համար, որը դուք
հաշվարկել եք: Դուք նախ պետք է տեսակավորեք քարտերը ըստ զբաղմունքի, ապա յուրաքանչյուրի համար
առանձին-առանձին կուտակեք տարիքային վիճակագրությունը: Տեսակավորող մեքենան օգտագործում էր
նույն ձեռքի մամուլը, ինչ որ աղյուսակը, բայց տեսակավորողն ուներ էլեկտրամագնիսներ՝ 26 առանձին
խցիկներից մեկի համար լյուկ բացելու համար: Օպերատորը քարտը գցեց խցիկում և ձեռքով փակեց լյուկը:
1890 թվականի մարդահամարի ավտոմատացման այս փորձը մեծ հաջողություն ունեցավ: Ընդհանուր
առմամբ, մշակվել է ավելի քան 62 միլիոն քարտ: Դրանք երկու անգամ ավելի շատ տվյալներ էին
պարունակում, քան կուտակվել էր 1880 թվականի մարդահամարի ժամանակ, և տվյալները մշակվել էին
մոտավորապես մեկ երրորդում: Հոլերիթը և նրա գյուտերը հայտնի դարձան ամբողջ աշխարհում: 1895
թվականին նա նույնիսկ մեկնեց Մոսկվա և կարողացավ վաճառել իր սարքավորումները՝ օգտագործելու
համար Ռուսաստանի առաջին մարդահամարի ժամանակ, որը տեղի ունեցավ 1897 թվականին:
Հերման Հոլերիթը նույնպես գործի դրեց իրադարձությունների երկար հետքը։ 1896-ին նա հիմնեց
«Tabulating Machine Company»-ն, որը վարձակալում և վաճառում էր «Punch-card»
սարքավորումները: Մինչև 1911 թվականը, մի քանի միաձուլումների օգնությամբ, այն դարձավ
«Հաշվարկող-աղյուսակային-ձայնագրող ընկերություն» կամ CTR: 1915 թվականին CTR-ի նախագահն էր
Թոմաս Ջ.
Մինչև 1928 թվականը, 1890 թվականի մարդահամարի բնօրինակ քարտերը վերածվեցին հայտնի «մի՛
պտտիր, մի՛ ծալիր կամ անդամահատիր» IBM քարտերը՝ 80 սյունակներով և 12 տողերով: Նրանք ակտիվ
կիրառման մեջ մնացին ավելի քան 50 տարի, և նույնիսկ իրենց հետագա տարիներին երբեմն կոչվում էին
Հոլերիթի քարտեր : Այս քարտերի ժառանգությունը ավելի մանրամասն կներկայացնեմ Գլուխ 20-րդ , Գլուխ
21- ում և Գլուխ 24-ում :
Նախքան քսաներորդ դարին անցնելը, եկեք չթողնենք տասնիններորդ դարը այդ դարաշրջանի մասին
չափազանց աղավաղված հայացքով: Հասկանալի պատճառներով, այս գրքում ես առավելապես կենտրոնացել
եմ թվային բնույթի գյուտերի վրա: Դրանք ներառում են հեռագիրը, Բրայլը, Բեբիջի շարժիչները և Հոլերիթի
քարտը։ Թվային հայեցակարգերի և սարքերի հետ աշխատելիս կարող եք հեշտությամբ մտածել, որ ամբողջ
աշխարհը պետք է թվային լինի: Սակայն տասնիններորդ դարն ավելի շատ բնութագրվում է
հայտնագործություններով և գյուտերով, որոնք հաստատ թվային չէին : Իրոք, բնական աշխարհից շատ քիչ
բան, որը մենք զգում ենք մեր զգայարանների միջոցով, թվային է: Փոխարենը դա հիմնականում
շարունակականություն է, որը հնարավոր չէ այդքան հեշտությամբ քանակականացնել:
Չնայած Հոլերիտն օգտագործում էր ռելեներ իր քարտերի աղյուսակների և տեսակավորիչների մեջ, մարդիկ
իրականում սկսեցին համակարգիչներ կառուցել ռելեների միջոցով՝ էլեկտրամեխանիկական
համակարգիչներ, ինչպես դրանք ի վերջո կոչվեցին, մինչև 1930-ականների կեսերը: Այս մեքենաներում
օգտագործվող ռելեները հիմնականում հեռագրային ռելեներ չէին, այլ դրանք հեռախոսային համակարգի
համար մշակված ռելեներ էին, որպեսզի վերահսկեն զանգերի երթուղին:
Այդ վաղ ռելեային համակարգիչները նման չէին ռելեային համակարգիչներին, որոնք մենք կառուցել ենք
վերջին գլխում: (Ինչպես կտեսնենք, ես այդ համակարգչի դիզայնը հիմնել եմ 1970-ականների
միկրոպրոցեսորների վրա:) Մասնավորապես, թեև այսօր մեզ համար ակնհայտ է, որ համակարգիչները պետք
է օգտագործեն երկուական թվեր, դա միշտ չէ, որ այդպես է եղել:
Մեկ այլ տարբերություն մեր ռելեային համակարգչի և վաղ իրական համակարգիչների միջև այն է, որ
1930-ականներին ոչ ոք այնքան խենթ չէր, որ ռելեներից 524288 բիթ հիշողություն կառուցեր: Արժեքը,
տարածքի և էներգիայի պահանջները անհնարին կդարձնեին այդքան հիշողությունը: Հասանելի սակավ
հիշողությունն օգտագործվել է միայն միջանկյալ արդյունքները պահելու համար: Ծրագրերն իրենք են եղել
ֆիզիկական միջավայրի վրա, ինչպիսին է թղթե ժապավենը` դակված անցքերով: Իսկապես, կոդը և տվյալները
հիշողության մեջ դնելու մեր գործընթացը ավելի ժամանակակից հասկացություն է:
Ժամանակագրական առումով, առաջին ռելե համակարգիչը, կարծես, կառուցվել է Կոնրադ Զուզեի կողմից
(1910–1995), ով որպես ինժեներ-ուսանող 1935 թվականին սկսեց մեքենա կառուցել իր ծնողների
բնակարանում Բեռլինում։ Այն օգտագործում էր երկուական թվեր, սակայն վաղ տարբերակներում
օգտագործվում էր մեխանիկական հիշողության սխեման, քան ռելեներ: Զուզեն անցքեր է բացել հին 35 մմ
ֆիլմի վրա՝ իր համակարգիչները ծրագրավորելու համար:
1937 թվականին Ջորջ Ստիբիցը (1904–1995) Bell Telephone Laboratories-ից տուն վերցրեց մի
քանի հեռախոսային ռելեներ և իր խոհանոցի սեղանին միացրեց 1-բիթանոց ավելացուցիչ, որը նրա կինը
հետագայում անվանեց «K Machine» (K՝ խոհանոցի համար): Այս փորձը հանգեցրեց Bell Labs-ի
Complex Number Computer-ին 1939 թվականին:
Միևնույն ժամանակ, Հարվարդի ասպիրանտ Հովարդ Էյքընին (1900–1973 թթ.) կարիք ուներ մի քանի
եղանակ՝ բազմաթիվ կրկնվող հաշվարկներ անելու համար, և դա հանգեցրեց Հարվարդի և IBM-ի միջև
համագործակցության, որը հանգեցրեց Ավտոմատացված հաջորդականության վերահսկվող հաշվիչին
(ASCC), որը ի վերջո հայտնի դարձավ որպես Հարվարդի նշան I: , ավարտվել է 1943 թվականին։ Սա
առաջին թվային համակարգիչն էր, որը տպում էր աղյուսակներ՝ այդպիսով վերջապես իրականացնելով
Չարլզ Բեբիջի երազանքը։ Mark II-ը ռելեի վրա հիմնված ամենամեծ մեքենան էր, որն օգտագործում էր
13000 ռելե: Այքենի ղեկավարած Հարվարդի հաշվողական լաբորատորիան դասավանդում էր
համակարգչային գիտության առաջին դասերը։
Ռելեները կատարյալ սարքեր չէին համակարգիչներ կառուցելու համար: Քանի որ դրանք մեխանիկական էին
և աշխատում էին մետաղի կտորները ճկելով, երկար մարզվելուց հետո կարող էին կոտրվել: Ռելեը կարող է
նաև ձախողվել կոնտակտների միջև կեղտի կամ թղթի կտորի պատճառով: 1947 թվականին հայտնի մի դեպքի
ժամանակ Հարվարդի Mark II համակարգչի ռելեից ցեց հանվեց: Գրեյս Մյուրեյ Հոփերը (1906–1992), ով
միացել էր Այքենի անձնակազմին 1944 թվականին և ով հետագայում բավականին հայտնի կդառնար
համակարգչային ծրագրավորման լեզուների ոլորտում, ցեցը կպցրեց համակարգչային գրանցամատյանի վրա՝
նշելով «հայտնաբերված սխալի առաջին փաստացի դեպքը։ «
Ռելեի հնարավոր փոխարինումը վակուումային խողովակն է, որը մշակվել է Ջոն Ամբրոզ Ֆլեմինգի
(1849–1945) և Լի դե Ֆորեստի (1873–1961) կողմից ռադիոյի հետ կապված։ 1940-ականներին
վակուումային խողովակները երկար ժամանակ օգտագործվել էին հեռախոսներն ուժեղացնելու համար, և
գրեթե յուրաքանչյուր տուն ուներ կոնսոլային ռադիո սարք, որը լցված էր փայլուն խողովակներով, որոնք
ուժեղացնում էին ռադիոազդանշանները՝ դրանք լսելի դարձնելու համար: Վակուումային խողովակները
կարող են նաև լարերով միացվել, ինչպես ռելեներին, AND, OR, NAND և NOR դարպասների մեջ:
Կարևոր չէ՝ դարպասները կառուցված են ռելեներից, թե վակուումային խողովակներից։ Դարպասները միշտ
կարող են հավաքվել ավելացնողների, ընտրիչների, ապակոդավորիչների, ֆլիպ-ֆլոպների և հաշվիչների
մեջ: Այն ամենը, ինչ ես բացատրեցի ռելեի վրա հիմնված բաղադրիչների մասին նախորդ գլուխներում, մնում
է վավեր, երբ ռելեները փոխարինվում են վակուումային խողովակներով:
Վակուումային խողովակները, սակայն, ունեին իրենց խնդիրները: Դրանք թանկ էին, շատ էլեկտրաէներգիա
էին պահանջում և շատ ջերմություն էին արտադրում։ Մեծ խնդիրն այն էր, սակայն, որ դրանք ի վերջո
այրվեցին։ Սա կյանքի փաստ էր, որով մարդիկ ապրում էին: Նրանք, ովքեր ունեին խողովակային ռադիոներ,
սովոր էին պարբերաբար խողովակները փոխարինել: Հեռախոսային համակարգը նախագծված էր շատ
ավելորդությամբ, այնպես որ երբեմն-երբեմն խողովակի կորուստը մեծ խնդիր չէր: (Այնուամենայնիվ, ոչ ոք
չի ակնկալում, որ հեռախոսային համակարգը կաշխատի անթերի:) Այնուամենայնիվ, երբ համակարգչում
խողովակ է այրվում, այն կարող է անմիջապես չհայտնաբերվել: Ավելին, համակարգիչը օգտագործում է
այնքան շատ վակուումային խողովակներ, որ վիճակագրորեն դրանք կարող են այրվել ամեն մի քանի րոպեն
մեկ:
Վակուումային խողովակների օգտագործման մեծ առավելությունը ռելեների նկատմամբ այն է, որ
խողովակները կարող են փոխվել վայրկյանի մոտ մեկ միլիոներորդում՝ մեկ միկրովայրկյանում :
Վակուումային խողովակը փոխում է վիճակը (միանում կամ անջատվում) հազար անգամ ավելի արագ, քան
ռելեը, որն իր լավագույն դեպքում կարողանում է միացնել ընդամենը մոտ 1 միլիվայրկյան, վայրկյանի
հազարերորդականում: Հետաքրքիրն այն է, որ արագության խնդիրը համակարգչի զարգացման սկզբում
կարևոր ուշադրություն չէր դարձնում, քանի որ ընդհանուր հաշվարկային արագությունը կապված էր այն
արագության հետ, որով մեքենան կարդում էր ծրագիրը թղթից կամ ժապավենից: Քանի դեռ համակարգիչները
կառուցված էին այս ձևով, կարևոր չէր, թե որքան արագ են վակուումային խողովակները, քան ռելեները:
Բայց սկսած 1940-ականների սկզբից, վակուումային խողովակները սկսեցին փոխարինել ռելեներին նոր
համակարգիչներում: 1945 թվականին անցումն ավարտված էր։ Մինչ ռելե մեքենաները հայտնի էին որպես
էլեկտրամեխանիկական համակարգիչներ, վակուումային խողովակները առաջին էլեկտրոնային
համակարգիչների հիմքն էին :
Մեծ Բրիտանիայում Colossus համակարգիչը (առաջին անգամ գործարկվել է 1943 թվականին) նվիրված է
եղել գերմանական «Enigma» ծածկագրեր պատրաստող մեքենայի կոտրմանը։ Այս նախագծին (և ավելի ուշ
բրիտանական համակարգչային նախագծերում) ներդրում ունեցավ Ալան Մ. Թյուրինգը (1912–1954), ով
այս օրերին առավել հայտնի է երկու ազդեցիկ հոդվածներ գրելով: Առաջինը, որը հրապարակվել է 1937
թվականին, առաջ քաշեց «հաշվարկելիության» հայեցակարգը, որը վերլուծություն է այն մասին, թե ինչ
կարող են և ինչ չեն կարող անել համակարգիչները: Նա մտածեց համակարգչի վերացական մոդելի մասին,
որն այժմ հայտնի է որպես Թյուրինգ մեքենա: Երկրորդ հայտնի հոդվածը, որը գրել է Թյուրինգը, վերաբերում
էր արհեստական ինտելեկտին: Նա ներկայացրեց մեքենայական ինտելեկտի թեստ, որն այժմ հայտնի է որպես
Թյուրինգի թեստ:
Մուրի էլեկտրատեխնիկայի դպրոցում (Փենսիլվանիայի համալսարան) Ջ. Պրեսպեր Էկերտը (1919–1995)
և Ջոն Մաուչլին (1907–1980) նախագծեցին ENIAC (Էլեկտրոնային թվային ինտեգրատոր և
համակարգիչ): Այն օգտագործեց 18,000 վակուումային խողովակ և ավարտվեց 1945 թվականի վերջին:
Զգալի տոննայով (մոտ 30) ENIAC-ը ամենամեծ համակարգիչն էր, որը երբևէ ստեղծվել է (և հավանաբար
երբևէ կստեղծվի): 1977 թվականին դուք կարող եք ավելի արագ համակարգիչ գնել Radio Shack-ից:
Համակարգիչը արտոնագրելու Էկերտի և Մաուխլիի փորձը, սակայն, խափանվեց Ջոն Վ. Աթանասոֆի
(1903–1995) մրցակցային պահանջով, ով ավելի վաղ նախագծել էր էլեկտրոնային համակարգիչ, որը
երբեք ճիշտ չէր աշխատում:
ENIAC-ը գրավեց մաթեմատիկոս Ջոն ֆոն Նեյմանի (1903–1957) հետաքրքրությունը։ 1930 թվականից
հունգարական ծագումով ֆոն Նոյմանը (ում ազգանունը արտասանվում է noy mahn ) ապրում էր Միացյալ
Նահանգներում։ Շքեղ մարդ, ով իր գլխում բարդ թվաբանություն անելու համբավ ուներ, ֆոն Նոյմանը
մաթեմատիկայի պրոֆեսոր էր Փրինսթոնի առաջադեմ հետազոտությունների ինստիտուտում և նա
հետազոտություններ էր անում ամեն ինչում՝ քվանտային մեխանիկայից մինչև խաղերի տեսության
կիրառումը տնտեսագիտության մեջ:

Ջոն ֆոն Նոյմանը օգնեց նախագծել ENIAC-ի իրավահաջորդը՝ EDVAC (Էլեկտրոնային դիսկրետ
փոփոխական ավտոմատ համակարգիչ): Հատկապես 1946թ. «Էլեկտրոնային հաշվողական գործիքի
տրամաբանական ձևավորման նախնական քննարկում» աշխատության մեջ, որը համահեղինակվել է Արթուր
Վ. Բուրքսի և Հերման Հ. Գոլդսթայնի հետ, նա նկարագրել է համակարգչի մի քանի
առանձնահատկություններ, որոնք EDVAC-ին զգալի առաջընթաց են դարձրել ENIAC-ի նկատմամբ:
EDVAC-ի դիզայներները կարծում էին, որ համակարգիչը պետք է ներսից օգտագործի երկուական թվեր:
ENIAC-ն օգտագործում էր տասնորդական թվեր: Համակարգիչը պետք է նաև ունենա որքան հնարավոր է շատ
հիշողություն, և այս հիշողությունը պետք է օգտագործվի ինչպես ծրագրի կոդի, այնպես էլ տվյալների
պահպանման համար, երբ ծրագիրը գործարկվում էր: (Դարձյալ, սա ENIAC-ի դեպքում չէր: ENIAC-ի
ծրագրավորումը անջատիչներ նետելու և մալուխների միացման խնդիր էր:) Այս հրահանգները պետք է լինեն
հաջորդական հիշողության մեջ և հասցեագրվեն ծրագրի հաշվիչով, բայց պետք է նաև թույլ տան
պայմանական թռիչքներ: Այս դիզայնը հայտնի դարձավ որպես պահեստավորված ծրագրի հայեցակարգ :
Դիզայնի այս որոշումներն այնքան կարևոր էվոլյուցիոն քայլ էին, որ այսօր մենք խոսում ենք ֆոն Նեյմանի
ճարտարապետության մասին : Համակարգիչը, որը մենք կառուցեցինք վերջին գլխում, դասական ֆոն Նեյմանի
մեքենա էր: Սակայն ֆոն Նեյմանի ճարտարապետության հետ առաջանում է ֆոն Նեյմանի խցանումը : Ֆոն
Նեյմանի մեքենան, ընդհանուր առմամբ, զգալի ժամանակ է ծախսում պարզապես հիշողությունից
հրահանգներ վերցնելու համար՝ պատրաստվելով դրանց կատարմանը: Դուք կհիշեք, որ Գլուխ 17-ի
համակարգչի վերջնական դիզայնը պահանջում էր, որ յուրաքանչյուր հրահանգի վրա ծախսված ժամանակի
երեք քառորդը ներգրավված լիներ հրահանգների ստացման մեջ:
EDVAC-ի ժամանակ ծախսարդյունավետ չէր վակուումային խողովակներից շատ հիշողություն կառուցելը:
Փոխարենը առաջարկվեցին շատ տարօրինակ լուծումներ։ Հաջողակներից մեկը սնդիկի հետաձգման գծի
հիշողությունն էր , որն օգտագործում էր 5 ոտնաչափ սնդիկի խողովակներ: Խողովակի մի ծայրում փոքրիկ
իմպուլսներ ուղարկվեցին սնդիկի մեջ մոտ 1 միկրովայրկյան տարբերությամբ: Այս իմպուլսները մոտ մեկ
միլիվայրկյան են պահանջել, որպեսզի հասնեն մյուս ծայրին (որտեղ դրանք հայտնաբերվեցին ձայնային
ալիքների պես և ուղղվեցին դեպի սկիզբը), և, հետևաբար, սնդիկի յուրաքանչյուր խողովակ կարող էր պահել
մոտ 1024 բիթ տեղեկատվություն:
Միայն 1950-ականների կեսերին ստեղծվեց մագնիսական միջուկի հիշողությունը : Նման հիշողությունը
բաղկացած էր մետաղական մագնիսացված փոքր օղակների մեծ զանգվածներից, որոնք պարուրված էին
մետաղալարերով: Յուրաքանչյուր փոքրիկ օղակ կարող էր պահել մի փոքր տեղեկատվություն: Միջուկային
հիշողությունը այլ տեխնոլոգիաներով փոխարինելուց շատ ժամանակ անց սովորական էր լսել, որ ավելի հին
ծրագրավորողները նշում էին այն հիշողությունը, որին պրոցեսորը հասանելի էր որպես միջուկ :
Ջոն ֆոն Նեյմանը միակ մարդը չէր, ով 1940-ականներին որոշ հիմնական հայեցակարգային մտածողություն
էր անում համակարգիչների էության մասին:
Կլոդ Շենոնը (ծնված 1916 թ.) ևս մեկ ազդեցիկ մտածող էր։ 11-րդ գլխում ես քննարկեցի նրա 1938
թվականի մագիստրոսական թեզը, որը հաստատեց փոխարկիչների, ռելեների և Բուլյան հանրահաշվի
հարաբերությունները: 1948թ.-ին, երբ աշխատում էր Bell Telephone Laboratories-ում, նա
հրապարակեց մի աշխատություն Bell System Technical Journal- ում «Հաղորդակցության
մաթեմատիկական տեսություն» վերնագրով, որը ոչ միայն տպագրեց bit բառը , այլև հիմնեց
ուսումնասիրության դաշտ, որն այսօր հայտնի է որպես տեղեկատվության տեսություն : Տեղեկատվական
տեսությունը վերաբերում է աղմուկի առկայության դեպքում թվային տեղեկատվության փոխանցմանը (որը
սովորաբար թույլ չի տալիս ամբողջ տեղեկատվությունը ստանալ) և ինչպես փոխհատուցել դրա համար:
1949 թվականին նա գրեց առաջին հոդվածը շախմատ խաղալու համար համակարգչի ծրագրավորման մասին,
իսկ 1952 թվականին նա նախագծեց մեխանիկական մկնիկ, որը կառավարվում էր ռելեներով, որը կարող էր
սովորել իր ճանապարհը լաբիրինթոսում: Շենոնը նաև հայտնի էր Bell Labs-ում միանիվ հեծանիվ վարելու
և միաժամանակ ձեռնածություն վարելու համար:
Նորբերտ Վիները (1894–1964), ով ստացել է իր Ph.D. Հարվարդի մաթեմատիկայի ոլորտում 18
տարեկան հասակում առավել հայտնի է իր « Կիբեռնետիկա, կամ վերահսկում և հաղորդակցություն
կենդանիների և մեքենաների մեջ» գրքով (1948): Նա հորինեց «կիբեռնետիկա» բառը (հունարենից
ստացված «ղեկավար» բառից)՝ բացահայտելու մի տեսություն, որը կապում էր մարդկանց և կենդանիների
կենսաբանական գործընթացները համակարգիչների և ռոբոտների մեխանիկայի հետ: Հանրաճանաչ
մշակույթում ամենուր տարածված կիբեր նախածանցն այժմ նշանակում է համակարգչի հետ կապված
ցանկացած բան: Հատկանշական է, որ ինտերնետի միջոցով միլիոնավոր համակարգիչների փոխկապակցումը
հայտնի է որպես կիբերտարածություն , մի բառ, որը հորինել է կիբերպանկ գիտաֆանտաստիկ վիպասան
Ուիլյամ Գիբսոնը 1984 թվականին իր «Նեյրոմանսեր» վեպում :
1948 թվականին Eckert-Mauchly Computer Corporation-ը (հետագայում Remington Rand-ի մաս)
սկսեց աշխատել այն, ինչը կդառնա առաջին կոմերցիոն հասանելի համակարգիչը՝ Universal Automatic
Computer կամ UNIVAC: Այն ավարտվել է 1951 թվականին, և առաջինը հանձնվել է մարդահամարի
բյուրոյին։ UNIVAC-ը կատարեց իր պրայմ-թայմ ցանցի դեբյուտը CBS-ով, երբ այն օգտագործվեց 1952
թվականի նախագահական ընտրությունների արդյունքները կանխատեսելու համար: Ուոլտեր Քրոնքայթն այն
անվանել է «էլեկտրոնային ուղեղ»: Նաև 1952 թվականին IBM-ը հայտարարեց ընկերության առաջին
առևտրային համակարգչային համակարգը՝ 701-ը:
Եվ այսպիսով սկսվեց կորպորատիվ և պետական հաշվարկների երկար պատմություն: Որքան էլ հետաքրքիր
լինի այդ պատմությունը, մենք պատրաստվում ենք հետամուտ լինել մեկ այլ պատմական ուղու՝ մի ուղու, որը
նվազեցրեց համակարգիչների արժեքն ու չափը և դրանք բերեց տուն, և որը սկսվեց 1947 թվականին
էլեկտրոնիկայի գրեթե աննկատ առաջընթացով:
Bell Telephone Laboratories-ը երկար տարիներ եղել է մի վայր, որտեղ խելացի մարդիկ կարող էին
աշխատել իրենց հետաքրքրող ամեն ինչի վրա: Նրանցից ոմանք, բարեբախտաբար, հետաքրքրված էին
համակարգիչներով։ Ես արդեն նշել եմ Ջորջ Սթիբիցին և Կլոդ Շենոնին, որոնք երկուսն էլ նշանակալի
ներդրում են ունեցել վաղ հաշվողական աշխատանքի մեջ, երբ աշխատում էին Bell Labs-ում: Ավելի ուշ՝
1970-ականներին, Bell Labs-ը եղել է Unix անունով ազդեցիկ համակարգչային օպերացիոն համակարգի և
C անունով ծրագրավորման լեզվի ծննդավայրը, որը ես կներկայացնեմ առաջիկա գլուխներում:
Bell Labs-ը ստեղծվեց այն ժամանակ, երբ American Telephone-ը և Telegraph-ը պաշտոնապես
առանձնացրին իրենց գիտատեխնիկական հետազոտությունների ստորաբաժանումները մնացած բիզնեսից՝
ստեղծելով դուստր ձեռնարկությունը 1925թ. հունվարի 1-ին: Bell Labs-ի հիմնական նպատակը
հեռախոսային համակարգի բարելավման տեխնոլոգիաների զարգացումն էր: Այդ մանդատը, բարեբախտաբար,
բավական անորոշ էր՝ ընդգրկելու ամենատարբեր բաները, սակայն հեռախոսային համակարգի ներսում
ակնհայտ բազմամյա նպատակը լարերի միջոցով փոխանցվող ձայնային ազդանշանների չաղավաղված
ուժեղացումն էր:
1912 թվականից ի վեր Bell System-ն աշխատում էր վակուումային խողովակների ուժեղացման հետ, և
զգալի քանակությամբ հետազոտություններ և ճարտարագիտական աշխատանքներ են իրականացվել
հեռախոսային համակարգի օգտագործման համար վակուումային խողովակների կատարելագործման
ուղղությամբ: Չնայած այս աշխատանքին, վակուումային խողովակները դեռ շատ բան են թողել: Խողովակները
մեծ էին, շատ էներգիա էին սպառում և ի վերջո այրվեցին: Բայց նրանք միակ խաղն էին քաղաքում:
Այդ ամենը փոխվեց 1947 թվականի դեկտեմբերի 16-ին, երբ Bell Labs-ի երկու ֆիզիկոս Ջոն Բարդին
(1908–1991) և Ուոլթեր Բրատեյնը (1902–1987) անուններով մեկ այլ տիպի ուժեղացուցիչ լարեցին:
Այս նոր ուժեղացուցիչը կառուցվել է գերմանիումի սալաքարից՝ մի տարր, որը հայտնի է որպես
կիսահաղորդիչ , և ոսկե փայլաթիթեղի շերտից։ Նրանք դա ցույց տվեցին իրենց ղեկավարին՝ Ուիլյամ
Շոկլիին (1910–1989), մեկ շաբաթ անց: Դա առաջին տրանզիստորն էր , սարքը, որը որոշ մարդիկ
անվանել են քսաներորդ դարի ամենակարևոր գյուտը:
Տրանզիստորը դուրս չի եկել կապույտից: Ութ տարի առաջ՝ 1939թ. դեկտեմբերի 29-ին, Շոկլին գրել էր իր
նոթատետրում. «Այսօր ինձ մտքով անցավ, որ սկզբունքորեն հնարավոր է կիսահաղորդիչներ, այլ ոչ թե
վակուում օգտագործող ուժեղացուցիչ»: Եվ այն բանից հետո, երբ առաջին տրանզիստորը ցուցադրվեց, երկար
տարիներ անցան այն կատարելագործելու համար: Միայն 1956 թվականին Շոկլին, Բարդինն ու Բրատեյնը
արժանացան ֆիզիկայի Նոբելյան մրցանակին «կիսահաղորդիչների վերաբերյալ իրենց
հետազոտությունների և տրանզիստորի էֆեկտի հայտնաբերման համար»։
Ավելի վաղ այս գրքում ես խոսեցի հաղորդիչների և մեկուսիչների մասին: Հաղորդիչներն այդպես են կոչվում,
քանի որ դրանք շատ նպաստում են էլեկտրաէներգիայի անցմանը: Պղինձը, արծաթը և ոսկին լավագույն
հաղորդիչներն են, և պատահական չէ, որ երեքն էլ գտնվում են տարրերի պարբերական աղյուսակի նույն
սյունակում։
Ինչպես հիշում եք, ատոմի էլեկտրոնները բաշխված են թաղանթներով, որոնք շրջապատում են ատոմի
միջուկը: Այն, ինչ բնութագրում է այս երեք հաղորդիչները, միայնակ էլեկտրոնն է ամենաարտաքին
թաղանթում: Այս էլեկտրոնը կարող է հեշտությամբ տեղահանվել ատոմի մնացած մասից և, հետևաբար,
ազատ է շարժվել որպես էլեկտրական հոսանք: Հաղորդավարների հակադիրները մեկուսիչներն են, ինչպիսիք
են ռետինն ու պլաստմասսա, որոնք ընդհանրապես հազիվ են էլեկտրական հոսանք փոխանցում:
Գերմանիումի և սիլիցիումի տարրերը (ինչպես նաև որոշ միացություններ) կոչվում են կիսահաղորդիչներ ,
ոչ թե այն պատճառով, որ դրանք կիսով չափ լավ են անցկացնում հաղորդիչները, այլ այն պատճառով, որ
դրանց հաղորդունակությունը կարող է տարբեր ձևերով կառավարվել: Կիսահաղորդիչներն ունեն չորս
էլեկտրոն ամենաարտաքին թաղանթում, ինչը առավելագույն թվի կեսն է, որը կարող է ունենալ արտաքին
թաղանթը: Մաքուր կիսահաղորդիչում ատոմները միմյանց հետ ձևավորում են շատ կայուն կապեր և ունեն
ալմաստին նման բյուրեղային կառուցվածք։ Նման կիսահաղորդիչները լավ հաղորդիչներ չեն:
Բայց կիսահաղորդիչները կարող են դոպինգավորվել , ինչը նշանակում է, որ դրանք համակցված են որոշակի
կեղտերի հետ: Մի տեսակ աղտոտվածություն ավելացնում է լրացուցիչ էլեկտրոններ, որոնք անհրաժեշտ են
ատոմների միջև կապի համար: Սրանք կոչվում են N-տիպի կիսահաղորդիչներ (N-ի համար բացասական ):
Մեկ այլ տեսակի աղտոտվածություն առաջանում է P տիպի կիսահաղորդիչ :
Կիսահաղորդիչները կարող են վերածվել ուժեղացուցիչների՝ սենդվիչ անելով P տիպի կիսահաղորդիչ երկու
N տիպի կիսահաղորդիչների միջև: Սա հայտնի է որպես NPN տրանզիստոր, և երեք կտորները հայտնի են
որպես կոլեկցիոներ , հիմք և թողարկիչ :
Ահա NPN տրանզիստորի սխեմատիկ դիագրամ.

Հիմքի վրա փոքր լարումը կարող է կառավարել շատ ավելի մեծ լարումը, որն անցնում է կոլեկտորից դեպի
էմիտեր: Եթե բազայի վրա լարում չկա, այն արդյունավետորեն անջատում է տրանզիստորը:
Տրանզիստորները սովորաբար փաթեթավորվում են մոտ քառորդ դյույմ տրամագծով փոքր մետաղական
բանկաների մեջ, որոնցից դուրս են գալիս երեք լարեր.

Տրանզիստորը բացեց պինդ վիճակի էլեկտրոնիկան, ինչը նշանակում է, որ տրանզիստորները վակուում չեն
պահանջում և կառուցված են պինդ մարմիններից, մասնավորապես կիսահաղորդչներից և առավել հաճախ
(այս օրերին) սիլիցիումից: Բացի վակուումային խողովակներից շատ ավելի փոքր լինելուց,
տրանզիստորները շատ ավելի քիչ էներգիա են պահանջում, շատ ավելի քիչ ջերմություն են արտադրում և
ավելի երկար են տևում: Խողովակային ռադիոն գրպանումդ աներևակայելի էր: Բայց տրանզիստորային
ռադիոն կարող էր սնուցվել փոքր մարտկոցով, և ի տարբերություն խողովակների, այն չէր տաքանա:
Գրպանում տրանզիստորային ռադիո կրելը հնարավոր դարձավ որոշ երջանիկ մարդկանց համար, ովքեր
նվերներ էին բացում 1954թ. Սուրբ Ծննդյան առավոտ: Այդ առաջին գրպանային ռադիոներում
օգտագործվեցին տրանզիստորներ, որոնք արտադրվել էին Texas Instruments-ի կողմից, որը
կիսահաղորդչային հեղափոխության կարևոր ընկերություն էր:
Այնուամենայնիվ, տրանզիստորի առաջին կոմերցիոն կիրառումը լսողական սարքն էր : Ոգեկոչելով
Ալեքսանդր Գրեհեմ Բելի ժառանգությունը խուլերի հետ իր ողջ կյանքի ընթացքում՝ AT&T թույլ տվեց
լսողական սարքեր արտադրողներին օգտագործել տրանզիստորային տեխնոլոգիա՝ առանց որևէ հոնորար
վճարելու: Առաջին տրանզիստորային հեռուստատեսությունը հայտնվեց 1960 թվականին, և այսօր
խողովակային սարքերը գրեթե անհետացել են: (Սակայն ոչ ամբողջությամբ: Որոշ աուդիոֆիլներ և
էլեկտրական կիթառահարներ շարունակում են նախընտրել խողովակային ուժեղացուցիչների ձայնը, քան
իրենց տրանզիստորային գործընկերները):
1956 թվականին Շոկլին լքեց Bell Labs-ը՝ ստեղծելով Shockley Semiconductor Laboratories-ը։ Նա
տեղափոխվեց Պալո Ալտո, Կալիֆորնիա, որտեղ մեծացել էր։ Նրան առաջին նման ընկերությունն էր, որ
տեղակայեց այդ տարածքում: Ժամանակի ընթացքում կիսահաղորդչային և համակարգչային այլ
ընկերություններ այնտեղ բիզնես հիմնեցին, և Սան Ֆրանցիսկոյից հարավ գտնվող տարածքն այժմ ոչ
պաշտոնապես հայտնի է որպես Սիլիկոնային հովիտ:
Վակուումային խողովակները ի սկզբանե մշակվել են ուժեղացման համար, բայց դրանք կարող են
օգտագործվել նաև տրամաբանական դարպասների անջատիչների համար: Նույնը վերաբերում է
տրանզիստորին: Հաջորդ էջում դուք կտեսնեք տրանզիստորի վրա հիմնված AND դարպաս, որը
կառուցվածքով շատ նման է ռելեի տարբերակին: Միայն այն դեպքում, երբ և՛ A մուտքը 1 է, և՛ B մուտքը 1,
երկու տրանզիստորներն էլ հոսանք կանցկացնեն և, հետևաբար, ելքը կդարձնեն 1: Դիմադրությունը կանխում
է կարճ միացումը, երբ դա տեղի է ունենում:
Երկու տրանզիստորների միացումը, ինչպես տեսնում եք ստորև աջ կողմում գտնվող դիագրամում, ստեղծում է
ԿԱՄ դարպաս: AND դարպասում վերին տրանզիստորի թողարկիչը միացված է ստորին տրանզիստորի
կոլեկտորին: OR դարպասում երկու տրանզիստորների կոլեկտորները միացված են լարման սնուցմանը:
Արտանետիչները միացված են միասին:
Այսպիսով, այն ամենը, ինչ մենք սովորեցինք ռելեներից տրամաբանական դարպասների և այլ բաղադրիչների
կառուցման մասին, վավեր է տրանզիստորների համար: Ռելեները, խողովակները և տրանզիստորները ի
սկզբանե ստեղծվել են հիմնականում ուժեղացման նպատակով, բայց կարող են միացվել նմանատիպ ձևերով՝
տրամաբանական դարպասներ ստեղծելու համար, որոնցից կարող են կառուցվել համակարգիչներ: Առաջին
տրանզիստորային համակարգիչները կառուցվել են 1956 թվականին, և մի քանի տարվա ընթացքում
խողովակները լքվել են նոր համակարգիչների նախագծման համար:
Ահա մի հարց. տրանզիստորները, անշուշտ, համակարգիչները դարձնում են ավելի հուսալի, փոքր և ավելի
քիչ էներգիա սպառող: Բայց արդյո՞ք տրանզիստորները համակարգիչների կառուցումն ավելի հեշտ են
դարձնում :
Իրականում ոչ: Իհարկե, տրանզիստորը թույլ է տալիս ավելի շատ տրամաբանական դարպասներ տեղավորել
ավելի փոքր տարածության մեջ, բայց դուք դեռ պետք է անհանգստանաք այս բաղադրիչների բոլոր
փոխկապակցվածությունների համար: Տրամաբանական դարպասներ պատրաստելը լարերի միացման
տրանզիստորների համար նույնքան դժվար է, որքան ռելեների և վակուումային խողովակների միացումը:
Որոշ առումներով դա նույնիսկ ավելի դժվար է, քանի որ տրանզիստորներն ավելի փոքր են և ավելի քիչ հեշտ
են պահել: Եթե ցանկանում եք կառուցել Գլուխ 17-ի համակարգիչը և 64 ԿԲ RAM-ի զանգվածը
տրանզիստորներից, դիզայնի աշխատանքի մի լավ մասը նվիրված կլինի ինչ-որ կառուցվածքի
հայտնագործմանը, որտեղ կպահվեն բոլոր բաղադրիչները: Ձեր ֆիզիկական աշխատանքի մեծ մասը կլինի
միլիոնավոր տրանզիստորների միջև միլիոնավոր փոխկապակցման հոգնեցուցիչ լարերը:
Ինչպես պարզեցինք, այնուամենայնիվ, կան տրանզիստորների որոշակի համակցություններ, որոնք բազմիցս
են հայտնվում: Զույգ տրանզիստորները գրեթե միշտ միացված են որպես դարպասներ: Դարպասները հաճախ
միացված են ֆլիպ-ֆլոպների կամ ավելացնողների կամ ընտրիչների կամ ապակոդավորիչների մեջ:
Flip-flops-ները համակցվում են բազմաբիթ սողնակների կամ RAM զանգվածների մեջ: Համակարգիչ
հավաքելը շատ ավելի հեշտ կլիներ, եթե տրանզիստորները նախապես միացված լինեին ընդհանուր
կոնֆիգուրացիաներով:
Այս գաղափարը, կարծես, առաջինն առաջարկել է բրիտանացի ֆիզիկոս Ջեֆրի Դումմերը (ծնված 1909 թ.)
1952 թվականի մայիսին ունեցած ելույթում: «Ես կցանկանայի հայացք նետել ապագային», - ասաց նա:
Տրանզիստորի հայտնվելով և ընդհանրապես կիսահաղորդիչներում աշխատանքի շնորհիվ, այժմ թվում է, թե հնարավոր է էլեկտրոնային
սարքավորումը պինդ բլոկում առանց միացնող լարերի պատկերացնել: Բլոկը կարող է բաղկացած լինել մեկուսիչ, հաղորդիչ, ուղղիչ և
ուժեղացնող նյութերի շերտերից, էլեկտրական գործառույթները ուղղակիորեն միացված են տարբեր շերտերի տարածքները կտրելու միջոցով:

Գործող արտադրանքը, սակայն, պետք է սպասի մի քանի տարի:


Չիմանալով Դումերի կանխատեսման մասին՝ 1958թ. հուլիսին Ջեք Քիլբիին (ծնված 1923թ.) Texas
Instruments-ի մտքով անցավ, որ մի քանի տրանզիստորներ, ինչպես նաև ռեզիստորներ և այլ էլեկտրական
բաղադրիչներ կարող են պատրաստվել սիլիցիումի մեկ կտորից: Վեց ամիս անց՝ 1959 թվականի հունվարին,
հիմնականում նույն միտքը ծագեց Ռոբերտ Նոյսի (1927–1990 թթ.) գլխում։ Նոյսն ի սկզբանե աշխատել էր
Shockley Semiconductor Laboratories-ում, սակայն 1957 թվականին նա և յոթ այլ գիտնականներ
հեռացան և հիմնեցին Fairchild Semiconductor Corporation-ը:
Տեխնոլոգիայի պատմության մեջ միաժամանակյա գյուտը ավելի տարածված է, քան կարելի է կասկածել:
Չնայած Քիլբին սարքը հորինել էր Նոյսից վեց ամիս առաջ, իսկ Texas Instruments-ը արտոնագրի համար
դիմել էր Fairchild-ից առաջ, Նոյսին նախ արտոնագիր տրվեց: Իրավական մարտեր սկսվեցին, և միայն մեկ
տասնամյակ անց դրանք վերջնականապես լուծվեցին բոլորի գոհունակությամբ: Չնայած նրանք երբեք միասին
չեն աշխատել, Քիլբին և Նոյսն այսօր համարվում են ինտեգրալային սխեմայի կամ IC- ի ստեղծողներ , որոնք
սովորաբար կոչվում են չիպ :
Ինտեգրված սխեմաները արտադրվում են բարդ գործընթացի միջոցով, որը ներառում է սիլիցիումի բարակ
վաֆլիների շերտավորում, որոնք ճշգրտորեն պատված և փորագրված են տարբեր տարածքներում՝
միկրոսկոպիկ բաղադրիչներ ձևավորելու համար: Թեև նոր ինտեգրալ սխեման մշակելը թանկ է, նրանք օգուտ
են քաղում զանգվածային արտադրությունից. որքան շատ եք արտադրում, այնքան դրանք ավելի էժան են
դառնում:
Իրական սիլիկոնային չիպը բարակ է և նուրբ, ուստի այն պետք է ապահով փաթեթավորվի՝ և՛ չիպը
պաշտպանելու, և՛ չիպի բաղադրիչները այլ չիպերին միացնելու համար: Ինտեգրված սխեմաները
փաթեթավորվում են մի քանի տարբեր ձևերով, բայց ամենատարածվածը ուղղանկյուն պլաստիկ երկակի
ներկառուցված փաթեթն է (կամ DIP), որի կողքից դուրս են ցցված 14, 16 կամ մինչև 40 կապ:

Սա 16 փինանոց չիպ է: Եթե դուք պահում եք չիպը այնպես, որ փոքր ներքևը լինի ձախ կողմում (ինչպես
ցույց է տրված), ապա մատիտները համարակալված են 1-ից մինչև 16-ը, սկսած ներքևի ձախից և պտտվում
են աջ կողմի շուրջը մինչև վերևի ձախ կողմում գտնվող 16-րդ քորոցը: Յուրաքանչյուր կողմի քորոցները
միմյանցից ուղիղ մատնաչափ հեռավորության վրա են:
1960-ականների ընթացքում տիեզերական ծրագիրը և սպառազինությունների մրցավազքը խթանեցին վաղ
ինտեգրալ սխեմաների շուկան: Քաղաքացիական կողմից, առաջին կոմերցիոն արտադրանքը, որը
պարունակում էր ինտեգրված միացում, լսողական սարքն էր, որը վաճառվել էր Zenith-ի կողմից 1964
թվականին: 1971 թվականին Texas Instruments-ը սկսեց վաճառել առաջին գրպանի հաշվիչը, իսկ
Pulsar-ը՝ առաջին թվային ժամացույցը: (Ակնհայտ է, որ թվային ժամացույցի IC-ը շատ տարբեր է
փաթեթավորվում նոր ցույց տրված օրինակից): Հետևեցին բազմաթիվ այլ ապրանքներ, որոնք ներառում էին
ինտեգրալ սխեմաներ իրենց դիզայնում:
1965 թվականին Գորդոն Ի. Մուրը (այն ժամանակ Ֆեյրչայլդում, իսկ հետագայում՝ Intel Corporation-ի
համահիմնադիրը) նկատեց, որ տեխնոլոգիան բարելավվում է այնպես, որ տրանզիստորների թիվը, որոնք
կարող են տեղավորվել մեկ չիպի վրա, կրկնապատկվել է ամեն տարի՝ սկսած 1959 թվականից: Նա
կանխատեսեց, որ այս միտումը կշարունակվի։ Փաստացի միտումը մի փոքր ավելի դանդաղ էր, ուստի Մուրի
օրենքը (ինչպես այն կոչվեց ի վերջո) փոփոխվեց՝ կանխատեսելու համար չիպի վրա տրանզիստորների
կրկնապատկումը յուրաքանչյուր 18 ամիսը մեկ: Սա դեռևս զարմանալիորեն արագ առաջընթաց է և
բացահայտում է, թե ինչու են տնային համակարգիչները միշտ հնացած թվում ընդամենը մի քանի տարվա
ընթացքում: Որոշ մարդիկ կարծում են, որ Մուրի օրենքը կշարունակի ճշգրիտ լինել մինչև 2015 թվականը:
Վաղ օրերում մարդիկ խոսում էին փոքրամասշտաբ ինտեգրման կամ SSI-ի մասին՝ նկատի ունենալով մի չիպ,
որն ուներ 10-ից պակաս տրամաբանական դարպասներ. միջին մասշտաբի ինտեգրում , կամ MSI (10-ից
100 դարպասներ); և լայնածավալ ինտեգրում , կամ LSI (100-ից 5000): Այնուհետև տերմինները
բարձրացան մինչև շատ լայնածավալ ինտեգրում , կամ VLSI (5000-ից մինչև 50,000); գերլայնածավալ
ինտեգրում կամ SLSI (50,000-ից 100,000); և ծայրահեղ լայնածավալ ինտեգրում , (ավելի քան 100,000
դարպաս):
«Աստղային պատերազմների» առաջին ֆիլմի թողարկումը և VLSI-ն հենց հորիզոնում: Այն ժամանակ մի
քանի տարբեր տեխնոլոգիաներ էին օգտագործվում ինտեգրալ սխեմաներ կազմող բաղադրիչները
պատրաստելու համար։ Այս տեխնոլոգիաներից յուրաքանչյուրը երբեմն կոչվում է IC-ների ընտանիք :
1970-ականների կեսերին երկու ընտանիք գերակշռում էր՝ TTL (արտասանվում է tee tee ell ) և CMOS (
տես մամուռ ):
TTL նշանակում է տրանզիստոր-տրանզիստորային տրամաբանություն : Եթե 1970-ականների կեսերին դուք
թվային դիզայնի ինժեներ լինեիք (ինչը նշանակում էր, որ դուք նախագծել եք ավելի մեծ սխեմաներ
IC-ներից), ապա 1 ¼ դյույմ հաստությամբ գիրքն առաջին անգամ տպագրվել է 1973 թվականին Texas
Instruments-ի կողմից, որը կոչվում է The TTL Data Book for Design Engineers . մշտական
հարմարանք ձեր գրասեղանի վրա: Սա ամբողջական հղում է Texas Instruments-ի և մի քանի այլ
ընկերությունների կողմից վաճառված TTL ինտեգրալ սխեմաների 7400 ( յոթանասունչորս հարյուր )
շարքին, որոնք կոչվում են, քանի որ այս ընտանիքի յուրաքանչյուր IC նույնացվում է 74 թվանշանով սկսվող
թվով:
7400 սերիայի յուրաքանչյուր ինտեգրված սխեման բաղկացած է տրամաբանական դարպասներից, որոնք
նախապես միացված են որոշակի կոնֆիգուրացիայով: Որոշ չիպսեր ապահովում են պարզ նախալարերով
լարված դարպասներ, որոնք կարող եք օգտագործել ավելի մեծ բաղադրիչներ ստեղծելու համար. այլ չիպերն
ապահովում են ընդհանուր բաղադրիչներ, ինչպիսիք են ֆլիպ-ֆլոպները, ավելորդները, ընտրիչները և
ապակոդավորիչները:
7400 շարքի առաջին IC-ն ինքնին 7400 թիվն է, որը նկարագրված է TTL տվյալների գրքում որպես
«Քառակի 2 մուտքային դրական-NAND դարպասներ»: Սա նշանակում է, որ այս կոնկրետ ինտեգրված
սխեման պարունակում է չորս 2 մուտքային NAND դարպասներ: Դրանք կոչվում են դրական NAND
դարպասներ, քանի որ լարումը համապատասխանում է 1-ին և ոչ մի լարման չի համապատասխանում 0-ին:
Սա 14-փին չիպ է, և տվյալների գրքում մի փոքրիկ դիագրամը ցույց է տալիս, թե ինչպես են կապումները
համապատասխանում մուտքերին և ելքերին.

Այս գծապատկերը չիպի վերևի տեսքն է (ներքևում գտնվող կապում)՝ ձախ կողմում գտնվող փոքրիկ անկմամբ
(ցուցադրված է էջ 250-ում):
Pin 14-ը պիտակավորված է V CC և համարժեք է V խորհրդանիշին, որը ես օգտագործում էի լարումը նշելու
համար: (Ըստ պայմանի, V մեծատառի ցանկացած կրկնակի տառի ցուցիչ ցույց է տալիս սնուցման աղբյուրը:
Այս ենթագրում C- ը վերաբերում է տրանզիստորի կոլեկտորի մուտքին, որը ներքին լարման աղբյուրը
միացված է) : Յուրաքանչյուր ինտեգրալ շղթա, որը դուք օգտագործում եք որոշակի շղթայում, պետք է
միացված լինի սնուցման աղբյուրին և ընդհանուր հողին:
7400 սերիայի TTL-ի համար V CC-ը պետք է լինի 4,75-ից 5,25 վոլտ: Սա ասելու մեկ այլ տարբերակ այն է,
որ էլեկտրամատակարարման լարումը պետք է լինի 5 վոլտ գումարած կամ մինուս 5 տոկոս: Եթե
էլեկտրամատակարարումը 4,75 վոլտից ցածր է, չիպը կարող է չաշխատել: Եթե այն 5.25-ից բարձր է, ապա
չիպը կարող է վնասվել: Դուք սովորաբար չեք կարող օգտագործել TTL մարտկոցներ; նույնիսկ եթե դուք
գտնեիք 5 վոլտ մարտկոց, ապա լարումը այնքան ճշգրիտ չէր լինի, որ բավարար լինի այս չիպերի համար:
TTL-ը սովորաբար պահանջում է էլեկտրամատակարարում, որը դուք միացնում եք պատին:
7400 չիպի չորս NAND դարպասներից յուրաքանչյուրն ունի երկու մուտք և մեկ ելք: Նրանք աշխատում են
միմյանցից անկախ։ Անցյալ գլուխներում մենք տարբերակում էինք մուտքերը կամ 1 (որը լարում է) կամ 0
(որը լարում չէ): Իրականում, այս NAND դարպասներից մեկի մուտքը կարող է տատանվել 0 վոլտից (հող)
մինչև 5 վոլտ (V CC ): TTL-ում 0 վոլտից մինչև 0,8 վոլտ լարման միջև ընկած ցանկացածը համարվում է
տրամաբանական 0, իսկ 2 վոլտից մինչև 5 վոլտ լարման միջև ընկած ցանկացածը համարվում է
տրամաբանական 1: 0,8 վոլտից մինչև 2 վոլտ մուտքերը պետք է խուսափել:
TTL դարպասի ելքը սովորաբար մոտ 0.2 վոլտ է տրամաբանական 0-ի համար և 3.4 վոլտ տրամաբանական
1-ի համար: Քանի որ այս լարումները կարող են որոշ չափով տարբերվել, ինտեգրալ սխեմաների մուտքերն ու
ելքերը երբեմն կոչվում են ցածր և բարձր, այլ ոչ թե 0 և 1 : Ավելին, երբեմն ցածր լարումը կարող է
նշանակել տրամաբանական 1, իսկ բարձր լարումը կարող է նշանակել տրամաբանական 0: Այս
կոնֆիգուրացիան կոչվում է բացասական տրամաբանություն : Երբ 7400 չիպը նշվում է որպես «Քառակի 2
մուտքային դրական-NAND դարպասներ», դրական բառը նշանակում է դրական տրամաբանություն:
Եթե TTL դարպասի ելքը սովորաբար 0,2 վոլտ է տրամաբանական 0-ի համար և 3,4 վոլտ տրամաբանական
1-ի համար, ապա այդ ելքերը ապահով կերպով գտնվում են մուտքային տիրույթներում, որոնք տատանվում են
0-ից 0,8 վոլտ տրամաբանական 0-ի և 2-ից 5 վոլտների միջև: տրամաբանական 1. Ահա թե ինչպես է TTL-ն
մեկուսացված աղմուկից : 1 ելքը կարող է կորցնել մոտ 1,4 վոլտ և դեռ բավականաչափ բարձր լինել,
որպեսզի որակվի որպես 1 մուտք: 0 ելքը կարող է ձեռք բերել 0,6 վոլտ և դեռ բավական ցածր լինել,
որպեսզի որակվի որպես 0 մուտք:
Հավանաբար ամենակարևոր փաստը, որը պետք է իմանալ որոշակի ինտեգրալ սխեմայի մասին, տարածման
ժամանակն է : Դա այն ժամանակն է, որն անհրաժեշտ է, որպեսզի մուտքերի փոփոխությունն արտացոլվի
արդյունքի մեջ:
Չիպերի տարածման ժամանակները սովորաբար չափվում են նանովայրկյաններով , կրճատ՝ nsec:
Նանովայրկյանը շատ կարճ ժամանակահատված է: Վայրկյան հազարերորդը միլիվայրկյան է: Վայրկյան մեկ
միլիոներորդ մասը միկրովայրկյան է: Վայրկյան մեկ միլիարդերորդ մասը նանվայրկյան է: 7400 չիպի մեջ
NAND դարպասների տարածման ժամանակը երաշխավորված է 22 նանվայրկյանից պակաս: Դա
0.000000022 վայրկյան է, կամ վայրկյանի 22 միլիարդերորդ մասը:
Եթե դուք չեք կարողանում ստանալ նանվայրկյան զգացողություն, ապա դուք միայնակ չեք: Այս մոլորակի վրա
ոչ ոք ոչինչ չունի, բացի նանվայրկյանների ինտելեկտուալ գնահատականից: Նանովայրկյանները շատ ավելի
կարճ են, քան մարդկային փորձը, ուստի դրանք հավերժ կմնան անհասկանալի: Յուրաքանչյուր
բացատրություն նանովայրկյանն ավելի անհասկանալի է դարձնում: Օրինակ, կարող եմ ասել, որ եթե դուք
այս գիրքը պահում եք ձեր դեմքից 1 ոտնաչափ հեռավորության վրա, ապա նանվայրկյանը այն ժամանակն է,
որին անհրաժեշտ է լույսը էջից դեպի ձեր աչքերը անցնելու համար: Բայց իսկապե՞ս դուք հիմա ավելի լավ եք
զգում նանովայրկյանը:
Այնուամենայնիվ, նանվայրկյանն այն է, ինչը հնարավոր է դարձնում համակարգիչները: Ինչպես տեսանք
17-րդ գլխում , համակարգչային պրոցեսորն անում է անհեթեթորեն պարզ բաներ՝ այն տեղափոխում է մեկ
բայթ հիշողությունից գրանցում, մեկ բայթ ավելացնում մեկ այլ բայթի վրա և արդյունքը տեղափոխում է
հիշողություն: Միակ պատճառը, որ որևէ էական բան ավարտվում է (ոչ թե Գլուխ 17- ում , այլ իրական
համակարգիչներում) այն է, որ այդ գործողությունները շատ արագ են կատարվում: Մեջբերելով Ռոբերտ
Նոյսին, «Նանվայրկյան հետ հաշտվելուց հետո համակարգչային գործողությունները կոնցեպտուալ առումով
բավականին պարզ են»:
Եկեք շարունակենք ուսումնասիրել TTL տվյալների գիրքը դիզայներների համար : Այս գրքում դուք կտեսնեք
շատ ծանոթ փոքրիկ իրեր: 7402 չիպը պարունակում է չորս 2 մուտքային NOR դարպասներ, 7404-ը՝ վեց
ինվերտորներ, 7408-ը՝ չորս 2 մուտքային AND դարպասներ, 7432-ը՝ չորս 2 մուտքային OR դարպասներ,
իսկ 7430-ը՝ 8 մուտքային NAND դարպասներ:
NC հապավումը նշանակում է կապ չկա :
7474 չիպը ևս մեկ չիպ է, որը շատ ծանոթ կհնչի: Այն «Dual D-Type Positive-Edge-Triggered
Flip-Flop with Preset and Clear» է և գծագրված է այսպես.

TTL Data Book-ը նույնիսկ ներառում է տրամաբանական դիագրամ այս չիպի յուրաքանչյուր flip-flop-ի
համար.
14-րդ գլխի վերջում տրված գծապատկերին , բացառությամբ, որ ես օգտագործել եմ NOR դարպասներ: TTL
տվյալների գրքում տրամաբանական աղյուսակը նույնպես մի փոքր այլ է.

Մու Արդյ
տքա ունք
գրու ներ
մներ
Նախ
ընտ
Clr Կլկ Դ Ք
րակ
ան
Լ Հ X X Հ Լ
Հ Լ X X Լ Հ
Լ Լ X X Հ* Հ*
Հ Լ ↑ Հ Հ Լ
Հ Հ ↑ Լ Լ Հ

Հ Հ Լ X Q0
0

Այս աղյուսակում H- ն նշանակում է բարձր , իսկ L-ը ՝ ցածր : Եթե ցանկանում եք, կարող եք դրանք համարել
1 և 0: Իմ flip-flop-ում Preset և Clear մուտքերը սովորաբար 0 էին; այստեղ դրանք սովորաբար 1 են:
Շարժվելով անմիջապես TTL տվյալների գրքում , դուք կհայտնաբերեք, որ 7483 չիպը 4-բիթանոց
Երկուական ամբողջական գումարիչ է, 74151-ը 8-տողից դեպի 1-տող տվյալների ընտրիչ է, 74154-ը
4-տողով է: -16-Line Decoder, 74161-ը սինխրոն 4-բիթանոց Երկուական հաշվիչ է, իսկ 74175-ը
քառակի D-Type Flip-Flop է Clear-ով: Դուք կարող եք օգտագործել այս չիպերից երկուսը 8-բիթանոց
սողնակ պատրաստելու համար:
Այսպիսով, այժմ դուք գիտեք, թե ինչպես եմ ես գտել բոլոր այն տարբեր բաղադրիչները, որոնք ես
օգտագործում եմ Գլուխ 11- ից ի վեր : Ես դրանք գողացա TTL տվյալների գրքից դիզայն ինժեներների
համար :
Որպես թվային դիզայնի ինժեներ, դուք երկար ժամեր կանցկացնեիք՝ անցնելով TTL Data Book ՝
ծանոթանալով TTL չիպերի տեսակներին, որոնք առկա էին: Երբ դուք գիտեիք ձեր բոլոր գործիքները, դուք
կարող եք իրականում կառուցել այն համակարգիչը, որը ես ցույց տվեցի 17-րդ գլխում , TTL չիպերից:
Չիպերն իրար միացնելը շատ ավելի հեշտ է, քան առանձին տրանզիստորները միասին: Բայց դուք կարող եք
չօգտագործել TTL-ը 64 ԿԲ RAM զանգված ստեղծելու համար: 1973 թվականի TTL Data Book- ում
նշված RAM-ի ամենաուժեղ չիպը ընդամենը 256 x 1 բիթ է: 64 ԿԲ ստեղծելու համար ձեզ հարկավոր է
2048 չիպսեր: TTL-ը երբեք լավագույն տեխնոլոգիան չի եղել հիշողության համար: Հիշողության մասին
ավելին կասեմ 21-րդ գլխում :
Դուք, հավանաբար, կցանկանայիք նաև ավելի լավ օսլիլատոր օգտագործել: Թեև դուք, անշուշտ, կարող եք
միացնել TTL ինվերտորի ելքը մուտքին, ավելի լավ է ունենալ ավելի կանխատեսելի հաճախականությամբ
տատանվող: Նման օսլիլատորը կարող է բավականին հեշտությամբ կառուցվել՝ օգտագործելով քվարց
բյուրեղը, որը գալիս է մի փոքր հարթ տարայի մեջ՝ երկու լարով դուրս ցցված: Այս բյուրեղները թրթռում են
շատ կոնկրետ հաճախականություններով, սովորաբար առնվազն մեկ միլիոն ցիկլ վայրկյանում: Վայրկյանում
մեկ միլիոն ցիկլը կոչվում է մեգահերց և կրճատ՝ ՄՀց: Եթե Գլուխ 17-ի համակարգիչը կառուցված լիներ
TTL-ից, ապա այն հավանաբար լավ կաշխատեր 10 ՄՀց հաճախականությամբ: Յուրաքանչյուր հրահանգ
կկատարվի 400 նանվայրկյանում: Սա, իհարկե, շատ ավելի արագ է, քան այն ամենը, ինչ մենք
պատկերացնում էինք, երբ աշխատում էինք ռելեներով:
Մյուս հայտնի չիպերի ընտանիքը եղել է (և դեռ կա) CMOS-ը, որը նշանակում է լրացուցիչ մետաղական
օքսիդ կիսահաղորդիչ : Եթե 1970-ականների կեսերին CMOS IC-ներից շղթաներ նախագծող հոբբիստ
լինեիք, կարող եք որպես հղման աղբյուր օգտագործել National Semiconductor-ի կողմից հրատարակված
գիրքը և հասանելի ձեր տեղական Radio Shack-ում՝ CMOS Databook վերնագրով : Այս գիրքը
պարունակում է տեղեկատվություն CMOS IC-ների 4000 ( չորս հազար ) շարքի մասին:
TTL-ի սնուցման պահանջը 4,75-ից 5,25 վոլտ է: CMOS-ի համար դա 3 վոլտից մինչև 18 վոլտ է: Դա
բավականին ազատություն է: Ավելին, CMOS-ը պահանջում է շատ ավելի քիչ էներգիա, քան TTL-ը, ինչը
հնարավոր է դարձնում մարտկոցներից փոքր CMOS սխեմաների գործարկումը: CMOS-ի թերությունը
արագության բացակայությունն է: Օրինակ, 5 վոլտով աշխատող CMOS 4008 4-բիթանոց ամբողջական
գումարիչը երաշխավորված է միայն 750 նանվայրկյան տարածման ժամանակով: Այն արագանում է, քանի որ
էլեկտրամատակարարումը բարձրանում է՝ 250 նսվ 10 վոլտ և 190 նվս 15 վոլտ: Սակայն CMOS սարքը չի
մոտենում TTL 4-բիթանոց ավելացնողին, որն ունի 24 վրկ տարածման ժամանակ: (Քսանհինգ տարի առաջ
TTL-ի արագության և CMOS-ի ցածր էներգիայի պահանջների փոխզիջումը բավականին պարզ էր: Այսօր
կան TTL-ի ցածր էներգիայի և CMOS-ի բարձր արագության տարբերակներ:)
Գործնականում, դուք հավանաբար կսկսեք միացնել չիպսերը պլաստիկ տախտակի վրա .
5 անցքերի յուրաքանչյուր կարճ շարքը էլեկտրականորեն միացված է պլաստիկ հիմքի տակ: Դուք չիպսեր եք
տեղադրում հացատախտակի մեջ այնպես, որ չիպը անցնում է երկար կենտրոնական ակոսով, իսկ կապումներն
անցնում են ակոսի երկու կողմերում գտնվող անցքերի մեջ: IC-ի յուրաքանչյուր փին այնուհետև
էլեկտրականորեն միացված է 4 այլ անցքերի: Դուք կապում եք չիպսերը լարերի կտորներով, որոնք մղված են
մյուս անցքերի մեջ:
մետաղալարերի փաթաթում կոչվող տեխնիկան : Յուրաքանչյուր չիպ տեղադրվում է վարդակից, որն ունի
երկար քառակուսի սյուներ.

Յուրաքանչյուր գրառում համապատասխանում է չիպի մի քորոցին: Ինքնին վարդակները տեղադրվում են


բարակ ծակոտկեն տախտակների մեջ: Տախտակի մյուս կողմից դուք օգտագործում եք հատուկ մետաղալարով
փաթաթված ատրճանակ, որպեսզի սերտորեն փաթաթեք մեկուսացված մետաղալարերի բարակ կտորները սյան
շուրջը: Սյունակի քառակուսի եզրերը կոտրում են մեկուսացումը և էլեկտրական միացում են անում
մետաղալարով:
Եթե դուք իրականում արտադրում էիք որոշակի միացում՝ օգտագործելով IC-ներ, հավանաբար կօգտագործեիք
տպագիր տպատախտակ: Դեռ հին ժամանակներում սա մի բան էր, որ հոբբիստը կարող էր անել: Նման
տախտակն ունի անցքեր և ծածկված է պղնձե փայլաթիթեղի բարակ շերտով: Հիմնականում, դուք ծածկում եք
պղնձի բոլոր այն հատվածները, որոնք ցանկանում եք պահպանել թթվակայուն թթվային դիմացկունով և
օգտագործում եք թթու՝ մնացածը փորագրելու համար: Այնուհետև կարող եք IC վարդակները (կամ հենց
իրենք IC-ները) զոդել անմիջապես տախտակի պղնձին: Բայց IC-ների միջև շատ փոխկապակցվածության
պատճառով պղնձե փայլաթիթեղի մեկ տարածքը սովորաբար անբավարար է: Առևտրային արտադրության
տպագիր տպատախտակները ունեն փոխկապակցման մի քանի շերտեր:
1970-ականների սկզբին հնարավոր դարձավ օգտագործել IC-ներ՝ մեկ տպատախտակի վրա մի ամբողջ
համակարգչային պրոցեսոր ստեղծելու համար: Իրոք, միայն ժամանակի հարց էր, երբ ինչ-որ մեկը ամբողջ
պրոցեսորը կդներ մեկ չիպի վրա: Թեև Texas Instruments-ը արտոնագիր արեց մեկ չիպով համակարգչի
համար 1971 թվականին, իրականում այն ստեղծելու պատիվը պատկանում է Intel-ին, մի ընկերության, որը
հիմնադրվել է 1968 թվականին Fairchild-ի նախկին աշխատակիցներ Ռոբերտ Նոյսի և Գորդոն Մուրի
կողմից: Intel-ի առաջին խոշոր արտադրանքը 1970 թվականին հիշողության չիպն էր, որը պահում էր 1024
բիթ, որն այդ ժամանակ չիպի վրա եղած բիթերի ամենամեծ քանակն էր:
Intel-ը ծրագրավորվող հաշվիչի չիպերի նախագծման գործընթացում էր, որը կարտադրեր ճապոնական
Busicom ընկերությունը, երբ նրանք որոշեցին այլ մոտեցում ցուցաբերել: Ինչպես նշել է Intel-ի ինժեներ
Թեդ Հոֆը, «Փոխանակ նրանց սարքը գործի որպես հաշվիչ՝ որոշ ծրագրավորման կարողություններով, ես
ուզում էի այն գործել որպես ընդհանուր նշանակության համակարգիչ, որը ծրագրավորված է որպես հաշվիչ»:
Սա հանգեցրեց Intel 4004-ին (արտասանվում է քառասուն օ չորս ), առաջին «համակարգիչը չիպի վրա»
կամ միկրոպրոցեսոր : 4004-ը հասանելի դարձավ 1971 թվականի նոյեմբերին և պարունակում էր 2300
տրանզիստոր: (Մուրի օրենքով՝ 18 տարի անց ստեղծված միկրոպրոցեսորները պետք է պարունակեն մոտ
4000 անգամ ավելի շատ տրանզիստորներ կամ մոտ 10 միլիոն: Դա բավականին ճշգրիտ կանխատեսում է):
Ասելով ձեզ նրա տրանզիստորների թիվը՝ ես հիմա նկարագրելու եմ 4004-ի երեք այլ կարևոր բնութագրերը:
Այս երեք չափումները հաճախ օգտագործվում են որպես միկրոպրոցեսորների համեմատության
ստանդարտներ 4004 թվականից սկսած:
Նախ, 4004-ը 4-բիթանոց միկրոպրոցեսոր էր: Սա նշանակում է, որ պրոցեսորի տվյալների ուղիները
ընդամենը 4 բիթ լայնություն են ունեցել: Թվերը գումարելիս կամ հանելիս այն կառավարում էր ընդամենը 4
բիթ մեկ կրակոցի ժամանակ: Ի հակադրություն, 17-րդ գլխում մշակված համակարգիչն ունի 8-բիթանոց
տվյալների ուղիներ և, հետևաբար, 8-բիթանոց պրոցեսոր է: Ինչպես շուտով կտեսնենք, 4-բիթանոց
միկրոպրոցեսորները շատ արագ գերազանցեցին 8-բիթանոց միկրոպրոցեսորները: Ոչ ոք այնտեղ կանգ չի
առել։ 1970-ականների վերջին հասանելի դարձան 16-բիթանոց միկրոպրոցեսորները։ Երբ վերադառնում եք
17-րդ գլխի վրա և հիշում եք 8-բիթանոց պրոցեսորի վրա երկու 16-բիթանոց թվեր ավելացնելու համար
անհրաժեշտ մի քանի հրահանգների կոդերը, դուք կգնահատեք այն առավելությունը, որ տալիս է 16-բիթանոց
պրոցեսորը: 1980-ականների կեսերին ներկայացվեցին 32-բիթանոց միկրոպրոցեսորները, որոնք այդ
ժամանակից ի վեր մնում են ստանդարտ տնային համակարգիչների համար:
Երկրորդ, 4004-ն ուներ առավելագույն ժամացույցի արագություն 108000 ցիկլ վայրկյանում կամ 108
կիլոհերց (KHz): Ժամացույցի արագությունը օսլիլատորի առավելագույն արագությունն է, որը դուք կարող
եք միացնել միկրոպրոցեսորին՝ այն գործի դնելու համար: Ավելի արագ, և այն կարող է ճիշտ չաշխատել:
Մինչև 1999 թվականը տնային համակարգիչների համար նախատեսված միկրոպրոցեսորները հասել էին
500 մեգահերց կետի՝ մոտ 5000 անգամ ավելի արագ, քան 4004-ը:
Երրորդ, 4004-ի հասցեային հիշողությունը 640 բայթ էր: Սա անհեթեթորեն ցածր գումար է թվում. սակայն
այն համահունչ էր այն ժամանակ առկա հիշողության չիպերի հզորությանը: Ինչպես կտեսնեք հաջորդ գլխում,
մի քանի տարվա ընթացքում միկրոպրոցեսորները կհասցնեն 64 ԿԲ հիշողություն, ինչը Գլուխ 17- ի
մեքենայի հնարավորությունն է: 1999թ.-ի Intel միկրոպրոցեսորները կարող են լուծել 64 տերաբայթ
հիշողություն, թեև դա չափազանց մեծ է, եթե հաշվի առնենք, որ մարդկանց մեծամասնությունն իր տնային
համակարգիչներում ունի 256 մեգաբայթից քիչ RAM:
Այս երեք թվերը չեն ազդում համակարգչի հնարավորությունների վրա: 4-բիթանոց պրոցեսորը կարող է
ավելացնել 32-բիթանոց թվեր, օրինակ՝ պարզապես դա անելով 4-բիթանոց հատվածներով: Մի իմաստով
բոլոր թվային համակարգիչները նույնն են: Եթե մի պրոցեսորի ապարատը կարող է անել մի բան, որ մյուսը չի
կարող, մյուս պրոցեսորը կարող է դա անել ծրագրային ապահովման մեջ; նրանք բոլորն էլ նույն բանն են
անում: Սա Ալան Թյուրինգի 1937 թվականի հաշվողականության վերաբերյալ աշխատության
հետևանքներից մեկն է:
Այն, ինչ պրոցեսորները, ի վերջո , տարբերվում են , սակայն արագությամբ է : Եվ արագությունը մեծ պատճառ
է, թե ինչու ենք մենք սկզբից օգտագործում համակարգիչներ:
Առավելագույն ժամացույցի արագությունը ակնհայտորեն ազդում է պրոցեսորի ընդհանուր արագության վրա:
Այդ ժամացույցի արագությունը որոշում է, թե որքան արագ է կատարվում յուրաքանչյուր հրահանգ:
Պրոցեսորի տվյալների լայնությունը նույնպես ազդում է արագության վրա: Չնայած 4-բիթանոց պրոցեսորը
կարող է ավելացնել 32-բիթանոց թվեր, այն չի կարող դա անել գրեթե այնքան արագ, որքան 32-բիթանոց
պրոցեսորը: Այնուամենայնիվ, այն, ինչ կարող է շփոթեցնող լինել, հիշողության առավելագույն քանակի
արագության վրա ազդեցությունն է, որը կարող է անդրադառնալ պրոցեսորը: Սկզբում հասցեական
հիշողությունը կարծես թե կապ չունի արագության հետ, և փոխարենը արտացոլում է որոշակի
գործառույթներ կատարելու պրոցեսորի ունակության սահմանափակում, որը կարող է մեծ հիշողություն
պահանջել: Բայց պրոցեսորը միշտ կարող է շրջանցել հիշողության սահմանափակումը՝ օգտագործելով որոշ
հիշողության հասցեներ՝ կառավարելու այլ միջավայր՝ տեղեկատվության պահպանման և առբերման համար:
(Օրինակ, ենթադրենք, որ յուրաքանչյուր բայթ գրված է որոշակի հիշողության հասցեի վրա, իրականում
ծակված է թղթե ժապավենի վրա, և այդ հասցեից կարդացվող յուրաքանչյուր բայթը կարդացվում է
ժապավենից:) Ինչ է տեղի ունենում, սակայն, այն է, որ այս գործընթացը դանդաղեցնում է ամբողջ
համակարգիչը: Խնդիրը կրկին արագության մեջ է:
Իհարկե, այս երեք թվերը ցույց են տալիս միայն մոտավորապես, թե որքան արագ է աշխատում
միկրոպրոցեսորը: Այս թվերը ձեզ ոչինչ չեն ասում միկրոպրոցեսորի ներքին ճարտարապետության կամ
մեքենայի կոդերի հրահանգների արդյունավետության և կարողությունների մասին: Քանի որ պրոցեսորները
դարձել են ավելի բարդ, պրոցեսորի մեջ ներկառուցվել են շատ սովորական առաջադրանքներ, որոնք
նախկինում կատարվել են ծրագրային ապահովման մեջ: Այս միտման օրինակները կտեսնենք հաջորդ
գլուխներում:
Թեև բոլոր թվային համակարգիչները ունեն նույն հնարավորությունները, թեև նրանք ոչինչ չեն կարող անել
Ալան Թյուրինգի ստեղծած պարզունակ հաշվողական մեքենայից բացի, պրոցեսորի արագությունը, իհարկե, ի
վերջո ազդում է համակարգչային համակարգի ընդհանուր օգտակարության վրա: Ցանկացած համակարգիչ,
որն ավելի դանդաղ է, քան մարդկային ուղեղը մի շարք հաշվարկներ կատարելիս, օրինակ, անօգուտ է: Եվ մենք
դժվար թե ակնկալենք ֆիլմ դիտել մեր ժամանակակից համակարգչի էկրաններին, եթե պրոցեսորին մեկ րոպե
պահանջվի մեկ կադր նկարելու համար:
Բայց վերադառնանք 1970-ականների կեսերին: Չնայած 4004-ի սահմանափակումներին, դա սկիզբ էր:
Մինչև 1972թ. ապրիլին Intel-ը թողարկեց 8008-ը` 8-բիթանոց միկրոպրոցեսոր, որն աշխատում էր 200
կՀց հաճախականությամբ, որը կարող էր հիշել 16 ԿԲ հիշողություն: (Տեսեք, թե որքան հեշտ է ամփոփել
պրոցեսորն ընդամենը երեք թվով:) Եվ հետո, 1974-ին հինգ ամսվա ընթացքում, և՛ Intel-ը, և՛ Motorola-ն
թողարկեցին միկրոպրոցեսորներ, որոնք նախատեսված էին բարելավել 8008-ը: Այս երկու չիպերը
փոխվեցին: աշխարհը.
Գլուխ 19. Երկու դասական միկրոպրոցեսորներ
Միկրոպրոցեսորը՝ համակարգչի կենտրոնական պրոցեսորային միավորի (CPU) բոլոր բաղադրիչների
համախմբումը մեկ սիլիցիումի չիպի վրա, ծնվել է 1971 թվականին: Դա համեստ սկիզբ էր. առաջին
միկրոպրոցեսորը՝ Intel 4004-ը, պարունակում էր մոտ 2300 տրանզիստոր։ . Այսօր, մոտ երեք տասնամյակ
անց, տնային համակարգիչների համար ստեղծված միկրոպրոցեսորները մոտենում են 10,000,000
տրանզիստորի նշագծին:
Այնուամենայնիվ, այն, ինչ իրականում անում է միկրոպրոցեսորը հիմնարար մակարդակում, մնացել է
անփոփոխ: Թեև այսօրվա չիպերի այդ միլիոնավոր լրացուցիչ տրանզիստորները կարող են հետաքրքիր բաներ
անել, միկրոպրոցեսորի նախնական հետազոտության ժամանակ նրանք ավելի շատ ուշադրություն են
դարձնում, քան լուսավորություն: Միկրոպրոցեսորի աշխատանքի վերաբերյալ ամենապարզ պատկերացում
ստանալու համար եկեք նայենք առաջին պատրաստի միկրոպրոցեսորներին:
Այս միկրոպրոցեսորները հայտնվեցին 1974 թվականին, այն տարին, երբ Intel-ը ներկայացրեց 8080-ը
(արտասանվում է ութսուն ութսուն ) ապրիլին, իսկ Motorola ընկերությունը, որը կիսահաղորդիչներ և
տրանզիստորների վրա հիմնված ապրանքներ էր արտադրում 1950-ականներից սկսած, ներկայացրեց
6800-ը (վաթսունութ հարյուր ) : օգոստոս. Սրանք միակ միկրոպրոցեսորները չէին, որոնք հասանելի էին
այդ տարի: Նաև 1974 թվականին Texas Instruments-ը ներկայացրեց 4-բիթանոց TMS 1000-ը, որն
օգտագործվում էր բազմաթիվ հաշվիչներում, խաղալիքներում և սարքերում; և National Semiconductor-ը
ներկայացրեցին ԵԽԽՎ-ն, որն առաջին 16-բիթանոց միկրոպրոցեսորն էր: Հետադարձ հայացքով, սակայն,
8080-ը և 6800-ը, անշուշտ, պատմականորեն կարևոր երկու չիպերն էին:
Intel-ը 8080-ի սկզբնական գինը սահմանեց 360 դոլար՝ խորամանկ վերլուծություն IBM-ի
System/360-ում, խոշոր mainframe համակարգ, որն օգտագործվում է բազմաթիվ խոշոր
կորպորացիաների կողմից, որի արժեքը միլիոններ է: (Այսօր դուք կարող եք գնել 8080 չիպը 1,95
դոլարով:) Կարծես 8080-ը որևէ կերպ համեմատելի չէ System/360-ի հետ, բայց մի քանի տարվա
ընթացքում IBM-ն ինքը, անշուշտ, ուշադրություն կդարձնի այս շատ փոքր համակարգիչներին:
8080-ը 8-բիթանոց միկրոպրոցեսոր է, որը պարունակում է մոտ 6000 տրանզիստոր, աշխատում է 2 ՄՀց
ժամացույցի արագությամբ և հասցեագրում է 64 կիլոբայթ հիշողություն: 6800-ը (այս օրերին վաճառվում է
նաև 1,95 դոլարով) ունի մոտ 4000 տրանզիստոր և նաև հասցեագրում է 64 ԿԲ հիշողություն: Առաջին
6800-ն աշխատում էր 1 ՄՀց հաճախականությամբ, սակայն 1977 թվականին Motorola-ն ներկայացրեց
ավելի ուշ տարբերակները, որոնք աշխատում էին 1,5 և 2 ՄՀց հաճախականությամբ:
Այս չիպերը կոչվում են մեկ չիպով միկրոպրոցեսորներ և ավելի քիչ ճշգրիտ՝ որպես չիպի վրա գտնվող
համակարգիչներ : Պրոցեսորը ամբողջ համակարգչի միայն մի մասն է: Բացի պրոցեսորից, համակարգիչը
նվազագույնը պահանջում է պատահական մուտքի հիշողություն (RAM), ինչ-որ ձև, որպեսզի մարդը
տեղեկատվություն ներդնի համակարգչում (ներածման սարք), ինչ-որ միջոց, որպեսզի մարդը
տեղեկատվություն ստանա համակարգչից: (ելքային սարք) և մի քանի այլ չիպեր, որոնք կապում են ամեն ինչ:
Բայց ես այս մյուս բաղադրիչները ավելի մանրամասն կներկայացնեմ 21-րդ գլխում :
Առայժմ եկեք նայենք հենց միկրոպրոցեսորին: Հաճախ միկրոպրոցեսորի նկարագրությունը ուղեկցվում է
բլոկային դիագրամով, որը ցույց է տալիս միկրոպրոցեսորի ներքին բաղադրիչները և ինչպես են դրանք
միացված: Բայց մենք բավական էինք դրանով 17-րդ գլխում : Փոխարենը, մենք կզգանք, թե ինչ կա պրոցեսորի
ներսում՝ տեսնելով, թե ինչպես է այն փոխազդում արտաքին աշխարհի հետ: Այլ կերպ ասած, մենք կարող ենք
միկրոպրոցեսորը պատկերացնել որպես սև արկղի, որի ներքին գործողությունները մենք կարիք չունենք
մանրակրկիտ ուսումնասիրելու համար, որպեսզի հասկանանք, թե ինչ է անում: Փոխարենը մենք կարող ենք
հասկանալ, թե ինչ է անում միկրոպրոցեսորը՝ ուսումնասիրելով չիպի մուտքային և ելքային ազդանշանները,
և մասնավորապես չիպի հրահանգների հավաքածուն:
Երկուսն էլ 8080-ը և 6800-ը 40 փինանոց ինտեգրալ սխեմաներ են: Այս չիպերի համար ամենատարածված
IC փաթեթը մոտ 2 դյույմ երկարություն ունի, մոտ կես դյույմ լայնություն և ⅛ դյույմ հաստություն:

Իհարկե, այն, ինչ տեսնում եք, միայն փաթեթավորումն է: Ներսում սիլիցիումի իրական վաֆերը շատ ավելի
փոքր է. վաղ 8-բիթանոց միկրոպրոցեսորների դեպքում սիլիցիումը ¼ դյույմ քառակուսուց պակաս է:
Փաթեթավորումը պաշտպանում է սիլիկոնային չիպը և նաև ապահովում է մուտք դեպի չիպի բոլոր
մուտքային և ելքային կետերը կապումներով: Հետևյալ էջի դիագրամը ցույց է տալիս 8080-ի 40 պինների
գործառույթը:
Յուրաքանչյուր էլեկտրական կամ էլեկտրոնային սարք, որը մենք ստեղծել ենք այս գրքում, պահանջել է
ինչ-որ էլեկտրական էներգիայի մատակարարում: 8080-ականների տարօրինակություններից մեկն այն է, որ
այն պահանջում է սնուցման երեք լարում: Պին 20-ը պետք է միացված լինի 5 վոլտ սնուցման աղբյուրին,
11-ը՝ 5 վոլտ սնուցման աղբյուրին, իսկ 28-ը՝ 12 վոլտ սնուցման աղբյուրին: Դուք կապում եք 2-րդ փին
գետնին: (1976-ին Intel-ը թողարկեց 8085 չիպը, որը պարզեցրեց էներգիայի այս պահանջները):
Մնացած բոլոր քորոցները գծված են որպես սլաքներ: Չիպից սլաքը ցույց է տալիս ելքային ազդանշան: Սա
միկրոպրոցեսորի կողմից կառավարվող ազդանշան է, որին արձագանքում են համակարգչի մյուս չիպերը:
Չիպի մեջ գտնվող սլաքը ցույց է տալիս մուտքային ազդանշան: Սա ազդանշան է, որը գալիս է համակարգչի
մեկ այլ չիպից, որին արձագանքում է 8080-ը: Որոշ կապանքներ և՛ մուտքային , և՛ ելքային են:
17-րդ գլխի պրոցեսորը պահանջում էր օսլիլատոր՝ այն գործի դնելու համար: 8080-ը պահանջում է երկու
տարբեր սինխրոնացված 2-ՄՀց ժամացույցի մուտքեր, որոնք պիտակավորված են ø 1 և ø 2 22 և 15 կապում:
Այս ազդանշանները առավել հարմար են մատակարարվում Intel-ի կողմից պատրաստված մեկ այլ չիպի
միջոցով, որը հայտնի է որպես 8224 Clock Signal Generator: Դուք միացնում եք 18 ՄՀց
հաճախականությամբ քվարց բյուրեղը այս չիպին, և այն հիմնականում անում է մնացածը:
Միկրոպրոցեսորը միշտ ունի բազմաթիվ ելքային ազդանշաններ, որոնք հասցեագրում են հիշողությունը: Այդ
նպատակով նրա ունեցած ազդանշանների քանակն ուղղակիորեն կապված է միկրոպրոցեսորին հասանելի
հիշողության քանակի հետ: 8080-ն ունի A 0 -ից A 15 պիտակավորված 16 ազդանշան , որոնք նրան
հնարավորություն են տալիս հասցեագրել 2 16 կամ 65,536 բայթ հիշողություն:
8080-ը 8-բիթանոց միկրոպրոցեսոր է, որը կարդում է տվյալներ հիշողությունից և հիշողության մեջ գրում
տվյալներ միաժամանակ 8 բիթ: Չիպը ներառում է D 0 -ից D 7 պիտակավորված ութ ազդանշան : Այս ազդանշանները
միակն են չիպի վրա, որոնք և՛ մուտքային, և՛ ելքային են: Երբ միկրոպրոցեսորը կարդում է հիշողության մեկ
բայթ, փիները գործում են որպես մուտքեր; երբ միկրոպրոցեսորը գրում է բայթ հիշողության մեջ, փիները
գործում են որպես ելքեր:
Միկրոպրոցեսորի մյուս տասը պինները կառավարման ազդանշաններ են։ RESET մուտքագրումը, օրինակ,
օգտագործվում է միկրոպրոցեսորը վերականգնելու համար: Ելքային ազդանշանը ցույց է տալիս, որ
միկրոպրոցեսորը պետք է RAM-ում գրի հիշողության մեկ բայթ: ( Ազդանշանը համապատասխանում է
RAM-ի զանգվածի Write մուտքագրմանը:) Բացի այդ, D 0-ից մինչև D 7 պինների վրա հայտնվում են այլ
հսկիչ ազդանշաններ որոշակի ժամանակ, մինչ չիպը կարդում է հրահանգները: 8080-ի շուրջ կառուցված
համակարգչային համակարգերը սովորաբար օգտագործում են 8228 System Controller չիպը՝ այս
լրացուցիչ կառավարման ազդանշանները փակելու համար: Հետագայում ես կնկարագրեմ որոշ կառավարման
ազդանշաններ, բայց 8080-ի կառավարման ազդանշանները տխրահռչակ են, այնպես որ, եթե դուք իրականում
չեք պատրաստվում համակարգիչ նախագծել չիպի վրա հիմնված, ավելի լավ է ձեզ չտանջել դրա
կառավարման ազդանշաններով:
Ենթադրենք, որ 8080 միկրոպրոցեսորը միացված է 64 ԿԲ հիշողությանը, որի վրա մենք հնարավորություն
ունենք բայթեր գրել և կարդալ բայթեր՝ անկախ միկրոպրոցեսորից:
8080 չիպի վերակայումից հետո այն միկրոպրոցեսորում կարդում է 0000h հիշողության հասցեում գտնվող
բայթը: Դա անում է A 0 -ից A 15 հասցեների ազդանշանների վրա 16 զրո դուրս բերելով : Բայթը, որը նա կարդում է, պետք
է լինի 8080 հրահանգ, և այս բայթը կարդալու գործընթացը հայտնի է որպես հրահանգի բեռնում :
Համակարգչում, որը մենք կառուցեցինք 17-րդ գլխում , բոլոր հրահանգները (բացի HLT-ից ) ունեին 3 բայթ
երկարություն՝ բաղկացած opcode-ից և 2 բայթ հասցեից: 8080-ում հրահանգները կարող են լինել 1 բայթ,
2 բայթ կամ 3 բայթ երկարությամբ: Որոշ հրահանգներ ստիպում են 8080-ին միկրոպրոցեսորում կարդալ
հիշողության որոշակի տեղից բայթը: Որոշ հրահանգներ ստիպում են 8080-ին միկրոպրոցեսորից բայթ գրել
հիշողության որոշակի վայրում: Այլ հրահանգներ ստիպում են 8080-ին ինչ-որ բան անել ներսում՝ առանց
որևէ RAM օգտագործելու: Առաջին հրահանգը մշակելուց հետո 8080-ը մուտք է գործում հիշողության մեջ
երկրորդ հրահանգը և այլն: Այս հրահանգները միասին կազմում են համակարգչային ծրագիր, որը կարող է
ինչ-որ հետաքրքիր բան անել:
Երբ 8080-ն աշխատում է 2 ՄՀց առավելագույն արագությամբ, յուրաքանչյուր ժամացույցի ցիկլը 500
նանվայրկյան է: (1 ÷ 2,000,000 ցիկլ վայրկյանում = 0,000000500 վայրկյան:) Գլուխ 17- ի
համակարգչի հրահանգները պահանջում են 4 ժամացույցի ցիկլեր: Յուրաքանչյուր 8080 հրահանգ
պահանջում է 4-ից 18 ժամացույցի ցիկլեր: Սա նշանակում է, որ յուրաքանչյուր հրահանգ կատարվում է
2-ից 9 միկրովայրկյանում (վայրկյան միլիոներորդական):
Հավանաբար լավագույն միջոցը հասկանալու, թե կոնկրետ միկրոպրոցեսորն ինչ կարող է անել, նրա
ամբողջական հրահանգների հավաքածուն համակարգված կերպով ուսումնասիրելն է:
17-րդ գլխի վերջնական համակարգիչը ընդամենը 12 հրահանգ ուներ: 8-բիթանոց միկրոպրոցեսորը
հեշտությամբ կարող է ունենալ մինչև 256 հրահանգ, որոնցից յուրաքանչյուրը համապատասխանում է
որոշակի 8-բիթանոց արժեքին: (Այն իրականում կարող է ավելի շատ հրահանգներ ունենալ, եթե որոշ
հրահանգներ ունենան 2 բայթանոց օպերացիոն կոդ): Դա կարող է շատ թվալ, բայց ընդհանուր առմամբ,
8080-ն իրականում այնքան էլ ավելին չի անում, քան 17-րդ գլխի համակարգիչը : Օրինակ, եթե դուք պետք է
բազմապատկեք կամ բաժանեք՝ օգտագործելով 8080, դուք դեռ պետք է գրեք ձեր սեփական փոքրիկ ծրագիրը՝
դա անելու համար:
Ինչպես հիշում եք Գլուխ 17- ից , պրոցեսորի հրահանգների հավաքածուի յուրաքանչյուր opcode
սովորաբար կապված է որոշակի մնեմոնիկի հետ, և այդ մնեմոնիկներից որոշները կարող են փաստարկներ
ունենալ: Բայց այս մնեմոնիկները բացառապես հարմարության համար են՝ հղում անելով օպերացիոն
կոդերին: Պրոցեսորը կարդում է միայն բայթ; նա ոչինչ չգիտի տեքստի մասին, որը կազմում է մնեմոնիկները:
(Հստակության նպատակով ես որոշ չափով ազատվել եմ մնեմոնիկներից, ինչպես դրանք երևում են Intel-ի
8080-ի փաստաթղթերում):
Գլուխ 17 համակարգիչն ուներ երկու կարևոր հրահանգներ, որոնք մենք սկզբում անվանում էինք Load and
Store : Այս հրահանգներից յուրաքանչյուրը զբաղեցնում էր 3 բայթ հիշողություն: Load հրահանգի առաջին
բայթը opcode-ն էր, իսկ 2 բայթը, որը հաջորդում էր opcode-ին, ցույց էր տալիս 16-բիթանոց հասցե:
Պրոցեսորը բեռնել է այդ հասցեի բայթը կուտակիչում: Նմանապես, Store-ի հրահանգը պահպանեց
կուտակիչի պարունակությունը հրահանգում նշված հասցեում:
Ավելի ուշ մենք հայտնաբերեցինք, որ մենք կարող ենք կրճատել այս երկու օպերատիվ կոդերը՝ օգտագործելով
մնեմոնիկա.
LOD A,[aaaa]
STO [aaaa],A

որտեղ A-ն նշանակում է կուտակիչ (նշանակությունը Load հրահանգում և աղբյուրը Store-ի հրահանգում )
և aaaa-ն ցույց է տալիս 16-բիթանոց հիշողության հասցե, որը սովորաբար գրվում է որպես 4
տասնվեցական թվանշան:
17-րդ գլխի կուտակիչը : Եվ ինչպես 17-րդ գլխի համակարգիչը , 8080-ը ներառում է երկու հրահանգներ,
որոնք կատարում են ճիշտ նույն բանը, ինչ Բեռնել և Պահել հրահանգները: Այս երկու հրահանգների 8080
օպերացիոն կոդերն են 32h և 3Ah, և յուրաքանչյուր opcode-ին հաջորդում է 16-բիթանոց հասցե: 8080
մնեմոնիկներն են STA (նշանակում է Store Accumulator ) և LDA ( Load Accumulator ):
Հրա
Opc հան
ode գ
ՍՏ
Ա

32
աա
ա],
Ա
LD
A
A,


աա
ա]

Բացի կուտակիչից, 8080-ը պարունակում է վեց ռեգիստր , որոնք կարող են նաև միկրոպրոցեսորի ներսում
պահել 8-բիթանոց արժեքներ: Այս ռեգիստրները շատ նման են կուտակիչին. իրոք, կուտակիչը համարվում է
ռեգիստրի հատուկ տեսակ: Ինչպես կուտակիչը, մյուս վեց ռեգիստրները սողնակներ են. պրոցեսորը կարող է
բայթերը հիշողությունից տեղափոխել գրանցամատյաններ, իսկ ռեգիստրներից՝ հիշողության մեջ: Մյուս
ռեգիստրները, սակայն, այնքան էլ բազմակողմանի չեն, որքան կուտակիչը: Օրինակ, երբ ավելացնում եք
երկու 8-բիթանոց թվեր, արդյունքը միշտ մտնում է կուտակիչ, այլ ոչ թե մյուս ռեգիստրներից մեկը:
8080-ի վեց լրացուցիչ գրանցամատյանները կոչվում են B, C, D, E, H և L: Առաջին հարցը սովորաբար
տալիս են մարդկանց՝ «Ի՞նչ պատահեց F-ին և G-ին»: և երկրորդ հարցն է՝ «Իսկ ես, Ջ և Կ. Պատասխանն այն
է, որ H և L գրանցամատյաններն այսպես են կոչվում, քանի որ դրանք որոշակի առումով հատուկ են: H-ն
նշանակում է բարձր , իսկ L-ը՝ ցածր : Շատ հաճախ H-ի և L-ի 8-բիթանոց քանակությունները տանդեմում
վերաբերվում են որպես 16-բիթանոց ռեգիստրի զույգ , որը կոչվում է HL, H-ն բարձր կարգի բայթ է, իսկ
L-ը՝ ցածր կարգի բայթ: Այս 16-բիթանոց արժեքը հաճախ օգտագործվում է հիշողությունը հասցեագրելու
համար: Մենք շուտով կտեսնենք, թե ինչպես է սա աշխատում:
Արդյո՞ք այս բոլոր գրանցամատյանները անհրաժեշտ են: Ինչո՞ւ դրանք մեզ պետք չէին Գլուխ 17
համակարգչում: Տեսականորեն դրանք անհրաժեշտ չեն։ Բայց դրանք շատ հարմար են ստացվում։
Համակարգչային շատ ծրագրեր միաժամանակ մի քանի թվերով են ձեռնամուխ լինում: Դա անելը ամենահեշտն
է, եթե բոլոր թվերը պահվում են միկրոպրոցեսորային ռեգիստրներում, քան հիշողության մեջ: Ծրագիրը
սովորաբար նույնպես ավելի արագ է. Որքան քիչ անգամ ծրագրին անհրաժեշտ է հիշողություն մուտք գործել,
այնքան ավելի արագ այն կաշխատի:
Ոչ պակաս, քան 63 օպերատիվ կոդ է հատկացված 8080 մեկ հրահանգին, որը կոչվում է MOV , որը կարճ է
Move-ի համար : Այս հրահանգը ընդամենը մեկ բայթ է: Հրահանգը սովորաբար տեղափոխում է մի ռեգիստրի
պարունակությունը մեկ այլ (կամ նույն) ռեգիստր: MOV հրահանգների մեծ թիվը յոթ ռեգիստրով (ներառյալ
կուտակիչը) միկրոպրոցեսորի նախագծման նորմալ հետևանք է:
Ահա առաջին 32 MOV հրահանգները: Հիշեք, որ նպատակակետը ձախ կողմում գտնվող փաստարկն է, իսկ
աղբյուրը աջ կողմում գտնվող փաստարկն է.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
MO MO
40 V 50 V
B,B D,B
MO MO
41 V 51 V
B,C D,C
MO MO
42 V 52 V
B,D D,D

MO MO
43 V 53 V
B,E D,E
MO ՄՈ
44 V 54 Վ
B,H Դ,Հ

MO MO
45 V 55 V
B,L D,L
MO MO
V V
46 B, 56 D,
[HL [HL
] ]

MO ՄՈ
47 V 57 Վ
B,A Դ,Ա
MO MO
48 V 58 V
C,B E,B

MO MO
V V
49 59
C, E,
C C
MO MO
4Ա V 5Ա V
C,D E,D

MO MO
4Բ V 5Բ V
C,E E,E
MO MO
4C V 5C V
C,H E,H
MO MO
4D V 5D V
C,L E,L

MO MO
V V
4E C, 5E E,
[HL [HL
] ]
MO MO
4F V 5F V
C,A E,A

Սրանք հարմար հրահանգներ են, որոնք պետք է ունենալ: Ամեն անգամ, երբ դուք ունեք արժեք մի
գրանցամատյանում, դուք գիտեք, որ կարող եք այն տեղափոխել մեկ այլ ռեգիստր: Ուշադրություն դարձրեք
նաև չորս հրահանգներին, որոնք օգտագործում են HL ռեգիստրի զույգը, ինչպիսիք են
MOV B, [HL]

LDA հրահանգը հիշողությունից բայթ է փոխանցում կուտակիչ; բայթի 16-բիթանոց հասցեն ուղղակիորեն
հետևում է LDA opcode-ին: Այս MOV հրահանգը բայթը փոխանցում է հիշողությունից B գրանցամատյան:
Բայց ռեգիստրում բեռնվող բայթի հասցեն պահվում է ռեգիստրի զույգ HL ռեգիստրներում: Ինչպե՞ս եղավ
HL-ն պահելու 16-բիթանոց հիշողության հասցե: Դե, դա կարող է տեղի ունենալ տարբեր ձևերով: Միգուցե
հասցեն ինչ-որ կերպ հաշվարկված է եղել։
Ամփոփելու համար այս երկու հրահանգները
LDA A,[aaaa]
MOV B,[HL]

երկուսն էլ բեռնում են մեկ բայթ հիշողությունից միկրոպրոցեսոր, բայց նրանք օգտագործում են երկու
տարբեր մեթոդներ հիշողությունը հասցեագրելու համար: Առաջին մեթոդը կոչվում է ուղղակի հասցեավորում
, իսկ երկրորդ մեթոդը կոչվում է ինդեքսավորված հասցեավորում :
MOV հրահանգների երկրորդ խմբաքանակը ցույց է տալիս, որ HL-ի կողմից հասցեագրված հիշողության
գտնվելու վայրը կարող է նաև լինել նպատակակետ.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
MO MO
40 V 50 V
B,B D,B
MO
MO
V
60 V 70
[HL
H,B
],B
MO
MO
V
61 V 71
[HL
H,C
], C

MO
MO
V
62 V 72
[HL
H,D
],D
MO
MO
V
63 V 73
[HL
H,E
],E

ՄՈ
MO
64 Վ 74
V
Հ,Հ
[HL
],Հ
MO
MO
V
65 V 75
[HL
H,L
], L

MO
V
66 H, 76 HLT
[HL
]
MO
ՄՈ
V
67 Վ 77
[HL
Հ,Ա
], Ա
MO MO
68 V 78 V
L,B A,B
MO MO
69 V 79 V
L,C A,C

ՄՈ
MO
Վ
6Ա V 7Ա
Ա,
L,D
Դ
ՄՈ
MO
Վ
6Բ V 7Բ
Ա,
L,E
Է
ՄՈ ՄՈ
6C Վ Լ, 7C Վ
Հ Ա, Հ
MO ՄՈ
6D V L, 7D Վ
L Ա, Լ

MO
MO
V
V L,
6E 7E A,
[HL
[HL
]
]

ՄՈ ՄՈ
6F Վ Լ, 7F Վ
Ա Ա,Ա

Այս հրահանգներից մի քանիսը, ինչպիսիք են


ՄՈՎ Ա,Ա

ոչ մի օգտակար բան մի արեք. Բայց հրահանգը


MOV [HL], [HL]

գոյություն չունի։ Օպտիկոդը, որն այլապես կհամապատասխաներ այդ հրահանգին, իրականում HLT ( Halt )
հրահանգ է:
MOV օպերացիոն կոդերին նայելու ավելի բացահայտող միջոց է օփկոդի բիթային օրինաչափությունը
ուսումնասիրելը: MOV opcode-ը բաղկացած է 8 բիթից
01դդդսսսս

որտեղ ddd տառերը ներկայացնում են 3-բիթանոց կոդ, որը վերաբերում է նպատակակետին, իսկ sss-ը
3-բիթանոց կոդ է, որը վերաբերում է աղբյուրին: Այս 3-բիթանոց կոդերն են

000
=
Գրա
նցվե
լԲ
001
=
Գրա
նցվե
լԳ
010
=
Գրա
նցվե
լԴ
011
=
Գրա
նցվե
լԷ
100
=
Գրա
նցվե
լՀ
101
=
Գրա
նցվե
լԼ
110
=
Հիշո
ղութ
յան
բով
անդ
ակու
թյու
նը
HL
հաս
ցեու
մ
111
=
կուտ
ակիչ

Օրինակ, հրահանգը
MOV L,E
կապված է opcode-ի հետ

011
010
11

կամ 6 Բժ. Դա հաստատելու համար կարող եք ստուգել նախորդ աղյուսակը:


Այսպիսով, հավանաբար ինչ-որ տեղ 8080-ի ներսում, sss պիտակավորված 3 բիթերն օգտագործվում են
8-Գծից-1-Տող Տվյալների ընտրիչում, իսկ 3 բիթները, որոնք պիտակավորված են ddd , օգտագործվում են
3-տողից-8-տող ապակոդավորիչը կառավարելու համար: որոշում է, թե որ ռեգիստրն է փակում արժեքը:
Հնարավոր է նաև B և C գրանցամատյանները օգտագործել որպես BC 16-բիթանոց ռեգիստրների զույգ, իսկ
D և E ռեգիստրները որպես 16-բիթանոց ռեգիստրների զույգ DE: Եթե գրանցման զույգերից որևէ մեկը
պարունակում է հիշողության վայրի հասցեն, որը ցանկանում եք օգտագործել բայթը բեռնելու կամ պահելու
համար, կարող եք օգտագործել հետևյալ հրահանգները.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
LD
ST
AX
AX
02 0 Ա A,
[BC
[մ.թ
], Ա
.ա.
LD
ST
AX
AX
12 1Ա A,
[DE
[DE
],A
]

Move հրահանգների մեկ այլ տեսակ կոչվում է Move Immediate և նրան վերագրվում է մնեմոնիկ MVI :
Move Immediate հրահանգը կազմված է 2 բայթից: Առաջինը օփկոդն է, իսկ երկրորդը՝ տվյալների բայթ:
Այդ բայթը հիշողությունից փոխանցվում է գրանցամատյաններից մեկին կամ HL ռեգիստրի զույգին
հասցեագրված հիշողության վայր.

Հրա
Opc հան
ode գ
MVI
06 B,
xx
MVI
0E C,
xx

MVI
16 D,
xx

MVI
1E E,
xx
MVI
26 H,
xx
MVI
2E L,
xx
MVI
[HL
36
],
xx
MVI
3E A,
xx

Օրինակ, հրահանգից հետո


MVI E, 37ժ

ռեգիստրը E պարունակում է 37h բայթ: Սա համարվում է հիշողության հասցեավորման երրորդ մեթոդ, որը
կոչվում է անմիջական հասցեավորում :
17-րդ գլխում մշակված պրոցեսորից : Դրանք են՝ գումարում ( ADD ), գումարում ( ADC ), հանում ( SUB )
և հանում փոխառությամբ ( SBB ): Բոլոր դեպքերում, կուտակիչը երկու օպերանդներից մեկն է և նաև
արդյունքի նպատակակետն է.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
Ավ ԵՆ
ելա ԹԱ
80 ցրե 90 ԿԱ
՛ք Ա,
A,B Բ
Ավ
SU
ելա
B
81 ցրե 91
A,
՛ք
C
A,C

Ավ
ելա SU
82 ցրե 92 B
՛ք A,D
A,D
Ավ ԵՆ
ելա ԹԱ
83 ցրե 93 ԿԱ
՛ք Ա,
A,E Ե
Ավ
ԵՆ
ելա
ԹԱ
84 ցրե 94
ԿԱ
՛ք
Ա, Հ
A,H
Ավ
ԵՆ
ելա
ԹԱ
85 ցրե 95
ԿԱ
՛ք
Ա, Լ
A,L
ԵՆ
Ավ
ԹԱ
ելա
ԿԱ
ցրե
86 96 ԼԻ
՛ք
Ա,
A,[
[HL
HL]
]

Ավ ԵՆ
ելա ԹԱ
87 ցրե 97 ԿԱ
՛ք Ա,
A,A Ա
AD SB
88 C 98 B
A,B A,B

SB
AD
B
89 C 99
A,
A,C
C
AD SB
8 Ա C 9Ա B
A,D A,D

SB
AD
B
8Բ C 9Բ
A,
A,E
E
AD ՍԲ
8C C 9C Բ
A,H Ա, Հ

AD SB
8D C 9D B
A,L A, L
AD SB
C B
8E A, 9E A,
[HL [HL
] ]
ՍԲ
AD
Բ
8F C 9F
Ա,
A,A
Ա

Ենթադրենք A-ն պարունակում է 35h բայտը, իսկ B գրանցամատյանը պարունակում է 22h բայտը:
Կատարելուց հետո
ԵՆԹԱԿԱ Ա, Բ

կուտակիչը պարունակում է 13ժ բայթ:


Եթե A-ն պարունակում է 35h բայտը, իսկ H գրանցամատյանը պարունակում է 10h բայտը, իսկ L-ն
պարունակում է 7Ch բայտը, իսկ հիշողության 107Ch տեղը պարունակում է 4Ah բայտը, ապա հրահանգը.
Ավելացրե՛ք A,[HL]

ավելացնում է բայտը կուտակիչում (35h) և բայթը, որը հասցեագրված է գրանցման զույգի HL (4Ah) և
պահպանում է արդյունքը (7Fh) կուտակիչում:
ADC և SBB հրահանգները թույլ են տալիս 8080-ին ավելացնել և հանել 16-բիթանոց, 24-բիթանոց,
32-բիթանոց և ավելի մեծ թվեր : Օրինակ, ենթադրենք BC և DE ռեգիստրի զույգերը երկուսն էլ
պարունակում են 16-բիթանոց թվեր: Դուք ցանկանում եք դրանք ավելացնել և արդյունքը դնել մ.թ.ա. Ահա թե
ինչպես դա անել.
MOV A,C; Ցածր կարգի բայթ
ADD A,E
MOV C,A
MOV A,B ; Բարձր կարգի բայթ
ADC A,D
MOV B,A

Ավելացման երկու հրահանգներն են՝ ADD ցածր կարգի բայթի համար և ADC ՝ բարձր կարգի բայթի համար:
Առաջին ավելացման արդյունքում ստացված ցանկացած բիթ ներառվում է երկրորդ հավելման մեջ: Բայց քանի
որ դուք կարող եք ավելացնել միայն կուտակիչով, կոդի այս փոքրիկ հատվածը պահանջում է ոչ պակաս, քան
4 MOV հրահանգներ: Շատ MOV հրահանգներ սովորաբար հայտնվում են 8080 կոդով:
Լավ ժամանակ է խոսելու 8080 դրոշների մասին: 17-րդ գլխի մեր պրոցեսորում մենք ունեինք «Carry» և
«Zero» դրոշակ: 8080-ն ունի ևս երեքը, որոնք կոչվում են Sign, Parity և Auxiliary Carry: Բոլոր
դրոշները պահվում են ևս մեկ այլ 8-բիթանոց ռեգիստրում, որը կոչվում է Ծրագրի կարգավիճակի բառ (
PSW ): Հրահանգները, ինչպիսիք են LDA, STA կամ MOV-ն ընդհանրապես չեն ազդում դրոշների վրա: ADD
, SUB, ADC և SBB հրահանգները ազդում են դրոշների վրա, սակայն, հետևյալ կերպ.
● Նշանի դրոշակը դրվում է 1-ի, եթե արդյունքի ամենակարևոր բիթը 1 է, ինչը նշանակում է, որ
արդյունքը բացասական է:
● Զրոյական դրոշակը դրվում է 1-ի, եթե արդյունքը 0 է:
● Պարիտետի դրոշակը դրվում է 1-ի, եթե արդյունքն ունի զույգ հավասարություն , ինչը
նշանակում է, որ արդյունքի 1 բիթերի թիվը զույգ է: Հավասարության դրոշակը 0 է, եթե
արդյունքն ունի տարօրինակ հավասարություն : Պարիտետը երբեմն օգտագործվում է որպես
սխալների ստուգման կոպիտ ձև: Այս դրոշը հաճախ չի օգտագործվում 8080 ծրագրավորման
մեջ:
● Carry դրոշը դրված է 1-ի, եթե ADD կամ ADC գործողությունը հանգեցնում է տեղափոխման
կամ եթե SUB-ը և SBB-ն չի հանգեցնում տեղափոխման: (Սա տարբերվում է Գլուխ 17-ի
համակարգչում Carry դրոշի ներդրումից ):
● «Auxiliary Carry» դրոշակը 1 է, եթե գործողությունը հանգեցնում է ցածր խայթոցից դեպի
բարձր խայթոցի տեղափոխմանը: Այս դրոշը օգտագործվում է միայն DAA ( Decimal Adjust
Accumulator ) հրահանգի համար:
Երկու հրահանգներ ուղղակիորեն ազդում են կրելու դրոշի վրա.

Հրա
Իմա
Opc հան
ստը
ode գ
ST Սահ
37
C ման
եք
Car
ry
flag

1-ի
Co
mpl
eme
CM
3F nt
C
Car
ry
դրոշ

Գլուխ 17- ի համակարգիչը կատարում էր ADD, ADC, SUB և SBB հրահանգներ (թեև ոչ այնքան
ճկունությամբ), բայց 8080-ը կատարում է նաև բուլյան AND, OR և XOR գործողություններ: Ինչպես
թվաբանական, այնպես էլ տրամաբանական գործողությունները կատարվում են պրոցեսորի թվաբանական
տրամաբանական միավորի (ALU) կողմից:

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
ԿԱ
ԵՎ
Մ
A0 Ա, B0
Ա,
Բ
Բ

ԿԱ
ԵՎ
Մ
Ա1 Ա, B1
A,
Գ
C
ԿԱ
ԵՎ
Մ
A2 Ա, B2
Ա,
Դ
Դ

ԿԱ
ԵՎ
Մ
A3 Ա, B3
Ա,
Ե
Է
ԿԱ
ԵՎ
A4 B4 Մ
Ա, Հ
Ա, Հ

ԿԱ
ԵՎ
A5 B5 Մ
Ա, Լ
Ա, Լ
ԿԱ
ԵՎ
Մ
Ա,
A6 B6 Ա,
[HL
[HL
]
]
ԵՎ
ԿԱ
A7 Ա, B7
Մ
Ա
Ա,
Ա
XO CM
A8 R B8 P
A,B A,B
CM
XO
P
A9 R B9
A,
A,C
C
XO CM
ԱԱ R ԲԱ P
A,D A,D
XO CM
ԱԲ R ԲԲ P
A,E A,E

XO ՃԿ
մ.թ.
AC R Պ
ա
Ա,Հ Ա, Հ
ՀԱՅ
ՏԱՐ
XO ՃԿ
ԱՐՈ
R ԲԴ Պ
ՒԹ
Ա,Լ Ա, Լ
ՅՈՒ
Ն
XO CM
R P
ԼԻՆ
ԱԷ A, A,
ԵԼ
[HL [HL
] ]
XO ՃԿ
R Պ
AF Բ.Ֆ
Ա, Ա,
Ա Ա

AND , XOR և OR հրահանգները կատարում են բիթային գործողություններ: Սա նշանակում է, որ


տրամաբանական գործողությունը կատարվում է յուրաքանչյուր զույգ բիթերի վրա առանձին։
Օրինակ,
MVI A,0Fh
MVI B,55h
ԵՎ A,B

Կուտակիչում արժեքը կլինի 05h: Եթե երրորդ հրահանգը լիներ OR , արդյունքը կլիներ 5Fh: Եթե հրահանգը
լիներ XOR , արդյունքը կլիներ 5Ah:
CMP ( Համեմատել ) հրահանգը նման է SUB հրահանգին, բացառությամբ , որ արդյունքը չի պահվում
կուտակիչում: Այսինքն, CMP-ն կատարում է հանում, իսկ հետո դեն է նետում արդյունքը: Ի՞նչ իմաստ ունի:
Դրոշները! Դրոշակները ձեզ ցույց են տալիս ձեր համեմատած 2 բայթերի հարաբերությունները: Օրինակ,
հաշվի առեք հետևյալ հրահանգները.
MVI B,25h
CMP A,B
Այս հրահանգից հետո Ա-ի պարունակությունը մնում է անփոփոխ։ Այնուամենայնիվ, Zero դրոշը
սահմանվում է, եթե A-ի արժեքը հավասար է 25h: Carry դրոշը սահմանվում է, եթե A-ի արժեքը 25h-ից
փոքր է:
Ութ թվաբանական և տրամաբանական գործողությունները նույնպես ունեն տարբերակներ, որոնք գործում են
անմիջապես բայթի վրա.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
ADI ANI
C6 A, E6 A,
xx xx

ACI XRI
CE A, EE A,
xx xx
SUI ORI
D6 A, F6 A,
xx xx
SBI CPI
ԴԵ A, FE A,
xx xx

Օրինակ, վերը նշված երկու տողերը կարող են փոխարինվել


CPI A, 25ժ

Ահա երկու տարբեր 8080 հրահանգներ.

Հրա
Opc հան
ode գ
DA
27
A
CM
2F
A

CMA-ն նշանակում է Complement Accumulator : Այն կատարում է կուտակիչի արժեքի լրացումը:


Յուրաքանչյուր 0-ը դառնում է 1, իսկ յուրաքանչյուր 1-ը դառնում է 0: Եթե կուտակիչը 01100101 է, ապա
CMA հրահանգը հանգեցնում է այն 10011010-ի: Դուք կարող եք նաև լրացնել կուտակիչը՝ օգտագործելով
հրահանգը:
XRI A,FFh

DAA-ն նշանակում է տասնորդական կարգավորիչ կուտակիչ , ինչպես ես նշեցի ավելի վաղ, և դա,
հավանաբար, 8080-ի ամենաբարդ հրահանգն է: Միկրոպրոցեսորի մի ամբողջ փոքր հատվածը հատուկ
նվիրված է այս հրահանգը կատարելուն:
DAA հրահանգն օգնում է ծրագրավորողին իրականացնել տասնորդական թվաբանություն՝ օգտագործելով
թվերը ներկայացնելու մեթոդ, որը հայտնի է որպես երկուական կոդավորված տասնորդական կամ BCD :
BCD-ում տվյալների յուրաքանչյուր կծկում կարող է տատանվել միայն 0000-ից մինչև 1001-ը, որը
համապատասխանում է 0-ից 9-ը տասնորդական թվանշաններին: Բայթի 8 բիթերը կարող են պահել երկու
տասնորդական թվանշան BCD ձևաչափով:
Ենթադրենք, որ կուտակիչը պարունակում է BCD արժեքը 27h: Քանի որ սա BCD արժեք է, այն իրականում
վերաբերում է 27 տասնորդական արժեքին: (Սովորաբար, 27h տասնորդական արժեքը ունի տասնորդական
համարժեք 39:) Ենթադրենք նաև, որ B գրանցամատյանը պարունակում է BCD արժեքը 94h: Եթե դուք
կատարում եք հրահանգը
MVI A,27h
MVI B,94h
ADD A,B

կուտակիչը կպարունակի BBh արժեքը, որը, իհարկե, BCD արժեք չէ, քանի որ BCD բայթերի խայթոցները
երբեք չեն գերազանցում 9-ը: Բայց հիմա կատարեք հրահանգը:
DAA

Այժմ կուտակիչը պարունակում է 21ժ, և դրված է Carry դրոշը: Դա պայմանավորված է նրանով, որ 27-ի և
94-ի տասնորդական գումարը հավասար է 121-ի: Սա կարող է հարմար լինել, եթե ձեզ անհրաժեշտ է
կատարել BCD թվաբանություն:
Շատ հաճախ անհրաժեշտ է լինում որոշակի արժեքին ավելացնել 1 կամ արժեքից հանել 1: Գլուխ 17- ի
բազմապատկման ծրագրում մենք պետք է մի արժեքից հանեինք 1-ը, և ինչպես դա արեցինք՝ ավելացնելով
FFh, որը երկուսի լրացման արժեքն է –1: 8080-ը ներառում է հատուկ հրահանգներ ռեգիստրի կամ
հիշողության գտնվելու վայրը 1-ով (սա հայտնի է որպես հավելում ) կամ 1-ով ( նվազում ) մեծացնելու
համար.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
INR DC
04 05
B RB

INR DC
0C 0D
C RC

INR DC
14 15
Դ RԴ
INR DC
1C 1D
E RE

INR DC
24 25
Հ RՀ
INR DC
2C 2D
Լ RԼ

DC
INR
R
34 [HL 35
[HL
]
]

INR DC
3C 3D
Ա RԱ

Մեկ բայթանոց INR և DCR հրահանգները ազդում են բոլոր դրոշների վրա, բացառությամբ Carry դրոշի:
8080-ը ներառում է նաև չորս Պտտման հրահանգներ: Այս հրահանգները կուտակիչի պարունակությունը
տեղափոխում են 1 բիթ դեպի ձախ կամ աջ.

Հրա
Իմա
Opc հան
ստը
ode գ
Պտ
տեց
նել
RL
07 կուտ
C
ակիչ
ը
ձախ
Պտ
տեց
RR նել
0F
C կուտ
ակիչ
ը աջ
Պտ
տեց
նել
կուտ
ակիչ
ը
ՌԱ
17 ձախ
Լ
տեղ
ափո
խմա
ն
միջո
վ
Պտ
տեք
կուտ
ակիչ
ը
անմ
RA իջա
1F
R պես
տեղ
ափո
խմա
ն
միջո
վ

Այս հրահանգները ազդում են միայն Carry դրոշի վրա:


Ենթադրենք, որ կուտակիչը պարունակում է A7h արժեքը կամ 10100111 երկուական տարբերակով: RLC
հրահանգը տեղափոխում է բիթերը ձախ : Ամենացածր բիթը (ներքևից տեղափոխված) դառնում է
ամենաբարձր բիթը (տեղաշարժվում է վերևում) և նաև որոշում է «Carry» դրոշի վիճակը: Արդյունքը
01001111 է, իսկ Carry դրոշակը 1 է: RRC հրահանգը նույն կերպ տեղաշարժում է բիթերը ճիշտ: Սկսած
10100111-ից, RRC հրահանգից հետո արդյունքը 11010011 է, իսկ Carry դրոշը 1 է:
RAL և RAR հրահանգները մի փոքր այլ կերպ են աշխատում : RAL հրահանգը դնում է «Carry» դրոշը
կուտակիչի ամենացածր բիթին, երբ տեղափոխվում է ձախ, բայց ամենաբարձր բիթը սահմանում է «Carry»
դրոշի նախորդ բովանդակությանը : Օրինակ, եթե կուտակիչը պարունակում է 10100111, իսկ Carry
դրոշակը 0 է, RAL- ը հանգեցնում է նրան, որ ակումուլյատորը դառնում է 01001110, իսկ Carry դրոշը` 1:
սահմանել 1:
Հերթափոխի հրահանգները օգտակար են, երբ թիվը բազմապատկում եք 2-ով (սա հերթափոխ է դեպի ձախ)
կամ թիվը բաժանում եք 2-ի (հերթափոխ աջ):
Հիշողությունը, որին հասցեագրվում է միկրոպրոցեսորը, կոչվում է պատահական մուտքի հիշողություն
(RAM) մի պատճառով. միկրոպրոցեսորը կարող է մուտք գործել ցանկացած կոնկրետ հիշողության վայր՝
պարզապես տրամադրելով այդ վայրի հասցեն: RAM-ը նման է գրքի, որը մենք կարող ենք բացել ցանկացած
էջ: Դա նման չէ միկրոֆիլմի վրա մեկ շաբաթվա թերթին: Շաբաթվա հրատարակության մեջ ինչ-որ բան
գտնելը պահանջում է, որ մենք սկանավորենք շաբաթվա մեծ մասը: Նմանապես, վերջին երգը կասետային
ժապավենի վրա նվագելը պահանջում է, որ մենք արագ առաջ շարժվենք ալբոմի ամբողջ մասով: Միկրոֆիլմի
կամ ժապավենի պահպանման տերմինը պատահական մուտք չէ, այլ հաջորդական մուտք :
Պատահական մուտքի հիշողությունը միանշանակ լավ բան է, հատկապես միկրոպրոցեսորների համար, բայց
երբեմն ձեռնտու է հիշողությանը մի փոքր այլ կերպ վերաբերվել: Ահա պահեստավորման ձև, որը ոչ
պատահական է, ոչ էլ հաջորդական. Ենթադրենք, դուք աշխատում եք գրասենյակում, որտեղ մարդիկ գալիս են
ձեր գրասեղանի մոտ՝ ձեզ աշխատանք տալու համար: Յուրաքանչյուր աշխատանք ներառում է ինչ-որ տեսակի
ֆայլի թղթապանակ: Հաճախ, երբ աշխատում եք մեկ աշխատանքի վրա, տեսնում եք, որ շարունակելու համար
դուք պետք է կատարեք համապատասխան աշխատանք՝ օգտագործելով մեկ այլ ֆայլի թղթապանակ: Այսպիսով,
դուք թողնում եք առաջին թղթապանակը ձեր գրասեղանի վրա, իսկ երկրորդը դնում եք դրա վրա, որպեսզի
աշխատի դրա վրա: Այժմ ինչ-որ մեկը գալիս է ձեր գրասեղանի մոտ, որպեսզի տա ձեզ ևս մեկ աշխատանք, որն
ավելի առաջնահերթություն ունի, քան նախկինը: Ձեզ տրվում է ֆայլի նոր թղթապանակ, և դուք աշխատում եք
դրա հետ մյուս երկուսի վրա: Այդ աշխատանքը պահանջում է ևս մեկ ֆայլի թղթապանակ, և շուտով ձեր
գրասեղանի վրա կունենաք չորս ֆայլի թղթապանակների կույտ:
Ուշադրություն դարձրեք, որ այս կույտը իրականում շատ կանոնավոր միջոց է՝ ձեր կատարած բոլոր
աշխատանքները պահելու և հետևելու համար: Ամենաբարձր ֆայլի թղթապանակը միշտ ունի ամենաբարձր
առաջնահերթ աշխատանքը: Այն բանից հետո, երբ դուք ձերբազատվեք այդ մեկից, պետք է ուշադրություն
դարձնել կույտի հաջորդին և այլն: Երբ վերջապես ազատվեք ձեր գրասեղանի վերջին ֆայլի թղթապանակից
(առաջինը, որով սկսել եք), կարող եք տուն գնալ:
Պահպանման այս ձևի տեխնիկական տերմինը կույտ է : Դուք իրերը հավաքում եք ներքևից վերև և հեռացնում
դրանք վերևից ներքև: Այն նաև կոչվում է վերջին մուտքի առաջին պահոց կամ LIFO : Վերջին բանը, որը
դրվում է բուրգի վրա, առաջին բանն է, որը հանվում է կույտից: Առաջին բանը, որը դրվում է կույտի վրա,
վերջին բանն է, որը հանվում է կույտից:
Համակարգիչները կարող են նաև օգտագործել կույտ ոչ թե աշխատատեղեր, այլ թվեր պահելու համար, և դա
բավականին հարմար է: Դույլի վրա ինչ-որ բան դնելը կոչվում է հրում , իսկ ինչ-որ բան հանելը կոչվում է
փոփ :
Ենթադրենք, որ դուք գրում էիք անսամբլի լեզվով ծրագիր, որն օգտագործում էր A, B և C
գրանցամատյանները: Բայց դուք նկատում եք, որ հասել եք մի կետի, երբ ծրագիրը պետք է անի մեկ այլ բան՝
ևս մեկ փոքր հաշվարկ, որը նույնպես պետք է օգտագործի A, B ռեգիստրները: , և C. Դուք, ի վերջո,
ցանկանում եք վերադառնալ այն, ինչ անում էիք նախկինում, և շարունակեք օգտագործել A, B և C այն
արժեքներով, որոնք նախկինում ունեին:
Այն, ինչ դուք կարող եք անել, իհարկե, պարզապես A, B և C գրանցամատյանները պահելն է հիշողության
տարբեր վայրերում և հետագայում բեռնել այդ վայրերը ռեգիստրների մեջ: Բայց դա պահանջում է հետևել,
թե որտեղ եք դրանք պահել: Դա անելու ավելի մաքուր միջոց է գրանցամատյանները բուրգի վրա մղելն է.
ՀՐՈՒՄ Ա
ՀՐՈՒՄ Բ
ՀՐՈՒՄ Գ

Ես կբացատրեմ, թե իրականում ինչ են անում այս հրահանգները մի պահ: Առայժմ մեզ անհրաժեշտ է միայն
իմանալ, որ նրանք ինչ-որ կերպ պահպանում են ռեգիստրների բովանդակությունը վերջին հիշողության մեջ:
Երբ այս հայտարարությունները կատարվեն, ձեր ծրագիրը կարող է առանց անհանգստանալու օգտագործել
այս գրանցամատյանները այլ նպատակներով: Նախկին արժեքները վերադարձնելու համար դուք պարզապես
դրանք հանում եք բուրգից հակառակ հերթականությամբ, ինչպես ցույց է տրված հաջորդ էջի վերևում:
POP C
POP B
POP A

Հիշեք. Վերջին ներս, առաջինը դուրս: Այս POP հայտարարությունների շուրջ պատահական անցումը սխալ
կլինի:
Հատկապես լավն է stack մեխանիզմի հետ կապված այն է, որ ծրագրի շատ տարբեր բաժիններ կարող են
օգտագործել կույտը առանց խնդիրներ առաջացնելու: Օրինակ, այն բանից հետո, երբ ծրագիրը սեղմում է A,
B և C փաթեթը, ծրագրի մեկ այլ բաժին կարող է որոշել, որ պետք է նույն բանն անի C, D և E
գրանցամատյանների հետ:
ՀՐՈՒՄ Գ
ՀՐՈՒՄ Դ
ՀՐՈՒՄ Ե

Այնուհետև անհրաժեշտ է, որ ծրագրի այդ բաժինը վերականգնի ռեգիստրները հետևյալ կերպ.


POP E
POP D
POP C

նախքան առաջին բաժինը կհայտնվեր C, B և A:


Ինչպե՞ս է իրականացվում դարակը: Ստեկը, առաջին հերթին, սովորական RAM-ի ընդամենը մի հատված է,
որը այլ բանի համար չի օգտագործվում: 8080 միկրոպրոցեսորը պարունակում է հատուկ 16-բիթանոց
ռեգիստր, որը վերաբերում է հիշողության այս հատվածին: Այդ 16-բիթանոց ռեգիստրը կոչվում է Stack
Pointer :
Առանձին ռեգիստրներ հրելու և բացելու իմ օրինակները այնքան էլ ճշգրիտ չէին 8080-ի համար: 8080
PUSH հրահանգը իրականում պահում է 16-բիթանոց արժեքները կույտի վրա, և POP հրահանգը առբերում է
դրանք: Այսպիսով, PUSH C-ի և POP C-ի նման հրահանգների փոխարեն մենք ունենք հետևյալ 8
հրահանգները.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
PO
ՀՐՈ
P
C5 ՒՄ C1
մ.թ.
Ք.ա
ա
ՀՐՈ PO
D5 ՒՄ D1 P
ԴԵ DE

ՀՐՈ PO
E5 ՒՄ E1 P
ՀԼ HL

PU PO
SH P
F5 F1
PS PS
W W

PUSH BC հրահանգը պահում է B և C ռեգիստրները կույտի վրա, իսկ POP BC-ն առբերում է դրանք: Վերջին
շարքի PSW հապավումը վերաբերում է Ծրագրի կարգավիճակի բառին , որը, ինչպես կհիշեք, 8-բիթանոց
ռեգիստրն է, որը պարունակում է դրոշներ: Ներքևի շարքի երկու հրահանգներն իրականում հրում և բացում
են ինչպես կուտակիչը, այնպես էլ PSW-ը: Եթե ցանկանում եք պահպանել բոլոր ռեգիստրների և դրոշների
բովանդակությունը , կարող եք օգտագործել
PUSH PSW
PUSH BC
PUSH DE
PUSH HL

Երբ հետագայում ձեզ անհրաժեշտ է վերականգնել այս ռեգիստրների բովանդակությունը, օգտագործեք POP
հրահանգները հակառակ հերթականությամբ.
POP HL
POP DE
POP BC
POP PSW

Ինչպե՞ս է աշխատում կույտը: Ենթադրենք Stack Pointer-ը 8000h է: PUSH BC հրահանգը առաջացնում է
հետևյալը.
● Stack ցուցիչը նվազում է մինչև 7FFFh:
● B ռեգիստրի բովանդակությունը պահվում է Stack Pointer հասցեում կամ 7FFFh:
● Stack ցուցիչը նվազում է մինչև 7FFEh:
● C ռեգիստրի բովանդակությունը պահվում է Stack Pointer հասցեում կամ 7FFEh:
POP BC հրահանգը, որն իրականացվում է, երբ Stack-ի ցուցիչը դեռ 7FFEh է, հետ է կանչում ամեն ինչ.
● C ռեգիստրի բովանդակությունը բեռնվում է Stack Pointer հասցեից կամ 7FFEh:
● Stack ցուցիչը ավելացել է մինչև 7FFFh:
● B ռեգիստրի բովանդակությունը բեռնվում է Stack Pointer հասցեից կամ 7FFFh:
● Stack ցուցիչը ավելացել է մինչև 8000h:
Յուրաքանչյուր PUSH հրահանգի համար կույտը մեծանում է 2 բայթով: Հնարավոր է, ծրագրում առկա սխալի
պատճառով, որ կույտը այնքան մեծանա, որ այն սկսի վերագրել ծրագրին անհրաժեշտ որոշ կոդ կամ
տվյալներ: Սա խնդիր է, որը հայտնի է որպես կույտերի արտահոսք : Նմանապես, չափազանց շատ POP
հրահանգները կարող են ժամանակից շուտ սպառել կույտի պարունակությունը, մի պայման, որը հայտնի է
որպես stack underflow :
Եթե ձեր 8080-ին միացված է 64 ԿԲ հիշողություն, կարող եք սկզբում դնել Stack Pointer-ը 0000h:
Առաջին PUSH հրահանգը նվազեցնում է, որն ուղղված է FFFFh-ին: Այնուհետև կույտը զբաղեցնում է
հիշողության տարածքը ամենաբարձր հասցեներով, բավականին հեռու ձեր ծրագրերից, որը հավանաբար
կլինի հիշողության տարածքում՝ սկսած 0000h հասցեից:
Stack ռեգիստրի արժեքը սահմանելու հրահանգը LXI է , որը նշանակում է Load Extended Immediate :
Այս հրահանգները նաև բեռնում են 16-բիթանոց ռեգիստրի զույգերը երկու բայթերով, որոնք հետևում են
opcode-ին.

Հրա
Opc հան
ode գ
LXI
մ.թ.
01 ա.,
xxx
x
LXI
DE,
11
xxx
x
LXI
HL,
21
xxx
x

LXI
SP,
31
xxx
x

Հրահանգը
LXI մ.թ.ա., 527 ահ

համարժեք է
MVI B,52
MVI C,7Ah

LXI հրահանգը պահպանում է բայթ : Բացի այդ, նախորդ աղյուսակի վերջին LXI հրահանգն օգտագործվում է
Stack Pointer-ը որոշակի արժեք սահմանելու համար: Հազվադեպ չէ, որ այս հրահանգը առաջին
հրահանգներից մեկն է, որը միկրոպրոցեսորը կատարում է վերագործարկումից հետո.
0000h՝ LXI SP,0000h

Հնարավոր է նաև մեծացնել և նվազեցնել գրանցման զույգերը և Stack Pointer-ը, կարծես դրանք
16-բիթանոց ռեգիստրներ լինեն.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
DC
INX
X
03 մ.թ. 0B
մ.թ.
ա
ա
DC
INX
13 1Բ X
DE
DE
DC
INX
23 2Բ X
HL
HL

DC
INX
33 3Բ X
SP
SP

Մինչ ես 16-բիթանոց հրահանգների թեմայով եմ, եկեք նայենք ևս մի քանիսին: Հետևյալ հրահանգները
ավելացնում են 16-բիթանոց ռեգիստրների զույգերի բովանդակությունը HL գրանցման զույգին.

Հրա
Opc հան
ode գ
DA
D
09 HL,
մ.թ.
ա

DA
D
19
HL,
DE

DA
D
29
HL,
HL

DA
D
39
HL,
SP

Այս հրահանգները կարող են խնայել մի քանի բայթ: Օրինակ, այս հրահանգներից առաջինը սովորաբար
պահանջում է 6 բայթ.
MOV A,L
ADD A,C
MOV L,A
MOV A,H
ADC A,B
MOV H,A

DAD հրահանգը սովորաբար օգտագործվում է հիշողության հասցեները հաշվարկելու համար : Միակ դրոշը,
որի վրա ազդում է հրահանգը, կրել դրոշն է:
Հաջորդը, եկեք տեսնենք մի քանի տարբեր հրահանգներ: Այս երկու օպերատիվ կոդերին հաջորդում է 2
բայթանոց հասցե և պահում և բեռնում գրանցման HL զույգի բովանդակությունը այդ հասցեում.

Հրա
Իմա
Opc հան
ստը
ode գ
SH Խան
2ժ LD ութ
[aa HL
aa], Dire
HL ct

LH
Բեռն
LD
ել
2 HL,
HL
Ահ [ա
Dire
աա
ct
ա]

aaaa հասցեում , իսկ H ռեգիստրը պահվում է aaaa + 1 հասցեում :


Այս երկու հրահանգները բեռնում են Ծրագրի հաշվիչը կամ Stack Pointer-ը գրանցման HL զույգից.

Հրա
Իմա
Opc հան
ստը
ode գ
Բեռն
ել
PC ծրա
HL գրի
E9h
PC, հաշվ
HL իչը
HL-
ից
Բեռն
ել
SP Stac
HL k
F9h
SP, ցուց
HL իչը
HL-
ից

PCHL հրահանգը իրականում Jump- ի տեսակ է : Հաջորդ հրահանգը, որը կատարում է 8080-ը, այն է, որը
գտնվում է HL ռեգիստրի զույգում պահվող հասցեում: SPHL-ը Stack Pointer-ը սահմանելու ևս մեկ մեթոդ
է:
Այս երկու հրահանգները փոխանակում են HL-ի բովանդակությունը սկզբում երկու բայթերի հետ, որոնք
գտնվում են կույտի վերևում, իսկ երկրորդը՝ DE գրանցման զույգի հետ.

Հրա
Իմա
Opc հան
ստը
ode գ
Փոխ
անա
կեք
փաթ
XT
եթի
HL
վերի
E3h HL,
ն
[SP
մաս
]
ը
HL-
ի
հետ
Փոխ
XC անա
HG կեք
EBh
HL, DE
DE և
HL

Ես դեռ չեմ նկարագրել 8080 Jump հրահանգները, բացառությամբ PCHL-ի : Ինչպես հիշում եք Գլուխ 17-
ից , պրոցեսորը ներառում է գրանցամատյան, որը կոչվում է Ծրագրային հաշվիչ, որը պարունակում է
հիշողության հասցեն, որն օգտագործում է պրոցեսորը՝ իր կողմից կատարվող հրահանգները ստանալու
համար: Սովորաբար Ծրագրի հաշվիչը ստիպում է պրոցեսորին կատարել հրահանգներ, որոնք հաջորդաբար
տեղակայված են հիշողության մեջ: Բայց որոշ հրահանգներ, որոնք սովորաբար կոչվում են Jump կամ
Branch կամ Goto , առաջացնում են պրոցեսորի շեղում այս կայուն ընթացքից: Նման հրահանգները
առաջացնում են Ծրագրի հաշվիչի բեռնումը մեկ այլ արժեքով: Հաջորդ հրահանգը, որը բեռնում է պրոցեսորը,
գտնվում է հիշողության մեջ:
Թեև պարզ հին սովորական Jump հրահանգը, անշուշտ, օգտակար է, պայմանական թռիչքներն ավելի լավն
են: Այս հրահանգները ստիպում են պրոցեսորին անցնել մեկ այլ հասցե՝ հիմնվելով որոշակի դրոշի
կարգավորումների վրա, օրինակ՝ «Carry» կամ «Zero» դրոշը: Պայմանական Jump հրահանգի
առկայությունն այն է, ինչը Գլուխ 17-ի ավտոմատացված ավելացման մեքենան վերածեց ընդհանուր
նշանակության թվային համակարգչի:
8080-ն ունի հինգ դրոշակ, որոնցից չորսն օգտագործվում են պայմանական թռիչքների համար: 8080-ն
աջակցում է ինը տարբեր Jump հրահանգներին, ներառյալ անվերապահ թռիչքը և պայմանական թռիչքները,
որոնք հիմնված են Zero, Carry, Parity և Sign դրոշների 1 կամ 0 լինելու վրա:
Մինչ այս հրահանգները ձեզ ցույց տալը, այնուամենայնիվ, ես ուզում եմ ներկայացնել երկու այլ տեսակի
հրահանգներ, որոնք կապված են Jump-ի հետ : Առաջինը Զանգի հրահանգն է: Զանգը նման է Jump-ին,
բացառությամբ , որ նախքան Ծրագրի հաշվիչը նոր հասցեով բեռնելը, պրոցեսորը պահպանում է նախորդ
հասցեն : Որտեղ է այն պահպանում այդ հասցեն: Ինչու՞, իհարկե, բուրգի վրա:
Այս ռազմավարությունը նշանակում է, որ Զանգի հրահանգը արդյունավետորեն պահպանում է հիշեցում այն
մասին, թե որտեղից է այն թռել : Պահված հասցեն թույլ է տալիս պրոցեսորին ի վերջո վերադառնալ
սկզբնական վայր: Վերադարձող հրահանգը, համապատասխանաբար, կոչվում է Return : Return հրահանգը
դուրս է գալիս 2 բայթ կույտից և բեռնում Ծրագրի հաշվիչն այդ արժեքով:
Զանգի և վերադարձի հրահանգները ցանկացած պրոցեսորի չափազանց կարևոր հատկանիշ են: Նրանք թույլ
են տալիս ծրագրավորողին իրականացնել ենթածրագրեր , որոնք հաճախ օգտագործվող կոդի հատվածներ են:
( Հաճախակի ասելով , ես ընդհանուր առմամբ նկատի ունեմ մեկից ավելի անգամ :) Ենթածրագրերը
հավաքների լեզվով ծրագրերի հիմնական կազմակերպչական տարրերն են:
Դիտարկենք մի օրինակ։ Ենթադրենք, դուք գրում եք assembly լեզվով ծրագիր և գալիս եք մի կետի, որտեղ
պետք է բազմապատկել 2 բայթ: Այսպիսով, դուք գրում եք որոշակի կոդ, որն անում է հենց դա, և դուք
շարունակում եք ծրագիրը: Այժմ դուք գալիս եք մեկ այլ կետի, որտեղ դուք պետք է բազմապատկեք 2 բայթ: Դե,
դուք արդեն գիտեք, թե ինչպես բազմապատկել երկու թվեր, այնպես որ կարող եք պարզապես նորից
օգտագործել նույն հրահանգները: Բայց դուք պարզապես երկրորդ անգամ եք մուտքագրում հրահանգները
հիշողության մեջ: Հուսով եմ՝ ոչ։ Դա ժամանակի և հիշողության վատնում է: Այն, ինչ դուք նախընտրում եք
անել, պարզապես անցնել նախորդ կոդը: Բայց նորմալ Jump-ը նույնպես չի աշխատում, քանի որ ծրագրի
ներկայիս տեղը վերադառնալու հնարավորություն չկա: Դա այն է, ինչ ձեզ թույլ են տալիս «Զանգի և
վերադարձի» հրահանգները:
Հրահանգների խումբը, որը բազմապատկում է 2 բայթ, իդեալական թեկնածու է ենթածրագրի համար: Եկեք
նայենք նման ենթածրագրին: 17-րդ գլխում բազմապատկվող բայթերը (և արդյունքը) պահվում էին
հիշողության մեջ որոշակի վայրերում: Այս 8080 ենթակարգը փոխարենը բազմապատկում է B ռեգիստրի
բայթը C ռեգիստրի բայթով և 16-բիթանոց արտադրյալը դնում HL ռեգիստրում.
Բազմապատկել՝ PUSH PSW ; Պահպանեք փոփոխվող գրանցամատյանները
PUSH BC

SUB H,H ; Սահմանեք HL (արդյունք) 0000h


SUB L,L

MOV A,B; Բազմապատկիչը գնում է A


CPI A,00h; Եթե դա 0 է, մենք ավարտեցինք:
JZ AllDone

MVI B,00h ; Սահմանեք BC-ի բարձր բայթը 0

MultLoop-ի՝ DAD HL,BC ; Ավելացնել BC HL


DEC A-ին; Նվազեցման բազմապատկիչ
JNZ MultLoop; Օղակ, եթե դա 0 չէ

Բոլորը Կատարված է՝ POP BC ; Վերականգնել պահպանված ռեգիստրները


POP PSW
RET; Վերադարձ

Ուշադրություն դարձրեք, որ ենթածրագրի առաջին տողը սկսվում է պիտակով, որը Multiply բառն է : Այս
պիտակը, իհարկե, իրականում համապատասխանում է հիշողության հասցեին, որտեղ գտնվում է ենթածրագրը:
Ենթակարգը սկսվում է երկու PUSH հրահանգներով: Սովորաբար ենթածրագրը պետք է փորձի պահպանել (և
հետագայում վերականգնել) ցանկացած ռեգիստր, որը կարող է անհրաժեշտ լինել օգտագործելու համար:
Այնուհետև ենթածրագրը H և L ռեգիստրների բովանդակությունը սահմանում է 0-ի: Այն կարող էր
օգտագործել MVI ( Move Immediate ) հրահանգները, այլ ոչ թե SUB հրահանգները այս աշխատանքի
համար, բայց դա կպահանջեր 4 հրահանգ բայթ, այլ ոչ թե 2: Ռեգիստրի զույգ HL: կպահի բազմապատկման
արդյունքը, երբ ենթածրագրը ավարտվի:
Այնուհետև ենթածրագրը տեղափոխում է ռեգիստրի B-ի (բազմապատկիչ) պարունակությունը A-ի մեջ և
ստուգում, թե արդյոք այն 0 է: Եթե դա 0 է, ապա բազմապատկման ենթակարգը ավարտված է, քանի որ
արտադրյալը 0 է: Քանի որ H և L գրանցամատյաններն արդեն 0 են, ենթածրագրը կարող է պարզապես
օգտագործել: JZ ( Jump If Zero ) հրահանգը ՝ վերջում անցնելու երկու POP հրահանգներին:
Հակառակ դեպքում, ենթածրագրը B ռեգիստրը սահմանում է 0-ի: Այժմ ռեգիստրի BC զույգը պարունակում է
16-բիթանոց բազմապատկիչ, իսկ A-ն պարունակում է բազմապատկիչ: DAD հրահանգը ավելացնում է BC
(բազմապատկիչը) HL-ին (արդյունքը): A-ի բազմապատկիչը նվազում է, և քանի դեռ այն 0 չէ, JNZ ( Jump
If Not Zero ) հրահանգը ստիպում է BC-ին կրկին ավելացնել HL-ին: Այս փոքրիկ օղակը կշարունակվի
այնքան ժամանակ, մինչև BC-ն ավելացվի HL-ին մի քանի անգամ, որը հավասար է բազմապատկիչին:
(Հնարավոր է գրել ավելի արդյունավետ բազմապատկման ենթածրագր՝ օգտագործելով 8080 հերթափոխի
հրահանգները):
Ծրագիրը, որը ցանկանում է օգտագործել այս ենթածրագրը՝ 25ժ-ով 12ժ-ով բազմապատկելու համար
(օրինակ) օգտագործում է հետևյալ կոդը.
MVI B,25h
MVI C,12h
CALL Բազմապատկել
CALL հրահանգը պահպանում է Ծրագրի հաշվիչի արժեքը կույտի վրա : Դույլի վրա պահպանված արժեքը
CALL հրահանգից հետո հաջորդ հրահանգի հասցեն է : Այնուհետև CALL հրահանգը առաջացնում է մի
թռիչք դեպի այն հրահանգը, որը նույնականացվում է պիտակի կողմից Multiply : Դա ենթածրագրի սկիզբն է:
Երբ ենթածրագրը հաշվարկում է արտադրանքը, այն կատարում է RET ( Վերադարձի ) հրահանգը, որը
հանգեցնում է Ծրագրի հաշվիչի դուրս գալուն փաթեթից: Ծրագիրը շարունակվում է CALL հրահանգից հետո
հաջորդ հայտարարությամբ :
8080 հրահանգների հավաքածուն ներառում է պայմանական զանգի հրահանգներ և պայմանական
վերադարձի հրահանգներ, սակայն դրանք օգտագործվում են շատ ավելի քիչ, քան պայմանական Jump
հրահանգները: Այս հրահանգների ամբողջական զանգվածը ներկայացված է հետևյալ աղյուսակում.

Հրա Հրա Հրա


Opc Opc Opc
Վիճ հան հան հան
ode ode ode
ակ գ գ գ
ԶԱ
ՆԳ
ՋՄ
ԱՀ
Ոչ RE Պ
C9 C3 CD ԱՐ
ոք T աա
ԵԼ
աա
աա
աա
Z
ՋՆ CN
սահ
RN Զ Z
ման C0 C2 C4
Z աա աա
ված
աա աա
չէ
Z
ՋԶ CZ
հավ
C8 ՌԶ ԿԱ աա ՍԴ աա
աքա
աա աա
ծու
C-ն
JN CN
սահ
RN C C
ման D0 D2 D4
C աա աա
ված
աա աա
չէ
C
JC ՍԴ
հավ
D8 RC Դ.Ա աա DC աա
աքա
աա աա
ծու
Տար
օրին
JP CP
ակ
RP O O
հավ E0 E2 E4
O աա աա
ասա
աա աա
րութ
յուն
Նույ
նիսկ JP CP
հավ RP E E
E8 ԷԱ ԵՀ
ասա E աա աա
րութ աա աա
յուն
S
սահ JP ՔՊ
ման F0 RP F2 aaa F4 աա
ված a աա
չէ
S
ՋՄ CM
հավ
F8 RM ՖԱ աա ՖԿ aaa
աքա
աա a
ծու

Ինչպես հավանաբար գիտեք, հիշողությունը միակ բանը չէ, որ կապված է միկրոպրոցեսորին:


Համակարգչային համակարգը սովորաբար պահանջում է մուտքային և ելքային (I/O) սարքեր, որոնք
հեշտացնում են մարդկանց հաղորդակցությունը մեքենայի հետ: Այս մուտքային սարքերը սովորաբար
ներառում են ստեղնաշար և տեսահոլովակ:
Ինչպե՞ս է միկրոպրոցեսորը շփվում այս ծայրամասային սարքերի հետ (ինչպես կոչվում է միկրոպրոցեսորի
հետ կապված ցանկացած բան, որը հիշողություն չէ): Ծայրամասային սարքերը կառուցված են այնպես, որ
ունեն հիշողությանը նման ինտերֆեյս: Միկրոպրոցեսորը կարող է գրել և կարդալ ծայրամասային սարքի մեջ՝
նշելով որոշակի հասցեներ, որոնց ծայրամասային սարքն արձագանքում է: Որոշ միկրոպրոցեսորներում
ծայրամասային սարքերը իրականում փոխարինում են որոշ հասցեներ, որոնք սովորաբար օգտագործվելու են
հիշողության հասցեավորման համար: Այս կոնֆիգուրացիան հայտնի է որպես հիշողության քարտեզագրված
I/O : 8080-ում, սակայն, սովորական 65,536-ից ավելի 256 լրացուցիչ հասցեներ հատուկ վերապահված
են մուտքային և ելքային սարքերի համար: Դրանք հայտնի են որպես I/O պորտեր : I/O հասցեի
ազդանշանները A 0 -ից A 7- ն են , սակայն I/O մուտքերը տարբերվում են հիշողության հասանելիությունից՝
8228 System Controller չիպի կողմից փակված ազդանշանների միջոցով:
OUT հրահանգը գրում է կուտակիչի բովանդակությունը մի նավահանգստում, որը հասցեագրված է բայթին,
որը հետևում է հրահանգին : IN հրահանգը կարդում է բայթ կուտակիչի մեջ :

Հրա
Opc հան
ode գ
OU
D3 T
pp

IN
DB
pp

Ծայրամասային սարքերը երբեմն պետք է գրավեն միկրոպրոցեսորի ուշադրությունը: Օրինակ, երբ


ստեղնաշարի վրա սեղմում եք ստեղնը, սովորաբար օգտակար է, եթե միկրոպրոցեսորն անմիջապես իմանա
այս իրադարձության մասին: Սա իրականացվում է մի մեխանիզմով, որը կոչվում է ընդհատում , որն
ազդանշան է, որը միացված է ծայրամասայինից 8080-ի INT մուտքին:
Այնուամենայնիվ, երբ 8080-ը զրոյացված է, այն չի արձագանքում ընդհատումներին: Ծրագիրը պետք է
կատարի EI ( Միացնել ընդհատումները ) հրահանգը՝ ընդհատումները միացնելու համար, իսկ հետագայում
կարող է գործարկել DI ( Անջատել ընդհատումները )՝ դրանք անջատելու համար.

Հրա
Opc հան
ode գ
F3 Դ.Ի
ՖԲ EI

8080-ից INTE ելքային ազդանշանը ցույց է տալիս, երբ ընդհատումները միացված են: Երբ ծայրամասային
սարքը պետք է ընդհատի միկրոպրոցեսորը, այն սահմանում է 8080-ի INT մուտքը 1-ի: 8080-ն
արձագանքում է դրան՝ հիշողությունից հրահանգ ստանալով, բայց հսկիչ ազդանշանները ցույց են տալիս, որ
ընդհատում է տեղի ունենում: Ծայրամասային սարքը սովորաբար արձագանքում է՝ 8080-ին տրամադրելով
հետևյալ հրահանգներից մեկը.

Հրա Հրա
Opc
Opc հան հան
ode
ode գ գ
RS RS
C7 E7
T0 T4

RS RS
CF ԷՖ
T1 T5

RS RS
D7 F7
T2 T6

RS RS
ԴՖ ՖՖ
T3 T7

Դրանք կոչվում են Վերագործարկման հրահանգներ, և դրանք նման են Զանգի հրահանգներին, քանի որ


ընթացիկ Ծրագրի հաշվիչը պահվում է փաթեթում: Բայց Վերագործարկման հրահանգներն այնուհետև
ցատկում են որոշակի վայրեր. RST 0- ը ցատկում է դեպի 0000h հասցե, RST 1-ը դեպի 0008h հասցե և
այլն, մինչև RST 7 , որը ցատկում է դեպի 0038h հասցե: Այս հասցեներում տեղակայված են կոդի
բաժիններ, որոնք վերաբերում են ընդհատմանը: Օրինակ, ստեղնաշարի ընդհատումը կարող է հանգեցնել RST
4 հրահանգի կատարմանը: 0020h հասցեում սկսվում է որոշ կոդ՝ ստեղնաշարից բայթ կարդալու համար:
(Ես սա ավելի մանրամասն կբացատրեմ 21-րդ գլխում ):
Մինչ այժմ ես նկարագրել եմ 243 օպկոդ: 12 բայթերը, որոնք կապված չեն ոչ մի օպերացիոն կոդերի հետ՝
08h, 10h, 18h, 20h, 28h, 30h, 38h, CBh, D9h, DDh, EDh և FDh են: Սա ընդհանուր թիվը հասցնում է
255-ի: Կա ևս մեկ օպերացիոն կոդ, որը ես պետք է նշեմ, և դա սա է.

Հրա
Opc հան
ode գ
NO
00
P

NOP-ը նշանակում է (և արտասանվում է) no op , ինչպես ոչ մի գործողության դեպքում : NOP- ը ստիպում է


պրոցեսորին բացարձակապես ոչինչ չանել: Ինչի՞ համար է դա լավ: Լրացնելով տարածք. 8080-ը
սովորաբար կարող է կատարել մի շարք NOP հրահանգներ՝ առանց որևէ վատ բանի:
Ես չեմ մանրամասնի Motorola 6800-ի քննարկման համար, քանի որ դրա դիզայնի և ֆունկցիոնալության
շատ ասպեկտներ բավականին նման են 8080-ի կողմերին: Ահա 6800-ի 40 կապը.
V SS-ը ցույց է տալիս Ground-ը, իսկ V CC-ը 5 վոլտ է: Ինչպես 8080-ը, այնպես էլ 6800-ն ունի 16
ելքային Հասցե ազդանշան և 8 Տվյալների ազդանշան, որոնք օգտագործվում են ինչպես մուտքի, այնպես էլ
ելքի համար: Կա RESET ազդանշան և R/ (կարդալու/գրելու) ազդանշան: Ազդանշանը
նշանակում է ընդհատման հարցում : 6800-ի ազդանշանի ժամանակը համարվում է շատ ավելի պարզ, քան
8080-ը: Այն, ինչ չունի 6800-ը, I/O պորտերի գաղափարն է: Բոլոր մուտքային և ելքային սարքերը պետք է
լինեն 6800 հիշողության հասցեների տարածության մաս:
6800-ն ունի 16-բիթանոց ծրագրի հաշվիչ, 16-բիթանոց Stack-ի ցուցիչ, 8-բիթանոց կարգավիճակի
գրանցում (դրոշակների համար) և երկու 8-բիթանոց կուտակիչներ, որոնք կոչվում են A և B: Դրանք երկուսն
էլ համարվում են կուտակիչներ (ավելի շուտ, քան B-ն դիտարկվի): պարզապես ռեգիստր), քանի որ A-ի հետ
ոչինչ չկա, ինչը չես կարող անել նաև B-ի հետ: Այնուամենայնիվ, լրացուցիչ 8-բիթանոց ռեգիստրներ չկան:
Փոխարենը 6800-ն ունի 16-բիթանոց ինդեքսային ռեգիստր , որը կարող է օգտագործվել 16-բիթանոց
հասցե պահելու համար, ճիշտ այնպես, ինչպես գրանցման զույգ HL-ն օգտագործվում է 8080-ում: Շատ
հրահանգների համար հասցե կարող է ձևավորվել ինդեքսի ռեգիստրի գումարից: և օփկոդին հաջորդող բայթը։
Թեև 6800-ն անում է մոտավորապես նույն գործողությունները, ինչ 8080-ը՝ բեռնում, պահպանում,
գումարում, հանում, տեղափոխում, ցատկում, կանչում, պետք է ակնհայտ լինի, որ օպերացիոն կոդերն ու
մնեմոնիկները բոլորովին տարբեր են: Ահա, օրինակ, 6800 Branch հրահանգները.
Հրա
Իմա
Opc հան
ստը
ode գ
Մաս
Կրծ
20 ժ նաճյ
կալ
ուղ
Մաս
նաճյ
ուղ,
եթե
22ժ BHI
ավել
ի
բար
ձր
Մաս
նաճյ
ուղ,
եթե
BL
23 ժ ցած
S
րէ
կամ
նույ
նը
Bra
nch
If
BC
24ժ Car
C
ry
Clea
r
Bra
nch
BC If
25ժ
S Car
ry
Set
Մաս
նաճյ
ուղ,
BN եթե
26 ժ
E ոչ
հավ
ասա
ր
Մաս
նաճյ
ուղ
BE
27ժ Եթե
Q
հավ
ասա
րէ
BV Մաս
28ժ
C նաճյ
ուղը,
եթե
վար
արու
մը
պար
զէ
Bra
nch
If
BV
29ժ Ove
S
rflo
w
Set
Մաս
նաճյ
2 BP ուղ
Ահ L Եթե
Պլյո
ւս
Մաս
նաճյ
ուղ
2 Բժ BMI
Եթե
մինո
ւս
Մաս
նաճյ
ուղ,
եթե
մեծ
2 BG է
Ch E կամ
հավ
ասա
րէ
զրոյ
ի
Մաս
նաճյ
ուղ,
եթե
2Dh BLT
զրոյ
ից
պակ
աս է
Մաս
նաճյ
ուղ,
BG եթե
2 Էհ
T զրոյ
ից
մեծ
է
BL Մաս
2Fh
E նաճյ
ուղ,
եթե
փոքր
է
կամ
հավ
ասա
րէ
զրոյ
ի

6800-ը չունի հավասարության դրոշ, ինչպես 8080-ը, բայց ունի դրոշ, որը չունի 8080-ը՝ Overflow դրոշ:
Այս Մասնաճյուղի հրահանգներից մի քանիսը կախված են դրոշակների համակցություններից :
Իհարկե, 8080 և 6800 հրահանգների հավաքածուները տարբեր են: Երկու չիպերը նախագծվել են
մոտավորապես նույն ժամանակ երկու տարբեր ընկերությունների ինժեներների երկու տարբեր խմբերի
կողմից: Այս անհամատեղելիությունը նշանակում է, որ ոչ մի չիպ չի կարող գործարկել մյուս չիպի մեքենայի
կոդերը: Ոչ էլ մի չիպի համար գրված assembly լեզվով ծրագիրը չի կարող թարգմանվել օպերացիոն
կոդերի, որոնք աշխատում են մյուս չիպի վրա: Մեկից ավելի պրոցեսորներով աշխատող համակարգչային
ծրագրեր գրելը 24-րդ գլխի թեման է :
Ահա ևս մեկ հետաքրքիր տարբերություն 8080-ի և 6800-ի միջև. երկու միկրոպրոցեսորներում էլ LDA
հրահանգը բեռնում է կուտակիչը նշված հիշողության հասցեից: 8080-ում, օրինակ, բայթերի հետևյալ
հաջորդականությունը.

կուտակիչը բեռնելու է հիշողության 347Bh հասցեում պահվող բայթով: Այժմ համեմատեք դա 6800 LDA
հրահանգի հետ՝ օգտագործելով այսպես կոչված 6800 ընդլայնված հասցեավորման ռեժիմը.

Բայթերի այս հաջորդականությունը բեռնում է A կուտակիչը 7B34h հիշողության հասցեում պահվող


բայթով:
Տարբերությունը նուրբ է: Դուք ակնկալում եք, որ opcode-ը տարբերվի, իհարկե. 3Ah 8080-ի համար և
B6h-ի համար 6800-ի համար: Բայց երկու միկրոպրոցեսորները տարբեր կերպ են վերաբերվում այն
հասցեին, որը հաջորդում է opcode-ին: 8080-ը ենթադրում է, որ ցածր կարգի բայթը առաջինն է, որին
հաջորդում է բարձր կարգի բայթը: 6800-ը ենթադրում է, որ բարձր կարգի բայթն առաջինն է:
Այս հիմնարար տարբերությունը, թե ինչպես են Intel և Motorola միկրոպրոցեսորները պահում բազմաբայթ
արժեքները, երբեք չի լուծվել : Մինչ օրս Intel միկրոպրոցեսորները շարունակում են պահպանել
բազմաբայթային արժեքները առաջինը ամենանվազ նշանակալի բայթով (այսինքն՝ ամենացածր հիշողության
հասցեում), իսկ Motorola միկրոպրոցեսորները պահում են բազմաբայթ արժեքները՝ առաջին հերթին
ամենակարևոր բայթով:
Այս երկու մեթոդները հայտնի են որպես little-endian (Intel ճանապարհ) և big-endian (Motorola
ճանապարհ): Կարող է հաճելի լինել վիճել, թե որ մեթոդն է ավելի լավը, բայց նախքան դա անելը, տեղյակ
եղեք, որ Big-Endian տերմինը գալիս է Ջոնաթան Սվիֆթի Գուլիվերի ճանապարհորդություններից և
վերաբերում է Լիլիպուտի և Բլեֆուսկուի միջև պատերազմին, թե ձվի որ ծայրը պետք է կոտրել առաջ։
ուտելով այն: Նման փաստարկը, հավանաբար, աննպատակ է։ (Մյուս կողմից, ես պարտավոր եմ խոստովանել,
որ այն մոտեցումը, որը ես օգտագործեցի Գլուխ 17-ի համակարգչում, այն մոտեցումը չէր, որը ես անձամբ
նախընտրում էի:) Չնայած ոչ մի մեթոդ սկզբունքորեն «ճիշտ» չէ, տարբերությունը լրացուցիչ
անհամատեղելիության խնդիր է ստեղծում կիսվելու ժամանակ: տեղեկատվություն փոքր էնդյան և մեծ էնդյան
մեքենաների վրա հիմնված համակարգերի միջև:
Ի՞նչ եղան այս երկու միկրոպրոցեսորների հետ: 8080-ն օգտագործվել է այն բանում, ինչ ոմանք անվանում
են առաջին անհատական համակարգիչ, որը, հավանաբար, ավելի ճիշտ՝ առաջին տնային համակարգիչն է: Սա
Altair 8800-ն է, որը հայտնվել է Popular Electronics- ի 1975 թվականի հունվարի համարի շապիկին :

Երբ նայում եք Altair 8800-ին, առջեւի վահանակի լույսերն ու անջատիչները պետք է ծանոթ թվան: Սա
պարզունակ «կառավարման վահանակի» ինտերֆեյսի նույն տեսակն է, որը ես առաջարկել էի 16-րդ գլխում
64 ԿԲ RAM զանգվածի համար :
8080-ին հաջորդեց Intel 8085-ը և, ավելի կարևոր, Z-80 չիպը, որը պատրաստել էր Zilog-ը, Intel-ի
մրցակիցը, որը հիմնադրել էր Intel-ի նախկին աշխատակից Ֆեդերիկո Ֆագգինը, ով կարևոր աշխատանք էր
կատարել 4004-ի վրա: Z-80-ը ամբողջությամբ էր: համատեղելի է 8080-ի հետ, բայց ավելացրել է շատ
ավելի շատ օգտակար հրահանգներ: 1977 թվականին Z-80-ն օգտագործվել է Radio Shack TRS-80
Model 1-ում:
Նաև 1977 թվականին Սթիվեն Ջոբսի և Սթիվեն Վոզնյակի կողմից հիմնադրված Apple Computer
ընկերությունը ներկայացրեց Apple II-ը: Apple II-ը, այնուամենայնիվ, չօգտագործեց ոչ 8080, ոչ էլ
6800, փոխարենը օգտագործեց MOS Technology-ի էժան 6502 չիպը, որը 6800-ի կատարելագործումն
էր:
1978 թվականի հունիսին Intel-ը ներկայացրեց 8086-ը, որը 16-բիթանոց միկրոպրոցեսոր էր, որը կարող
էր մուտք գործել 1 մեգաբայթ հիշողություն: 8086 օպկոդերը համատեղելի չէին 8080-ի հետ, բայց պետք է
նշեմ, որ դրանք ներառում էին բազմապատկելու և բաժանելու հրահանգներ: Մեկ տարի անց Intel-ը
ներկայացրեց 8088-ը, որը ներքուստ նույնական էր 8086-ին, բայց արտաքինից հասանելի էր
հիշողությունը բայթերով, այդպիսով միկրոպրոցեսորին թույլ տալով օգտագործել 8080-ի համար
նախատեսված 8-բիթանոց աջակցության ավելի տարածված չիպերը: IBM-ն իր մեջ օգտագործել է 8088
չիպը: 5150 Անձնական համակարգիչ, որը սովորաբար կոչվում է IBM PC, ներկայացվել է 1981 թվականի
աշնանը:
IBM-ի մուտքը անհատական համակարգիչների շուկա մեծ ազդեցություն ունեցավ, քանի որ շատ
ընկերություններ թողարկեցին մեքենաներ, որոնք համատեղելի էին ԱՀ-ի հետ: (Ինչ է նշանակում
համատեղելի լինել, ավելի մանրամասն կուսումնասիրվի հաջորդ գլուխներում:) Տարիների ընթացքում «IBM
PC-ի համատեղելի»-ը նաև ենթադրում էր «Intel-ի ներսում», մասնավորապես, այսպես կոչված x86
ընտանիքի Intel միկրոպրոցեսորները: x86 ընտանիքը շարունակվեց 1982-ին 186 և 286 չիպերով,
1985-ին՝ 32-բիթանոց 386 չիպով, 1989-ին՝ 486-ով և 1993-ից սկսած՝ Intel Pentium
միկրոպրոցեսորների շարքով, որոնք ներկայումս օգտագործվում են համակարգչի հետ համատեղելի
սարքերում: Թեև Intel-ի այս միկրոպրոցեսորներն ունեն անընդհատ աճող հրահանգների հավաքածուներ,
նրանք շարունակում են աջակցել բոլոր նախկին պրոցեսորների օպերացիոն կոդերին՝ սկսած 8086-ից:
Apple Macintosh-ը, որն առաջին անգամ ներկայացվել է 1984 թվականին, օգտագործել է Motorola
68000, 16-բիթանոց միկրոպրոցեսոր, որը 6800-ի անմիջական ժառանգն է:
1994 թվականից Macintosh համակարգիչներն օգտագործում են PowerPC միկրոպրոցեսորը, որը մշակվել
է Motorola-ի, IBM-ի և Apple-ի կոալիցիայում: PowerPC-ն նախագծվել է միկրոպրոցեսորային
ճարտարապետության մի տեսակով, որը հայտնի է որպես RISC (Reduced Instruction Set Computing),
որը փորձում է բարձրացնել պրոցեսորի արագությունը՝ այն որոշ առումներով պարզեցնելով: RISC
համակարգչում, ընդհանուր առմամբ, յուրաքանչյուր հրահանգ ունի նույն երկարությունը (32 բիթ
PowerPC-ում), հիշողության հասանելիությունը սահմանափակված է պարզապես հրահանգներ բեռնելու և
պահելու համար, և հրահանգները կատարում են պարզ գործողություններ, այլ ոչ թե բարդ: RISC
պրոցեսորները սովորաբար ունեն բազմաթիվ ռեգիստրներ՝ հիշողության հաճախակի մուտքերից խուսափելու
համար:
PowerPC-ն չի կարող կատարել 68K կոդ, քանի որ այն ունի բոլորովին այլ հրահանգների հավաքածու:
Սակայն Apple Macintosh-ում ներկայումս օգտագործվող PowerPC միկրոպրոցեսորները կարող են
ընդօրինակել 68K-ը: PowerPC-ով աշխատող էմուլյատոր ծրագիրը մեկ առ մեկ ուսումնասիրում է 68K
ծրագրի յուրաքանչյուր օպկոդ և կատարում համապատասխան գործողություն: Դա այնքան արագ չէ, որքան
մայրենի PowerPC կոդը, բայց այն աշխատում է:
Մուրի օրենքի համաձայն՝ միկրոպրոցեսորներում տրանզիստորների թիվը պետք է կրկնապատկվի 18 ամիսը
մեկ։ Ինչի՞ համար են օգտագործվում այդ բազմաթիվ լրացուցիչ տրանզիստորները:
Տրանզիստորներից մի քանիսը համապատասխանում են պրոցեսորի տվյալների լայնության ավելացմանը՝ 4
բիթից մինչև 8 բիթ մինչև 16 բիթ մինչև 32 բիթ: Բարձրացման մյուս մասը պայմանավորված է նոր
հրահանգներով։ Մեր օրերում միկրոպրոցեսորների մեծ մասը հրահանգներ ունի լողացող կետով
թվաբանություն կատարելու համար (ինչպես ես կբացատրեմ 23-րդ գլխում ); Նոր հրահանգներ են
ավելացվել նաև միկրոպրոցեսորներին՝ համակարգչային էկրաններին նկարներ կամ ֆիլմեր ցուցադրելու
համար պահանջվող կրկնվող հաշվարկներ կատարելու համար:
Ժամանակակից պրոցեսորները օգտագործում են մի քանի տեխնիկա, որոնք օգնում են բարելավել իրենց
արագությունը: Մեկը խողովակաշարն է: Երբ պրոցեսորը կատարում է մեկ հրահանգ, այն կարդում է հաջորդ
հրահանգներում, նույնիսկ որոշ չափով ակնկալում է, թե ինչպես Jump հրահանգները կփոխեն կատարման
հոսքը: Ժամանակակից պրոցեսորները ներառում են նաև քեշ (արտասանվում է կանխիկ ): Սա պրոցեսորի
ներսում շատ արագ RAM-ի զանգված է, որն օգտագործվում է վերջերս կատարված հրահանգները պահելու
համար: Քանի որ համակարգչային ծրագրերը հաճախ կատարում են հրահանգների փոքր օղակներ, քեշը
կանխում է այդ հրահանգների կրկնվող վերբեռնումը: Արագության բարելավման այս բոլոր հատկանիշները
պահանջում են ավելի շատ տրամաբանություն և ավելի շատ տրանզիստորներ միկրոպրոցեսորում:
Ինչպես արդեն նշեցի, միկրոպրոցեսորը ամբողջական համակարգչային համակարգի միայն մի մասն է (թեև
ամենակարևոր մասը): Մենք նման համակարգ կկառուցենք 21-րդ գլխում , բայց նախ պետք է սովորենք, թե
ինչպես կարելի է հիշողության մեջ կոդավորել այլ բան, բացի օպերացիոն կոդերից և թվերից: Մենք պետք է
վերադառնանք առաջին դասարան և նորից սովորենք, թե ինչպես կարդալ և գրել տեքստ:
Գլուխ 20. ASCII և կերպարների դերասանական կազմը
Թվային համակարգչի հիշողությունը պահում է միայն բիթերը, ուստի այն ամենը, ինչի հետ մենք ցանկանում
ենք աշխատել համակարգչում, պետք է պահվի բիթերի տեսքով: Մենք արդեն տեսել ենք, թե ինչպես են բիթերը
կարող ներկայացնել թվեր և մեքենայի կոդը: Հաջորդ մարտահրավերը պետք է լինի տեքստը: Ի վերջո, այս
աշխարհի կուտակված տեղեկատվության մեծ մասը տեքստի տեսքով է, և մեր գրադարանները լի են գրքերով,
ամսագրերով և թերթերով: Թեև մենք ի վերջո կցանկանայինք օգտագործել մեր համակարգիչները ձայներ,
նկարներ և ֆիլմեր պահելու համար, տեքստը սկսելու համար շատ ավելի հեշտ տեղ է:
Տեքստը թվային տեսքով ներկայացնելու համար մենք պետք է մշակենք ինչ-որ համակարգ, որտեղ
յուրաքանչյուր տառ կհամապատասխանի եզակի կոդի: Թվերը և կետադրական նշանները նույնպես
հանդիպում են տեքստում, ուստի դրանց համար նույնպես պետք է մշակվեն ծածկագրեր: Մի խոսքով, մեզ
անհրաժեշտ են կոդեր բոլոր այբբենական թվային նիշերի համար: Նման համակարգը երբեմն հայտնի է որպես
կոդավորված նիշերի հավաքածու , իսկ առանձին կոդերը հայտնի են որպես նիշերի կոդեր :
Առաջին հարցը պետք է լինի. Քանի՞ բիթ է մեզ անհրաժեշտ այս կոդերի համար: Պատասխանը հեշտ չէ:
Երբ մտածում ենք բիթերի միջոցով տեքստը ներկայացնելու մասին, եկեք մեզնից շատ առաջ չընկնենք: Մենք
սովոր ենք գրքի էջերին կամ ամսագրի կամ թերթի սյունակներում գեղեցիկ ձևաչափված տեքստ տեսնել:
Պարբերությունները կոկիկորեն բաժանված են հետևողական լայնությամբ տողերի: Այնուամենայնիվ, այս
ձևաչափումը էական չէ տեքստի համար: Երբ մենք կարդում ենք կարճ պատմություն ամսագրում և տարիներ
անց հանդիպում ենք նույն պատմությանը գրքում, մենք չենք կարծում, որ պատմությունը փոխվել է միայն այն
պատճառով, որ տեքստի սյունակը գրքում ավելի լայն է, քան ամսագրում:
Այլ կերպ ասած, մի մտածեք տպագիր էջի երկչափ սյունակների ձևաչափով տեքստի մասին: Փոխարենը
տեքստը մտածեք որպես տառերի, թվերի և կետադրական նշանների միաչափ հոսք՝ միգուցե լրացուցիչ կոդով,
որը ցույց կտա մի պարբերության վերջը և մյուսի սկիզբը։
Կրկին, եթե դուք կարդաք մի պատմություն ամսագրում և հետագայում տեսնեք այն գրքում, և տառատեսակը մի
փոքր այլ է, դա մեծ խնդիր է: Եթե ամսագրի տարբերակը սկսվի

Ինձ
Իսմ
այել
կոչի
ր։

և սկսվում է գրքի տարբերակը

Ինձ
Իսմ
այել
կոչի
ր։

արդյո՞ք դա դեռ մի բան է, որով մենք իսկապես ուզում ենք մտահոգվել: Հավանաբար ոչ. Այո, տառատեսակը
նրբորեն ազդում է տեքստի տոնայնության վրա, բայց տառատեսակի փոփոխությամբ պատմությունը չի կորել։
Տառատեսակը միշտ կարող է հետ փոխվել: Ոչ մի վնաս չկա:
Ահա ևս մեկ միջոց, որը մենք պատրաստվում ենք պարզեցնել խնդիրը. Եկեք մնանք պարզ վանիլային
տեքստին: Ո՛չ շեղագիր, ո՛չ թավատառ, ո՛չ ընդգծում, ո՛չ գույն, ո՛չ ուրվագծված տառեր, ո՛չ ենթագրեր, ո՛չ
վերնագրեր: Եվ առանց շեշտադրման նշանների: Ոչ Å կամ é կամ ñ կամ ö: Պարզապես մերկ լատինական
այբուբենը, որն օգտագործվում է անգլերենի 99 տոկոսում:
Մորզեի կոդի և Բրայլի մեր ավելի վաղ ուսումնասիրություններում մենք արդեն տեսել ենք, թե ինչպես կարող
են այբուբենի տառերը ներկայացված լինել երկուական ձևով: Թեև այս համակարգերը լավ են իրենց հատուկ
նպատակների համար, երկուսն էլ ունեն իրենց թերությունները, երբ խոսքը վերաբերում է համակարգիչներին:
Մորզեի կոդը, օրինակ, փոփոխական լայնության կոդ է. այն օգտագործում է ավելի կարճ կոդեր՝ հաճախ
օգտագործվող տառերի համար, իսկ ավելի երկար կոդեր՝ ավելի քիչ տարածված տառերի համար: Նման
ծածկագիրը հարմար է հեռագրության համար, բայց կարող է անհարմար լինել համակարգիչների համար:
Բացի այդ, Մորզեի կոդը չի տարբերում տառերի մեծատառ և փոքրատառ տարբերակները:
Բրայլը ֆիքսված լայնության կոդ է, որը շատ նախընտրելի է համակարգիչների համար։ Յուրաքանչյուր տառ
ներկայացված է 6 բիթով: Բրայլը նաև տարբերում է մեծատառ և փոքրատառ տառերը, թեև դա անում է
հատուկ փախուստի կոդով: Այս կոդը ցույց է տալիս, որ հաջորդ նիշը մեծատառ է: Սա իրականում նշանակում
է, որ յուրաքանչյուր մեծատառ պահանջում է երկու կոդ, քան մեկ: Թվերը ներկայացված են հերթափոխի
կոդով: Այդ հատուկ կոդից հետո ենթադրվում է, որ հաջորդող կոդերը ներկայացնում են թվեր, մինչև մեկ այլ
հերթափոխի ծածկագիր ազդարարի տառերին վերադարձը:
Այստեղ մեր նպատակն է մշակել կոդավորված նիշերի հավաքածու, որպեսզի այնպիսի նախադասություն,
ինչպիսին

Ես
ունե
մ 27
քույր
։

կարող է ներկայացվել մի շարք կոդերով, որոնցից յուրաքանչյուրը որոշակի քանակությամբ բիթ է: Կոդերի մի
մասը կներկայացնի տառեր, որոշները՝ կետադրական նշաններ, իսկ որոշները՝ թվեր: Նույնիսկ պետք է լինի
ծածկագիր, որը կներկայացնի բառերի միջև եղած տարածությունը: Այդ նախադասության մեջ կա 18 նիշ
(ներառյալ բառերի միջև եղած բացերը): Նման նախադասության հաջորդական նիշերի կոդերը հաճախ
կոչվում են տեքստային տող :
Այն, որ մեզ անհրաժեշտ են տեքստային տողում թվերի կոդեր, ինչպիսին է 27-ը , կարող է տարօրինակ թվալ,
քանի որ մենք այժմ օգտագործում ենք բիթերը բազմաթիվ գլուխների համար թվեր ներկայացնելու համար:
Մենք կարող ենք գայթակղվել ենթադրելու, որ այս նախադասության 2-ի և 7- ի կոդերը պարզապես 10 և 111
երկուական թվերն են : Բայց դա պարտադիր չէ, որ այդպես լինի: Նման նախադասության համատեքստում
2-րդ և 7-րդ նիշերը կարող են վերաբերվել այնպես, ինչպես գրավոր անգլերենում հայտնաբերված ցանկացած
այլ նիշ: Նրանք կարող են ունենալ նիշերի կոդեր, որոնք բացարձակապես կապ չունեն թվերի իրական
արժեքների հետ:
Թերևս տեքստի համար ամենատնտեսային ծածկագիրը 5-բիթանոց ծածկագիրն է, որը առաջացել է 1874
թվականին տպագրական հեռագրից, որը մշակվել է ֆրանսիական հեռագրային ծառայության աշխատակից
Էմիլ Բոդոյի կողմից (արտասանվում է՝ bawdoh ). նրա ծածկագիրը ընդունվել է ծառայության կողմից 1877
թվականին: Այս ծածկագիրը հետագայում փոփոխվել է Դոնալդ Մյուրեյի կողմից և ստանդարտացվել 1931
թվականին Comité Consultatif International Télégraphique et Téléphonique (CCITT) կողմից, որն
այժմ հայտնի է որպես Հեռահաղորդակցության միջազգային միություն (ITU): Կոդը պաշտոնապես հայտնի է
որպես Միջազգային հեռագրական այբուբեն թիվ 2 կամ ITA-2, իսկ Միացյալ Նահանգներում այն ավելի
հայտնի է որպես Բոդոտ, թեև ավելի ճիշտ կոչվում է Մյուրեյի ծածկագիր։
Քսաներորդ դարում Բոդոն հաճախ օգտագործվում էր հեռագրամեքենաներում : Baudot
հեռուստագրամեքենան ունի ստեղնաշար, որը նման է գրամեքենայի, այն տարբերությամբ, որ այն ունի
ընդամենը 30 ստեղն և բացատ: Հեռագրամեքենայի ստեղները իրականում անջատիչներ են, որոնք
առաջացնում են երկուական կոդի գեներացում և հեռագրամեքենայի ելքային մալուխի միջոցով՝ մեկը մյուսի
հետևից: Հեռագրամեքենան պարունակում է նաև տպագրական մեխանիզմ։ Հեռագրամեքենայի մուտքային
մալուխի միջով եկող ծածկագրերը գործարկում են էլեկտրամագնիսներ, որոնք թղթի վրա նիշեր են տպում:
Քանի որ Baudot-ը 5-բիթանոց կոդ է, կան ընդամենը 32 կոդ: Այս կոդերի տասնվեցական արժեքները
տատանվում են 00h-ից մինչև 1Fh: Ահա թե ինչպես են հասանելի 32 ծածկագրերը համապատասխանում
այբուբենի տառերին.

Բոդո Բոդո
Hex
Hex յի յի
Cod
Cod նամ նամ
e
e ակ ակ
00 10 Ե
01 Տ 11 Զ
Վագ
ոն
02 վեր 12 Դ
ադա
րձ
03 Օ 13 Բ
Տիե
04 14 Ս
զերք
05 Հ 15 Յ
06 Ն 16 Ֆ
07 Մ 17 X
Line
08 Fee 18 Ա
d
09 Լ 19 Վ
0Ա Ռ 1Ա Ջ
Fig
ure
0B Գ 1Բ
Shif
t
0C Ի 1C U
0D Պ 1D Ք
0E Գ 1E Կ
Նամ
0F Վ 1F ակի
հերթ
ափո
խ

00h կոդը ոչ մի բանի չի վերագրված: Մնացած 31 ծածկագրերից 26-ը վերագրվում են այբուբենի տառերին,
իսկ մյուս հինգը նշված են աղյուսակում շեղ բառերով կամ արտահայտություններով:
Կոդ 04h-ը Տիեզերական ծածկագիրն է, որն օգտագործվում է բառերը բաժանող տարածության համար: 02h
և 08h ծածկագրերը պիտակավորված են Carriage Return և Line Feed: Այս տերմինաբանությունը գալիս
է գրամեքենայից։ Երբ տպում եք գրամեքենայով և հասնում տողի վերջում, սեղմում եք լծակ կամ կոճակ, որն
անում է երկու բան: Նախ, այն ստիպում է կառքը տեղափոխել աջ, որպեսզի հաջորդ տողը սկսվի թղթի ձախ
կողմում: Դա կառքով վերադարձ է: Երկրորդ, գրամեքենան գլորում է կառքը այնպես, որ հաջորդ տողը
գտնվում է այն տողի տակ, որը դուք հենց նոր ավարտեցիք: Դա գիծն է: Baudot-ում ստեղնաշարի առանձին
ստեղներ ստեղծում են այս երկու կոդերը: Baudot հեռագրամեքենա տպիչն արձագանքում է այս երկու
ծածկագրերին տպելիս:
Որտեղ են թվերն ու կետադրական նշանները Baudot համակարգում: Դա է 1Bh կոդի նպատակը, որը նշված
է աղյուսակում որպես Figure Shift: Figure Shift կոդից հետո բոլոր հաջորդ կոդերը մեկնաբանվում են
որպես թվեր կամ կետադրական նշաններ, մինչև Letter Shift կոդը (1Fh) պատճառ դարձնի, որ դրանք
վերադառնան տառերին: Ահա թվերի և կետադրական նշանների ծածկագրերը.

Բոդո Բոդո
Hex
Hex յի յի
Cod
Cod գործ գործ
e
e իչ իչ
00 10 3
01 5 11 +
Վագ
ոն Ով
02 վեր 12 ես
ադա դու?
րձ
03 9 13 ?
Տիե
04 14 '
զերք
05 # 15 6
06 , 16 $
07 . 17 /
Line
08 Fee 18 -
d
09 ) 19 2
Զան
0Ա 4 1Ա
գ
Fig
ure
0B & 1Բ
Shif
t
0C 8 1C 7
0D 0 1D 1
0E : 1E (
Նամ
ակի
0F = 1F հերթ
ափո
խ

Իրականում, ITU-ի կողմից ձևակերպված ծածկագիրը չի սահմանում 05h, 0Bh և 16h ծածկագրերը,
փոխարենը դրանք պահում է «ազգային օգտագործման համար»: Աղյուսակը ցույց է տալիս, թե ինչպես են այս
ծածկագրերը օգտագործվել Միացյալ Նահանգներում: Նույն ծածկագրերը հաճախ օգտագործվում էին որոշ
եվրոպական լեզուների ընդգծված տառերի համար։ Ենթադրվում է , որ Bell կոդը հեռագրամեքենայի վրա
լսելի զանգ է հնչեցնում: «Ո՞վ ես դու»: կոդը ակտիվացնում է մի մեխանիզմ, որով հեռագրամեքենան կարող է
ինքն իրեն ճանաչել:
Ինչպես Մորզե կոդը, այս 5-բիթանոց կոդը չի տարբերում մեծատառերն ու փոքրատառերը:
Նախադասությունը

ԱՅ
ՍՕՐ
ԾԱ
ԽՍԵ
Լ ԵՄ
25
դոլա
ր։

ներկայացված է տասնվեցական տվյալների հետևյալ հոսքով.

0C
04
14
0D
10
06
01
04
1B
16
19
01
1F
04
01
03
12
18
15
1B
07
02
08
Ուշադրություն դարձրեք հերթափոխի երեք կոդերին՝ 1 Բժ անմիջապես համարից առաջ, 1 Ֆժ՝ թվից հետո և
կրկին 1 Բժ մինչև վերջին շրջանը: Գիծը ավարտվում է փոխադրման-վերադարձի և գիծ կերակրման կոդերով:
Ցավոք, եթե դուք երկու անգամ անընդմեջ ուղարկեիք տվյալների այս հոսքը հեռագրամեքենա տպիչին, ապա
այն կհայտնվեր այսպես.

ԱՅ
ՍՕՐ
ԾԱ
ԽՍԵ
Լ ԵՄ
25
դոլա
ր։
8
'03,
5
$25
ԱՅ
ՍՕՐ
.

Ինչ է պատահել? Վերջին հերթափոխի կոդը, որը տպիչը ստացել է երկրորդ տողից առաջ, եղել է Figure
Shift կոդը, ուստի երկրորդ տողի սկզբում գտնվող կոդերը մեկնաբանվել են որպես թվեր:
Նման խնդիրները հերթափոխի կոդերի օգտագործման բնորոշ տհաճ արդյունքներ են: Չնայած Baudot-ն,
իհարկե, տնտեսական կոդ է, հավանաբար նախընտրելի է օգտագործել թվերի և կետադրական նշանների
եզակի կոդերը, ինչպես նաև փոքրատառերի և մեծատառերի առանձին կոդերը:
Այսպիսով, եթե մենք ուզում ենք պարզել, թե քանի բիթ է մեզ անհրաժեշտ նիշերի կոդավորման ավելի լավ
համակարգի համար, քան Baudot-ը, պարզապես ավելացրեք դրանք. մեզ պետք է 52 կոդ միայն մեծատառ և
փոքրատառերի համար և 10 կոդ՝ 0-ից 9 թվանշանների համար: արդեն մինչև 62. Մի քանի կետադրական
նշաններ գցեք, և մենք 64 կոդ ենք լրացնում, ինչը նշանակում է, որ մեզ ավելի քան 6 բիթ է պետք: Բայց մենք,
կարծես, շատ ազատություն ունենք մինչև 128 նիշը գերազանցելը, ինչը կպահանջի 8 բիթ:
Այսպիսով, պատասխանը 7 է: Անգլերեն տեքստի նիշերը ներկայացնելու համար մեզ անհրաժեշտ է 7 բիթ,
եթե ուզում ենք մեծատառ և փոքրատառ առանց տեղաշարժի:
Իսկ որո՞նք են այս կոդերը: Դե, իրական կոդերը կարող են լինել այն ամենը, ինչ մենք ուզում ենք: Եթե մենք
կառուցեինք մեր սեփական համակարգիչը, և մենք պատրաստեինք ստեղծել այս համակարգչի համար
պահանջվող սարքաշարի բոլոր մասերը, և մենք ինքներս ծրագրավորեինք այս համակարգիչը և երբեք
չօգտագործեինք համակարգիչը որևէ այլ համակարգչի միանալու համար, մենք կարող էինք ստեղծել: մեր
սեփական ծածկագրերը: Այն ամենը, ինչ մենք պետք է անենք, այն է, որ յուրաքանչյուր նիշ, որը մենք
կօգտագործենք, եզակի կոդ հատկացնենք:
Բայց քանի որ հազվադեպ է պատահում, որ համակարգիչները կառուցվում և օգտագործվում են
առանձին-առանձին, ավելի իմաստալից է, որ բոլորը համաձայնեն օգտագործել նույն կոդերը: Այդ կերպ մեր
կառուցած համակարգիչները կարող են ավելի համատեղելի լինել միմյանց հետ և գուցե նույնիսկ իրականում
փոխանակել տեքստային տեղեկատվություն:
Մենք նույնպես, հավանաբար, չպետք է պատահական կերպով կոդեր նշանակենք: Օրինակ, երբ մենք
համակարգչով աշխատում ենք տեքստի հետ, որոշակի առավելություններ են առաջանում, եթե այբուբենի
տառերը վերագրվում են հաջորդական կոդերին: Այս պատվիրման սխեման հեշտացնում է այբբենական կարգը
և տեսակավորումը, օրինակ:
Բարեբախտաբար, նման ստանդարտ արդեն մշակվել է։ Այն կոչվում է Տեղեկատվության փոխանակման
ամերիկյան ստանդարտ օրենսգիրք , կրճատ՝ ASCII և կոչվում է անհավանական ASS-key արտասանությամբ :
Այն պաշտոնականացվել է 1967 թվականին և մնում է միակ ամենակարևոր ստանդարտը ամբողջ
համակարգչային արդյունաբերության մեջ: Մի մեծ բացառությամբ (որը ես կներկայացնեմ ավելի ուշ), երբ
համակարգչի վրա գործ ունեք տեքստի հետ, կարող եք վստահ լինել, որ ASCII-ն ինչ-որ կերպ ներգրավված է:
ASCII-ը 7-բիթանոց կոդ է՝ օգտագործելով 0000000-ից մինչև 1111111 երկուական կոդերը, որոնք
տասնվեցական կոդեր են՝ 00h-ից մինչև 7Fh: Եկեք նայենք ASCII ծածկագրերին, բայց եկեք չսկսենք
ամենասկզբից, քանի որ առաջին 32 կոդերը կոնցեպտուալ առումով մի փոքր ավելի բարդ են, քան մնացած
կոդերը: Ես կսկսեմ 32 կոդերի երկրորդ խմբաքանակից, որը ներառում է կետադրական նշաններ և տասը
թվանշաններ: Այս աղյուսակը ցույց է տալիս տասնվեցական ծածկագիրը և այդ կոդը համապատասխանող
նիշը.

ASC ASC
Hex
Hex II II
Cod
Cod կեր կեր
e
e պար պար
Տիե
20 30 0
զերք
21 ! 31 1
22 « 32 2
23 # 33 3
24 $ 34 4
25 % 35 5
26 & 36 6
27 ' 37 7
28 ( 38 8
29 ) 39 9
2Ա * 3Ա :
2Բ + 3Բ ;
2C , 3C <
2D - 3D =
2E . 3E >
2F / 3F ?

Ուշադրություն դարձրեք, որ 20h-ը բառերն ու նախադասությունները բաժանող տիեզերական նիշն է:


Հաջորդ 32 ծածկագրերը ներառում են մեծատառեր և որոշ լրացուցիչ կետադրական նշաններ: Բացի @
նշանից և ներքևից, այս կետադրական նշանները սովորաբար չեն հանդիպում գրամեքենաներում: Դրանք
բոլորն այժմ ստանդարտ են համակարգչային ստեղնաշարերի վրա:
ASC ASC
Hex
Hex II II
Cod
Cod կեր կեր
e
e պար պար
40 @ 50 Պ
41 Ա 51 Ք
42 Բ 52 Ռ
43 Գ 53 Ս
44 Դ 54 Տ
45 Ե 55 U
46 Ֆ 56 Վ
47 Գ 57 Վ
48 Հ 58 X
49 Ի 59 Յ
4Ա Ջ 5Ա Զ
4Բ Կ 5Բ [
4C Լ 5C \
4D Մ 5D ]
4E Ն 5E ^
4F Օ 5F _

Հաջորդ 32 նիշերը ներառում են բոլոր փոքրատառերը և որոշ լրացուցիչ կետադրական նշաններ, որոնք
կրկին հաճախ չեն հանդիպում գրամեքենաներում.

ASC ASC
Hex
Hex II II
Cod
Cod կեր կեր
e
e պար պար
60 « 70 էջ
61 ա 71 ք
62 բ 72 r
63 գ 73 ս
64 դ 74 տ
65 ե 75 u
66 զ 76 v
67 է 77 w
68 հ 78 x
69 ես 79 y
6Ա ժ 7Ա զ
6Բ կ 7Բ {
6C լ 7C |
6D մ 7D }
6E n 7E ~
6F o

Ուշադրություն դարձրեք, որ այս աղյուսակում բացակայում է 7Fh կոդին համապատասխանող վերջին նիշը:
Եթե դուք շարունակում եք հաշվարկը, ապա այստեղ երեք աղյուսակները ցույց են տալիս ընդհանուր 95 նիշ:
Քանի որ ASCII-ը 7-բիթանոց կոդ է, հնարավոր է 128 կոդ, ուստի ևս 33 կոդ պետք է հասանելի լինի: Ես
շուտով կհասնեմ դրանց:
Տեքստի տողը

Բար
եւ
դու!

կարելի է ներկայացնել ASCII-ում՝ օգտագործելով տասնվեցական կոդերը

48
65
6C
6C
6F
2C
20
79
6F
75
21

Ուշադրություն դարձրեք ստորակետին (կոդ 2C), բացատին (կոդ 20) և բացականչական կետին (կոդ 21),
ինչպես նաև տառերի ծածկագրերին: Ահա ևս մեկ կարճ նախադասություն.

Ես
12
տար
եկա
ն եմ։

և դրա ASCII ներկայացուցչությունը.

49
20
61
6D
20
31
32
20
79
65
61
72
73
20
6F
6C
64
2E

Ուշադրություն դարձրեք, որ այս նախադասության 12 թիվը ներկայացված է 31h և 32h տասնվեցական


թվերով, որոնք ASCII կոդերն են 1 և 2 թվերի համար: Երբ 12 թիվը տեքստային հոսքի մաս է, այն չպետք է
ներկայացվի տասնվեցական կոդերով : 01h և 02h, կամ BCD կոդը 12h, կամ տասնվեցական ծածկագիրը
0Ch: Այս մյուս կոդերը բոլորն այլ բան են նշանակում ASCII-ում:
ASCII-ի որոշակի մեծատառը փոքրատառից տարբերվում է 20 ժամով: Այս փաստը բավականին հեշտ է
դարձնում որոշակի կոդ գրելը, որը (օրինակ) մեծատառով գրում է տեքստի տողը: Ենթադրենք, հիշողության
որոշակի տարածքը պարունակում է տեքստային տող, մեկ բայթ մեկ նիշ: Հետևյալ 8080 ենթածրագրը
ենթադրում է, որ տեքստային տողի առաջին նիշի հասցեն պահվում է ռեգիստրում HL: C ռեգիստրը
պարունակում է այդ տեքստային տողի երկարությունը, որը նիշերի քանակն է.
Մեծատառ՝ MOV A,C; C = մնացած նիշերի քանակը
CPI A,00h; Համեմատեք 0
JZ AllDone-ի հետ; Եթե C-ն 0 է, մենք ավարտում ենք

MOV A,[HL]; Ստացեք հաջորդ նիշը


CPI A,61h; Ստուգեք՝ արդյոք այն փոքր է «a»-ից
JC SkipIt; Եթե այո, ապա անտեսեք այն

CPI A,7Bh; Ստուգեք, արդյոք այն ավելի մեծ է, քան 'z'


JNC SkipIt; Եթե այո, ապա անտեսեք այն

SBI A,20h; Այն փոքրատառ է, ուստի հանեք 20h


MOV [HL],A ; Պահպանեք նիշը

SkipIt: INX HL ; Բարձրացրեք տեքստային հասցեն


DCR C; Նվազեցնել հաշվիչը
JMP կապիտալիզացիա; Վերադառնալ սկիզբ

AllDone. RET

Այն հայտարարությունը, որը փոքրատառից հանում է 20h՝ այն մեծատառի վերածելու համար, կարող է
փոխարինվել հետևյալով.
ANI A,DFh

ANI հրահանգը ԵՎ Անմիջական է : Այն կատարում է բիթային AND գործողություն կուտակիչի արժեքի և
DFh արժեքի միջև, որը երկուականում 11011111 է: Bitwise ասելով ես նկատի ունեմ, որ հրահանգը
կատարում է AND գործողություն երկու թվերը կազմող համապատասխան բիթերի յուրաքանչյուր զույգի
միջև: Այս AND գործողությունը պահպանում է A-ի բոլոր բիթերը, բացառությամբ ձախից երրորդի, որը
դրված է 0-ի: Այդ բիթը 0-ի վրա դնելը նաև արդյունավետորեն փոխակերպում է ASCII փոքրատառը
մեծատառի:
Ասվում է, որ վերևում ներկայացված 95 կոդերը վերաբերում են գրաֆիկական նիշերին, քանի որ դրանք
ունեն տեսողական պատկեր: ASCII-ը ներառում է նաև 33 հսկիչ նիշ , որոնք չունեն տեսողական
ներկայացում, բայց փոխարենը կատարում են որոշակի գործառույթներ: Ամբողջականության համար, ահա 33
ASCII հսկիչ նիշերը, բայց մի անհանգստացեք, եթե դրանք հիմնականում անհասկանալի են թվում: ASCII-ի
ստեղծման ժամանակ այն նախատեսված էր հիմնականում հեռագրամեքենաների համար, և այդ կոդերից
շատերը ներկայումս անհասկանալի են:
Վեր
ահս
Հապ
Hex կիչ
ավու
Cod նիշի
մ
e անու
նը
Չեղյ
NU ալ
00
L (ոչի
նչ)
Վեր
նագ
01 ՍՈՀ րի
սկիզ
բ
Տեքս
տի
02 STX
սկիզ
բ
Տեքս
03 ETX տի
վերջ
Փոխ
անց
04 EOT ման
ավա
րտը
Հար
ցում
(այս
EN ինքն
05
Q ՝
հար
ցում
)
Ընդո
06 ACK
ւնել
Զան
07 ԲԵԼ
գ
Bac
08 Բ.Ս ksp
ace
Հորի
զոն
ակա
ն
09 ՀՏ
աղյո
ւսակ
ավո
րում
Lin
0 Ա Լ.Ֆ
e
Fee
d
Ուղղ
ահա
յաց
0B ՎՏ աղյո
ւսակ
ավո
րում
Ձևի
թար
0C ՖՖ
մաց
ում
Վագ
ոն
0D CR վեր
ադա
րձ
ԱՅ Shif
0E ՍՊԵ t-O
Ս ut
Shif
0F SI
t-In
Տվյ
ալնե
րի
10 DLE հղմ
ան
փախ
ուստ
Սար
քի
կառ
11 DC1
ավա
րում
1
Սար
քի
կառ
12 DC2
ավա
րում
2
Սար
քի
կառ
13 DC3
ավա
րում
3
Սար
քի
կառ
14 DC4
ավա
րում
4
Բաց
ասա
կան
15 ՆԱԿ
ճան
աչու
մ
Սին
խրոն
16 SYN
պար
ապ
Փոխ
անց
ման
17 ETB բլոկ
ի
ավա
րտը
Չեղ
ԿԱՐ
18 արկ
ՈՂ
ել
Միջ
ինի
19 ԷՄ
վերջ
ը
Փոխ
ԵՆ արի
1Ա ԹԱ նող
ԿԱ կեր
պար
Փախ
1Բ ESC
ուստ
Ֆայ
լերի
բաժ
անա
րար
կամ
1C FS տեղ
եկա
տվու
թյան
բաժ
անիչ
4
Խմբ
երի
բաժ
անա
րար
1D Գ.Ս կամ
տեղ
եկա
տվու
թյան
բաժ
անա
րար
3
Գրա
ռում
ների
բաժ
անա
րար
կամ
1E ՌՍ
տեղ
եկա
տվու
թյան
բաժ
անիչ
2
Միա
վորն
երի
բաժ
անա
րար
կամ
ԱՄ
1F տեղ
Ն
եկա
տվու
թյան
բաժ
անա
րար
1
Ջնջե
7F ԴԵԼ
լ

Այստեղ գաղափարն այն է, որ հսկիչ նիշերը կարող են խառնվել գրաֆիկական նիշերի հետ՝ տեքստի որոշ
տարրական ձևաչափում կատարելու համար: Սա ամենահեշտն է հասկանալ, եթե դուք մտածում եք մի սարքի
մասին, ինչպիսին է հեռագրամեքենան կամ պարզ տպիչը, որը տպում է նիշերը էջի վրա՝ ի պատասխան ASCII
կոդերի հոսքի: Սարքի տպագրական գլուխը սովորաբար արձագանքում է նիշերի կոդերին՝ տպելով նիշ և մեկ
տարածություն տեղափոխելով աջ: Ամենակարևոր հսկիչ նիշերը փոխում են այս նորմալ վարքը:
Օրինակ, հաշվի առեք տասնվեցական նիշերի տողը

41
09
42
09
43
09

09 նիշը Հորիզոնական աղյուսակավորման կոդ է, կամ կարճ՝ Tab : Եթե կարծում եք, որ տպիչի էջի բոլոր
հորիզոնական նիշերի դիրքերը համարակալված են 0-ից սկսած, Tab կոդը սովորաբար նշանակում է տպել
հաջորդ նիշը հաջորդ հորիզոնական դիրքում, որը 8-ի բազմապատիկ է, այսպես.

ABC
Սա տեքստը սյունակներում շարված պահելու հարմար միջոց է:
Նույնիսկ այսօր շատ համակարգչային տպիչներ արձագանքում են Form Feed կոդը (12h)՝ հեռացնելով
ընթացիկ էջը և բացելով նոր էջ:
Backspace կոդը կարող է օգտագործվել որոշ հին տպիչների վրա կոմպոզիտային նիշեր տպելու համար:
Օրինակ, ենթադրենք, որ հեռագրամեքենան կառավարող համակարգիչը ցանկանում էր ցուցադրել փոքրատառ
e-ը ծանր շեշտադրմամբ, ինչպես՝ è : Դրան կարելի է հասնել՝ օգտագործելով 65 08 60 տասնվեցական
կոդերը:
Առայժմ ամենակարևոր հսկողության կոդերն են Carriage Return-ը և Line Feed-ը, որոնք ունեն նույն
նշանակությունը, ինչ նույն Baudot ծածկագրերը: Տպիչի վրա Carriage Return կոդը տպագրական գլուխը
տեղափոխում է էջի ձախ կողմ, իսկ Line Feed կոդը՝ տպագրական գլուխը մեկ տող ներքև: Երկու կոդերն էլ
ընդհանուր առմամբ պահանջվում են նոր տող անցնելու համար: Carriage Return-ը կարող է օգտագործվել
ինքնուրույն՝ գոյություն ունեցող տողի վրա տպելու համար, իսկ Line Feed-ը կարող է օգտագործվել
ինքնուրույն՝ անցնելու հաջորդ տող՝ առանց ձախ լուսանցք տեղափոխվելու:
Չնայած ASCII-ը հաշվողական աշխարհում գերիշխող ստանդարտն է, այն չի օգտագործվում IBM-ի մեծ
համակարգչային համակարգերից շատերում: System/360-ի հետ կապված՝ IBM-ը մշակեց իր 8-բիթանոց
նիշերի կոդը, որը հայտնի է որպես Extended BCD Interchange Code կամ EBCDIC (արտասանվում է
EBB-see-dick ), որը ավելի վաղ 6-բիթանոց կոդի ընդլայնումն էր, որը հայտնի էր որպես BCDIC: , որը
ստացվել է IBM punch քարտերի վրա օգտագործվող կոդերից։ Դակիչ քարտի այս ոճը, որը կարող է 80 նիշ
տեքստ պահել, ներդրվել է IBM-ի կողմից 1928 թվականին և օգտագործվել ավելի քան 50 տարի:

Դակիչ քարտերի և դրանց առնչվող 8-բիթանոց EBCDIC նիշերի կոդերի միջև կապը դիտարկելիս հիշեք, որ
այս կոդերը զարգացել են տասնամյակների ընթացքում մի քանի տարբեր տեսակի տեխնոլոգիաների ներքո:
Այդ իսկ պատճառով, մի ակնկալեք բացահայտել չափազանց շատ տրամաբանություն կամ
հետևողականություն:
Նիշը կոդավորված է դակիչ քարտի վրա մեկ կամ մի քանի ուղղանկյուն անցքերի համակցությամբ, որոնք
խոցված են մեկ սյունակում: Կերպարն ինքնին հաճախ տպվում է բացիկի վերևի մոտ: Ներքևի 10 տողերը
որոշվում են ըստ թվերի և հայտնի են որպես 0-շարք, 1-շարք և այլն՝ 9-րդ շարքում: 0-ի վերևում գտնվող
չհամարակալված շարքը կոչվում է 11-րդ, իսկ վերին տողը՝ 12-րդ: 10-շարք չկա։
Լրացուցիչ IBM դակիչ քարտի տերմինաբանություն. 0-ից 9-րդ տողերը հայտնի են որպես թվանշանային
տողեր կամ թվանշանների տողեր : 11-րդ և 12-րդ տողերը հայտնի են որպես գոտիների տողեր կամ զոնա
տողեր : Եվ որոշ IBM-ի դակիչ քարտերի շփոթություն. Երբեմն 0 և 9 տողերը համարվում են գոտիային
տողեր, քան թվանշանային տողեր:
8-բիթանոց EBCDIC նիշերի կոդը կազմված է բարձր կարգի խայթոցից (4-բիթանոց արժեք) և ցածր կարգի
նիշից: Ցածր կարգի խայթոցը BCD ծածկագիրն է, որը համապատասխանում է նիշի թվանշաններին: Բարձր
կարգի խայթոցը կոդ է, որը համապատասխանում է (բավականին կամայական ձևով) կերպարի գոտիային
հարվածներին: Դուք կհիշեք 19-րդ գլխից , որ BCD-ն նշանակում է երկուական կոդավորված տասնորդական
՝ 4-բիթանոց կոդ 0-ից 9-րդ թվերի համար:
0-ից 9 թվանշանների համար գոտիային հարվածներ չկան: Բռունցքների այդ բացակայությունը
համապատասխանում է 1111-ի բարձր կարգի խայթոցին: Ահա EBCDIC կոդերի աղյուսակը 0-ից 9
թվանշանների համար.

EBC
Hex DIC
Cod կեր
e պար
F0 0
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9

Մեծատառերի համար միայն 12-րդ շարքի գոտին նշվում է 1100-ի 1100-ով, միայն 11-րդ տառի գոտին
նշվում է 1101-ով, իսկ միայն 0-րդ շարքի գոտին նշվում է. the nibble 1110. Մեծատառերի EBCDIC
կոդերն են

EBC EBC EBC


Hex Hex
Hex DIC DIC DIC
Cod Cod
Cod կեր կեր կեր
e e
e պար պար պար
C1 Ա D1 Ջ
C2 Բ D2 Կ E2 Ս
C3 Գ D3 Լ E3 Տ
C4 Դ D4 Մ E4 U
C5 Ե D5 Ն E5 Վ
C6 Ֆ D6 Օ E6 Վ
C7 Գ D7 Պ E7 X
C8 Հ D8 Ք E8 Յ
C9 Ի D9 Ռ E9 Զ

Ուշադրություն դարձրեք այս ծածկագրերի համարակալման բացերին: Որոշ հավելվածներում այս բացերը
կարող են խենթացնող լինել, երբ դուք ծրագրեր եք գրում EBCDIC տեքստի միջոցով:
Փոքրատառերը ունեն նույն թվանշանային հարվածները, ինչ մեծատառերը, բայց տարբեր գոտիների
հարվածներ: Փոքրատառ a- ից i- ի համար 12-րդ և 0-րդ տառերը կտրված են, որոնք համապատասխանում են
1000 ծածկագրին: j- ից մինչև r-ի համար 12-րդ և 11-րդ տողերը կտրված են: Սա 1001 ծածկագիրն է: s-
ից z տառերի համար 11-րդ և 0-րդ տողերը կտրված են՝ կոդը 1010: Փոքրատառերի EBCDIC կոդերն են.

EBC EBC EBC


Hex Hex
Hex DIC DIC DIC
Cod Cod
Cod կեր կեր կեր
e e
e պար պար պար
81 ա 91 ժ
82 բ 92 կ A2 ս
83 գ 93 լ A3 տ
84 դ 94 մ A4 u
85 ե 95 n A5 v
86 զ 96 o A6 w
87 է 97 էջ A7 x
88 հ 98 ք A8 y
89 ես 99 r A9 զ

Իհարկե, կան նաև այլ EBCDIC կոդեր՝ կետադրական և հսկիչ նիշերի համար, բայց դժվար թե անհրաժեշտ
լինի կատարել այս համակարգի ամբողջական ուսումնասիրություն:
Կարող է թվալ, թե IBM դակիչ քարտի յուրաքանչյուր սյունակ բավարար է 12 բիթ տեղեկատվության
կոդավորման համար: Յուրաքանչյուր անցք մի քիչ է, չէ՞: Այսպիսով, դակիչ քարտի վրա պետք է հնարավոր
լինի կոդավորել ASCII նիշերի կոդերը՝ օգտագործելով յուրաքանչյուր սյունակի 12 դիրքերից միայն 7-ը:
Բայց գործնականում դա այնքան էլ լավ չի աշխատում: Չափազանց շատ անցքեր են ծակվում՝ վտանգելով
քարտի ֆիզիկական ամբողջականությունը:
EBCDIC-ում 8-բիթանոց կոդերից շատերը սահմանված չեն, ինչը հուշում է, որ ASCII-ում 7 բիթ
օգտագործելն ավելի իմաստալից է: ASCII-ի մշակման ժամանակ հիշողությունը շատ թանկ էր: Որոշ մարդիկ
կարծում էին, որ ASCII-ը պետք է լինի 6-բիթանոց կոդ՝ օգտագործելով shift նիշ՝ փոքրատառերն ու
մեծատառերը տարբերելու համար՝ հիշողությունը պահպանելու համար: Երբ այդ գաղափարը մերժվեց,
մյուսները կարծում էին, որ ASCII-ը պետք է լինի 8-բիթանոց կոդ, քանի որ նույնիսկ այն ժամանակ ավելի
հավանական էր համարվում, որ համակարգիչները կունենան 8-բիթանոց ճարտարապետություն, քան
7-բիթանոց: Իհարկե, 8-բիթանոց բայթերն այժմ ստանդարտ են: Չնայած ASCII-ը տեխնիկապես 7-բիթանոց
կոդ է, այն գրեթե համընդհանուր պահվում է որպես 8-բիթանոց արժեքներ:
Բայթերի և նիշերի համարժեքությունը, անշուշտ, հարմար է, քանի որ մենք կարող ենք մոտավոր
պատկերացում կազմել այն մասին, թե կոնկրետ տեքստային փաստաթուղթը որքան համակարգչային
հիշողություն է պահանջում՝ պարզապես նիշերը հաշվելով: Ոմանց համար համակարգչային պահեստի
կիլոգրամները և մեգաները ավելի հասկանալի են, երբ արտահայտվում են տեքստային տեսքով:
Օրինակ, ավանդական կրկնակի բացատով մեքենագրված 8½ x 11 դյույմ էջը 1 դյույմ լուսանցքներով ունի
մոտ 27 տող տեքստ: Յուրաքանչյուր տող ունի մոտ 6½ դյույմ լայնություն և 10 նիշ մեկ դյույմում,
ընդհանուր առմամբ մոտ 1750 բայթ: Մեկ տարածության մեքենագրված էջն ունի մոտ կրկնակի չափ կամ 3,5
կիլոբայթ:
The New Yorker ամսագրի էջն ունի տեքստի 3 սյունակ՝ 60 տող յուրաքանչյուր սյունակում և մոտ 40 նիշ
յուրաքանչյուր տողում։ Դա կազմում է 7200 նիշ (կամ բայթ) մեկ էջում:
The New York Times-ն ունի տեքստի վեց սյունակ յուրաքանչյուր էջում: Եթե ամբողջ էջը ծածկված է
տեքստով առանց որևէ վերնագրի կամ նկարի (ինչը շատ անսովոր է), յուրաքանչյուր սյունակ ունի 155 տող՝
յուրաքանչյուրը մոտ 35 նիշից: Ամբողջ էջն ունի 32550 նիշ կամ 32 կիլոբայթ:
Կոշտ կազմով գիրքն ունի մոտ 500 բառ մեկ էջում: Միջին բառը մոտավորապես 5 տառ է, իրականում 6 նիշ՝
հաշվելով բառերի միջև եղած տարածությունը: Այսպիսով, գիրքն ունի մոտ 3000 նիշ մեկ էջում: Ենթադրենք,
միջին գիրքն ունի 333 էջ, ինչը կարող է հորինված թիվ է, բայց լավ ենթադրում է, որ միջին գիրքը կազմում է
մոտ 1 միլիոն բայթ կամ 1 մեգաբայթ:
Իհարկե, գրքերը տարբերվում են ամենուր.

Ֆ.
Սքոթ
Ֆից
ջեր
ալդի
Մեծ
Գեթ
սբին
մոտ
300
կիլո
բայթ
է:
JD
Sali
nge
r's
Catc
her
in
the
Rye-
ը
մոտ
400
կիլո
բայթ
է:
Մար
կ
Տվե
նի
Հեքլ
բերի
Ֆին
ի
արկ
ածն
երը
մոտ
540
կիլո
բայթ
է:
Ջոն
Սթա
յնբե
քի
The
Gra
pes
of
Wra
th-ը
մեկ
մեգ
աբա
յթի
մաս
ին է:
Հերմ
ան
Մելվ
իլի
Մոբ
ի
Դիկ
ը
մոտ
1,3
մեգ
աբա
յթ է:
Հենր
ի
Ֆիլ
դինգ
ի
«Թո
մ
Ջոնս
ի
պատ
մութ
յուն
ը»
մոտ
2,2
5
մեգ
աբա
յթ է:
Մար
գար
ետ
Միտ
չելի
«Քա
մուց
քշվա
ծներ
ը»
մոտ
2,5
մեգ
աբա
յթ է:
Սթի
վեն
Քին
գի
ամբ
ողջ
ակա
նև
չկտր
ված
The
Sta
nd-ը
մոտ
2,7
մեգ
աբա
յթ է:
Լև
Տոլս
տոյի
«Պա
տեր
ազմ
և
խաղ
աղու
թյու
ն»
գիրք
ը
մոտ
3,9
մեգ
աբա
յթ է:
Մար
սել
Պրո
ւստի
«Ան
ցյալ
ի
իրեր
ի
հիշո
ղութ
յուն
ը»
մոտ
7,7
մեգ
աբա
յթ է:

Միացյալ Նահանգների Կոնգրեսի գրադարանն ունի մոտ 20 միլիոն գիրք՝ ընդհանուր 20 տրիլիոն նիշ կամ
20 տերաբայթ տեքստային տվյալների համար: (Այն ունի նաև մի շարք լուսանկարներ և
ձայնագրություններ):
Չնայած ASCII-ն, անշուշտ, համակարգչային արդյունաբերության ամենակարևոր չափանիշն է, այն
կատարյալ չէ: Տեղեկատվության փոխանակման ամերիկյան ստանդարտ օրենսգրքի մեծ խնդիրն այն է, որ այն
պարզապես չափազանց անիծյալ ամերիկյան է: Իրոք, ASCII-ը դժվար թե հարմար լինի նույնիսկ այլ ազգերի
համար, որոնց հիմնական լեզուն անգլերենն է: Չնայած ASCII-ն ներառում է դոլարի նշան, որտեղ է
բրիտանական ֆունտի նշանը: Իսկ ի՞նչ կասեք արևմտաեվրոպական շատ լեզուներում օգտագործվող
ընդգծված տառերի մասին։ Էլ չեմ ասում Եվրոպայում օգտագործվող ոչ լատինական այբուբենների մասին,
այդ թվում՝ հունարեն, արաբերեն, եբրայերեն և կիրիլիցա։ Կամ Հնդկաստանի և Հարավարևելյան Ասիայի
բրահմի գրերը, ներառյալ դևանագարին, բենգալերենը, թայերենը և տիբեթերենը: Եվ ինչպե՞ս կարող է
7-բիթանոց ծածկագիրը կարգավորել չինական, ճապոնական և կորեերենի տասնյակ հազարավոր
գաղափարագրերը և կորեերենի տասը հազար տարօրինակ հանգուլ վանկերը:
Նույնիսկ այն ժամանակ, երբ ASCII-ը մշակվում էր, որոշ այլ ազգերի կարիքները նկատի էին առնվում, թեև
ոչ լատինական այբուբենները մեծ ուշադրություն չեն դարձնում: Համաձայն հրապարակված ASCII
ստանդարտի՝ տասը ASCII կոդ (40h, 5Bh, 5Ch, 5Dh, 5Eh, 60h, 7Bh, 7Ch, 7Dh և 7Eh) հասանելի են
ազգային օգտագործման համար վերասահմանման համար: Բացի այդ, թվային նշանը (#) կարող է
փոխարինվել բրիտանական ֆունտի նշանով (£), իսկ դոլարի նշանը ($) կարող է անհրաժեշտության դեպքում
փոխարինվել արժույթի ընդհանրացված նշանով (¤): Ակնհայտ է, որ սիմվոլների փոխարինումը իմաստ ունի
միայն այն դեպքում, երբ բոլորը, ովքեր ներգրավված են այս վերասահմանված կոդերը պարունակող որոշակի
տեքստային փաստաթղթի օգտագործման մեջ, գիտեն փոփոխության մասին:
Քանի որ շատ համակարգչային համակարգեր պահում են նիշերը որպես 8-բիթ արժեքներ, հնարավոր է
ստեղծել ASCII ընդլայնված նիշերի հավաքածու , որը պարունակում է 256 նիշ, այլ ոչ թե ընդամենը 128:
80h-ից մինչև FFh կոդերը կարող են լինել բոլորովին այլ բան: Այս տեխնիկան օգտագործվել է նիշերի
լրացուցիչ կոդեր սահմանելու համար՝ ընդգծված տառերը և ոչ լատինական այբուբենները տեղավորելու
համար: Որպես օրինակ՝ ահա ASCII-ի 96 նիշանոց ընդլայնումը, որը կոչվում է Լատինական այբուբեն թիվ
1, որը սահմանում է նիշեր A0h-ից մինչև FFh կոդերի համար: Այս աղյուսակում տասնվեցական նիշերի
կոդի բարձր կարգի խայթոցը ցուցադրված է վերևի շարքում. ցածր կարգի խայթոցը ցուցադրվում է ձախ
սյունակում:

Ա- Բ- Գ- Դ- Էլ. Զ-

-0 ° À Ð à ð
-1 ¡ ± Á Ñ á ñ
-2 ¢ ² Â Ò â ò
-3 £ ³ Ã Ó ã ó
-4 ¤ ' Ä Ô ä ô
-5 ¥ մ Å Õ å õ
-6 ¦ ¶ Æ Ö æ ö
-7 § · Չ × ç ÷
-8 ¨ ¸ È Ø è ø
-9 © ¹ É Ù ե ù
-Ա ª º Ե Ú ê ú
-Բ « » Ë Ու ë և
-Գ ¬ ¼ Ì Ü ì ü
-Դ - ½ Í Ý ի ý
-Է ® ¾ Ի Þ î þ
-Ֆ - ¿ Ï ß ï ÿ

A0h կոդի նիշը սահմանվում է որպես առանց ընդմիջման տարածություն : Սովորաբար, երբ համակարգչային
ծրագիրը տեքստը ձևավորում է տողերի և պարբերությունների, այն կտրում է յուրաքանչյուր տող
տիեզերական նիշով, որը ASCII կոդը 20h է: Կոդ A0h-ը պետք է ցուցադրվի որպես բացատ, բայց չի կարող
օգտագործվել գիծը կտրելու համար: Օրինակ, «WW II» տեքստում կարող է օգտագործվել առանց ընդմիջման
բացատ: ADh կոդը սահմանվում է որպես փափուկ գծիկ : Սա գծիկ է, որն օգտագործվում է բառերի
մեջտեղում վանկերը առանձնացնելու համար: Այն հայտնվում է տպագրված էջում միայն այն դեպքում, երբ
անհրաժեշտ է երկու տողերի միջև բառ ընդհատել:
Ցավոք, ASCII-ի շատ տարբեր ընդարձակումներ են սահմանվել տասնամյակների ընթացքում, ինչը
հանգեցնում է մեծ շփոթության և անհամատեղելիության: ASCII-ն ընդլայնվել է ավելի արմատական
եղանակով՝ չինարենի, ճապոներենի և կորեերենի գաղափարագրերը կոդավորելու համար: Մեկ հանրաճանաչ
կոդավորման մեջ, որը կոչվում է Shift-JIS (ճապոնական արդյունաբերական ստանդարտ), 81h-ից մինչև
9Fh կոդերը իրականում ներկայացնում են 2 բայթ նիշերի կոդի սկզբնական բայթը: Այս կերպ Shift-JIS-ը
թույլ է տալիս կոդավորել մոտ 6000 լրացուցիչ նիշ: Ցավոք, Shift-JIS-ը միակ համակարգը չէ, որն
օգտագործում է այս տեխնիկան: Երեք այլ ստանդարտ կրկնակի բայթ նիշերի հավաքածուներ (DBCS) հայտնի
են Ասիայում:
Այն, որ կան մի շարք անհամատեղելի կրկնակի բայթ նիշերի հավաքածուներ, միայն դրանց խնդիրներից մեկն
է: Մյուս խնդիրն այն է, որ որոշ նիշեր, մասնավորապես, սովորական ASCII նիշերը ներկայացված են 1 բայթ
կոդերով, մինչդեռ հազարավոր գաղափարագրերը ներկայացված են 2 բայթ կոդերով: Սա դժվարացնում է
նման կերպարների հավաքածուների հետ աշխատելը:
Ենթադրելով, որ նախընտրելի է ունենալ միայն մեկ աներկբա նիշերի կոդավորման համակարգ, որը հարմար է
աշխարհի բոլոր լեզուների համար, 1988 թվականին մի քանի խոշոր համակարգչային ընկերություններ
հավաքվեցին և սկսեցին մշակել ASCII-ի այլընտրանք, որը հայտնի է որպես Unicode : Մինչդեռ ASCII-ը
7-բիթանոց կոդ է, Unicode-ը 16-բիթանոց կոդ է: Յունիկոդի յուրաքանչյուր նիշը պահանջում է 2 բայթ:
Դա նշանակում է, որ Յունիկոդն ունի նիշերի կոդեր՝ սկսած 0000h-ից մինչև FFFFh և կարող է
ներկայացնել 65,536 տարբեր նիշ: Դա բավական է աշխարհի բոլոր լեզուների համար, որոնք, ամենայն
հավանականությամբ, կօգտագործվեն համակարգչային հաղորդակցության մեջ, ընդարձակման տեղ
ունենալով:
Յունիկոդը զրոյից չի սկսվում։ Յունիկոդի առաջին 128 նիշերը՝ 0000h-ից 007Fh կոդերը, նույնն են, ինչ
ASCII նիշերը: Նաև Յունիկոդի 00A0h-ից մինչև 00FFh կոդերը նույնն են, ինչ ASCII-ի Լատինական
այբուբենի թիվ 1 ընդլայնումը, որը ես նկարագրեցի ավելի վաղ: Համաշխարհային այլ ստանդարտներ
նույնպես ներառված են Յունիկոդում:
Թեև Յունիկոդը կարող է ակնհայտ բարելավում լինել գոյություն ունեցող նիշերի կոդերի համեմատ, դա չի
երաշխավորում դրա ակնթարթային ընդունելությունը: ASCII-ը և ASCII-ի անհամար թերի ընդարձակումները
այնքան են արմատավորվել հաշվողական աշխարհում, որ դժվար կլինի դրանք հեռացնել:
Unicode-ի միակ իրական խնդիրն այն է, որ այն անվավեր է դարձնում տեքստի մեկ նիշի և 1 բայթ պահեստի
միջև եղած հին համարժեքությունը: ASCII-ով կոդավորված՝ The Grapes of Wrath-ի չափը մոտ 1
մեգաբայթ է: Unicode-ում կոդավորված է, այն մոտավորապես 2 մեգաբայթ է: Բայց դա փոքր գին է, որը
պետք է վճարել համընդհանուր միանշանակ նիշերի կոդավորման համակարգի համար:
Գլուխ 21. Նստեք ավտոբուս
Պրոցեսորը, անշուշտ, համակարգչի ամենակարեւոր բաղադրիչն է, բայց դա միակ բաղադրիչը չէ:
Համակարգիչը նաև պահանջում է պատահական մուտքի հիշողություն (RAM), որը պարունակում է
մեքենայական կոդի հրահանգներ պրոցեսորի կատարման համար: Համակարգիչը պետք է նաև ներառի այդ
հրահանգների RAM (ներածման սարք) մուտքի ինչ-որ եղանակ և ծրագրի արդյունքների դիտարկման որևէ
միջոց (ելքային սարք): Ինչպես նաև հիշում եք, RAM-ը անկայուն է. այն կորցնում է իր պարունակությունը,
երբ հոսանքն անջատվում է: Այսպիսով, համակարգչի մեկ այլ օգտակար բաղադրիչը երկարաժամկետ
պահեստավորման սարքն է, որը կարող է պահպանել կոդը և տվյալները, երբ համակարգիչը անջատված է:
Բոլոր ինտեգրալային սխեմաները, որոնք կազմում են ամբողջական համակարգիչը, պետք է տեղադրվեն
տպատախտակների վրա: Որոշ փոքր մեքենաներում բոլոր IC-ները կարող են տեղավորվել մեկ տախտակի
վրա: Բայց ավելի սովորական է, որ համակարգչի տարբեր բաղադրիչները բաժանվեն երկու կամ ավելի
տախտակների վրա: Այս տախտակները միմյանց հետ շփվում են ավտոբուսի միջոցով ։ Ավտոբուսը պարզապես
թվային ազդանշանների հավաքածու է, որը տրամադրվում է համակարգչի յուրաքանչյուր տախտակին: Այս
ազդանշանները բաժանվում են չորս կատեգորիաների.
● Հասցեների ազդանշաններ. Սրանք ազդանշաններ են, որոնք գեներացվում են միկրոպրոցեսորի
կողմից և օգտագործվում են հիմնականում պատահական մուտքի հիշողությունը հասցեագրելու
համար: Բայց դրանք նաև օգտագործվում են համակարգչին կցված այլ սարքերի հասցեագրման
համար:
● Տվյալների ելքային ազդանշաններ. Սրանք նաև ազդանշաններ են, որոնք տրամադրվում են
միկրոպրոցեսորի կողմից: Դրանք օգտագործվում են RAM-ում կամ այլ սարքերում տվյալներ
գրելու համար: Զգույշ եղեք մուտքային և ելքային տերմինների հետ : Միկրոպրոցեսորից
տվյալների ելքային ազդանշանը դառնում է տվյալների մուտքագրման ազդանշան RAM-ի և այլ
սարքերի համար:
● Տվյալների մուտքագրման ազդանշաններ. Սրանք ազդանշաններ են, որոնք տրամադրվում են
համակարգչի այլ մասերի կողմից և կարդացվում են միկրոպրոցեսորի կողմից: Տվյալների
մուտքագրման ազդանշաններն առավել հաճախ ծագում են RAM-ի ելքից. այսպես
միկրոպրոցեսորը կարդում է հիշողության պարունակությունը: Բայց մյուս բաղադրիչները նաև
տվյալների մուտքագրման ազդանշաններ են տրամադրում միկրոպրոցեսորին:
● Կառավարման ազդանշաններ. Սրանք տարբեր ազդանշաններ են, որոնք սովորաբար
համապատասխանում են տվյալ միկրոպրոցեսորի կառավարման ազդանշաններին, որոնց շուրջ
կառուցված է համակարգիչը: Կառավարման ազդանշանները կարող են առաջանալ
միկրոպրոցեսորից կամ այլ սարքերից՝ միկրոպրոցեսորին ազդանշան տալու համար: Հսկիչ
ազդանշանի օրինակ է միկրոպրոցեսորի կողմից օգտագործվող ազդանշանը, որը ցույց է տալիս,
որ այն պետք է որոշակի տվյալների ելք գրի որոշակի հիշողության հասցեում:
Բացի այդ, ավտոբուսը էներգիա է մատակարարում համակարգչի կազմած տարբեր տախտակներին:
Տնային համակարգիչների համար ամենավաղ հայտնի ավտոբուսներից մեկը S-100 ավտոբուսն էր, որը
ներկայացվեց 1975 թվականին առաջին տնային համակարգչում՝ MITS Altair-ում: Չնայած այս ավտոբուսը
հիմնված էր 8080 միկրոպրոցեսորի վրա, այն հետագայում հարմարեցվեց այլ պրոցեսորների, ինչպիսիք են
6800-ը: S-100 տպատախտակը 5,3 դյույմ է 10 դյույմ: Շղթայի մի եզրը տեղավորվում է վարդակից, որն
ունի 100 միակցիչ (այստեղից էլ կոչվում է S-100):
S-100 համակարգիչը պարունակում է ավելի մեծ տախտակ, որը կոչվում է մայր տախտակ (կամ հիմնական
տախտակ ), որը պարունակում է մի շարք S-100 վարդակներ (գուցե դրանցից 12-ը) միմյանց հետ կապված:
Այս վարդակները երբեմն կոչվում են ընդարձակման անցքեր : S-100 տպատախտակները (նաև կոչվում են
ընդարձակման տախտակներ ) տեղավորվում են այս վարդակների մեջ: 8080 միկրոպրոցեսորը և օժանդակ
չիպերը (որոնցից մի քանիսը նշեցի 19-րդ գլխում ) զբաղեցնում են մեկ S-100 տախտակ: Պատահական
մուտքի հիշողությունը զբաղեցնում է մեկ կամ մի քանի այլ տախտակներ:
Քանի որ S-100 ավտոբուսը նախատեսված էր 8080 չիպի համար, այն ունի 16 հասցեի ազդանշան, 8
տվյալների մուտքագրման ազդանշան և 8 տվյալների ելքային ազդանշան: (Ինչպես հիշում եք, 8080-ն
ինքնին համատեղում է տվյալների մուտքագրման և ելքային ազդանշանները: Այս ազդանշանները բաժանվում
են առանձին մուտքային և ելքային ազդանշանների՝ 8080 պարունակող տպատախտակի այլ չիպերի
միջոցով:) Ավտոբուսը ներառում է նաև 8 ընդհատման ազդանշան : Սրանք ազդանշաններ են, որոնք
գեներացվում են այլ սարքերի կողմից, երբ դրանք պրոցեսորի անմիջական ուշադրության կարիք ունեն:
Օրինակ (ինչպես կտեսնենք այս գլխում ավելի ուշ), ստեղնաշարը կարող է ընդհատման ազդանշան
առաջացնել, երբ ստեղնը սեղմված է: 8080-ով աշխատող կարճ ծրագիրը կարող է այնուհետև որոշել, թե որն
է այդ բանալին և որոշակի գործողություններ ձեռնարկել: 8080 պարունակող տախտակը նաև ընդհանուր
առմամբ ներառում է չիպ, որը կոչվում է Intel 8214 Priority Interrupt Control Unit՝ այս
ընդհատումները կարգավորելու համար: Երբ ընդհատում է տեղի ունենում, այս չիպը առաջացնում է
ընդհատման ազդանշան 8080-ին: Երբ 8080-ը ընդունում է ընդհատումը, չիպը տալիս է RST (
Վերագործարկ ) հրահանգ , որը ստիպում է միկրոպրոցեսորին պահպանել ընթացիկ ծրագրի հաշվիչը և
ճյուղը 0000h, 0008h, 0010h հասցեով: , 0018h, 0020h, 0028h, 0030h կամ 0038h՝ կախված
ընդհատումից:
Եթե դուք նախագծում էիք նոր համակարգչային համակարգ, որը ներառում էր ավտոբուսի նոր տեսակ, կարող
եք ընտրել՝ հրապարակել (կամ այլ կերպ հասանելի դարձնել) ավտոբուսի բնութագրերը, թե գաղտնի պահել
դրանք:
Եթե որոշակի ավտոբուսի բնութագրերը հրապարակվեն, այլ արտադրողներ, այսպես կոչված, երրորդ կողմի
արտադրողները, կարող են նախագծել և վաճառել ընդլայնման տախտակներ, որոնք աշխատում են այդ
ավտոբուսի հետ: Այս լրացուցիչ ընդլայնման տախտակների առկայությունը համակարգիչը դարձնում է ավելի
օգտակար և, հետևաբար, ավելի ցանկալի: Համակարգիչների ավելի շատ վաճառքները ավելի շատ շուկա են
ստեղծում ավելի մեծ ընդլայնման տախտակների համար: Այս երևույթը խթան է փոքր համակարգչային
համակարգերի դիզայներների համար, որոնք հավատարիմ են բաց ճարտարապետության սկզբունքին , ինչը
թույլ է տալիս այլ արտադրողներին ստեղծել ծայրամասային սարքեր համակարգչի համար: Ի վերջո,
ավտոբուսը կարող է համարվել արդյունաբերության ստանդարտ : Ստանդարտները եղել են անհատական
համակարգիչների արդյունաբերության կարևոր մասը:
Ամենահայտնի բաց ճարտարապետության անհատական համակարգիչը բնօրինակ IBM PC-ն էր, որը
ներկայացվեց 1981թ.-ի աշնանը: IBM-ը հրատարակեց Տեխնիկական տեղեկատու ձեռնարկ PC-ի համար,
որը պարունակում էր ամբողջ համակարգչի ամբողջական սխեմաները, ներառյալ բոլոր ընդլայնման
տախտակները, որոնք IBM-ն արտադրել էր դրա համար: Այս ձեռնարկը կարևոր գործիք էր, որը շատ
արտադրողների հնարավորություն տվեց ստեղծել իրենց սեփական ընդլայնման տախտակները ԱՀ-ի համար և,
փաստորեն, ստեղծել ԱՀ-ի ամբողջական կլոններ ՝ համակարգիչներ, որոնք գրեթե նույնական էին IBM-ի
հետ և աշխատում էին նույն ծրագրաշարով:
Այդ բնօրինակ IBM PC-ի ժառանգներն այժմ կազմում են սեղանադիր համակարգիչների շուկայի մոտ 90
տոկոսը: Թեև IBM-ն ինքն ունի այս շուկայի միայն փոքր մասնաբաժինը, շատ լավ կարող է լինել, որ IBM-ի
մասնաբաժինը ավելի մեծ է, քան եթե սկզբնական ԱՀ-ն ունենար փակ ճարտարապետություն ՝ սեփական
դիզայնով : Apple Macintosh-ն ի սկզբանե նախագծված էր փակ ճարտարապետությամբ, և չնայած բաց
ճարտարապետության հետ երբեմն սիրախաղերին, այդ սկզբնական որոշումը, հավանաբար, բացատրում է, թե
ինչու Macintosh-ը ներկայումս կազմում է աշխատասեղանի շուկայի 10 տոկոսից պակասը: (Հիշեք, որ
համակարգչային համակարգը նախագծված է բաց ճարտարապետության կամ փակ ճարտարապետության
սկզբունքով, չի ազդում այլ ընկերությունների՝ համակարգչով աշխատող ծրագրակազմ գրելու ունակության
վրա: Միայն որոշ տեսախաղեր արտադրողներն են սահմանափակել այլ ընկերություններին գրելու
ծրագրակազմ իրենց համակարգերի համար։)
Բնօրինակ IBM PC-ն օգտագործում էր Intel 8088 միկրոպրոցեսորը, որը կարող է հասցեագրել 1 մեգաբայթ
հիշողություն: Չնայած ներքին 8088-ը 16-բիթանոց միկրոպրոցեսոր է, արտաքինից այն հասցեագրում է
հիշողությունը 8-բիթանոց հատվածներով: Ավտոբուսը, որը IBM-ը նախագծել էր բնօրինակ ԱՀ-ի համար,
այժմ կոչվում է ISA (Industry Standard Architecture) ավտոբուս: Ընդարձակման տախտակները ունեն
62 միակցիչ: Ազդանշանները ներառում են 20 հասցեի ազդանշան, 8 համակցված տվյալների մուտքային և
ելքային ազդանշան, 6 ընդհատման հարցում և 3 ուղղակի հիշողության մուտքի (DMA) հարցում: DMA-ն
թույլ է տալիս պահեստավորման սարքերին (որոնք ես նկարագրելու եմ այս գլխի վերջում) ավելի արագ
աշխատել, քան այլ կերպ հնարավոր կլիներ: Սովորաբար, միկրոպրոցեսորը կարգավորում է բոլոր
ընթերցումները և գրառումները դեպի հիշողություն: Բայց օգտագործելով DMA-ն, մեկ այլ սարք կարող է
շրջանցել միկրոպրոցեսորը՝ վերցնելով ավտոբուսը և ուղղակիորեն կարդալով կամ գրելով հիշողության մեջ:
S-100 համակարգում բոլոր բաղադրիչները տեղադրվում են ընդարձակման տախտակների վրա: IBM PC-ում
միկրոպրոցեսորը, որոշ աջակցող չիպեր և որոշ RAM տեղակայված են այն, ինչ IBM-ն անվանել է
համակարգային տախտակ , որը նաև հաճախ կոչվում է մայր տախտակ կամ հիմնական տախտակ:
1984 թվականին IBM-ը ներկայացրեց Personal Computer AT-ը, որն օգտագործում էր 16-բիթանոց
Intel 80286 միկրոպրոցեսորը, որը կարող է հասցեագրել 16 մեգաբայթ հիշողություն: IBM-ը պահպանեց
գոյություն ունեցող ավտոբուսը, բայց ավելացրեց ևս 36 միակցիչ վարդակ, որը ներառում էր ևս 7 հասցեի
ազդանշան (չնայած ևս 4-ն էր անհրաժեշտ), ևս 8 տվյալների մուտքագրման և ելքի ազդանշան, ևս 5
ընդհատման հարցում և ևս 4 DMA հարցում:
Ավտոբուսները պետք է արդիականացվեն կամ փոխարինվեն, երբ միկրոպրոցեսորները գերազանցում են
դրանք՝ կա՛մ տվյալների լայնությամբ (8-ից 16-ից մինչև 32 բիթ), կա՛մ նրանց կողմից թողարկվող
հասցեային ազդանշանների քանակով: Սակայն միկրոպրոցեսորները նույնպես գերազանցում են
ավտոբուսները, երբ նրանք հասնում են ավելի մեծ արագությունների: Վաղ ավտոբուսները նախատեսված էին
միկրոպրոցեսորների համար, որոնք աշխատում էին մի քանի մեգահերց ժամացույցի արագությամբ, քան մի
քանի հարյուր մեգահերց: Երբ ավտոբուսը պատշաճ կերպով նախագծված չէ բարձր արագությունների համար,
այն կարող է առաջացնել ռադիոհաճախականության միջամտություն (RFI), որն առաջացնում է ստատիկ կամ
այլ աղմուկ մոտակա ռադիոներում և հեռուստատեսային սարքերում:
1987 թվականին IBM-ը ներկայացրեց Micro Channel Architecture (MCA) ավտոբուսը։ Այս
ավտոբուսի որոշ ասպեկտներ արտոնագրված էին IBM-ի կողմից, ուստի IBM-ը կարողացավ լիցենզավորման
վճարներ հավաքել ավտոբուսից օգտվող այլ ընկերություններից: Թերևս այս պատճառով ՀՄՀ ավտոբուսը
չդարձավ արդյունաբերության ստանդարտ: Փոխարենը, 1988թ.-ին ինը ընկերություններից կազմված
կոնսորցիումը (ներառյալ IBM-ը) հակադարձեց 32-բիթանոց EISA-ի (Extended Industry Standard
Architecture) ավտոբուսին: Բոլորովին վերջերս Intel-ի կողմից մշակված ծայրամասային բաղադրիչների
փոխկապակցման (PCI) ավտոբուսը սովորական դարձավ PC-համատեղելի սարքերում:
Հասկանալու համար, թե ինչպես են աշխատում համակարգչի տարբեր բաղադրիչները, կրկին օգտակար է
վերադառնալ 1970-ականների կեսերի ավելի վաղ և ավելի պարզ ժամանակաշրջանին: Մենք կարող ենք
պատկերացնել, որ մենք նախագծում ենք տախտակներ Altair-ի համար, կամ գուցե մեր սեփական դիզայնի
8080 կամ 6800 համակարգչի համար: Մենք, հավանաբար, ցանկանում ենք համակարգչի համար որոշակի
հիշողություն նախագծել և ունենալ մուտքագրման համար ստեղնաշար, ելքի համար հեռուստացույց և,
հնարավոր է, ինչ-որ կերպ պահպանել հիշողության պարունակությունը, երբ մենք անջատենք համակարգիչը:
Եկեք նայենք տարբեր ինտերֆեյսներին, որոնք մենք կարող ենք նախագծել՝ այս բաղադրիչները մեր
համակարգչին ավելացնելու համար:
Դուք կհիշեք 16-րդ գլխից , որ RAM զանգվածներն ունեն հասցեի մուտքեր, տվյալների մուտքեր, տվյալների
ելքեր և ազդանշան, որն օգտագործվում է տվյալները հիշողության մեջ գրելու համար: Հասցեների
մուտքագրումների քանակը ցույց է տալիս առանձին արժեքների քանակը, որոնք կարող են պահվել RAM
զանգվածում.

Արժ
եքնե
րի
քան
ակը
RA
M
զան
գվա
ծում
=2
Հաս
ցենե
րի
մուտ
քագր
ման
քան
ակը

Տվյալների մուտքագրման և ելքային ազդանշանների քանակը ցույց է տալիս պահված արժեքների չափը:
1970-ականների կեսերին տնային համակարգիչների համար հայտնի հիշողության չիպը 2102 էր.

2102-ը կիսահաղորդիչների MOS (մետաղ-օքսիդ կիսահաղորդիչների) ընտանիքի անդամ է, որը նույն


տեխնոլոգիան է, որն օգտագործվում է հենց 8080 և 6800 միկրոպրոցեսորների համար: MOS
կիսահաղորդիչները կարելի է հեշտությամբ միացնել TTL չիպերին; նրանք, ընդհանուր առմամբ, ունեն
տրանզիստորների ավելի մեծ խտություն, քան TTL-ը, բայց այնքան էլ արագ չեն:
Ինչպես հավանաբար կարող եք պարզել՝ հաշվելով հասցեի ազդանշանները (A 0 -ից A 9 ) և նշելով
տվյալների ելքի (DO) և տվյալների մուտքագրման (DI) ազդանշանները, այս չիպը պահպանում է 1024 բիթ:
Կախված ձեր օգտագործած 2102 չիպի տեսակից, ընթերցման հասանելիության ժամանակը (տվյալների ելքի
վավերականության ժամանակը չիպի վրա որոշակի հասցե կիրառելուց հետո) տատանվում է 350-ից մինչև
1000 նանվայրկյան: R/ ( կարդալ / գրել ) ազդանշանը սովորաբար 1 է, երբ դուք կարդում եք
հիշողությունը: Երբ ցանկանում եք տվյալներ գրել չիպի մեջ, այս ազդանշանը պետք է լինի 0 առնվազն
170-ից 550 նսվկ ժամանակահատվածի համար՝ կրկին կախված ձեր օգտագործած 2102 չիպի տեսակից:
Առանձնահատուկ հետաքրքրություն է ներկայացնում ազդանշանը , որը նշանակում է չիպերի
ընտրություն : Երբ այս ազդանշանը 1 է, չիպը հանվում է , ինչը նշանակում է, որ այն չի արձագանքում R/
ազդանշանին: Ազդանշանը ևս մեկ խոր ազդեցություն է թողնում չիպի վրա, սակայն, որը ես շուտով
նկարագրելու եմ:
Իհարկե, եթե դուք հիշողություն եք հավաքում 8-բիթանոց միկրոպրոցեսորի համար, դուք ցանկանում եք
կազմակերպել այս հիշողությունը այնպես, որ այն պահպանի 8-բիթանոց արժեքները, այլ ոչ թե 1-բիթանոցը:
Առնվազն, դուք պետք է միացնեք այս 2102 չիպերից 8-ը՝ ամբողջ բայթերը պահելու համար: Դուք կարող եք
դա անել՝ միացնելով բոլոր համապատասխան հասցեների ազդանշանները, R/ ազդանշանները և ութ
2102 չիպերի ազդանշանները: Արդյունքը կարելի է նկարել այսպես.

Սա 1024 x 8 RAM զանգված է կամ 1 ԿԲ RAM:


Գործնական տեսանկյունից, դուք պետք է տեղադրեք հիշողության չիպերը տպատախտակի վրա: Քանի՞սը
կարող եք տեղավորել մեկ տախտակի վրա: Դե, եթե դրանք իսկապես խցկեք իրար, կարող եք տեղավորել այս
չիպերից 64-ը մեկ S-100 տախտակի վրա: Դա ձեզ կտա 8 ԿԲ հիշողություն: Բայց եկեք գնանք ավելի
համեստ 4 ԿԲ-ի՝ օգտագործելով ընդամենը 32 չիպեր: Չիպերի յուրաքանչյուր հավաքածու, որը միացված է
մի ամբողջ բայթ պահելու համար (ինչպես վերը նկարագրված է), հայտնի է որպես բանկ : 4 ԿԲ հիշողության
տախտակը պարունակում է չորս բանկ՝ յուրաքանչյուրը 8 չիպից:
Ութ բիթանոց միկրոպրոցեսորները, ինչպիսիք են 8080-ը և 6800-ը, ունեն 16-բիթանոց հասցեներ, որոնք
կարող են հասցեագրել ընդհանուր 64 ԿԲ հիշողություն: Երբ դուք միացնում եք 4 ԿԲ հիշողության
տախտակը, որը պարունակում է չիպերի չորս բանկ, հիշողության տախտակի 16 հասցեի ազդանշանները
կատարում են հետևյալ գործառույթները.

0- ից մինչև A 9 հասցեի 10 ազդանշանները ուղղակիորեն միացված են RAM-ի չիպերին: Հասցեի


ազդանշանները A 10 և A 11 ընտրում են, թե չորս բանկերից որն է հասցեագրված: Հասցեների
ազդանշանները A 12- ից A 15-ը որոշում են, թե որ հասցեները վերաբերում են այս կոնկրետ տախտակին, այլ
կերպ ասած՝ այն հասցեներին, որոնց պատասխանում է տախտակը: 4 ԿԲ հիշողության տախտակը, որը մենք
նախագծում ենք, կարող է զբաղեցնել միկրոպրոցեսորի ամբողջ 64 ԿԲ հիշողության տարածության 16
տարբեր 4 ԿԲ տիրույթներից մեկը.
0000h մինչև 0FFFh, կամ
1000h մինչև 1FFFh, կամ
2000h-ից մինչև 2FFFh, կամ

F000h FFFFh-ի միջոցով:
Օրինակ, ենթադրենք, որ մենք որոշում ենք, որ այս 4 ԿԲ հիշողության տախտակը կկիրառվի A000h
հասցեների վրա AFFFh-ի միջոցով: Սա նշանակում է, որ A000h-ից մինչև A3FFh հասցեները կկիրառվեն
1-KB չիպերի առաջին բանկին, A400h-ից A7FFh-ի հասցեները՝ երկրորդ բանկին, A800h-ի միջոցով
ABFFh-ի միջոցով՝ երրորդ բանկին և AC00h-ի հասցեները՝ AFFFh-ի միջոցով չորրորդ բանկին:
Սովորական է 4 ԿԲ հիշողության տախտակը միացնելը, որպեսզի հետագայում ճկուն կերպով նշեք, թե
հասցեների որ տիրույթին է այն արձագանքում: Այս ճկունությանը հասնելու համար դուք օգտագործում եք մի
բան, որը կոչվում է DIP անջատիչ : Սա փոքր անջատիչների մի շարք է (ցանկացած տեղից 2-ից մինչև 12-ը)
երկակի ներկառուցված փաթեթում (DIP), որոնք կարող են տեղադրվել սովորական IC վարդակից:

Դուք կարող եք միացնել այս անջատիչը ավտոբուսի 4 հասցեի բարձր բիթերով մի շղթայում, որը կոչվում է
համեմատիչ :
Ինչպես հիշում եք, XOR դարպասի ելքը 1 է, եթե երկու մուտքերից որևէ մեկը 1 է, բայց ոչ երկուսն էլ: Սա
մտածելու մեկ այլ տարբերակ է, որ XOR դարպասի ելքը 0 է, եթե երկու մուտքերը նույնն են, կամ երկուսն էլ
0, կամ երկուսն էլ 1:
13 և A 15- ին համապատասխան անջատիչները , դա նշանակում է, որ մենք ցանկանում ենք, որ հիշողության
տախտակը արձագանքի A000h հիշողության հասցեներին AFFFh-ի միջոցով: Երբ ավտոբուսից հասցեի
ազդանշանները A 12 , A 13 , A 14 և A 15 հավասար են անջատիչների վրա դրված արժեքներին, բոլոր չորս
XOR դարպասների ելքերը 0 են, ինչը նշանակում է, որ NOR դարպասից ելքը 1 է:
հիշողության չորս բանկերից յուրաքանչյուրի համար ազդանշաններ առաջացնելու համար .

Օրինակ, երբ A 10-ը 0 է, իսկ A 11- ը 1, դա երրորդ բանկն է:


Եթե հիշում եք 16-րդ գլխում RAM զանգվածների համակցման խառնաշփոթ մանրամասները , կարող եք
ենթադրել, որ մեզ անհրաժեշտ են նաև ութ 4-ից 1 ընտրիչներ՝ հիշողության չորս ափերից ճիշտ տվյալների
ելքային ազդանշաններ ընտրելու համար: Բայց մենք չենք անում, և ահա թե ինչու:
Սովորաբար, TTL-ի հետ համատեղելի ինտեգրալ սխեմաների ելքային ազդանշանները կա՛մ ավելի մեծ են,
քան 2.2 վոլտ (տրամաբանական 1-ի համար), կա՛մ 0.4 վոլտից պակաս (տրամաբանական 0-ի համար): Բայց
ի՞նչ կլինի, եթե փորձեք միացնել ելքերը: Եթե մի ինտեգրալ սխեմա ունի 1 ելք, իսկ մյուսը՝ 0, և այս երկու
ելքերը միացված են, ի՞նչ կստացվի: Դուք իրականում չեք կարող ասել, և դա է պատճառը, որ ինտեգրալային
սխեմաների ելքերը սովորաբար միմյանց միացված չեն:
2102 չիպի տվյալների ելքային ազդանշանը հայտնի է որպես 3-աստիճան կամ եռաստիճան ելք : Բացի
տրամաբանական 0-ից և տրամաբանական 1-ից, այս տվյալների ելքային ազդանշանը կարող է լինել նաև
երրորդ վիճակ: Այս վիճակը, ահա, ընդհանրապես ոչինչ է: Կարծես ոչինչ կապված չէ չիպի պտուտակի հետ։
2102 չիպի տվյալների ելքային ազդանշանը անցնում է այս երրորդ վիճակին, երբ մուտքը 1 է: Սա
նշանակում է, որ մենք կարող ենք միացնել բոլոր չորս բանկերի համապատասխան տվյալների ելքային
ազդանշանները և օգտագործել այդ ութ համակցված ելքերը որպես ավտոբուսի տվյալների մուտքագրման ութ
ազդանշան:
Ես շեշտը դնում եմ եռաստիճան ելքի հայեցակարգի վրա, քանի որ դա էական նշանակություն ունի ավտոբուսի
շահագործման համար: Գրեթե այն ամենը, ինչ միացված է ավտոբուսին, օգտագործում է ավտոբուսի
տվյալների մուտքագրման ազդանշանները: Ցանկացած ժամանակ ավտոբուսին միացված միայն մեկ տախտակ
պետք է որոշի, թե որոնք են տվյալ տվյալների մուտքագրման ազդանշանները: Մնացած տախտակները պետք է
միացված լինեն ավտոբուսին չընտրված եռաստիճան ելքերով:
2102 չիպը հայտնի է որպես ստատիկ պատահական մուտքի հիշողություն կամ SRAM (արտասանվում է ess
ram ), այն տարբերելու դինամիկ պատահական մուտքի հիշողությունից կամ DRAM-ից (արտասանվում է
dee ram ): SRAM-ը սովորաբար պահանջում է 4 տրանզիստոր մեկ բիթ հիշողության համար (ոչ այնքան
տրանզիստորներ, որքան 16-րդ գլխում հիշողության համար օգտագործած ֆլիպ-ֆլոպները ): DRAM-ը,
սակայն, պահանջում է ընդամենը 1 տրանզիստոր մեկ բիթում: DRAM-ի թերությունն այն է, որ այն
պահանջում է ավելի բարդ օժանդակ սխեմաներ:
SRAM չիպը, ինչպիսին 2102-ն է, կպահպանի իր պարունակությունը այնքան ժամանակ, քանի դեռ չիպն
ունի հզորություն: Եթե հոսանքն անջատվում է, չիպը կորցնում է իր պարունակությունը: DRAM-ը նույնպես
նման է այդ առումով, բայց DRAM չիպը նաև պահանջում է, որ հիշողության բովանդակությունը
պարբերաբար հասանելի լինի, նույնիսկ եթե բովանդակությունը կարիք չունի: Սա կոչվում է թարմացման
ցիկլ, և այն պետք է տեղի ունենա վայրկյանում մի քանի հարյուր անգամ: Դա նման է պարբերաբար ինչ-որ
մեկին հրելու, որպեսզի մարդը չքնի:
Չնայած DRAM-ի օգտագործման դժվարություններին, տարիների ընթացքում DRAM չիպերի անընդհատ
աճող հզորությունը DRAM-ը դարձրել է ստանդարտ: 1975 թվականին Intel-ը ներկայացրեց DRAM չիպ,
որը պահում էր 16384 բիթ։ Մուրի օրենքի համաձայն՝ DRAM չիպերի հզորությունը քառապատկվում է
մոտավորապես երեք տարին մեկ: Այսօրվա համակարգիչները սովորաբար ունեն հիշողության վարդակներ
հենց համակարգի տախտակի վրա: Վարդակները վերցնում են փոքր տախտակներ, որոնք կոչվում են մեկ
ներկառուցված հիշողության մոդուլներ (SIMM) կամ երկակի ներկառուցված հիշողության մոդուլներ
(DIMM), որոնք պարունակում են մի քանի DRAM չիպեր: Այսօր դուք կարող եք գնել 128 մեգաբայթ
հիշողություն պարունակող DIMM 300 դոլարից ցածր գնով:
Այժմ, երբ դուք գիտեք, թե ինչպես պատրաստել հիշողության տախտակներ, դուք չեք ցանկանում
հիշողությամբ լցնել ձեր միկրոպրոցեսորի հիշողության ամբողջ տարածքը: Դուք ցանկանում եք որոշակի
հիշողության տարածք թողնել ձեր ելքային սարքի համար:
Կաթոդային ճառագայթների խողովակը (CRT)՝ հեռուստացույցի տեսքով ծանոթ տեսարան տներում վերջին
կես դարում, դարձել է համակարգիչների համար ամենատարածված ելքային սարքը: Համակարգչին կցված
CRT սովորաբար հայտնի է որպես վիդեո էկրան կամ մոնիտոր : Էլեկտրոնային բաղադրիչները, որոնք
ազդանշան են տալիս վիդեո էկրանին, սովորաբար հայտնի են որպես վիդեո ցուցադրման ադապտեր : Հաճախ
վիդեո ցուցադրման ադապտերը համակարգչում զբաղեցնում է իր սեփական տախտակը, որը հայտնի է որպես
վիդեո տախտակ :
Թեև տեսահոլովակի կամ հեռուստացույցի երկչափ պատկերը կարող է բարդ թվալ, պատկերն իրականում
բաղկացած է լույսի մեկ շարունակական ճառագայթից, որը շատ արագ անցնում է էկրանը: Ճառագայթը
սկսվում է վերին ձախ անկյունից և շարժվում է էկրանով դեպի աջ, որից հետո այն հետ է սեղմվում դեպի ձախ՝
երկրորդ տողը սկսելու համար: Յուրաքանչյուր հորիզոնական գիծ հայտնի է որպես սկան գիծ : Այս տողերից
յուրաքանչյուրի սկիզբը վերադարձը հայտնի է որպես հորիզոնական հետագիծ : Երբ ճառագայթն ավարտում է
ներքևի գիծը, այն սեղմվում է էկրանի ստորին աջ անկյունից դեպի վերին ձախ անկյուն (ուղղահայաց
հետագիծ ) և գործընթացը նորից սկսվում է: Ամերիկյան հեռուստատեսային ազդանշանների դեպքում դա
տեղի է ունենում վայրկյանում 60 անգամ, որը հայտնի է որպես դաշտի արագություն : Այն բավականաչափ
արագ է, որպեսզի պատկերը չթուլանա:
միահյուսված էկրանի օգտագործմամբ : Մեկ կադր կազմելու համար պահանջվում է երկու դաշտ , որը
ամբողջական անշարժ վիդեո պատկեր է: Յուրաքանչյուր դաշտ ներառում է ամբողջ կադրի սկանավորման
տողերի կեսը. առաջին դաշտում կան զույգ սկանավորող գծեր, իսկ երկրորդ դաշտում կան կենտ սկանավորող
գծեր: Հորիզոնական սկանավորման արագությունը , որն այն արագությունն է, որով գծվում է յուրաքանչյուր
հորիզոնական սկանավորման գիծը, 15750 Հերց է: Եթե այդ թիվը բաժանեք 60 Հերց-ի, կստանաք 262,5
տող: Սա մեկ դաշտում սկանավորող գծերի թիվն է: Ամբողջ շրջանակը կրկնակի է, կամ 525 սկան գիծ:
Անկախ միահյուսված էկրանների մեխանիկայից, վիդեո պատկերը կազմող լույսի շարունակական ճառագայթը
կառավարվում է մեկ շարունակական ազդանշանով: Թեև հեռուստատեսային ծրագրի աուդիո և վիդեո
բաղադրիչները համակցված են, երբ դրանք հեռարձակվում կամ փոխանցվում են կաբելային
հեռուստատեսության համակարգի միջոցով, դրանք ի վերջո բաժանվում են: Տեսաազդանշանը , որը ես
նկարագրելու եմ այստեղ, նույնական է այն ազդանշանին, որը մուտքագրվում է կամ ելքվում այն
վարդակներից, որոնք պիտակավորված են «Վիդեո» սարքերում, որոնք գտնվել են տեսախցիկների,
տեսախցիկների և որոշ հեռուստացույցների վրա:
Սև և սպիտակ հեռուստատեսության համար այս տեսաազդանշանը բավականին պարզ է և հեշտ ընկալելի:
(Գույնը դառնում է մի փոքր խառնաշփոթ:) Վաթսուն անգամ վայրկյանում ազդանշանը պարունակում է
ուղղահայաց համաժամացման զարկերակ , որը ցույց է տալիս դաշտի սկիզբը: Այս իմպուլսը 0 վոլտ է (հող)
մոտ 400 միկրովայրկյան: Հորիզոնական համաժամացման զարկերակը ցույց է տալիս յուրաքանչյուր
սկանավորման տողի սկիզբը. Տեսահոլովակի ազդանշանը 0 վոլտ է 5 միկրովայրկյանում 15750 անգամ
վայրկյանում: Հորիզոնական համաժամացման իմպուլսների միջև ազդանշանը տատանվում է 0,5 վոլտից սևի
համար մինչև 2 վոլտ սպիտակի համար, 0,5 վոլտից մինչև 2 վոլտ լարման դեպքում՝ մոխրագույնի
երանգները ցույց տալու համար:
Այսպիսով, հեռուստացույցի պատկերը մասամբ թվային է և մասամբ անալոգային: Պատկերը բաժանված է
525 տողերի ուղղահայաց, բայց սկանավորման յուրաքանչյուր գիծ լարման շարունակական փոփոխություն է՝
պատկերի տեսողական ինտենսիվության անալոգը: Բայց լարումը չի կարող անխտիր տարբերվել: Կա վերին
սահման, թե որքան արագ հեռուստացույցը կարող է արձագանքել տարբեր ազդանշաններին: Սա հայտնի է
որպես հեռուստատեսության թողունակություն :
Թողունակությունը չափազանց կարևոր հասկացություն է հաղորդակցության մեջ, և այն վերաբերում է
տեղեկատվության քանակին, որը կարող է փոխանցվել որոշակի հաղորդակցման միջոցի վրա:
Հեռուստատեսության դեպքում թողունակությունը այն արագության սահմանն է, որով տեսաազդանշանը
կարող է փոխվել սևից սպիտակի և նորից սևի: Ամերիկյան հեռարձակվող հեռուստատեսության համար սա
մոտ 4,2 ՄՀց է:
Եթե մենք ցանկանում ենք միացնել վիդեո էկրանը համակարգչին, ապա անհարմար է պատկերացնել էկրանը
որպես հիբրիդային անալոգային և թվային սարք: Ավելի հեշտ է այն վերաբերվել որպես ամբողջովին թվային
սարքի: Համակարգչի տեսանկյունից ամենահարմարն է պատկերացնել, որ վիդեո պատկերը բաժանված է
դիսկրետ կետերի ուղղանկյուն ցանցի, որը հայտնի է որպես պիքսել : (Տարմինը գալիս է նկարի տարր
արտահայտությունից ):
Տեսանյութի թողունակությունը սահմանափակում է պիքսելների քանակը, որոնք կարող են տեղավորվել
հորիզոնական սկանավորման գծում: Ես սահմանեցի թողունակությունը որպես արագություն, որով վիդեո
ազդանշանը կարող է փոխվել սևից սպիտակի և նորից սևի: Հեռուստացույցների համար 4,2 ՄՀց
թողունակությունը թույլ է տալիս երկու պիքսել 4,2 միլիոն անգամ վայրկյանում, կամ՝ 2 x 4,200,000
բաժանելով 15750-533 պիքսել հորիզոնական սկանավորման արագությամբ յուրաքանչյուր հորիզոնական
սկանավորման տողում: Բայց այս պիքսելների մոտ մեկ երրորդը հասանելի չէ, քանի որ դրանք թաքնված են
տեսադաշտից՝ կա՛մ պատկերի ծայրերում, կա՛մ երբ լույսի ճառագայթը գտնվում է հորիզոնական հետագծի
մեջ: Դա հորիզոնականում թողնում է մոտ 320 օգտակար պիքսել:
Նմանապես, մենք ուղղահայաց 525 պիքսել չենք ստանում: Փոխարենը, որոշները կորչում են էկրանի
վերևում և ներքևում և ուղղահայաց հետագծման ժամանակ: Բացի այդ, ամենահարմարն է չհիմնվել
միահյուսման վրա, երբ համակարգիչներն օգտագործում են հեռուստացույցներ: Ուղղահայաց հարթության
մեջ պիքսելների ողջամիտ թիվը 200 է:
Այսպիսով, մենք կարող ենք ասել, որ սովորական հեռուստացույցին կցված պարզունակ վիդեո էկրանի
ադապտերի լուծումը 320 պիքսել է 200 պիքսել ներքև, կամ 320 պիքսել հորիզոնական 200 պիքսել
ուղղահայաց, սովորաբար կոչվում է 320 x 200 կամ 320 x 200 :
Այս ցանցի պիքսելների ընդհանուր թիվը որոշելու համար կարող եք դրանք հաշվել կամ պարզապես 320-ը
բազմապատկել 200-ով՝ ստանալով 64000 պիքսել: Կախված նրանից, թե ինչպես եք կարգավորել ձեր վիդեո
ադապտերը (ինչպես ես շուտով կբացատրեմ), յուրաքանչյուր պիքսել կարող է լինել կամ սև կամ սպիտակ,
կամ յուրաքանչյուր պիքսել կարող է լինել որոշակի գույն:
Ենթադրենք, որ ուզում էինք ցուցադրել որոշ տեքստ այս էկրանին: Որքա՞ն կարող ենք տեղավորել:
Դե, դա ակնհայտորեն կախված է նրանից, թե քանի պիքսել է օգտագործվում յուրաքանչյուր տեքստային նիշի
համար: Ահա մեկ հնարավոր մոտեցում, որն օգտագործում է 8 x 8 ցանց (64 պիքսել) յուրաքանչյուր նիշի
համար.

Սրանք 20h-ից 7Fh ASCII կոդերին համապատասխանող նիշերն են: (Ոչ մի տեսանելի նիշ կապված չէ
ASCII կոդերի հետ 00h-ից մինչև 1Fh):
Յուրաքանչյուր նիշ նույնականացվում է 7-բիթանոց ASCII կոդով, սակայն յուրաքանչյուր նիշ նաև կապված
է 64 բիթերի հետ, որոնք որոշում են կերպարի տեսողական տեսքը: Դուք կարող եք նաև պատկերացնել այս
64 բիթ ինֆորմացիան որպես կոդ:
Օգտագործելով այս կերպարների սահմանումները, դուք կարող եք տեղավորել 25 տող 40 նիշից
յուրաքանչյուրը 320 x 200 չափսի վիդեո էկրանի վրա, ինչը (օրինակ) բավական է Էմի Լոուելի մի ամբողջ
կարճ բանաստեղծության համար.
Տեսանյութի ցուցադրման ադապտերը պետք է պարունակի որոշակի RAM էկրանի բովանդակությունը
պահելու համար, և միկրոպրոցեսորը պետք է կարողանա տվյալներ գրել այս RAM-ում՝ էկրանի տեսքը
փոխելու համար: Առավել հարմար է, որ այս RAM-ը միկրոպրոցեսորի սովորական հիշողության տարածքի մի
մասն է: Որքա՞ն RAM է պահանջվում իմ նկարագրածի նման էկրանի ադապտերի համար:
Սա պարզ հարց չէ: Հնարավոր պատասխանները կարող են տատանվել 1 կիլոբայթից մինչև 192 կիլոբայթ:
Սկսենք ցածր գնահատականից։ Տեսանյութի ցուցադրման ադապտերի հիշողության պահանջները
նվազեցնելու եղանակներից մեկը ադապտորը միայն տեքստով սահմանափակելն է: Մենք արդեն հաստատել
ենք, որ կարող ենք ցուցադրել 25 տող՝ յուրաքանչյուրը 40 նիշ կամ ընդհանուր՝ 1000 նիշ: Վիդեո
տախտակի վրա գտնվող RAM-ը պետք է պահի միայն այդ 1000 նիշերի 7-բիթանոց ASCII կոդերը: Դա
1000 7-բիթանոց արժեք է, որը մոտավորապես 1024 բայթ է կամ 1 կիլոբայթ:
Նման վիդեո ադապտերների տախտակը պետք է ներառի նաև նիշերի գեներատոր , որը պարունակում է բոլոր
ASCII նիշերի պիքսելային նախշերը, ինչպիսին ես ավելի վաղ նկարագրեցի: Այս նիշերի գեներատորը
հիմնականում միայն կարդալու հիշողություն է կամ ROM (արտասանվում է rahm ): ROM-ը ինտեգրալային
միացում է, որն արտադրվում է այնպես, որ որոշակի հասցեն միշտ հանգեցնում է որոշակի տվյալների ելքի: Ի
տարբերություն RAM-ի, ROM-ը չունի տվյալների մուտքագրման ազդանշաններ:
Դուք կարող եք պատկերացնել ROM-ը որպես մի կոդ, որը փոխակերպում է մեկ կոդը մյուսին: ROM-ը, որը
պահում է 128 ASCII նիշերի 8 x 8 պիքսելային նախշեր, կարող է ունենալ 7 հասցեի ազդանշան (ASCII
կոդերի համար) և 64 տվյալների ելքային ազդանշան: Այսպիսով, ROM-ը փոխակերպում է 7-բիթանոց
ASCII կոդը 64-բիթանոց կոդի, որը սահմանում է կերպարի տեսքը: Բայց 64 տվյալների ելքային
ազդանշանները չիպը բավականին մեծ կդարձնեն: Ավելի հարմար է ունենալ 10 հասցեային ազդանշան և 8
ելքային ազդանշան: Հասցեի ազդանշաններից յոթը նշում է որոշակի ASCII նիշը: (Այս 7 հասցեի բիթերը
գալիս են տեսատախտակի RAM-ի տվյալների ելքից:) Մյուս 3 հասցեի ազդանշանները ցույց են տալիս
տողը: Օրինակ՝ 000 հասցեի բիթերը ցույց են տալիս վերին տողը, իսկ 111-ը՝ ներքևի տողը: 8 ելքային
բիթերը յուրաքանչյուր տողի ութ պիքսելն են:
Օրինակ, ենթադրենք ASCII կոդը 41h է: Սա մեծատառ Ա է: Կան ութ տող 8 բիթից յուրաքանչյուրը: Այս
աղյուսակը ցույց է տալիս 10-բիթանոց հասցեն (մի տարածություն բաժանում է ASCII կոդը տողի կոդից) և
տվյալների ելքային ազդանշանները մեծատառ A-ի համար.

Տվյ
ալնե
Հաս
րի
ցե
ելք
100
001
000
100
1
00
000
100
011
000
110
1
00
001
100
110
000
011
1
00
010
100
110
000
011
1
00
011
100
111
000
111
1
00
100
100
110
000
011
1
00
101
100
110
000
011
1
00
110
100
000
000
000
1
00
111

Տեսնու՞մ եք A-ն գծված 1-ներով 0-ների ֆոնի վրա:


Տեսանյութի ցուցադրման ադապտերը, որը ցուցադրում է միայն տեքստը, պետք է ունենա նաև կուրսորի
տրամաբանություն : Կուրսորը փոքրիկ ընդգծված է, որը ցույց է տալիս, թե որտեղ կհայտնվի ստեղնաշարի
վրա մուտքագրած հաջորդ նիշը էկրանին: Կուրսորի նիշերի տողի և սյունակի դիրքը սովորաբար պահվում է
երկու 8-բիթանոց գրանցամատյաններում տեսատախտակի վրա, որոնց մեջ միկրոպրոցեսորը կարող է
արժեքներ գրել:
Եթե վիդեո ադապտերների տախտակը սահմանափակված չէ միայն տեքստով, այն կոչվում է գրաֆիկական
տախտակ: Գրաֆիկական վիդեո տախտակի վրա RAM-ում գրելով՝ միկրոպրոցեսորը կարող է նկարներ
նկարել, ներառյալ տեքստը բազմաթիվ չափերի և ոճերի: Գրաֆիկական վիդեո տախտակները պահանջում են
ավելի շատ հիշողություն, քան միայն տեքստային տախտակները: Գրաֆիկական վիդեո տախտակը, որը
ցուցադրում է 320 պիքսել 200 պիքսել ներքև, ունի 64000 պիքսել: Եթե յուրաքանչյուր պիքսել
համապատասխանում է RAM-ի մեկ բիթին, ապա նման տախտակի համար պահանջվում է 64000 բիթ RAM
կամ 8000 բայթ: Սա, սակայն, ամենաքիչ նվազագույնն է: 1 բիթից 1 պիքսելին համապատասխանությունը
թույլ է տալիս օգտագործել միայն երկու գույներ, օրինակ՝ սև և սպիտակ: 0 բիթը կարող է
համապատասխանել սև պիքսելին, իսկ 1 բիթը՝ սպիտակ պիքսելին:
Սև-սպիտակ հեռուստացույցները, իհարկե, ցուցադրում են ավելին, քան պարզապես սև ու սպիտակը: Նրանք
կարող են նաև ցուցադրել մոխրագույնի շատ երանգներ: Գրաֆիկական տախտակից մոխրագույնի երանգները
ցուցադրելու համար սովորական է, որ յուրաքանչյուր պիքսել համապատասխանում է RAM-ի մի ամբողջ
բայթին , որտեղ 00h-ը սև է, իսկ FFh-ը՝ սպիտակ, իսկ միջև եղած բոլոր արժեքները համապատասխանում են
մոխրագույնի երանգներին: 256 մոխրագույն երանգ ցուցադրող 320 x 200 չափերով վիդեո տախտակը
պահանջում է 64000 բայթ RAM: Դա 8-բիթանոց միկրոպրոցեսորներից մեկի հասցեների գրեթե ամբողջ
տարածքն է, որի մասին ես խոսում էի:
Լրիվ շքեղ գույնի անցնելու համար պահանջվում է 3 բայթ մեկ պիքսել: Եթե դուք օգտագործում եք
խոշորացույց՝ գունավոր հեռուստացույցի կամ համակարգչային տեսահոլովակի ցուցադրման համար, ապա
կբացահայտեք, որ յուրաքանչյուր գույն ներկայացված է հիմնական գույների՝ կարմիր, կանաչ և կապույտ
տարբեր համակցություններով: Գույնի ամբողջ տիրույթը ստանալու համար պահանջվում է բայտ՝ երեք
հիմնական խաղերից յուրաքանչյուրի ինտենսիվությունը ցույց տալու համար: Դա նշանակում է 192,000
բայթ RAM: (Գունավոր գրաֆիկայի մասին ավելին կասեմ այս գրքի վերջին գլխում):
Տեսանյութերի ադապտերների տարբեր գույների քանակը կապված է յուրաքանչյուր պիքսելի համար
օգտագործվող բիթերի քանակի հետ: Հարաբերությունները կարող են ծանոթ թվալ, քանի որ ինչպես այս գրքի
շատ կոդեր, այն ևս մեկ անգամ ներառում է 2-ի հզորություն.

Գույ
ների
քան
ակը
=2
բիթե
րի
քան
ակը
մեկ
պիքս
ելու
մ

320 x 200 լուծաչափը գրեթե լավագույնն է, որը կարող եք անել ստանդարտ հեռուստացույցի վրա: Ահա թե
ինչու հատուկ համակարգիչների համար պատրաստված մոնիտորներն ունեն շատ ավելի մեծ
թողունակություն, քան հեռուստացույցները: 1981 թվականին IBM Personal Computer-ով վաճառված
առաջին մոնիտորները կարող էին ցուցադրել 80 նիշից 25 տող: Սա այն նիշերի քանակն է, որոնք
հայտնաբերվել են CRT էկրանների վրա, որոնք օգտագործվում են IBM-ի մեծ և թանկարժեք հիմնական
համակարգիչների հետ: IBM-ի համար 80 նիշը շատ հատուկ թիվ է: Իսկ ինչո՞ւ։ Քանի որ դա IBM-ի դակիչ
քարտի նիշերի թիվն է : Իրոք, վաղ օրերին հիմնական սարքերին կցված CRT էկրանները հաճախ
օգտագործվում էին դակիչ քարտերի բովանդակությունը դիտելու համար: Երբեմն, դուք կլսեք, որ հին
ժամանակաչափը վերաբերում է միայն տեքստային վիդեո ցուցադրման տողերին որպես քարտեր :
Տարիների ընթացքում վիդեո ցուցադրման ադապտերները բնութագրվում էին լուծաչափի և գունային
ունակության բարձրացմամբ: Կարևոր հանգրվանը ձեռք բերվեց 1987 թվականին, երբ IBM-ի Personal
System/2 շարքի անհատական համակարգիչները և Apple-ի Macintosh II-ը երկուսն էլ ներկայացրեցին
վիդեո ադապտերներ, որոնք կատարում էին 640 պիքսել հորիզոնական և 480 պիքսել ուղղահայաց: Այդ
ժամանակվանից ի վեր սա մնում է տեսագրման նվազագույն ստանդարտ լուծումը:
640-ի 480 բանաձեւը նշանակալի իրադարձություն էր, բայց դուք չեք կարող հավատալ, որ դրա
կարևորության պատճառը Թոմաս Էդիսոնն է: Մոտավորապես 1889թ.-ին, երբ Էդիսոնը և նրա ինժեներ
Ուիլյամ Քենեդի Լաուրի Դիքսոնը աշխատում էին «Kinetograph» շարժական ֆոտոխցիկի և
«Kinetoscope» պրոյեկտորի վրա, նրանք որոշեցին շարժման պատկերը դարձնել մեկ երրորդով ավելի լայն,
քան բարձր էր: Պատկերի լայնության և բարձրության հարաբերակցությունը կոչվում է կողմի
հարաբերակցություն : Հարաբերակցությունը, որը հաստատել են Էդիսոնը և Դիքսոնը, սովորաբար
արտահայտվում է որպես 1,33 դեպի 1, կամ 1,33:1, կամ, կոտորակներից խուսափելու համար, 4:3: Այս
հարաբերակցությունը օգտագործվել է ֆիլմերի մեծ մասի համար ավելի քան 60 տարի, ինչպես նաև
օգտագործվել է հեռուստատեսության համար: Միայն 1950-ականների սկզբին հոլիվուդյան ստուդիաները
ներկայացրեցին լայնէկրանային որոշ տեխնիկա, որոնք մրցակցում էին հեռուստատեսության դեմ՝ դուրս
գալով 4:3 հարաբերակցությունից:
Համակարգչային մոնիտորների մեծ մասի հարաբերակցությունը (ինչպես հեռուստացույցը) նույնպես 4:3 է,
որը դուք հեշտությամբ կարող եք ինքներդ ձեզ ապացուցել՝ օգտագործելով քանոն: 4:3 հարաբերակցությամբ
է նաեւ 640 480 բանաձեւը։ Սա նշանակում է, որ (օրինակ) 100 պիքսելանոց հորիզոնական գիծը նույն
ֆիզիկական երկարությունն է, ինչ 100 պիքսելանոց ուղղահայաց գիծը։ Սա համարվում է ցանկալի
հատկանիշ համակարգչային գրաֆիկայի համար և հայտնի է որպես քառակուսի պիքսել :
Այսօրվա վիդեո ադապտերները և մոնիտորները գրեթե միշտ կատարում են 640 x 480, բայց կարող են նաև
տարբեր լրացուցիչ տեսա ռեժիմներ , որոնք հաճախ ներառում են 800 x 600, 1024 x 768, 1280 x 960 և
1600 x 1200 լուծումներ:
Թեև մենք սովորաբար կարծում ենք, որ համակարգչի էկրանը և ստեղնաշարը ինչ-որ կերպ կապված են. այն,
ինչ դուք մուտքագրում եք ստեղնաշարի վրա, ցուցադրվում է էկրանին, դրանք սովորաբար ֆիզիկապես
տարբեր են:
Ստեղնաշարի յուրաքանչյուր ստեղն պարզ անջատիչ է: Բանալին սեղմելիս անջատիչը փակ է: Ստեղնաշարը,
որը գրամեքենա է հիշեցնում, կարող է ունենալ 48 ստեղնաշար; Այսօրվա անհատական համակարգիչների
ստեղնաշարերը հաճախ ունեն ավելի քան 100 ստեղնաշար:
Համակարգչին կցված ստեղնաշարը պետք է ներառի որոշակի սարքավորում, որը յուրաքանչյուր սեղմված
ստեղնի համար տրամադրում է եզակի կոդը: Գայթակղիչ է ենթադրել, որ այս կոդը բանալու ASCII կոդը է:
Բայց ոչ գործնական է, ոչ էլ ցանկալի է նախագծել սարքավորում, որը կբացահայտի ASCII կոդը: Օրինակ՝
ստեղնաշարի A ստեղնը կարող է համապատասխանել ASCII կոդի 41h կամ 61h՝ կախված նրանից, թե
արդյոք օգտագործողը սեղմել է նաև Shift ստեղնը: Բացի այդ, այսօրվա համակարգչային ստեղնաշարերն
ունեն բազմաթիվ ստեղներ, որոնք չեն համապատասխանում ASCII նիշերին: Ստեղնաշարի սարքաշարի
կողմից տրամադրված կոդը փոխարենը կոչվում է սկանավորման կոդ : Համակարգչային կարճ ծրագիրը կարող
է պարզել, թե ինչ ASCII կոդը (եթե այդպիսիք կա) համապատասխանում է ստեղնաշարի վրա սեղմված
որոշակի ստեղնին:
Որպեսզի ստեղնաշարի սարքավորման իմ դիագրամը չդառնա անգործունակ, ես պատրաստվում եմ ենթադրել,
որ մեր ստեղնաշարն ունի ընդամենը 16 ստեղնաշար: Ամեն անգամ, երբ ստեղնը սեղմվում է, ստեղնաշարի
սարքաշարը պետք է ստեղծի 4-բիթանոց կոդ՝ 0000-ից մինչև 1111 երկուական արժեքներով:
Ստեղնաշարի ապարատը պարունակում է բաղադրիչներ, որոնք մենք նախկինում տեսել ենք.

Ստեղնաշարի 16 ստեղները ցուցադրվում են որպես պարզ անջատիչներ այս դիագրամի ստորին ձախ
հատվածում: 4-բիթանոց հաշվիչը կրկնվող և շատ արագ անցնում է ստեղներին համապատասխանող 16
կոդերի միջով: Այն պետք է բավականաչափ արագ լինի բոլոր կոդերի միջով անցնելու համար ավելի արագ,
քան մարդը կարող է սեղմել և բաց թողնել բանալին:
4-բիթանոց հաշվիչի ելքերը ընտրված մուտքերն են ինչպես 2-ից 4-տող ապակոդավորիչի, այնպես էլ
4-տողից 1 տող տվյալների ընտրիչի: Եթե ոչ մի ստեղն սեղմված չէ, ապա ընտրիչի մուտքերից ոչ մեկը չի
կարող լինել 1: Հետևաբար, ընտրիչի ելքը 1 չէ: Բայց եթե որոշակի ստեղն է սեղմված, որոշակի 4-բիթանոց
հաշվիչից դուրս կգա ընտրիչի ելքը: լինի 1. Օրինակ, եթե վերևից և աջից երկրորդ անջատիչը սեղմված է, և
եթե հաշվիչի ելքը 0110 է, ապա ընտրիչից ելքը դառնում է 1:

Դա այդ բանալիին համապատասխան ծածկագիրն է։ Երբ այդ ստեղնը սեղմված է, ոչ մի այլ հաշվիչ ելք չի
հանգեցնի, որ ընտրիչի արդյունքը կլինի 1: Յուրաքանչյուր ստեղն ունի իր սեփական կոդը:
Եթե ձեր ստեղնաշարն ունի 64 կոճակ, ապա ձեզ հարկավոր է 6-բիթանոց սկանավորման կոդ: Դա կներառի
6-բիթանոց հաշվիչ: Դուք կարող եք դասավորել ստեղները 8x8 զանգվածով, օգտագործելով 3-ից 8
ապակոդավորիչ և 1-ը-8 ընտրիչ: Եթե ձեր ստեղնաշարն ունի 65-ից 128 ստեղներ, ապա ձեզ հարկավոր է
7-բիթանոց կոդ: Դուք կարող եք դասավորել ստեղները 8x16 զանգվածով և օգտագործել 4-ից 16
ապակոդավորիչ և 8-ից 1 ընտրիչ (կամ 3-ից 8 ապակոդավորիչ և 16-ից 1 ընտրիչ):
Այն, ինչ տեղի կունենա այս միացումում, կախված է ստեղնաշարի ինտերֆեյսի բարդությունից: Ստեղնաշարի
սարքավորումը կարող է ներառել 1 բիթ RAM յուրաքանչյուր ստեղնի համար: RAM-ը կհասցեագրվի
հաշվիչի միջոցով, և RAM-ի պարունակությունը կարող է լինել 0, եթե բանալին վերև է, և 1, եթե ստեղնը
ցած է: Այս RAM-ը կարող է նաև կարդալ միկրոպրոցեսորը՝ յուրաքանչյուր բանալու կարգավիճակը որոշելու
համար:
Ստեղնաշարի ինտերֆեյսի օգտակար մասը ընդհատման ազդանշանն է: Ինչպես հիշում եք, 8080
միկրոպրոցեսորն ունի մուտքային ազդանշան, որը թույլ է տալիս արտաքին սարքին ընդհատել այն, ինչ անում
է միկրոպրոցեսորը: Միկրոպրոցեսորն արձագանքում է՝ կարդալով հրահանգը հիշողությունից: Սա
սովորաբար RST հրահանգ է և հանգեցնում է նրան, որ միկրոպրոցեսորը ճյուղավորվի դեպի հիշողության
որոշակի տարածք, որտեղ տեղակայված է ընդհատումը կարգավորող ծրագիր:
Վերջնական ծայրամասային սարքը, որը ես նկարագրելու եմ այս գլխում, երկարաժամկետ պահեստավորման
սարքն է: Ինչպես հիշում եք, պատահական մուտքի հիշողությունը, լինի դա կառուցված ռելեներից,
խողովակներից կամ տրանզիստորներից, կորցնում է իր պարունակությունը, երբ էլեկտրական հոսանքն
անջատվում է: Այդ իսկ պատճառով ամբողջական համակարգչին նույնպես պետք է ինչ-որ բան
երկարաժամկետ պահեստավորման համար: Ժամանակին հարգված մոտեցումը ներառում է թղթի կամ
ստվարաթղթի վրա անցքեր բացելը, օրինակ՝ IBM դակիչ քարտերը: Փոքր համակարգիչների սկզբնական
շրջանում թղթե ժապավենի գլանափաթեթները անցքեր էին անցկացնում՝ ծրագրերն ու տվյալները
պահպանելու և հետագայում դրանք հիշողության մեջ վերբեռնելու համար:
Դակիչ քարտերի և թղթե ժապավենի հետ կապված խնդիրներից մեկն այն է, որ կրիչը կրկին օգտագործելի չէ:
Երբ փոսը բացվում է, այն հեշտությամբ չի կարող բացվել: Մեկ այլ խնդիր այն է, որ այն առանձնապես
արդյունավետ չէ: Այս օրերին, եթե դուք իրականում կարող եք տեսնել մի քիչ, հավանաբար կարելի է
վստահորեն ասել, որ բիթը չափազանց շատ տեղ է զբաղեցնում:
Այս պատճառներով, երկարաժամկետ պահեստավորման տեսակը, որը շատ ավելի տարածված է դարձել,
մագնիսական պահեստավորումն է : Մագնիսական պահեստավորման ակունքները սկսվում են 1878
թվականից, երբ սկզբունքները նկարագրվեցին ամերիկացի ինժեներ Օբերլին Սմիթի (1840–1926) կողմից։
Առաջին աշխատող սարքը, սակայն, հայտնվեց 20 տարի անց՝ 1898 թվականին և կառուցվեց դանիացի
գյուտարար Վալդեմար Պոուլսենի (1869–1942) կողմից։ Պոուլսենի հեռագրական հեռախոսը ի սկզբանե
նախատեսված էր որպես հեռախոսային հաղորդագրություններ ձայնագրելու սարք, երբ զանգ ստացողը տանը
չէր: Նա օգտագործեց էլեկտրամագնիս՝ այն ամենուր տարածված սարքը, որը մենք արդեն հանդիպել ենք
հեռագրում, ձայնագրելու համար պողպատե մետաղալարի շարժվող երկարությամբ: Էլեկտրամագնիսը
մագնիսացնում է մետաղալարը ձայնի ալիքի ձևի վերելքներին և վայրէջքներին համաչափ: Մագնիսացված
մետաղալարն այնուհետև կարող է հոսանք առաջացնել նույն աստիճանի, որքան այն շարժվում է
էլեկտրամագնիսում գտնվող մետաղալարերի երկայնքով: Պահպանման և ընթերցման համար օգտագործվող
էլեկտրամագնիսը հայտնի է որպես գլխիկ , անկախ այն բանից, թե ինչ մագնիսական միջավայր է այն
օգտագործվում:
1928 թվականին ավստրիացի գյուտարար Ֆրից Պֆլյումերը արտոնագրեց մագնիսական ձայնագրող սարք,
որը հիմնված էր երկար երկարությամբ թղթի ժապավենի վրա, որը պատված էր երկաթի մասնիկներով՝
օգտագործելով տեխնոլոգիա, որն ի սկզբանե նախատեսված էր ծխախոտի վրա մետաղական ժապավեններ
ստեղծելու համար: Շուտով թուղթը փոխարինվեց ավելի ամուր ցելյուլոզային ացետատային հիմքով, և ծնվեց
ձայնագրման բոլոր միջոցներից ամենակոկուն և հայտնիներից մեկը: Մագնիսական ժապավենի
ժապավենները, որոնք այժմ հարմար փաթեթավորված են պլաստիկ ձայներիզների մեջ, դեռևս չափազանց
տարածված միջոց են երաժշտություն և տեսանյութեր ձայնագրելու և նվագարկելու համար:
Թվային համակարգչային տվյալների ձայնագրման առաջին կոմերցիոն ժապավենային համակարգը
ներկայացվել է Ռեմինգթոն Ռենդի կողմից 1950 թվականին: Այն ժամանակ կես դյույմանոց ժապավենը
կարող էր պահել մի քանի մեգաբայթ տվյալներ: Տնային համակարգիչների ստեղծման սկզբնական շրջանում
մարդիկ ադապտացնում էին սովորական ձայներիզների ձայնագրիչները՝ տեղեկատվության պահպանման
համար: Փոքր ծրագրերը պահում էին հիշողության բլոկի բովանդակությունը ժապավենի վրա և հետագայում
այն նորից կարդում ժապավենից հիշողություն: IBM-ի առաջին համակարգիչները ունեին միակցիչ
ձայներիզների պահպանման համար: Ժապավենն այսօր մնում է հանրաճանաչ միջոց, հատկապես
երկարաժամկետ արխիվացման համար: Ժապավենը, այնուամենայնիվ, իդեալական միջոց չէ, քանի որ
ժապավենի վրա կամայական տեղ արագ տեղափոխելը հնարավոր չէ: Սովորաբար անհրաժեշտ է արագ առաջ
կամ ետ շրջել, և դա ժամանակ է պահանջում:
Արագ մուտքի համար երկրաչափորեն ավելի նպաստավոր միջավայրը սկավառակն է: Սկավառակն ինքնին
պտտվում է իր կենտրոնի շուրջ, մինչդեռ մեկ կամ մի քանի գլուխներ, որոնք ամրացված են ձեռքերին, կարող
են սկավառակի դրսից ներս տեղափոխվել: Սկավառակի ցանկացած տարածք կարող է շատ արագ մուտք
գործել:
Ձայնի ձայնագրման համար մագնիսական սկավառակը իրականում նախորդում է մագնիսական ժապավենին:
Համակարգչային տվյալների պահպանման համար, սակայն, առաջին սկավառակակիրը հայտնագործվեց
IBM-ում 1956 թվականին: Հաշվապահական հաշվառման և վերահսկման պատահական մուտքի մեթոդը
(RAMAC) պարունակում էր 50 մետաղական սկավառակ 2 ֆուտ տրամագծով և կարող էր պահել 5
մեգաբայթ տվյալներ:
Այդ ժամանակից ի վեր սկավառակները դարձել են շատ ավելի փոքր և ավելի մեծ հզորությամբ:
Սկավառակները սովորաբար դասակարգվում են որպես անգործունյա սկավառակներ (նաև կոչվում են
սկավառակներ ) կամ կոշտ սկավառակներ (նաև կոչվում են ֆիքսված սկավառակներ ): Անգործունյա
սկավառակները պատված պլաստիկի մեկ թիթեղներ են ստվարաթղթից կամ (ավելի վերջերս) պլաստիկից
պատրաստված պաշտպանիչ պատյանում: (Պլաստիկ պատյանը խանգարում է սկավառակի ճկմանը, ուստի
սկավառակն այլևս նույնքան անգործունյա չէ, որքան հինները, բայց այն դեռևս կոչվում է ճկուն սկավառակ )
: որը համակարգչին կցված բաղադրիչն է, որը գրում և կարդում է ճկուն սկավառակի վրա: Վաղ
սկավառակների տրամագիծը 8 դյույմ էր: Առաջին IBM PC-ն օգտագործեց 5 ¼ դյույմանոց անգործունյա
սկավառակներ; այսօր ամենատարածված ձևաչափը 3,5 դյույմ տրամագծով է: Այն, որ անգործունյա
սկավառակները կարող են հեռացվել սկավառակի սկավառակից, թույլ է տալիս դրանք օգտագործել
տվյալների մի համակարգչից մյուսը փոխանցելու համար: Դիսկետները նույնպես դեռևս առևտրային
ծրագրերի բաշխման կարևոր միջոց են:
Կոշտ սկավառակը սովորաբար պարունակում է բազմաթիվ մետաղական սկավառակներ, որոնք մշտապես
ներկառուցված են սկավառակի մեջ: Կոշտ սկավառակները սովորաբար ավելի արագ են, քան ճկուն
սկավառակները և կարող են ավելի շատ տվյալներ պահել: Բայց սկավառակներն իրենք չեն կարող հեռացվել:
Սկավառակի մակերեսը բաժանված է համակենտրոն օղակների, որոնք կոչվում են հետքեր : Յուրաքանչյուր
հետք կարկանդակի կտորների պես բաժանված է հատվածների : Յուրաքանչյուր հատված պահում է որոշակի
քանակությամբ բայթ, սովորաբար 512 բայթ: Առաջին IBM ԱՀ-ի անգործունյա սկավառակի սկավառակը
օգտագործում էր 5 ¼ դյույմանոց սկավառակի միայն մի կողմը և այն բաժանում էր 40 ուղու՝ 8
սեկտորներով յուրաքանչյուր ուղու վրա և 512 բայթ յուրաքանչյուր հատվածում: Այսպիսով, յուրաքանչյուր
անգործունյա սկավառակ պահում էր 163,840 բայթ կամ 160 կիլոբայթ: 3,5 դյույմանոց անգործունյա
սկավառակները, որոնք այսօր օգտագործվում են ԱՀ-ի համատեղելի սարքերում, ունեն երկու կողմ,
յուրաքանչյուր կողմում 80 հետքեր, 18 սեկտորներ յուրաքանչյուր հատվածում և 512 բայթ մեկ հատվածում՝
ընդհանուր 1,474,560 բայթ կամ 1440 կիլոբայթ:
IBM-ի կողմից 1983 թվականին Personal Computer-XT-ի համար ներկայացված առաջին կոշտ
սկավառակը պահում էր տասը մեգաբայթ: Այսօր՝ 1999 թվականին, 20 գիգաբայթանոց կոշտ սկավառակ (դա
20 միլիարդ բայթ պահեստ է) կարելի է գնել 400 դոլարից ցածր:
Ճկուն սկավառակը կամ կոշտ սկավառակը սովորաբար գալիս է իր սեփական էլեկտրական ինտերֆեյսով և
նաև պահանջում է լրացուցիչ միջերես դրա և միկրոպրոցեսորի միջև: Կոշտ սկավառակների համար հայտնի
են մի քանի ստանդարտ ինտերֆեյսներ, այդ թվում՝ SCSI (Փոքր համակարգչային համակարգի միջերես,
արտահայտված scuzzy ), ESDI (ընդլայնված փոքր սարքի միջերես, արտասանված ez dee ) և IDE
(Integrated Device Electronics): Այս բոլոր ինտերֆեյսները օգտագործում են ուղղակի հիշողության
հասանելիությունը (DMA)՝ ավտոբուսը տիրանալու և տվյալներ փոխանցելու անմիջապես պատահական
մուտքի հիշողության և սկավառակի միջև՝ շրջանցելով միկրոպրոցեսորը: Այս փոխանցումները կատարվում
են սկավառակի հատվածի չափի ավելացումներով, որը սովորաբար կազմում է 512 բայթ:
Տնային համակարգիչների շատ նորեկներ չափազանց շատ տեխնիկական խոսակցություններ են լսում սրա և
գիգաբայթերի մասին, և նրանք շփոթվում են կիսահաղորդչային պատահական մուտքի հիշողության և
սկավառակի պահպանման միջև եղած տարբերության հարցում: Վերջին տարիներին մի տեսակ կանոն է ի
հայտ եկել, որը կօգնի մեղմել տերմինաբանության հետ կապված որոշակի շփոթությունը: Կանոնն այն է, որ
հիշողություն բառը պետք է օգտագործվի միայն կիսահաղորդչային պատահական մուտքի հիշողության
համար, մինչդեռ պահեստ բառը պետք է օգտագործվի մնացած ամեն ինչի համար՝ սովորաբար անգործունյա
սկավառակներ, կոշտ սկավառակներ և ժապավեն: Ես փորձել եմ հետևել այդ կանոնին (թեև մենք հանդիպել
ենք միկրոպրոցեսորային մեքենա-կոդերի հրահանգներին, որը կոչվում է Պահպանել բայթերը RAM-ում):
Հիշողության և պահեստավորման միջև առավել ակնհայտ տարբերությունն այն է, որ հիշողությունը
անկայուն է. այն կորցնում է իր պարունակությունը, երբ հոսանքն անջատվում է: Պահպանումը անկայուն է.
տվյալները մնում են ճկուն սկավառակի կամ կոշտ սկավառակի վրա, մինչև այն միտումնավոր ջնջվի կամ
գրվի: Այնուամենայնիվ, կա ևս մեկ էական տարբերություն, որը դուք կարող եք գնահատել միայն
հասկանալով, թե ինչ է անում միկրոպրոցեսորը: Երբ միկրոպրոցեսորը թողարկում է հասցեի ազդանշան, այն
միշտ հասցեագրում է հիշողությունը, ոչ թե պահեստը:
Սկավառակի պահեստից ինչ-որ բան հիշողության մեջ, որպեսզի միկրոպրոցեսորը հասանելի լինի դրան,
պահանջում է լրացուցիչ քայլեր : Այն պահանջում է, որ միկրոպրոցեսորը գործարկի կարճ ծրագիր, որը
մուտք է գործում սկավառակի կրիչ, որպեսզի սկավառակի սկավառակը տվյալներ փոխանցի սկավառակից
հիշողություն:
Հիշողության և պահպանման միջև տարբերությունը կարելի է հասկանալ նաև ընդհանուր անալոգիայի մեջ.
հիշողությունը նման է ձեր գրասեղանի վերևին: Այն ամենը, ինչ կա ձեր գրասեղանի վրա, կարող եք
ուղղակիորեն աշխատել: Պահպանումը նման է ֆայլերի պահարանի: Եթե Ձեզ անհրաժեշտ է ինչ-որ բան
օգտագործել ֆայլերի պահարանից, դուք պետք է վեր կենաք, քայլեք դեպի ֆայլերի պահարան, հանեք ձեզ
անհրաժեշտ ֆայլը և այն հետ բերեք ձեր գրասեղանի մոտ: Եթե ձեր գրասեղանը չափազանց մարդաշատ է
դառնում, դուք պետք է ձեր գրասեղանից ինչ-որ բան տեղափոխեք ֆայլերի պահարան:
ֆայլեր կոչվող սուբյեկտներում : Ֆայլերի պահպանումն ու դրանց առբերումը չափազանց կարևոր
ծրագրային ապահովման մաս է, որը հայտնի է որպես օպերացիոն համակարգ :
Գլուխ 22. Օպերացիոն համակարգը
Մենք վերջապես հավաքել ենք, գոնե մեր երևակայության մեջ, այն, ինչ թվում է ամբողջական համակարգիչ:
Այս համակարգիչն ունի միկրոպրոցեսոր, պատահական մուտքի որոշ հիշողություն, ստեղնաշար, վիդեո էկրան
և սկավառակակիր: Ամբողջ սարքավորումը տեղում է, և մենք ոգևորությամբ նայում ենք
միացման/անջատման անջատիչին, որը կսնուցի այն և կյանքի կկոչի: Հավանաբար այս նախագիծը ձեր
մտքում առաջացրել է Վիկտոր Ֆրանկենշտեյնի աշխատանքը, երբ նա հավաքում էր իր հրեշին, կամ
Ջեպետտոյին, երբ նա կառուցեց փայտե տիկնիկը, որը նա կանվանի Պինոկիո:
Բայց, այնուամենայնիվ, մենք ինչ-որ բան կորցնում ենք, և դա ոչ կայծակի ուժն է, ոչ էլ աստղի վրա
ցանկության մաքրությունը: Շարունակեք. միացրեք այս նոր համակարգիչը և ասեք, թե ինչ եք տեսնում:
Երբ կաթոդային խողովակը տաքանում է, էկրանին ցուցադրվում է կատարյալ ձևավորված, բայց բոլորովին
պատահական ASCII նիշերի զանգված: Սա այն է, ինչ մենք ակնկալում ենք: Կիսահաղորդչային
հիշողությունը կորցնում է իր պարունակությունը, երբ հոսանքն անջատված է, և սկսվում է պատահական և
անկանխատեսելի վիճակում, երբ այն առաջին անգամ հոսանք է ստանում: Նմանապես, ամբողջ RAM-ը, որը
մենք ստեղծել ենք միկրոպրոցեսորի համար, պարունակում է պատահական բայթեր: Միկրոպրոցեսորը սկսում
է կատարել այս պատահական բայթերը, կարծես դրանք մեքենայի կոդ են: Սա ոչ մի վատ բանի չի հանգեցնի,
օրինակ, համակարգիչը չի պայթի, բայց դա նույնպես շատ արդյունավետ չի լինի:
Այն, ինչ մեզ պակասում է այստեղ, ծրագրային ապահովումն է: Երբ միկրոպրոցեսորն առաջին անգամ
միացվում կամ զրոյացվում է, այն սկսում է մեքենայի կոդը գործարկել որոշակի հիշողության հասցեում:
Intel 8080-ի դեպքում այդ հասցեն 0000h է: Պատշաճ ձևավորված համակարգչում այդ հիշողության
հասցեն պետք է պարունակի մեքենայի կոդային հրահանգ (ամենայն հավանականությամբ, շատերից
առաջինը), երբ համակարգիչը միացված է:
Ինչպե՞ս է այդ մեքենայի կոդերի հրահանգը հասնում այնտեղ: Ծրագրային ապահովումը նոր նախագծված
համակարգչի մեջ ներդնելու գործընթացը, հնարավոր է, նախագծի ամենատարբեր կողմերից մեկն է: Դա
անելու եղանակներից մեկը 16-րդ գլխի նման կառավարման վահանակն է, որն օգտագործվում է պատահական
մուտքի հիշողության մեջ բայթերը գրելու և հետագայում դրանք կարդալու համար.

Ի տարբերություն ավելի վաղ կառավարման վահանակի, այս մեկն ունի «Վերականգնել» պիտակով անջատիչ:
Reset անջատիչը միացված է միկրոպրոցեսորի Reset մուտքագրմանը: Քանի դեռ այդ անջատիչը միացված
է, միկրոպրոցեսորը ոչինչ չի անում։ Երբ անջատեք անջատիչը, միկրոպրոցեսորը սկսում է կատարել
մեքենայի կոդը:
Այս կառավարման վահանակն օգտագործելու համար դուք միացնում եք «Վերականգնել» անջատիչը՝
միկրոպրոցեսորը զրոյացնելու և մեքենայի կոդի գործարկումը դադարեցնելու համար: Դուք միացնում եք
Takeover անջատիչը՝ ավտոբուսի հասցեի ազդանշաններն ու տվյալների ազդանշանները վերցնելու համար:
Այս պահին դուք կարող եք օգտագործել A 0 -ից A 15 պիտակավորված անջատիչները 16-բիթանոց
հիշողության հասցե նշելու համար: D 0 -ից D 7 պիտակավորված լամպերը ցույց են տալիս այդ հիշողության
հասցեի 8-բիթանոց բովանդակությունը: Այդ հասցեում նոր բայթ գրելու համար դուք բայթը դնում եք D 0- ից
D 7 անջատիչների վրա և միացնում և նորից անջատում «Write» անջատիչը: Հիշողության մեջ բայթերի
տեղադրումն ավարտելուց հետո անջատեք Takeover անջատիչը և անջատեք «Վերականգնել» անջատիչը, և
միկրոպրոցեսորը կգործարկի ծրագիրը:
Ահա թե ինչպես եք մուտքագրում ձեր առաջին մեքենա-կոդային ծրագրերը համակարգչի մեջ, որը հենց նոր
ստեղծեցիք զրոյից: Որ դա աշխատատար է, անկասկած: Այն, որ երբեմն-երբեմն փոքր սխալներ կգործեք, դա
տրված է։ Այն, որ ձեր մատները բշտիկներ կստանան, և ձեր ուղեղը կվերածվի մշուշի, դա մասնագիտական
վտանգ է:
Բայց այն, ինչ արժե այս ամենը, տեղի է ունենում, երբ սկսում եք օգտագործել տեսանյութի ցուցադրումը ձեր
ծրագրերի արդյունքները ցուցադրելու համար: Միայն տեքստային վիդեո էկրանը, որը մենք կառուցեցինք
վերջին գլխում, ունի 1 կիլոբայթ պատահական մուտքի հիշողություն, որն օգտագործվում է յուրաքանչյուրը
40 նիշից բաղկացած 25 տող ASCII կոդերը պահելու համար: Ծրագիրը գրում է այս հիշողության մեջ
այնպես, ինչպես գրում է համակարգչի ցանկացած այլ հիշողության մեջ:
Բայց ծրագրի ելքը վիդեո էկրանին հասցնելն այնքան էլ պարզ չէ, որքան կարող է թվալ առաջին հերթին: Եթե,
օրինակ, ձեր գրած ծրագիրը կատարում է որոշակի հաշվարկ, որի արդյունքում ստացվում է 4Bh արժեքը, դուք
չեք կարող պարզապես գրել այդ արժեքը վիդեո ցուցադրման հիշողության մեջ: Այն, ինչ դուք կտեսնեք
էկրանին այդ դեպքում, K տառն է, քանի որ դա այն տառն է, որը համապատասխանում է ASCII կոդի 4Bh:
Փոխարենը, դուք պետք է գրեք երկու ASCII նիշ էկրանին. 34h, որը ASCII կոդը 4-ի համար է, և 42h, որը
ASCII կոդը B-ի համար է: 8-բիթանոց արդյունքի յուրաքանչյուր նիշը տասնվեցական թվանշան է, որը պետք
է լինի ցուցադրվում է այդ թվի ASCII կոդով:
Իհարկե, դուք հավանաբար կգրեք փոքրիկ ենթածրագրեր, որոնք կատարում են այս փոխակերպումը: Ահա
8080 անսամբլի լեզվից մեկը, որը փոխակերպում է նիբլը կուտակիչում (ենթադրվում է, որ արժեք է 00h-ից
մինչև 0Fh ներառյալ) իր ASCII համարժեքին.
NibbleToAscii՝ CPI A,0Ah; Ստուգեք, արդյոք դա տառ է կամ թիվ
JC համարը
ADD A,37h; A-ից F-ը փոխարկվել է 41h-ից 46h
RET
համարը՝ ADD A,30h; 0-ից 9-ը փոխարկվել է 30h-ից մինչև 39h
RET

Այս ենթաօրակարգը երկու անգամ կանչում է NibbleToAscii-ին ՝ A կուտակիչի բայթը B և C


գրանցամատյաններում երկու ASCII թվանշանների փոխակերպելու համար:
ByteToAscii. PUSH PSW; Պահպանել կուտակիչ
RRC; Պտտեցնել A աջ 4 անգամ...
RRC
RRC
RRC ; ... բարձր կարգի nibble ստանալու համար
CALL NibbleToAscii ; Փոխարկել ASCII կոդի
MOV B,A; Տեղափոխել արդյունքը գրանցման համար B
POP PSW; Ստացեք բնօրինակ A back
AND A,0Fh; Ստացեք ցածր կարգի nibble
CALL NibbleToAscii; Փոխարկել ASCII կոդի
MOV C,A; Արդյունքը տեղափոխեք C RET գրանցման համար

Այս ենթածրագրերն այժմ թույլ են տալիս տեսահոլովակի էկրանին ցուցադրել բայթ վեցանկյուն: Եթե
ցանկանում եք փոխարկել տասնորդականի, դա մի քիչ ավելի աշխատանք է: Գործընթացն իրականում շատ
նման է այն բանին, թե ինչպես է մարդը տասնորդականը վերածում տասնորդականի` մի քանի բաժանումներով
10-ի վրա:
Հիշեք, որ դուք իրականում չեք մուտքագրում այս անսամբլի լեզվով ծրագրերը հիշողության մեջ: Փոխարենը,
դուք հավանաբար դրանք գրում եք թղթի վրա, այնուհետև դրանք փոխակերպում եք մեքենայի կոդի, որն
այնուհետև մուտքագրում եք հիշողության մեջ: Այս «ձեռքով հավաքումը» մի բան է, որը մենք կշարունակենք
անել մինչև Գլուխ 24 :
Թեև կառավարման վահանակը մեծ քանակությամբ սարքավորում չի պահանջում, այն, ինչ նրան նույնպես
պակասում է, օգտագործման հեշտությունն է: Կառավարման վահանակը պետք է լինի երբևէ ստեղծված
մուտքի և ելքի բացարձակ վատթարագույն ձևը: Անմիջապես ամոթալի է, որ մենք բավականաչափ խելացի
ենք, որպեսզի զրոյից կառուցենք մեր սեփական համակարգիչը, սակայն մենք դեռևս 0-ով և 1-ով թվեր ենք
նշում: Առաջին առաջնահերթությունը պետք է լինի կառավարման վահանակից ազատվելը:
Բանալին, իհարկե, ստեղնաշարն է: Մենք ստեղծել ենք համակարգչի ստեղնաշարն այնպես, որ ամեն անգամ
ստեղնը սեղմելիս միկրոպրոցեսորին ընդհատում է առաջանում: Ընդհատման կարգավորիչի չիպը, որը մենք
օգտագործել ենք մեր համակարգչում, ստիպում է միկրոպրոցեսորին արձագանքել այս ընդհատմանը`
կատարելով RST ( Վերսկսել ) հրահանգը: Ենթադրենք, որ սա RST 1 հրահանգ է։ Այս հրահանգը ստիպում է
միկրոպրոցեսորին պահպանել ընթացիկ ծրագրի հաշվիչը կույտի վրա և անցնել 0008h հասցեին: Այդ
հասցեից սկսած՝ դուք կմուտքագրեք որոշակի կոդ (օգտագործելով կառավարման վահանակը), որը մենք
կանվանենք ստեղնաշարի կառավարիչ :
Որպեսզի այս ամենը ճիշտ աշխատի, ձեզ հարկավոր է որոշակի կոդ, որը կգործարկվի միկրոպրոցեսորը
զրոյացնելիս: Սա կոչվում է սկզբնավորման կոդ: Նախաստորագրման կոդը նախ սահմանում է կույտի ցուցիչը
այնպես, որ կույտը գտնվում է հիշողության վավեր տարածքում: Այնուհետև ծածկագիրը վիդեո ցուցադրման
հիշողության յուրաքանչյուր բայթը սահմանում է տասնվեցական արժեքով 20h, որը ASCII տիեզերական
նիշն է: Այս ընթացակարգը ազատում է էկրանի բոլոր պատահական նիշերից: Նախաստորագրման կոդը
օգտագործում է OUT ( Ելք ) հրահանգը՝ կուրսորի դիրքը սահմանելու համար՝ ընդգծված տեսանյութի
էկրանին, որը ցույց է տալիս, թե որտեղ է մուտքագրվելու ձեր մուտքագրած հաջորդ նիշը, առաջին տողի
առաջին սյունակում: Հաջորդ հրահանգը EI-ն է ՝ ընդհատումները միացնելու համար, որպեսզի
միկրոպրոցեսորը կարողանա արձագանքել ստեղնաշարի ընդհատմանը: Այդ հրահանգին հետևում է HLT ՝
միկրոպրոցեսորը կանգնեցնելու համար:
Եվ վերջ սկզբնավորման կոդի համար: Այսուհետ համակարգիչը հիմնականում լինելու է կանգառի վիճակում՝
HLT հրահանգի կատարման արդյունքում: Միակ իրադարձությունը, որը կարող է համակարգիչը դուրս մղել
դադարեցված վիճակից, վերակայումն է կառավարման վահանակից կամ ընդհատումը ստեղնաշարից:
Ստեղնաշարի մշակիչը շատ ավելի երկար է, քան սկզբնավորման կոդը: Ահա, թե որտեղ են տեղի ունենում
բոլոր իսկապես օգտակար բաները:
Ամեն անգամ, երբ ստեղնաշարի վրա սեղմվում է ստեղնը, ընդհատման ազդանշանը ստիպում է
միկրոպրոցեսորին ցատկել սկզբնավորման կոդի վերջում HLT հայտարարությունից դեպի ստեղնաշարի
մշակիչ: Ստեղնաշարի կառավարիչը օգտագործում է IN ( Input ) հրահանգը՝ սեղմված ստեղնը որոշելու
համար: Այնուհետև ստեղնաշարի մշակիչը ինչ-որ բան է անում՝ հիմնվելով այն բանի վրա, թե որ ստեղն է
սեղմված (այսինքն՝ ստեղնաշարի կառավարիչը մշակում է յուրաքանչյուր ստեղնը) և այնուհետև կատարում
է RET ( Վերադարձի ) հրահանգ՝ վերադառնալու HLT հայտարարությանը և սպասելու ստեղնաշարի մեկ այլ
ընդհատմանը:
Եթե սեղմված ստեղնը տառ կամ թիվ կամ կետադրական նշան է, ստեղնաշարի կառավարիչը օգտագործում է
ստեղնաշարի սկանավորման կոդը՝ հաշվի առնելով Shift ստեղնը վերև կամ վար՝ համապատասխան ASCII
կոդը որոշելու համար: Այնուհետև այն գրում է այս ASCII կոդը վիդեո ցուցադրման հիշողության մեջ՝
կուրսորի դիրքում: Այս պրոցեդուրան կոչվում է էկրանի ստեղնի արձագանք : Այնուհետև կուրսորի դիրքը
մեծացվում է այնպես, որ կուրսորը հայտնվի նոր նիշից հետո բացատում: Այս կերպ ինչ-որ մեկը կարող է
ստեղնաշարի վրա մուտքագրել մի շարք նիշեր, և դրանք կցուցադրվեն էկրանին:
Եթե սեղմված ստեղնը Backspace ստեղնն է (համապատասխանում է ASCII կոդի 08h), ստեղնաշարի
կառավարիչը ջնջում է այն նիշը, որը վերջին անգամ գրվել է վիդեո ցուցադրման հիշողության մեջ: (Նիշը
ջնջելը պարզապես ASCII կոդը 20h-ի միջակայքի նիշը գրելու խնդիր է այդ հիշողության վայրում):
Այնուհետև այն կուրսորը հետ է տեղափոխում մեկ բացատ:
Սովորաբար ստեղնաշարով մուտքագրող անձը տպում է նիշերի մի շարք՝ օգտագործելով Backspace ստեղնը,
երբ անհրաժեշտ է սխալները շտկելու համար, այնուհետև սեղմում է Return ստեղնը, որը հաճախ
պիտակավորված է Enter համակարգչի ստեղնաշարի վրա: Ճիշտ այնպես, ինչպես էլեկտրական գրամեքենայի
վրա «Վերադարձ» ստեղնը սեղմելը ցույց է տալիս, որ մեքենագրողը պատրաստ է անցնել հաջորդ տողի
սկիզբը, «Enter» ստեղնը սեղմելը ցույց է տալիս, որ մեքենագրողը ավարտել է տեքստի տող մուտքագրումը:
Երբ ստեղնաշարի կառավարիչը մշակում է Return կամ Enter ստեղնը (համապատասխանում է ASCII
կոդին 0Dh), վիդեո ցուցադրման հիշողության մեջ տեքստի տողը մեկնաբանվում է որպես հրահանգ
համակարգչին , այսինքն՝ ստեղնաշարի մշակողի համար ինչ-որ բան անել: Ստեղնաշարի մշակիչը ներառում է
հրամանների պրոցեսոր , որը հասկանում է (օրինակ) երեք հրամաններ՝ W, D և R :
Եթե տեքստի տողը սկսվում է W տառով , հրամանը նշանակում է Գրել մի քանի բայթ հիշողության մեջ:
Էկրանի վրա ձեր մուտքագրած տողը մոտավորապես այսպիսին է.
W 1020 35 4F 78 23 9B AC 67

Այս հրամանը հրահանգում է հրամանի պրոցեսորին 1020h հասցեից սկսած հիշողության հասցեներում գրել
տասնվեցական բայթերը 35, 4F և այլն: Այս աշխատանքի համար ստեղնաշարի կառավարիչը պետք է
փոխարկի ASCII կոդերը բայթերի՝ նախկինում ցուցադրած փոխակերպման հակադարձում:
Եթե տեքստի տողը սկսվում է D տառով , հրամանը նշանակում է Ցուցադրել որոշ բայթ հիշողության մեջ:
Էկրանի վրա ձեր մուտքագրած տողը հետևյալն է.
Դ 1030 թ

Հրամանատար պրոցեսորն արձագանքում է՝ ցուցադրելով 11 բայթերը, որոնք պահվում են 1030h-ից սկսած:


(Ես ասում եմ 11 բայթ , քանի որ այդքանը կտեղավորվի 40 նիշանոց էկրանի վրա, որը գտնվում է հասցեին
հաջորդող նույն տողում:) Դուք կարող եք օգտագործել Display հրամանը հիշողության բովանդակությունը
ուսումնասիրելու համար:
Եթե տեքստի տողը սկսվում է R-ով , հրամանը նշանակում է Run : Նման հրամանն ունի հետևյալ տեսքը.
1000 ռ

և նշանակում է «Գործարկել ծրագիրը, որը պահվում է սկսած 1000h հասցեից»: Հրամանատար պրոցեսորը
պահում է 1000 ժ ռեգիստրի զույգ HL-ում, այնուհետև կատարում է PCHL հրահանգը , որը բեռնում է
ծրագրի հաշվիչը գրանցման զույգ HL-ից՝ արդյունավետորեն անցնելով այդ հասցեին:
Այս ստեղնաշարի կարգավորիչի և հրամանի պրոցեսորի աշխատանքը կարևոր իրադարձություն է: Երբ դուք
ունեք այն, դուք այլևս կարիք չեք ունենա տառապելու կառավարման վահանակի անարգանքից: Ստեղնաշարից
բայթերի մուտքագրումն ավելի հեշտ է, արագ և դասական:
Իհարկե, դուք դեռ խնդիր ունեք, որ ձեր մուտքագրած բոլոր ծածկագրերը անհետանում են, երբ անջատում եք
հոսանքը: Այդ պատճառով, դուք հավանաբար կցանկանաք պահել այս ամբողջ նոր կոդը միայն կարդալու
հիշողության մեջ կամ ROM-ում: Վերջին գլխում մենք ստացանք ROM չիպ, որը պարունակում էր բոլոր
կետերի նախշերը, որոնք անհրաժեշտ են ASCII նիշերը տեսահոլովակի էկրանին ցուցադրելու համար: Մենք
ենթադրում էինք, որ մեր չիպը կազմաձևվել է այս տվյալներով արտադրության ընթացքում: Դուք կարող եք
նաև ծրագրավորել ROM չիպերը ձեր տան գաղտնիության մեջ: Ծրագրավորվող միայն կարդալու
հիշողության (PROM) չիպերը ծրագրավորվում են միայն մեկ անգամ: Ջնջելի ծրագրավորվող միայն
կարդալու հիշողության (EPROM) չիպերը կարող են ծրագրավորվել և վերածրագրավորվել
ուլտրամանուշակագույն լույսի ազդեցության տակ ամբողջությամբ ջնջվելուց հետո:
Ինչպես հիշում եք, մենք RAM-ի մեր տախտակները միացրել ենք DIP անջատիչով, որը թույլ է տալիս մեզ
նշել տախտակի մեկնարկային հասցեն: Եթե դուք աշխատում եք 8080 համակարգով, սկզբում ձեր RAM
տախտակներից մեկը կտեղադրվի 0000h հասցեի համար: ROM ստեղծելուց հետո այդ ROM-ը կզբաղեցնի
0000h հասցեն, և RAM-ի տախտակը կարող է փոխարկվել ավելի բարձր հասցեի:
Հրամանատարի պրոցեսորի ստեղծումը կարևոր իրադարձություն է ոչ միայն այն պատճառով, որ այն
ապահովում է բայթերը հիշողության մեջ մուտքագրելու ավելի արագ միջոց, այլ նաև այն պատճառով, որ
համակարգիչը այժմ ինտերակտիվ է : Երբ ստեղնաշարի վրա ինչ-որ բան եք տպում, համակարգիչը
արձագանքում է՝ էկրանին ինչ-որ բան ցուցադրելով:
ROM-ում հրամանի պրոցեսոր ունենալուց հետո դուք կարող եք սկսել փորձարկել՝ հիշողությունից
տվյալները սկավառակի կրիչ գրելով (հավանաբար այն հատվածներով, որոնք համապատասխանում են
սկավառակի հատվածի չափին) և նորից կարդալ տվյալները հիշողության մեջ: Ծրագրերի և տվյալների
սկավառակի վրա պահելը շատ ավելի անվտանգ է, քան դրանք RAM-ում (որտեղ դրանք կվերանան, եթե
հոսանքազրկվի) և շատ ավելի ճկուն, քան դրանք ROM-ում պահելը:
Ի վերջո, գուցե ցանկանաք մի քանի նոր հրամաններ ավելացնել հրամանների պրոցեսորին: Օրինակ, S
հրամանը նշանակում է Store .
S 2080 2 15 3

Այս հրամանը ցույց է տալիս, որ հիշողության բլոկը, որը սկսվում է 2080h հասցեից, պետք է պահվի 2-րդ
կողմի սկավառակի վրա, 15-րդ հատվածում և հատված 3-ում: (Այս հիշողության բլոկի չափը կախված է
սկավառակի հատվածի չափից): Դուք կարող եք ավելացնել Load հրամանը.
L 2080 2 15 3

հատվածը սկավառակից հիշողության մեջ բեռնելու համար:


Իհարկե, դուք պետք է հետևեք, թե որտեղ եք պահում: Այս նպատակով, հավանաբար, ձեռքի տակ կպահեք
բարձիկ և մատիտ: Զգույշ եղեք. դուք չեք կարող պարզապես մի հասցեում գտնվող որոշ կոդ պահել,
այնուհետև այն նորից բեռնել մեկ այլ հասցեի հիշողության մեջ և սպասել, որ այն կաշխատի: Բոլոր Jump
and Call հրահանգները սխալ կլինեն, քանի որ դրանք նշում են հին հասցեները: Բացի այդ, դուք կարող եք
ունենալ ծրագիր, որն ավելի երկար է, քան ձեր սկավառակի հատվածի չափը, այնպես որ դուք պետք է այն
պահեք մի քանի հատվածներում: Քանի որ սկավառակի որոշ հատվածներ կարող են զբաղված լինել այլ
ծրագրերով կամ տվյալների կողմից, իսկ որոշ հատվածներ կարող են ազատ լինել, այն հատվածները,
որոնցում դուք երկար ծրագիր եք պահում, կարող են հետևողական չլինել սկավառակի վրա:
Ի վերջո, դուք կարող եք որոշել, որ ձեռքով գործավարական աշխատանքը, որը ներառում է սկավառակի վրա
ամեն ինչ պահվող տեղը, պարզապես չափազանց շատ է: Այս պահին դուք պատրաստ եք ֆայլային
համակարգի համար :
Ֆայլային համակարգը սկավառակի պահպանման մեթոդ է, որում տվյալները կազմակերպվում են ֆայլերի
մեջ : Ֆայլը պարզապես հարակից տվյալների հավաքածու է, որը զբաղեցնում է սկավառակի մեկ կամ մի քանի
հատվածներ: Ամենակարևորը, յուրաքանչյուր ֆայլ նույնականացվում է անունով, որն օգնում է ձեզ հիշել, թե
ինչ է պարունակում ֆայլը: Դուք կարող եք պատկերացնել սկավառակը որպես ֆայլերի պահարան, որտեղ
յուրաքանչյուր ֆայլ ունի մի փոքրիկ ներդիր, որը ցույց է տալիս ֆայլի անունը:
Ֆայլային համակարգը գրեթե միշտ մաս է կազմում ծրագրային ապահովման ավելի մեծ հավաքածուի, որը
հայտնի է որպես օպերացիոն համակարգ : Ստեղնաշարի կարգավորիչը և հրամանի պրոցեսորը, որը մենք
կառուցում էինք այս գլխում, անշուշտ կարող են վերածվել օպերացիոն համակարգի: Բայց այս երկար
էվոլյուցիոն գործընթացն անցնելու փոխարեն, եկեք նայենք իրական օպերացիոն համակարգին և զգանք, թե
ինչ է անում և ինչպես է այն աշխատում:
Պատմականորեն, 8-բիթանոց միկրոպրոցեսորների համար ամենակարևոր օպերացիոն համակարգը CP/M-ն
էր (Control Program for Micros), որը գրվել է 1970-ականների կեսերին Intel 8080 միկրոպրոցեսորի
համար Գարի Քիլդալի կողմից (ծնված 1942 թ.), ով հետագայում հիմնադրեց Digital Research
Incorporated-ը (DRI): ).
CP/M-ը պահվում է սկավառակի վրա: CP/M-ի սկզբնական շրջանում CP/M-ի համար ամենատարածված
միջավայրը միակողմանի 8 դյույմանոց սկավառակն էր՝ 77 հետքերով, 26 սեկտորներով մեկ ուղով և 128
բայթ մեկ հատվածով: (Դա ընդհանուր առմամբ 256,256 բայթ է:) Սկավառակի առաջին երկու հետքերը
պարունակում են ինքնին CP/M: Ես կարճ ժամանակում նկարագրելու եմ, թե ինչպես է CP/M-ը
սկավառակից մտնում համակարգչի հիշողություն:
CP/M սկավառակի մնացած 75 հետքերը օգտագործվում են ֆայլերը պահելու համար: CP/M ֆայլային
համակարգը բավականին պարզ է, բայց այն բավարարում է երկու հիմնական պահանջներին. Նախ՝
սկավառակի վրա գտնվող յուրաքանչյուր ֆայլ նույնացվում է անունով: Այս անունը նույնպես պահվում է
սկավառակի վրա; իրոք, ամբողջ տեղեկատվությունը, որն անհրաժեշտ է CP/M-ին այս ֆայլերը կարդալու
համար, պահվում է սկավառակի վրա՝ ֆայլերի հետ միասին: Երկրորդ, ֆայլերը պարտադիր չէ, որ զբաղեցնեն
սկավառակի հաջորդական հատվածներ: Հաճախ է պատահում, որ երբ ստեղծվում և ջնջվում են տարբեր
չափերի ֆայլեր, սկավառակի ազատ տարածքը մասնատվում է: Ֆայլային համակարգի կարողությունը մեծ
ֆայլեր ոչ հաջորդական հատվածներում պահելու համար շատ օգտակար է:
Ֆայլերի պահպանման համար օգտագործվող 75 հետքերում հատվածները խմբավորված են բաշխման
բլոկների մեջ : Յուրաքանչյուր հատկացման բլոկ պարունակում է 8 հատված կամ 1024 բայթ: Սկավառակի
վրա կա 243 տեղաբաշխման բլոկ՝ 0-ից 242 համարներով:
Առաջին երկու տեղաբաշխման բլոկները (ընդհանուր 2048 բայթ) օգտագործվում են գրացուցակի համար :
Գրացուցակը սկավառակի այն տարածքն է, որը պարունակում է անուններ և որոշ կարևոր տեղեկություններ
սկավառակի վրա պահվող յուրաքանչյուր ֆայլի մասին: Սկավառակի վրա պահվող յուրաքանչյուր ֆայլ
պահանջում է 32 բայթ երկարությամբ գրացուցակ : Քանի որ ընդհանուր գրացուցակը ընդամենը 2048 բայթ
է, սկավառակը սահմանափակված է 2048 ÷ 32 կամ 64 ֆայլով:
Յուրաքանչյուր 32 բայթ գրացուցակի մուտքագրում պարունակում է հետևյալ տեղեկատվությունը.
Իմա
Բայ
ստը
թեր
Սովո
րաբ
ար
0 սահ
ման
վում
է0
Ֆայ
լի
1–8
անու
նը
Ֆայ
9–1 լի
1 տես
ակը
Ֆայ
լի
12
ծավ
ալը
Ամր
ագր
ված
13– է
14 (սահ
ման
ված
է 0)
Սեկ
տոր
ները
15 վերջ
ին
բլոկ
ում
Սկա
վառ
16–
ակի
31
քար
տեզ

Գրացուցակի մուտքագրման առաջին բայթն օգտագործվում է միայն այն դեպքում, երբ ֆայլային համակարգը
կարող է միաժամանակ կիսվել երկու կամ ավելի մարդկանց կողմից: CP/M-ի դեպքում այս բայթը սովորաբար
սահմանվում է 0-ի, ինչպես և 13 և 14 բայթերը:
CP/M-ի ներքո յուրաքանչյուր ֆայլ նույնացվում է երկու մասից բաղկացած անունով: Առաջին մասը հայտնի
է որպես ֆայլի անուն և կարող է ունենալ մինչև ութ նիշ, որը պահվում է գրացուցակի մուտքագրման 1-ից 8
բայթերում; երկրորդ մասը հայտնի է որպես ֆայլի տեսակ և կարող է ունենալ մինչև երեք նիշ, որը պահվում
է 9-ից 11 բայթերում: Կան մի քանի ստանդարտ ֆայլերի տեսակներ: Օրինակ՝ TXT-ը ցույց է տալիս
տեքստային ֆայլ (այսինքն՝ միայն ASCII կոդեր պարունակող ֆայլ), իսկ COM-ը (որը կարճ է հրամանի
համար ) ցույց է տալիս ֆայլ, որը պարունակում է 8080 մեքենայի կոդ հրահանգներ՝ ծրագիր։ Ֆայլը նշելիս
երկու մասերը բաժանվում են կետով, այսպես.
MYLETTER.TXT
CALC.COM

Ֆայլերի անվանման այս կոնվենցիան հայտնի է դարձել որպես 8.3 (արտասանվում է ութ կետ երեք ), որը
ցույց է տալիս առավելագույնը ութ տառերը մինչև կետը և երեք տառերը հետո:
Գրացուցակի մուտքի սկավառակի քարտեզը ցույց է տալիս տեղաբաշխման բլոկները, որոնցում պահվում է
ֆայլը: Ենթադրենք, սկավառակի քարտեզի առաջին չորս գրառումները 14h, 15h, 07h և 23h են, իսկ
մնացածը զրո են: Սա նշանակում է, որ ֆայլը զբաղեցնում է չորս տեղաբաշխման բլոկ կամ 4 ԿԲ տարածք:
Ֆայլը կարող է իրականում մի փոքր ավելի կարճ լինել: Գրացուցակի մուտքագրման բայթ 15-ը ցույց է
տալիս, թե քանի 128 բայթ հատվածներ են իրականում օգտագործվում վերջին տեղաբաշխման բլոկում:
Սկավառակի քարտեզը 16 բայթ է; այդ երկարությունը տեղավորում է մինչև 16384 բայթ ֆայլ: 16 ԿԲ-ից
ավելի երկարությամբ ֆայլը պետք է օգտագործի մի քանի գրացուցակի մուտքեր, որոնք կոչվում են
ընդլայնումներ : Այդ դեպքում բայթ 12-ը սահմանվում է 0-ի առաջին գրացուցակում, 1-ի երկրորդ
գրացուցակում և այլն:
Ես նշեցի տեքստային ֆայլերը: Տեքստային ֆայլերը կոչվում են նաև ASCII ֆայլեր , կամ միայն տեքստային
ֆայլեր , կամ մաքուր-ASCII ֆայլեր , կամ այդ գծերի հետ մեկտեղ որևէ այլ բան: Տեքստային ֆայլը
պարունակում է ASCII կոդեր (ներառյալ փոխադրման վերադարձի և գիծ սնուցման կոդերը), որոնք
համապատասխանում են մարդկանց կողմից ընթեռնելի տեքստին: Այն ֆայլը, որը տեքստային ֆայլ չէ,
կոչվում է երկուական ֆայլ: CP/M COM ֆայլը երկուական ֆայլ է, քանի որ այն պարունակում է 8080
մեքենայի կոդ:
Ենթադրենք, ֆայլը (շատ փոքր ֆայլ) պետք է պարունակի երեք 16-բիթանոց թվեր, օրինակ՝ 5A48h, 78BFh
և F510h: Այս երեք թվերով երկուական ֆայլը ընդամենը 6 բայթ է.
48 5A BF 78 10 F5

Իհարկե, դա Intel ֆորմատն է բազմաբայթ թվեր պահելու համար: Ամենաքիչ նշանակություն ունեցող բայթը
առաջին տեղում է: Motorola-ի պրոցեսորների համար գրված ծրագիրը կարող է ավելի հակված լինել ֆայլը
ստեղծելու հետևյալ կերպ.
5A 48 78 BF F5 10

Այս նույն չորս 16-բիթանոց արժեքները պահող ASCII տեքստային ֆայլը պարունակում է բայթեր
35 41 34 38 68 0D 0A 37 38 42 46 68 0D 0A 46 35 31 30 68 0D 0A

Այս բայթերը ASCII կոդեր են թվերի և տառերի համար, որտեղ յուրաքանչյուր թիվ ավարտվում է փոխադրման
վերադարձով (0Dh) և տողերի հոսքի (0A) նիշով: Տեքստային ֆայլն ավելի հարմար կերպով ցուցադրվում է
ոչ թե որպես բայթերի շարան, որոնք պատահաբար ASCII կոդեր են, այլ հենց որպես նիշ.
5A48h
78BFh
F510h

ASCII տեքստային ֆայլը, որը պահում է այս երեք թվերը, կարող է պարունակել նաև հետևյալ բայթերը.
32 33 31 31 32 0D 0A 33 30 39 31 31 0D 0A 36 32 37 33 36 0D 0A

Այս բայթերը ASCII կոդերն են երեք թվերի տասնորդական համարժեքների համար.


23112
30911
62736
Քանի որ տեքստային ֆայլեր օգտագործելու նպատակը մարդկանց համար ֆայլերը հեշտացնելն է,
իրականում ոչ մի պատճառ չկա տասնորդական, այլ ոչ թե տասնորդական թվեր չօգտագործելու համար:
Ինչպես նշեցի, CP/M-ն ինքնին պահվում է սկավառակի առաջին երկու հետքերում: Գործարկելու համար
CP/M-ը պետք է բեռնված լինի սկավառակից հիշողության մեջ: CP/M օգտագործող համակարգչի ROM-ը
չպետք է ընդարձակ լինի: Այն ամենը, ինչ պետք է պարունակի ROM-ը, կոդի մի փոքր կտոր է, որը հայտնի է
որպես bootstrap loader (քանի որ այդ կոդը արդյունավետորեն ձգում է օպերացիոն համակարգի մնացած
մասը իր bootstraps-ով): Bootstrap loader-ը սկավառակից բեռնում է հիշողության մեջ առաջին 128
բայթանոց հատվածը և գործարկում այն: Այս հատվածը պարունակում է ծածկագիր՝ CP/M-ի մնացած մասը
հիշողության մեջ բեռնելու համար: Ամբողջ գործընթացը կոչվում է օպերացիոն համակարգի բեռնում :
Ի վերջո, CP/M-ը կազմակերպում է իրեն, որպեսզի զբաղեցնի RAM-ի տարածքը ամենաբարձր հիշողության
հասցեներով: Հիշողության ամբողջ կազմակերպումը CP/M-ի բեռնումից հետո ունի հետևյալ տեսքը.

Այս դիագրամը մասշտաբային չէ: CP/M-ի երեք բաղադրիչները՝ Հիմնական մուտքային/ելքային համակարգը
(BIOS), Հիմնական սկավառակի օպերացիոն համակարգը (BDOS) և վահանակի հրամանատարական
պրոցեսորը (CCP), ընդհանուր առմամբ զբաղեցնում են ընդամենը մոտ 6 ԿԲ հիշողություն: Անցումային
ծրագրի տարածքը (TPA)՝ մոտ 58 ԿԲ հիշողություն 64 ԿԲ հզորությամբ համակարգչում, ի սկզբանե ոչինչ
չի պարունակում:
Console Command Processor-ը համարժեք է հրամանի պրոցեսորին, որը մենք ավելի վաղ կառուցում
էինք: Վահանակ բառը վերաբերում է ստեղնաշարի և էկրանի համադրությանը: CCP-ն էկրանին ցուցադրում
է հուշում , որն ունի հետևյալ տեսքը.
Ա>

Հուշումը ձեր ազդանշանն է՝ ինչ-որ բան մուտքագրելու համար: Համակարգիչներում, որոնք ունեն մեկից
ավելի սկավառակակիր, A-ն վերաբերում է առաջին սկավառակի սկավառակին, այն, որտեղից բեռնվել է
CP/M-ը: Դուք մուտքագրում եք հրամանները՝ հետևելով հուշմանը և սեղմում Enter ստեղնը: Այնուհետև
CCP-ն կատարում է այս հրամանները, որոնք սովորաբար արտադրում են էկրանին ցուցադրվող
տեղեկատվությունը: Երբ հրամանն ավարտված է, CCP-ն կրկին ցուցադրում է հուշումը:
CPP-ն ճանաչում է ընդամենը մի քանի հրաման: Ամենակարևորը, հավանաբար, սա է.
ԴԻՐ

որը ցուցադրում է սկավառակի գրացուցակը, այսինքն՝ սկավառակի վրա պահվող բոլոր ֆայլերի ցանկը:
Կարո՞ղ եք օգտագործել հատուկ նիշերը: և * այս ցանկը սահմանափակելու որոշակի անվանման կամ տեսակի
ֆայլերով: Օրինակ,
DIR *.TXT

ցուցադրում է բոլոր տեքստային ֆայլերը, մինչդեռ


DIR A???B.*

ցուցադրում է հինգ նիշից բաղկացած անուն ունեցող բոլոր ֆայլերի ցանկը, որտեղ առաջին տառը A է, իսկ
վերջին տառը՝ B:
Մեկ այլ հրաման է ERA-ն , որը կրճատված է «Erase»-ի համար : Դուք օգտագործում եք սա ֆայլը
սկավառակից ջնջելու համար: Օրինակ,
ERA MYLETTER.TXT

ջնջում է այդ անունով ֆայլը, մինչդեռ


ERA *.TXT

ջնջում է բոլոր տեքստային ֆայլերը: Ֆայլը ջնջելը նշանակում է ազատել գրացուցակի մուտքը և ֆայլի
կողմից զբաղեցրած սկավառակի տարածքը:
Մեկ այլ հրաման է REN-ը , որը կրճատված է Rename-ի համար : Դուք օգտագործում եք այս հրամանը
ֆայլի անունը փոխելու համար: TYPE հրամանը ցուցադրում է տեքստային ֆայլի բովանդակությունը: Քանի
որ տեքստային ֆայլը պարունակում է միայն ASCII կոդեր, այս հրամանը թույլ է տալիս ֆայլը կարդալ
անմիջապես էկրանին, այսպես.
TYPE MYLETTER.TXT

SAVE հրամանը պահպանում է մեկ կամ ավելի 256 բայթանոց հիշողության բլոկներ , որոնք գտնվում են
Անցումային ծրագրի տարածքում նշված անունով սկավառակի ֆայլում:
Եթե մուտքագրեք հրաման, որը CP/M-ն չի ճանաչում, ենթադրում է, որ դուք նշում եք ծրագրի անունը, որը
պահվում է որպես ֆայլ սկավառակի վրա: Ծրագրերը միշտ ունեն COM ֆայլի տեսակը , որը նշանակում է
Command: CCP-ն սկավառակի վրա որոնում է այդ անունով ֆայլ: Եթե կա, CP/M ֆայլը բեռնում է
սկավառակից անցողիկ ծրագրի տարածք, որը սկսվում է հիշողության հասցեից 0100h: Այսպես եք
գործարկում ծրագրերը, որոնք գտնվում են սկավառակի վրա: Օրինակ, եթե մուտքագրեք
CALC

հետևելով CP/M հուշմանը, և եթե սկավառակի վրա կա CALC.COM անունով ֆայլ, CCP-ն բեռնում է այդ
ֆայլը հիշողության մեջ՝ սկսած 0100h հասցեից և այնուհետև գործարկում է ծրագիրը՝ անցնելով 0100h
հասցեում գտնվող մեքենայի կոդ հրահանգին:
Ավելի վաղ ես բացատրեցի, թե ինչպես կարելի է հիշողության մեջ մտցնել մեքենայի կոդերի հրահանգները
ցանկացած վայրում և կատարել դրանք, բայց CP/M ծրագրերում, որոնք պահվում են սկավառակի ֆայլերում,
պետք է նախագծված լինեն հիշողության մեջ բեռնվելու համար՝ սկսած որոշակի հիշողության վայրից, որը
0100h է: .
CP/M-ն ունի մի քանի օգտակար ծրագրեր, ներառյալ PIP-ը , ծայրամասային փոխանակման ծրագիրը, որը
թույլ է տալիս պատճենել ֆայլերը: ED ծրագիրը տեքստային խմբագիր է, որը թույլ է տալիս ստեղծել և
փոփոխել տեքստային ֆայլեր: Ծրագրերը, ինչպիսիք են PIP-ը և ED-ը, որոնք փոքր են և նախատեսված են
պարզ գործեր կատարելու համար, հաճախ հայտնի են որպես օգտակար ծրագրեր: Եթե դուք գործարկեիք
CP/M համակարգ, հավանաբար կգնեիք ավելի մեծ կիրառական ծրագրեր, ինչպիսիք են բառի մշակողները
կամ համակարգչային աղյուսակները: Կամ դուք ինքներդ կարող եք գրել նման ծրագրեր: Այս բոլոր ծրագրերը
նույնպես պահվում են COM տիպի ֆայլերում ։
Մինչ այժմ մենք տեսել ենք, թե ինչպես է CP/M-ը (ինչպես շատ օպերացիոն համակարգեր) տալիս
հրամաններ և կոմունալ ծառայություններ, որոնք թույլ են տալիս կատարել տարրական տնային
տնտեսություն ֆայլերի վերաբերյալ: Մենք նաև տեսել ենք, թե ինչպես է CP/M-ն բեռնում ծրագրի ֆայլերը
հիշողության մեջ և կատարում դրանք: Օպերացիոն համակարգն ունի նաև երրորդ հիմնական գործառույթը.
Ծրագիրը, որն աշխատում է CP/M-ի տակ, հաճախ կարիք ունի որոշակի ելք գրելու վիդեո էկրանին: Կամ
ծրագիրը կարող է կարիք ունենալ կարդալ այն, ինչ դուք մուտքագրել եք ստեղնաշարի վրա: Կամ ծրագրին
կարող է անհրաժեշտ լինել կարդալ ֆայլ սկավառակից կամ ֆայլ գրել սկավառակի վրա: Բայց շատ
դեպքերում CP/M ծրագիրը չի գրում իր ելքը ուղղակիորեն վիդեո ցուցադրման հիշողության մեջ:
Նմանապես, CP/M ծրագիրը մուտք չի գործում ստեղնաշարի ապարատին՝ տեսնելու, թե ինչ եք մուտքագրել:
Իսկ CP/M ծրագիրը հաստատ չի մուտք գործում սկավառակի սարքաշար՝ սկավառակի հատվածները
կարդալու և գրելու համար։
Փոխարենը, ծրագիրը, որն աշխատում է CP/M-ի տակ, օգտագործում է CP/M-ի մեջ ներկառուցված
ենթածրագրերի հավաքածու՝ այս սովորական գործերը կատարելու համար: Այս ենթածրագրերը հատուկ
նախագծված են այնպես, որ ծրագրերը կարողանան հեշտ մուտք ունենալ համակարգչի ողջ սարքաշարին՝
ներառյալ տեսացուցիչը, ստեղնաշարը և սկավառակը, առանց ծրագրավորողներին անհանգստացնելու, թե
ինչպես են իրականում միացված այս ծայրամասային սարքերը: Ամենակարևորը, CP/M-ով աշխատող
ծրագիրը կարիք չունի իմանալու սկավառակի հատվածների և հետքերի մասին: Դա CP/M-ի գործն է:
Փոխարենը այն կարող է պահել ամբողջ ֆայլերը սկավառակի վրա և հետագայում կարդալ դրանք:
Համակարգչի ապարատային հեշտ հասանելիությամբ ծրագրի ապահովումը օպերացիոն համակարգի երրորդ
հիմնական գործառույթն է: Մուտքը, որն ապահովում է օպերացիոն համակարգը, կոչվում է հավելվածի
ծրագրավորման ինտերֆեյս կամ API:
Ծրագիրը, որն աշխատում է CP/M-ի տակ, օգտագործում է API-ն՝ ռեգիստր C-ը դնելով որոշակի արժեքի
(կոչվում է ֆունկցիայի արժեք ) և կատարելով հրահանգը:
ԶԱՆԳԱՀԱՐԵԼ 5

Օրինակ՝ ծրագիրը ստեղնաշարի վրա մուտքագրված ստեղնաշարի ASCII կոդը ստեղնաշարի վրա
ստեղնաշարի միջոցով ստանում է
MVI C,01h
ԶԱՆԳԱՀԱՐԵԼ 5

Վերադարձին A կուտակիչը պարունակում է սեղմված ստեղնի ASCII կոդը: Նմանապես,


MVI C,02h
ԶԱՆԳԱՀԱՐԵԼ 5

գրում է ASCII նիշը կուտակիչ A-ում կուրսորի դիրքում գտնվող տեսանյութի ցուցադրման վրա և այնուհետև
ավելացնում է կուրսորը:
Եթե ծրագրին անհրաժեշտ է ստեղծել ֆայլ, ապա այն սահմանում է ռեգիստրի զույգ DE հիշողության
տարածքը, որը հիմնականում պարունակում է ֆայլի անունը: Այնուհետև այն կատարում է կոդը.
MVI C, 16h
CALL 5

Այս դեպքում CALL 5 հրահանգը ստիպում է CP/M-ին ստեղծել սկավառակի վրա դատարկ ֆայլ: Այնուհետև
ծրագիրը կարող է օգտագործել այլ գործառույթներ՝ ֆայլը գրելու համար և ի վերջո փակել ֆայլը, ինչը
նշանակում է, որ այն առայժմ ավարտել է ֆայլի օգտագործումը: Նույն ծրագիրը կամ մեկ այլ ծրագիր կարող
է հետագայում բացել ֆայլը և կարդալ դրա բովանդակությունը:
Ի՞նչ է իրականում անում CALL 5-ը : Հիշողության տեղը 0005h-ում ստեղծվել է CP/M-ի կողմից՝
պարունակելու JMP ( Jump ) հրահանգ, որը ցատկում է CP/M-ի Հիմնական սկավառակի օպերացիոն
համակարգի (BDOS) մի տեղ: Այս տարածքը պարունակում է ենթածրագրերի մի փունջ, որոնք կատարում են
CP/M ֆունկցիաներից յուրաքանչյուրը: BDOS-ը, ինչպես իր անունն է ենթադրում, հիմնականում
պատասխանատու է սկավառակի վրա ֆայլային համակարգի պահպանման համար: Հաճախ BDOS-ը պետք է
օգտագործի ենթածրագրերը CP/M-ի Հիմնական մուտքային/ելքային համակարգում (BIOS), որն այն
տարածքն է, որն իրականում մուտք է գործում ստեղնաշարի սարքաշար, վիդեո էկրան և սկավառակի կրիչներ:
Իրականում, BIOS-ը CP/M-ի միակ բաժինն է, որը պետք է իմանա համակարգչի սարքաշարի մասին: CCP-ն
անում է այն ամենը, ինչ անհրաժեշտ է՝ օգտագործելով BDOS գործառույթները, ինչպես նաև CP/M-ով
ուղեկցվող կոմունալ ծառայությունները:
API-ն սարքից անկախ ինտերֆեյս է համակարգչի սարքավորման համար: Սա նշանակում է, որ CP/M-ի
համար գրված ծրագիրը կարիք չունի իմանալու իրական մեխանիզմը, թե ինչպես է ստեղնաշարն աշխատում
որոշակի մեքենայի վրա, կամ ինչպես է աշխատում վիդեո ցուցադրումը, կամ ինչպես կարդալ և գրել
սկավառակի հատվածները: Այն պարզապես օգտագործում է CP/M ֆունկցիաները՝ ստեղնաշարի, էկրանի և
սկավառակի հետ կապված առաջադրանքներ կատարելու համար: Բոնուսն այն է, որ CP/M ծրագիրը կարող է
աշխատել բազմաթիվ տարբեր համակարգիչների վրա, որոնք կարող են օգտագործել շատ տարբեր
ապարատներ այս ծայրամասային սարքեր մուտք գործելու համար: (Բոլոր CP/M ծրագրերը պետք է ունենան
Intel 8080 միկրոպրոցեսոր, այնուամենայնիվ, կամ պրոցեսոր, որը կատարում է 8080 հրահանգներ,
ինչպես օրինակ Intel 8085-ը կամ Zilog Z-80-ը): Պարզապես քանի դեռ համակարգիչը աշխատում է
CP/M-ով, ծրագիրը օգտագործում է CP/M ֆունկցիաները՝ այս սարքաշարին անուղղակի մուտք գործելու
համար: Առանց ստանդարտ API-ների, ծրագրերը պետք է հատուկ հարմարեցված լինեն տարբեր տեսակի
համակարգիչների վրա աշխատելու համար:
CP/M-ն ժամանակին շատ տարածված օպերացիոն համակարգ էր 8080-ի համար և մնում է պատմականորեն
կարևոր: CP/M-ն հիմնական ազդեցությունն էր QDOS (Արագ և կեղտոտ օպերացիոն համակարգ)
16-բիթանոց օպերացիոն համակարգի հիմքում, որը գրվել էր Թիմ Պատերսոնի կողմից Seattle Computer
Products-ից Intel-ի 16-բիթանոց 8086 և 8088 չիպերի համար: QDOS-ն ի վերջո վերանվանվեց
86-DOS և արտոնագրվեց Microsoft Corporation-ի կողմից: MS-DOS (Microsoft Disk Operating
System, արտասանված em ess dahs , ինչպես գերմանական das հոդվածը) անվան տակ , օպերացիոն
համակարգը լիցենզավորվեց IBM-ին առաջին IBM անհատական համակարգչի համար, որը ներկայացվեց
1981 թվականին: Չնայած CP-ի 16-բիթանոց տարբերակին: /M (կոչվում է CP/M-86) հասանելի էր նաև
IBM PC-ի համար, MS-DOS-ը արագորեն դարձավ ստանդարտ: MS-DOS-ը (IBM-ի համակարգիչների վրա
կոչվում է PC-DOS) լիցենզավորված է նաև այլ արտադրողների համար, ովքեր ստեղծել են IBM PC-ի հետ
համատեղելի համակարգիչներ:
MS-DOS-ը չի պահպանել CP/M-ի ֆայլային համակարգը: Փոխարենը MS-DOS ֆայլային համակարգը
օգտագործեց մի սխեման, որը կոչվում էր Ֆայլերի բաշխման աղյուսակ կամ FAT, որն ի սկզբանե ստեղծվել
էր Microsoft-ում 1977 թվականին: Սկավառակի տարածքը բաժանված է կլաստերների, որոնք՝ կախված
սկավառակի չափից, կարող են տատանվել: չափերով՝ 512 բայթից մինչև 16,384 բայթ։ Յուրաքանչյուր
ֆայլ կլաստերների հավաքածու է: Ֆայլի գրացուցակի մուտքագրումը ցույց է տալիս միայն այդ ֆայլի
մեկնարկային կլաստերը: FAT-ն ինքնին ցույց է տալիս սկավառակի յուրաքանչյուր կլաստերի համար, թե որն
է հաջորդ կլաստերը:
MS-DOS սկավառակի գրացուցակի մուտքերը 32 բայթ են և օգտագործում են նույն 8.3 ֆայլերի անվանման
կոնվենցիան, ինչ CP/M-ն: Տերմինաբանությունը մի փոքր այլ է, սակայն. վերջին երեք տառերը կոչվում են
ֆայլի անվան ընդլայնում , քան ֆայլի տեսակ: MS-DOS գրացուցակի մուտքագրումը չպետք է պարունակի
բաշխման բլոկների ցանկ: Փոխարենը, գրացուցակը ներառում է այնպիսի օգտակար տեղեկություններ,
ինչպիսիք են ֆայլի վերջին փոփոխության ամսաթիվը և ժամը, ինչպես նաև ֆայլի չափը:
MS-DOS-ի վաղ տարբերակները կառուցված էին CP/M-ի նման: Բայց BIOS-ը պարտադիր չէր
MS-DOS-ում, քանի որ IBM PC-ն ինքնին ներառում էր ամբողջական BIOS ROM-ում: MS-DOS-ում
հրամանի պրոցեսորը COMMAND.COM անունով ֆայլ է: MS-DOS ծրագրերը գալիս են երկու տեսակի.
COM ֆայլի անվան ընդլայնմամբ ծրագրերը սահմանափակված են 64 ԿԲ չափով: Ավելի մեծ ծրագրերն
ունեն ֆայլի անվան ընդլայնում EXE (արտասանվում է eks-ee , գործարկվողի համար):
Թեև MS-DOS-ն ի սկզբանե աջակցում էր CALL 5 ինտերֆեյսը API գործառույթների համար, նոր ծրագրերի
համար առաջարկվեց ավելի նոր ինտերֆեյս: Ավելի նոր ինտերֆեյսը օգտագործում էր 8086-ի մի
առանձնահատկություն, որը կոչվում է ծրագրային ընդհատում , որը նման է ենթածրագրի զանգին,
բացառությամբ այն, որ ծրագիրը կարիք չունի իմանալու իրական հասցեն, որը զանգում է: Ծրագիրը կանչում
է MS-DOS API ֆունկցիա՝ կատարելով INT 21h հրահանգը (արտասանվում է int twenty—one , չնայած
այն տասնվեցական է):
Տեսականորեն, կիրառական ծրագրերը պետք է մուտք գործեն համակարգչի սարքաշար միայն օպերացիոն
համակարգի կողմից տրամադրվող ինտերֆեյսների միջոցով: Բայց շատ ծրագրավորողներ, ովքեր զբաղվում
էին 1970-ականների և 1980-ականների սկզբի փոքր համակարգչային օպերացիոն համակարգերով, հաճախ
շրջանցում էին օպերացիոն համակարգը, հատկապես՝ վիդեո ցուցադրման հետ կապված: Այն ծրագրերը,
որոնք ուղղակիորեն բայթեր են գրում վիդեո ցուցադրման հիշողության մեջ, ավելի արագ են աշխատում, քան
այն ծրագրերը, որոնք չեն գրել: Իրոք, որոշ հավելվածների համար, ինչպիսիք են այն ծրագրերը, որոնք պետք է
ցուցադրեին գրաֆիկական պատկերները տեսահոլովակի վրա, օպերացիոն համակարգը բացարձակապես
անբավարար էր: MS-DOS-ում շատ ծրագրավորողների ամենից շատ դուր եկավ այն, որ այն «մնաց
ճանապարհից» և ծրագրավորողներին թույլ տվեց ծրագրեր գրել այնքան արագ, որքան թույլ էր տալիս
սարքաշարը:
Այս պատճառով, IBM PC-ով աշխատող հանրաճանաչ ծրագրակազմը հաճախ հիմնվում էր IBM PC-ի
ապարատային առանձնահատկությունների վրա: Մեքենաների արտադրողները, որոնք նախատեսված էին IBM
PC-ի հետ մրցունակ լինելու համար, հաճախ ստիպված էին կրկնօրինակել այդ յուրահատկությունները. դա
չանելը կհանգեցնի հանրաճանաչ ծրագրերի վատ աշխատանքին, եթե ընդհանրապես չաշխատեն: Նման
ծրագրաշարը հաճախ ներառում էր «IBM անհատական համակարգիչ կամ 100 տոկոսով համատեղելի»
ապարատային պահանջը կամ նմանատիպ այլ բան:
MS-DOS 2.0 տարբերակը, որը թողարկվել է 1983թ. մարտին, բարելավվել է կոշտ սկավառակի կրիչներ
տեղավորելու համար, որոնք այն ժամանակ փոքր էին (այսօրվա ստանդարտներով), բայց շուտով շատ ավելի
մեծ կլինեն: Որքան մեծ է սկավառակի սկավառակը, իհարկե, այնքան շատ ֆայլեր այն կարող է պահել: Եվ
որքան շատ ֆայլեր սկավառակը կարող է պահել, այնքան ավելի շփոթեցնող է դառնում որոշակի ֆայլ գտնելը
կամ ֆայլերի վրա որևէ տեսակի կազմակերպություն պարտադրելը:
MS-DOS 2.0-ի լուծումը կոչվում է հիերարխիկ ֆայլային համակարգ : Սա ավելացվել է գոյություն ունեցող
MS-DOS ֆայլային համակարգին՝ նվազագույն թվով փոփոխություններով: Ինչպես հիշում եք, սկավառակը
պարունակում է մի տարածք, որը կոչվում է գրացուցակ, որը ֆայլերի ցանկ է, որը ներառում է
տեղեկատվություն այն մասին, թե որտեղ են ֆայլերը պահվում սկավառակի վրա: Հիերարխիկ ֆայլային
համակարգում այս ֆայլերից մի քանիսն իրենք կարող են լինել դիրեկտորիաներ, այսինքն՝ դրանք ֆայլեր են,
որոնք պարունակում են այլ ֆայլերի ցանկ: Այս ֆայլերից մի քանիսը կարող են նաև գրացուցակներ լինել:
Սկավառակի սովորական գրացուցակը կոչվում է արմատային գրացուցակ : Այլ գրացուցակներում
պարունակվող տեղեկատուները կոչվում են ենթագրքեր : Գրացուցակները (երբեմն կոչվում են
թղթապանակներ ) դառնում են հարակից ֆայլերը խմբավորելու միջոց:
Հիերարխիկ ֆայլային համակարգը և MS-DOS 2.0-ի որոշ այլ առանձնահատկություններ վերցվել են UNIX
անունով օպերացիոն համակարգից, որը մշակվել է 1970-ականների սկզբին Bell Telephone
Laboratories-ում հիմնականում Քեն Թոմփսոնի (ծնված 1943) և Դենիս Ռիչիի (ծնված 1941 թ.)
կողմից: . Օպերացիոն համակարգի զվարճալի անվանումը բառախաղ է. UNIX-ը ի սկզբանե գրվել է որպես
Multics (որը նշանակում է Multiplexed Information and Computing Services) ավելի վաղ
օպերացիոն համակարգի ավելի քիչ դիմացկուն տարբերակ, որը Bell Labs-ը մշակում էր MIT-ի և GE-ի հետ:
Ծանր համակարգչային ծրագրավորողների թվում UNIX-ը բոլոր ժամանակների ամենասիրված օպերացիոն
համակարգն է: Թեև օպերացիոն համակարգերի մեծ մասը գրված է հատուկ համակարգիչների համար,
UNIX-ը նախագծվել է շարժական լինելու համար , ինչը նշանակում է, որ այն կարող է հարմարեցվել տարբեր
համակարգիչների վրա աշխատելու համար:
Bell Labs-ը, իհարկե, American Telephone & Telegraph-ի դուստր ձեռնարկությունն էր UNIX-ի
ստեղծման ժամանակ, և, հետևաբար, ենթարկվում էր դատական որոշումների, որոնք նախատեսված էին
հեռախոսային ոլորտում AT&T-ի մենաշնորհային դիրքը զսպելու համար: Ի սկզբանե AT&T-ին արգելված էր
UNIX-ի շուկայավարումը; ընկերությունը պարտավոր էր այն լիցենզավորել այլոց: Այսպիսով, սկսած 1973
թվականից, UNIX-ը լայնորեն լիցենզավորվեց համալսարաններին, կորպորացիաներին և կառավարությանը:
1983 թվականին AT&T-ին թույլ տվեցին վերադառնալ համակարգչային բիզնես և թողարկեց UNIX-ի իր
տարբերակը:
Արդյունքն այն է, որ UNIX-ի մեկ տարբերակ չկա: Փոխարենը կան մի շարք տարբեր տարբերակներ, որոնք
հայտնի են տարբեր անուններով, որոնք աշխատում են տարբեր վաճառողների կողմից վաճառվող տարբեր
համակարգիչների վրա: Շատ մարդիկ իրենց մատները դրել են UNIX-ի մեջ և թողել իրենց մատնահետքերը:
Այնուամենայնիվ, տարածված «UNIX փիլիսոփայությունը» կարծես առաջնորդում է մարդկանց, երբ նրանք
կտորներ են ավելացնում UNIX-ին: Այդ փիլիսոփայության մի մասը տեքստային ֆայլերի օգտագործումն է
որպես ընդհանուր հայտարար: UNIX-ի շատ կոմունալ ծառայություններ կարդում են տեքստային ֆայլեր,
ինչ-որ բան անում դրանց հետ, այնուհետև գրում են մեկ այլ տեքստային ֆայլ: UNIX-ի կոմունալ
ծառայությունները կարող են ցցվել շղթաներով, որոնք տարբեր տեսակի մշակումներ են կատարում այս
տեքստային ֆայլերի վրա:
UNIX-ը ի սկզբանե գրվել է համակարգիչների համար, որոնք չափազանց մեծ էին և շատ թանկ, որպեսզի
օգտագործեր միայն մեկ մարդ: Նման համակարգիչները թույլ են տալիս մի քանի օգտատերերի միաժամանակ
շփվել նրանց հետ՝ ժամանակի փոխանակման տեխնիկայի միջոցով : Համակարգիչը միացված է բազմաթիվ
էկրաններին և ստեղնաշարերին, որոնք կոչվում են տերմինալներ : Արագորեն փոխելով ուշադրությունը
բոլոր տերմինալների միջև՝ օպերացիոն համակարգը կարող է թվալ, թե համակարգիչը միաժամանակ
սպասարկում է բոլորին:
Օպերացիոն համակարգը, որը միաժամանակ գործարկում է բազմաթիվ ծրագրեր, հայտնի է որպես
բազմաֆունկցիոնալ օպերացիոն համակարգ, և ակնհայտորեն նման օպերացիոն համակարգն ավելի բարդ է,
քան մեկ առաջադրանքով օպերացիոն համակարգերը, ինչպիսիք են CP/M-ը և MS-DOS-ը: Multitasking-ը
բարդացնում է ֆայլային համակարգը, քանի որ մի քանի օգտվողներ կարող են փորձել օգտագործել նույն
ֆայլերը միաժամանակ: Այն նաև ազդում է այն բանի վրա, թե ինչպես է համակարգիչը հիշողություն
հատկացնում տարբեր ծրագրերին, ուստի անհրաժեշտ է հիշողության կառավարում : Քանի որ միաժամանակ
գործարկվող մի քանի ծրագրերը ավելի շատ հիշողություն են պահանջում, հավանական է, որ համակարգիչը
բավարար հիշողություն չի ունենա շրջելու համար: Օպերացիոն համակարգին կարող է անհրաժեշտ լինել
վիրտուալ հիշողություն կոչվող տեխնիկայի ներդրում , որի դեպքում հիշողության բլոկները պահվում են
ժամանակավոր ֆայլերում այն ժամանակաշրջաններում, երբ հիշողության բլոկները անհրաժեշտ չեն, և
այնուհետև նորից կարդում են հիշողության մեջ, երբ դրանք անհրաժեշտ են:
UNIX-ի համար ամենահետաքրքիր զարգացումը վերջին տարիներին եղել է Ազատ ծրագրակազմի
հիմնադրամը (FSF) և GNU նախագիծը, որոնք երկուսն էլ հիմնադրվել են Ռիչարդ Սթոլմանի կողմից:
GNU-ն (արտասանվում է ոչ թե կենդանիների նման, այլ սկզբում հստակ G-ով) նշանակում է «GNU's Not
UNIX», ինչը, իհարկե, այդպես չէ: Փոխարենը, GNU-ն նախատեսված է UNIX-ի հետ համատեղելի լինելու
համար, սակայն բաշխված է այնպես, որ ծրագրաշարը չդառնա սեփականության իրավունք: GNU նախագիծը
հանգեցրել է բազմաթիվ UNIX-ի հետ համատեղելի կոմունալ ծրագրերի և գործիքների, ինչպես նաև
Linux-ի, որը հանդիսանում է UNIX-ի հետ համատեղելի օպերացիոն համակարգի առանցքը (կամ միջուկը ):
Գրված հիմնականում Լինուս Տորվալդսի կողմից Ֆինլանդիայից, Linux-ը բավականին տարածված է դարձել
վերջին տարիներին:
Այնուամենայնիվ, 1980-ականների կեսերից ի վեր օպերացիոն համակարգերի ամենակարևոր միտումը խոշոր
և բարդ համակարգերի զարգացումն է, ինչպիսիք են Apple Macintosh-ը և Microsoft Windows-ը, որոնք
ներառում են գրաֆիկա և տեսողականորեն հարուստ տեսահոլովակ, որը նախատեսված է հավելվածներն
ավելի հեշտ օգտագործելու համար: . Ես նկարագրելու եմ այս միտումը այս գրքի վերջին գլխում:
Գլուխ 23. Հաստատուն կետ, լողացող կետ
Թվերը թվեր են, և մեր առօրյա կյանքում մենք պատահաբար շեղվում ենք ամբողջ թվերի, կոտորակների և
տոկոսների միջև: Մենք գնում ենք կես տուփ ձու և վճարում ենք 8 ¼ տոկոս վաճառքի հարկ՝ վաստակած
գումարով և ստանում ենք ժամանակ ու կես՝ 2 ¾ ժամ արտաժամյա աշխատելու համար: Մարդկանց
մեծամասնությունը բավականին հարմարավետ է, եթե ոչ անպայմանորեն տիրապետում է նման թվերին: Մենք
նույնիսկ կարող ենք լսել այնպիսի վիճակագրություն, ինչպիսին է «միջին ամերիկյան տնային
տնտեսությունն ունի 2,6 մարդ», առանց սարսափի շունչ քաշելու այն համատարած անդամահատումից, որը
պետք է տեղի ունենար դրան հասնելու համար:
Այնուամենայնիվ, ամբողջ թվերի և կոտորակների միջև այս փոխանակումն այնքան էլ պատահական չէ, երբ
խոսքը վերաբերում է համակարգչի հիշողությանը: Այո, համակարգիչներում ամեն ինչ պահվում է բիթերի
տեսքով, ինչը նշանակում է, որ ամեն ինչ պահվում է որպես երկուական թվեր։ Բայց որոշ տեսակի թվեր
հաստատ ավելի հեշտ են արտահայտել բիթերով, քան մյուսները:
Մենք սկսեցինք օգտագործել բիթերը՝ ներկայացնելու համար, թե մաթեմատիկոսներն ինչ են անվանում
դրական ամբողջ թվերը և ինչ համակարգչային ծրագրավորողները՝ դրական ամբողջ թվեր : Մենք նաև
տեսանք, թե ինչպես են երկուսի լրացումները թույլ տալիս մեզ ներկայացնել բացասական ամբողջ թվերը
այնպես, որ հեշտացնեն դրական և բացասական թվերի գումարումը: Հետևյալ էջի աղյուսակը ցույց է տալիս
8, 16 և 32 բիթ պահեստի համար դրական ամբողջ թվերի և երկու լրացնող ամբողջ թվերի տիրույթը:

Երկո
ւ-կո
Դրա
մպլե
կան
մեն
ամբ
Բիթ տ
ողջ
երի ամբ
թվեր
քան ողջ
ի
ակը թվեր
տիր
ի
ույթ
տիր
ույթ
0-ից -12
մինչ 8-ից
8
և 127
255 -ը
–32,
0-ից 768
մինչ -ից
16 և մինչ
65, և
535 32,
767
0-ից –
մինչ 2,1
և 47,
4,2 483
32
94, ,64
967 8-ից
,29 մինչ
5 և
2,1
47,
483
,64
7

Բայց այստեղ մենք կանգ առանք: Ամբողջ թվերից բացի, մաթեմատիկոսները նաև ռացիոնալ թվերը
սահմանում են որպես այն թվեր, որոնք կարող են ներկայացվել որպես երկու ամբողջ թվերի
հարաբերակցություն : Այս հարաբերակցությունը կոչվում է նաև կոտորակ : Օրինակ, ¾-ը ռացիոնալ թիվ է,
քանի որ դա 3-ի և 4-ի հարաբերակցությունն է: Մենք կարող ենք նաև գրել այս թիվը տասնորդական
կոտորակի կամ պարզապես տասնորդական ձևով՝ 0,75: Երբ մենք այն գրում ենք որպես տասնորդական, այն
իսկապես ցույց է տալիս կոտորակ, այս դեպքում
Դուք կհիշեք 7-րդ գլխից , որ տասնորդական թվային համակարգում տասնորդական կետի ձախ կողմում
գտնվող թվանշանները տասը ինտեգրալ հզորությունների բազմապատիկ են: Նմանապես, տասնորդական
կետի աջ կողմում գտնվող թվանշանները տասը բացասական հզորությունների բազմապատիկ են: Գլուխ 7-
ում ես օգտագործեցի 42,705.684 օրինակը՝ նախ ցույց տալով, որ այն հավասար է.

4x
10,
000
+
2x
100
0+
7x
100
+
0x
10
+
5x
1+

10
+

100
+

100
0

Ուշադրություն դարձրեք բաժանման նշաններին: Հետո ես ցույց տվեցի, թե ինչպես կարելի է գրել այս
հաջորդականությունը առանց որևէ բաժանման.

4x
10,
000
+
2x
100
0+
7x
100
+
0x
10
+
5x
1+
6x
0.1
+
8x
0,0
1+
4x
0,0
01

Եվ վերջապես, ահա տասը հզորություններ օգտագործող թիվը.

4x
104
+
2x
103
+
7x
102
+
0x
101
+
5x
100
+
6x
10-
1+
8x
10-
2+
4x
10-
3

Որոշ ռացիոնալ թվեր այնքան էլ հեշտությամբ չեն ներկայացվում որպես տասնորդականներ,


ամենաակնհայտը ⅓-ն է: Եթե 3-ը բաժանեք 1-ի, ապա կտեսնեք, որ ⅓-ը հավասար է

0.3
333
333
333
333
333
333
333
333
333
333
333
333
333
333
333
333
333
33

ու շարունակ ու շարունակ: Սովորական է սա ավելի հակիրճ գրել 3-ի վրայով մի փոքր գծով՝ ցույց տալու
համար, որ թվանշանը ընդմիշտ կրկնվում է.

Թեև ⅓ որպես տասնորդական կոտորակ գրելը մի փոքր անհարմար է, այն դեռ ռացիոնալ թիվ է, քանի որ
երկու ամբողջ թվերի հարաբերակցությունն է: Նմանապես, է

0.1
428
571
428
571
428
571
428
571
428
571
428
571
428
571
428
571
428
571

կամ

Իռացիոնալ թվերը հրեշներ են, ինչպիսիք են 2-ի քառակուսի արմատը: Այս թիվը չի կարող արտահայտվել
որպես երկու ամբողջ թվերի հարաբերակցություն, ինչը նշանակում է, որ տասնորդական կոտորակը
շարունակվում է անորոշ ժամանակով, առանց որևէ կրկնության կամ օրինակի.

2-ի քառակուսի արմատը հետևյալ հանրահաշվական հավասարման լուծումն է.

x2 –
2=
0

Եթե թիվը որևէ հանրահաշվական հավասարման լուծում չէ ամբողջ թվերի գործակիցներով, այն կոչվում է
տրանսցենդենտալ : (Բոլոր տրանսցենդենտալ թվերն իռացիոնալ են, բայց ոչ բոլոր իռացիոնալ թվերն են
տրանսցենդենտալ):
3.1
415
926
535
897
932
846
264
338
327
950
288
419
716
939
937
511

Մեկ այլ տրանսցենդենտալ թիվ e-ն է , որն այն թիվն է, որին մոտենում է այս արտահայտությունը.

քանի որ n-ը դառնում է շատ մեծ կամ մոտավորապես

2.7
182
818
284
590
452
353
602
874
713
526
624
977
572
470
936
999
6…

Բոլոր այն թվերը, որոնց մասին մենք մինչ այժմ խոսում էինք՝ ռացիոնալ թվերը և իռացիոնալ թվերը, կոչվում
են իրական թվեր: Այս նշանակումը դրանք տարբերում է երևակայական թվերից, որոնք բացասական թվերի
քառակուսի արմատներ են: Կոմպլեքս թվերը երևակայական և իրական թվերի համակցություններ են: Չնայած
իրենց անվանը, երևակայական թվերն իսկապես հայտնվում են իրական աշխարհում և օգտագործվում են
(օրինակ) էլեկտրոնիկայի որոշ առաջադեմ խնդիրներ լուծելու համար:
շարունակական համարել : Եթե դու ինձ երկու ռացիոնալ թիվ տաս, ես կարող եմ քեզ թիվ տալ այդ երկու
թվերի միջև։ Գործնականում ինձ մնում է միջինը վերցնել: Սակայն թվային համակարգիչները չեն կարող
գործ ունենալ շարունակականության հետ: Բիթերը կամ 0 են կամ 1, որոնց միջև ոչինչ չկա: Այսպիսով,
իրենց բնույթով թվային համակարգիչները պետք է գործ ունենան դիսկրետ արժեքների հետ: Դիսկրետ
արժեքների քանակը, որոնք դուք կարող եք ներկայացնել, ուղղակիորեն կապված է ձեր հասանելի բիթերի
քանակի հետ: Օրինակ, եթե որոշեք պահպանել դրական ամբողջ թվեր՝ օգտագործելով 32 բիթ, արժեքները,
որոնք դուք կարող եք պահել, ամբողջ թվերն են 0-ից մինչև 4,294,967,295: Եթե Ձեզ անհրաժեշտ է
պահպանել 4.5 արժեքը, դուք պետք է վերանայեք ձեր մոտեցումը և այլ բան անեք:
Կարո՞ղ են կոտորակային արժեքները ներկայացված լինել երկուական տարբերակով: Այո նրանք կարող են.
Ամենահեշտ մոտեցումը, հավանաբար, երկուական կոդավորված տասնորդական է (BCD): Ինչպես հիշում եք
19-րդ գլխից , BCD-ն տասնորդական թվերի երկուական կոդավորում է: Յուրաքանչյուր տասնորդական նիշ
(0, 1, 2, 3, 4, 5, 6, 7, 8 և 9) պահանջում է 4 բիթ, ինչպես ցույց է տրված հետևյալ աղյուսակում.

Տաս Երկո
նորդ ւակ
ակա ան
ն արժ
թվա եք
նշան
000
0
0
000
1
1
001
2
0
001
3
1
010
4
0
010
5
1
011
6
0
011
7
1
100
8
0
100
9

BCD-ն հատկապես օգտակար է համակարգչային ծրագրերում, որոնք աշխատում են դոլարով և ցենտով


դրամական գումարներով: Բանկերը և ապահովագրական ընկերությունները ընդամենը երկու ակնհայտ
ճյուղեր են, որոնք շատ բան ունեն փողի հետ. Այս տեսակի ընկերությունների կողմից օգտագործվող
համակարգչային ծրագրերում կոտորակային թվերից շատերը պահանջում են ընդամենը երկու տասնորդական
տեղ:
Սովորական է երկու BCD թվանշանները պահել 1 բայթում, մի համակարգ, որը երբեմն կոչվում է
փաթեթավորված BCD : Երկու լրացումները չեն օգտագործվում BCD-ի հետ: Այս պատճառով,
փաթեթավորված BCD-ն նույնպես սովորաբար պահանջում է լրացուցիչ բիթ՝ ցույց տալու համար, թե արդյոք
թիվը դրական է, թե բացասական: Սա կոչվում է նշանի բիթ : Քանի որ հարմար է BCD-ի որոշակի համարը
պահել ամբողջ թվով բայթերում, այդ մեկ փոքր նշանի բիթը սովորաբար ներառում է 4 բիթ կամ 8 բիթ
պահեստի զոհաբերում:
Դիտարկենք մի օրինակ։ Ենթադրենք, որ այն գումարները, որոնց հետ ձեր համակարգչային ծրագիրը պետք է
աշխատի, երբեք չի հասնում 10 միլիոն դոլարի՝ ոչ դրական, ոչ էլ բացասական ուղղությամբ: Այլ կերպ ասած,
դուք միայն պետք է ներկայացնեք դրամական արժեքները՝ սկսած –9,999,999.99-ից մինչև 9,999,999.99:
Դուք կարող եք դա անել՝ օգտագործելով 5 բայթ յուրաքանչյուր դոլար գումարի համար, որը դուք պետք է
պահեք հիշողության մեջ: Օրինակ, –4,325,120.25 գումարը ներկայացված է 5 բայթով

000
101
00
001
100
10
010
100
01
001
000
00
001
001
01

կամ տասնվեցական ձևով՝

14ժ
32ժ
51ժ
20ժ
25ժ

Ուշադրություն դարձրեք, որ ծայր ձախ կողմում խայթոցը 1 է` բացասական արժեք ցույց տալու համար: Սա
նշանն է: 0 կլիներ, եթե թիվը դրական լիներ։ Թվի բոլոր թվանշանները պահանջում են յուրաքանչյուրը 4
բիթ, և դուք կարող եք դրանք կարդալ անմիջապես տասնվեցական արժեքներից:
Եթե փոխարենը ձեզ հարկավոր էր արժեքներ ներկայացնել –99,999,999.99-ից մինչև 99,999,999.99,
ապա ձեզ հարկավոր կլինի 6 բայթ՝ 5 բայթ 10 նիշի համար և ամբողջ բայթ միայն նշանի բիտի համար:
Պահպանման և նշագրման այս տեսակը կոչվում է նաև ֆիքսված կետի ձևաչափ, քանի որ տասնորդական
կետը միշտ ամրագրված է որոշակի թվով տեղերում, մեր օրինակում՝ երկու տասնորդական վայրերում:
Ուշադրություն դարձրեք, որ իրականում ոչինչ չի պահվում այն թվի հետ, որը ցույց է տալիս տասնորդական
կետի դիրքը: Ֆիքսված կետի ձևաչափով թվերի հետ աշխատող ծրագրերը պետք է իմանան, թե որտեղ է
տասնորդական կետը: Դուք կարող եք ստեղծել ֆիքսված կետով թվեր ցանկացած թվով տասնորդական թվերով,
և կարող եք խառնել և համապատասխանեցնել այդ թվերը նույն համակարգչային ծրագրում: Բայց ծրագրի
ցանկացած մաս, որը թվաբանություն է անում թվերի վրա, պետք է իմանա, թե որտեղ են տասնորդական
կետերը:
Ֆիքսված կետի ձևաչափը լավ է աշխատում միայն այն դեպքում, եթե գիտեք, որ թվերը շատ մեծ չեն լինի ձեր
գծագրած հիշողության գտնվելու վայրի համար, և որ ձեզ ավելի շատ տասնորդական թվեր պետք չեն լինի:
Ֆիքսված կետի ձևաչափը բացարձակապես ձախողվում է այն իրավիճակներում, երբ թվերը կարող են դառնալ
շատ մեծ կամ շատ փոքր: Ենթադրենք, դուք պետք է վերապահեք հիշողության մի տարածք, որտեղ դուք կարող
եք պահպանել որոշակի հեռավորություններ ոտքերի միավորներով: Խնդիրն այն է, որ այդ
հեռավորությունները կարող են տատանվել ամենուր: Երկրից Արև հեռավորությունը 490,000,000,000
ֆուտ է, իսկ ջրածնի ատոմի շառավիղը՝ 0,00000000026 ֆուտ։ Ձեզ անհրաժեշտ կլինի 12 բայթ ֆիքսված
կետի պահեստ՝ տեղավորելու արժեքները, որոնք կարող են լինել նույնքան մեծ և այնքան փոքր, որքան դրանք:
Հավանաբար, մենք կարող ենք ավելի լավ տարբերակ մշակել նման թվերը պահելու համար, եթե հիշենք, որ
գիտնականներն ու ինժեներները հաճույք են ստանում թվեր նշելուց՝ օգտագործելով գիտական նշում կոչվող
համակարգը : Գիտական նշումը հատկապես օգտակար է շատ մեծ և շատ փոքր թվեր ներկայացնելու համար,
քանի որ այն ներառում է տասի ուժ, որը թույլ է տալիս խուսափել զրոների երկար տողեր գրելուց: Գիտական
նշումով համարը

490
,00
0,0
00,
000

գրված է

4,9
x
101
1

և համարը

0,0
000
000
002
6

գրված է

2,6
x
10-
10

Այս երկու օրինակներում 4.9 և 2.6 թվերը կոչվում են կոտորակային մաս կամ հատկանիշ , կամ երբեմն (թեև
այս բառն ավելի ճիշտ օգտագործվում է լոգարիթմների հետ միասին) մանտիսա : Բայց համակարգիչների հետ
օգտագործվող տերմինաբանությանը ավելի համահունչ լինելու համար ես գիտական նշագրման այս հատվածը
կանվանեմ «significand » :
Ցուցադրող մասն այն հզորությունն է, որին բարձրացվում է 10-ը : Առաջին օրինակում ցուցիչը 11 է; իսկ
երկրորդ օրինակում ցուցիչը –10 է: Ցուցանիշը ցույց է տալիս, թե տասնորդական կետը քանի տեղ է
տեղափոխվել նշանակության մեջ:
Ըստ պայմանականության, նշանակությունը միշտ մեծ է կամ հավասար է 1-ից և փոքր է 10-ից: Չնայած
հետևյալ թվերը նույնն են.

4,9
x
101
1=
49 x
101
0=
490
x
109
=
0,4
9x
101
2=
0,0
49 x
101
3

նախընտրելի է առաջինը. Դա երբեմն կոչվում է գիտական նշումների նորմալացված ձև:


Ուշադրություն դարձրեք, որ ցուցիչի նշանը ցույց է տալիս միայն թվի մեծությունը, այլ ոչ թե թիվն ինքնին
բացասական է, թե դրական: Ահա գիտական նշումով բացասական թվերի երկու օրինակ.

–5,8
125
x
107

հավասար է

–58,
125
,00
0

–5,8
125
x
10-
7

հավասար է

–0.0
000
005
812
5

Համակարգիչներում ֆիքսված կետով նշագրման այլընտրանքը կոչվում է լողացող կետի նշում, իսկ լողացող
կետի ձևաչափը իդեալական է փոքր և մեծ թվեր պահելու համար, քանի որ այն հիմնված է գիտական
նշումների վրա: Բայց լողացող կետի ձևաչափը, որն օգտագործվում է համակարգիչներում, օգտագործում է
երկուական թվեր, որոնք գրված են գիտական նշումով: Առաջին բանը, որ մենք պետք է հասկանանք, այն է, թե
ինչպիսին են կոտորակային թվերը երկուականում:
Սա իրականում ավելի հեշտ է, քան կարող է թվալ: Տասնորդական նշումով տասնորդական կետի աջ կողմում
գտնվող թվերը ներկայացնում են տասի բացասական ուժերը: Երկուական նշումով երկուական կետի աջ
կողմում գտնվող թվանշանները (որը պարզապես կետ է և նման է տասնորդական կետի) ներկայացնում են
երկուսի բացասական ուժերը: Օրինակ՝ այս երկուական թիվը

101
.11
01

կարելի է վերածել տասնորդականի՝ օգտագործելով այս բանաձևը.

1x
4+
0x
2+
1x
1+

2+

4+

8+

16

Բաժանման նշանները կարող են փոխարինվել երկուսի բացասական ուժերով.

1x
22
+
0x
21
+
1x
20
+
1x
2-1
+
1x
2-2
+
0x
2-3
+
1x
2-4

Կամ երկուսի բացասական ուժերը կարելի է հաշվարկել՝ սկսելով 1-ից և բազմիցս բաժանելով 2-ի.

1x
4+
0x
2+
1x
1+
1x
0,5
+
1x
0,2
5+
0x
0,1
25+
1x
0,0
625

Այս հաշվարկով 101.1101-ի տասնորդական համարժեքը 5.8125 է։


Տասնորդական գիտական նշումներում նորմալացված նշանակությունը պետք է լինի 1-ից մեծ կամ հավասար,
բայց 10-ից փոքր: Նմանապես, երկուական գիտական նշումով թվերի նորմալացված նշանակությունը միշտ
մեծ է կամ հավասար է 1-ին, բայց փոքր է երկուական 10-ից, որը 2 դյույմ է: տասնորդական. Այսպիսով,
երկուական գիտական նշումով, թիվը

101
.11
01

արտահայտվում է որպես

1,0
111
01 x
22

Այս կանոնի հետաքրքիր հետևանքներից մեկն այն է, որ նորմալացված երկուական լողացող կետի համարը
միշտ ունի 1 և ոչ մի այլ բան երկուական կետի ձախ կողմում:
Ժամանակակից համակարգիչների և համակարգչային ծրագրերի մեծ մասը, որոնք զբաղվում են լողացող
կետով թվերի հետ, օգտագործում են ստանդարտ, որը հաստատվել է IEEE-ի (Էլեկտրական և էլեկտրոնիկայի
ինժեներների ինստիտուտի) կողմից 1985 թվականին, ստանդարտ, որը նաև ճանաչվել է ANSI-ի կողմից
(Ամերիկյան ստանդարտների ազգային ինստիտուտ): ANSI/IEEE Std 754-1985-ը կոչվում է IEEE
ստանդարտ երկուական լողացող կետ թվաբանության համար : Այն այնքան էլ երկար չէ, քանի որ
ստանդարտները գնում են՝ ընդամենը 18 էջ, բայց տալիս է երկուական լողացող կետով թվերի կոդավորման
հիմունքները հարմար ձևով:
IEEE լողացող կետի ստանդարտը սահմանում է երկու հիմնական ձևաչափ՝ մեկ ճշգրտություն, որը
պահանջում է 4 բայթ և կրկնակի ճշգրտություն, որը պահանջում է 8 բայթ:
Եկեք նախ նայենք մեկ ճշգրիտ ձևաչափին: Այն ունի երեք մաս՝ 1-բիթանոց նշան (0 դրական և 1-ը՝
բացասական), 8-բիթանոց ցուցիչ և 23-բիթանոց նշանակալի կոտորակ՝ դասավորված այսպես, աջ կողմում
ամենաքիչ նշանակալի բիթերով.

f=
e=
23-
s = 8-bi
բիթ
1-բի t
նշան
թան Exp
ակա
ոց one լից
նշան nt և
կոտ
որա
կ

Դա ընդհանուր առմամբ 32 բիթ է կամ 4 բայթ: Քանի որ նորմալացված երկուական լողացող կետի համարի
նշանակությունը միշտ ունի 1 երկուական կետից ձախ, այդ բիթը ներառված չէ IEEE ձևաչափով լողացող
կետերի թվերի պահպանման մեջ: Նշանակի 23-բիթանոց կոտորակային մասը պահպանված միակ մասն է:
Այսպիսով, թեև նշանակությունը պահելու համար օգտագործվում է ընդամենը 23 բիթ, ճշգրտությունը
համարվում է 24 բիթ: Մենք մի պահ կզգանք, թե ինչ է նշանակում 24-բիթանոց ճշգրտությունը:
8-բիթանոց ցուցիչի մասը կարող է տատանվել 0-ից մինչև 255: Սա կոչվում է կողմնակալ ցուցիչ, ինչը
նշանակում է, որ դուք պետք է ցուցիչից հանեք մի թիվ, որը կոչվում է կողմնակալություն , որպեսզի որոշեք
իրականում կիրառվող նշանավոր ցուցիչը: Մեկ ճշգրտությամբ լողացող կետով թվերի համար այս
կողմնակալությունը 127 է:
0 և 255 ցուցիչներն օգտագործվում են հատուկ նպատակների համար, որոնք ես շուտով նկարագրելու եմ:
Եթե ցուցիչը տատանվում է 1-ից մինչև 254, ապա թիվը, որը ներկայացված է s- ի (նշանի բիթ), e
(ցուցանիշ) և f (նշանակալի կոտորակի) որոշակի արժեքներով.

(–1)
sx
1.fx
2e-
127

Այդ բացասական 1-ը s- ի աստիճանին մաթեմատիկոսի նյարդայնացնող խելացի ձևն է ասելու. «Եթե s-ը 0 է,
ապա թիվը դրական է (քանի որ 0-ի հզորության որևէ բան հավասար է 1-ի), իսկ եթե s-ը 1 է, ապա թիվը
բացասական է (որովհետև – 1-ից 1-ի հզորությունը –1 է):»
Արտահայտության հաջորդ մասը 1.f է , որը նշանակում է 1, որին հաջորդում է երկուական կետ, որին
հաջորդում են նշանակալի կոտորակի 23 բիթերը: Սա բազմապատկվում է 2-ով և ստացվում է հզորություն:
Ցուցանիշը 8-բիթանոց կողմնակալ ցուցիչն է, որը պահվում է հիշողության մեջ մինուս 127:
Ուշադրություն դարձրեք, որ ես չեմ նշել որևէ ձև՝ արտահայտելու շատ տարածված թիվը, որի մասին մենք
կարծես թե մոռացել ենք, այն է՝ 0: Սա հատուկ դեպքերից է, որոնք հետևյալն են.
● Եթե e-ը հավասար է 0-ի, իսկ f-ը հավասար է 0-ի, ապա թիվը 0 է: Ընդհանրապես, բոլոր 32
բիթերը սահմանվում են 0-ի` նշանակելու համար 0: Բայց նշանի բիթը կարող է լինել 1, որի
դեպքում թիվը մեկնաբանվում է որպես բացասական 0 : Բացասական 0-ը կարող է ցույց տալ
շատ փոքր թիվ, որը հնարավոր չէ ներկայացնել առկա թվանշաններով և ցուցիչներով մեկ
ճշգրիտ ձևաչափով, բայց որը դեռևս 0-ից փոքր է:
● Եթե e-ը հավասար է 0-ի, իսկ f-ը հավասար չէ 0-ի, ապա թիվը վավեր է, բայց այն նորմալացված
չէ: Թիվը հավասար է

(–1)
sx
0.fx
2-1
27

Ուշադրություն դարձրեք, որ նշանակությունը ունի 0 երկուական կետից ձախ:


● Եթե e-ը հավասար է 255-ի, իսկ f-ը հավասար է 0-ի, ապա թիվը դրական կամ բացասական
անվերջություն է՝ կախված s նշանից :
● Եթե e-ը հավասար է 255-ի, իսկ f-ը հավասար չէ 0-ի, ապա արժեքը համարվում է ոչ մի թիվ ,
որը հապավում է NaN : NaN-ը կարող է ցույց տալ անհայտ թիվ կամ անվավեր գործողության
արդյունք:
Ամենափոքր նորմալացված դրական կամ բացասական երկուական թիվը, որը կարող է ներկայացվել մեկ
ճշգրիտ լողացող կետի ձևաչափով.

1.0
000
000
000
000
000
000
000
02 x
2-1
26

Դա երկուական կետին հաջորդող 23 երկուական զրո է: Ամենամեծ նորմալացված դրական կամ բացասական
թիվն այն է, որը կարող է ներկայացվել մեկ ճշգրիտ լողացող կետի ձևաչափով.

1.1
111
111
111
111
111
111
111
1T
WO
x
212
7

Տասնորդականում այս երկու թվերն են մոտավորապես 1,175494351 x 10 -38 և 3,402823466 x 10 38 :


Դա լողացող կետով մեկ ճշգրիտ նշման արդյունավետ տիրույթն է:
Դուք կարող եք հիշել, որ 10 երկուական թվանշանները մոտավորապես նույնն են, ինչ 3 տասնորդական
թվանշանները: Դրանով ես նկատի ունեմ, որ 1-ի սահմանած 10 բիթը, որը տասնորդականում 3FFh է, իսկ
տասնորդականում՝ 1023, մոտավորապես հավասար է 9-ի կամ 999-ի սահմանված 3 տասնորդական
թվանշանի: Կամ:

210

103

Այս հարաբերությունը ենթադրում է, որ 24-բիթանոց երկուական թիվը, որը պահվում է մեկ ճշգրիտ լողացող
կետի ձևաչափով, մոտավորապես համարժեք է 7 տասնորդական թվանշանին: Այդ իսկ պատճառով, ասվում է,
որ մեկ ճշգրիտ լողացող կետի ձևաչափն առաջարկում է 24 բիթ կամ մոտ 7 տասնորդական թվանշան: Ինչ է
սա նշանակում?
Երբ մենք նայում էինք ֆիքսված կետով թվերին, ակնհայտ էր, թե որքան ճշգրիտ են թվերը: Գումարների
համար, օրինակ, երկու տասնորդական թվերով ֆիքսված կետով թիվը ակնհայտորեն ճշգրիտ է մոտակա
կոպեկին: Բայց լողացող թվերով մենք չենք կարող նման բան ասել: Կախված ցուցիչի արժեքից, երբեմն
լողացող կետով թիվը կարող է ճշգրիտ լինել մինչև կոպեկի չնչին մասնաբաժինը, իսկ երբեմն նույնիսկ
ճշգրիտ չէ մոտակա դոլարով:
Ավելի տեղին է ասել, որ մեկ ճշգրիտ լողացող կետով թիվը ճշգրիտ է 2 24 -ում 1 մասի կամ 16,777,216-ի 1
մասի կամ միլիոնի մոտ 6 մասի նկատմամբ: Բայց ի՞նչ է սա իրականում նշանակում:
Առաջին հերթին, դա նշանակում է, որ եթե փորձեք և՛ 16,777,216, և՛ 16,777,217-ը ներկայացնել որպես
մեկ ճշգրիտ լողացող կետով թվեր, նրանք կհայտնվեն նույնական: Ընդ որում, այդ երկուսի միջև եղած
ցանկացած թիվ (օրինակ՝ 16,777,216.5) նույնպես համարվում է նույնական։ Այս բոլոր երեք
տասնորդական թվերը պահվում են որպես 32-բիթանոց մեկ ճշգրիտ լողացող կետի արժեք

4B8
000
00h

որը, բաժանված նշանի, ցուցիչի և նշանակալի բիթերի, ունի հետևյալ տեսքը.

0
100
101
11
000
000
000
000
000
000
000
000

որը թիվն է

1.0
000
000
000
000
000
000
000
02 x
224
.

Հաջորդ ամենաբարձր նշանակությունը երկուական լողացող կետի թիվն է, որը ներկայացնում է 16,777,218
կամ

1.0
000
000
000
000
000
000
000
01T
WO
x
224

Կարող է խնդիր լինել կամ չլինել, որ երկու տարբեր տասնորդական թվեր պահվում են որպես նույնական
լողացող կետային արժեքներ:
Բայց եթե դուք ծրագիր էիք գրում բանկի համար և օգտագործեիք մեկ ճշգրիտ լողացող կետով թվաբանություն
դոլար և ցենտ պահելու համար, հավանաբար խորապես անհանգստացած կլինեիք բացահայտել, որ
262,144,00 դոլարը նույնն է, ինչ 262,144,01 դոլարը: Այս երկու թվերն էլ

1.0
000
000
000
000
000
000
000
002
x
218
.

Դա է պատճառներից մեկը, թե ինչու է նախընտրելի ֆիքսված կետը դոլարի և ցենտի հետ գործ ունենալիս:
Երբ աշխատում եք լողացող բալանոց թվերի հետ, կարող եք նաև բացահայտել այլ փոքրիկ
տարօրինակություններ, որոնք կարող են ձեզ խելագարեցնել: Ձեր ծրագիրը կկատարի հաշվարկ, որը պետք է
տա 3,50 արդյունք, իսկ փոխարենը կստանաք 3,499999999999: Այս տեսակի բաները սովորաբար տեղի
են ունենում լողացող կետի հաշվարկներում, և դուք շատ բան չեք կարող անել դրա համար:
Եթե լողացող կետով նշումը այն է, ինչ դուք ցանկանում եք օգտագործել, բայց միանգամյա ճշգրտությամբ այն
չի կոտրում այն, դուք հավանաբար կցանկանաք օգտագործել լողացող կետի կրկնակի ճշգրտության ձևաչափը:
Այս թվերը պահանջում են 8 բայթ պահեստ՝ դասավորված այսպես.

f=
52-
e= բիթ
s = 11- նշան
1-բի bit ակա
թան Exp լից
ոց one և
նշան nt կոտ
որա
կ

Ցուցանիշի կողմնակալությունը 1023 է կամ 3FFh, ուստի նման ձևաչափով պահվող թիվը

(–1)
sx
1.fx
2e-
102
3
Նմանատիպ կանոնները, ինչ մենք հանդիպեցինք մեկ ճշգրիտ ձևաչափով, կիրառվում են 0-ի,
անսահմանության և NaN-ի համար:
Ամենափոքր դրական կամ բացասական կրկնակի ճշգրտությամբ լողացող կետի թիվն է

1.0
000
000
000
000
000
000
000
000
000
.00
0

Դա երկուական կետին հաջորդող 52 զրո է: Ամենամեծն է

1.1
111
111
111
111
111
111
111
111
111
111
111
111
111
111
111
111
111
TW
Ox
210
23

Շրջանակը տասնորդական է մոտավորապես 2,2250738585072014 x 10 -308 -ից մինչև


1,7976931348623158 x 10 308 : Տասը 308-րդ ուժին շատ մեծ թիվ է։ Այն 1-ն է, որին հաջորդում են
308 տասնորդական զրոներ:
Նշանակության 53 բիթը (ներառյալ 1 բիթը, որը ներառված չէ) մոտավորապես 16 տասնորդական թվանշանի
լուծաչափ է: Սա շատ ավելի լավ է, քան մեկ ճշգրիտ լողացող կետի ձևաչափը, բայց դա դեռ նշանակում է, որ
ի վերջո որոշ թվեր կհավասարվեն որևէ այլ թվի: Օրինակ, 140,737,488,355,328.00 նույնն է, ինչ
140,737,488,355,328.01: Այս երկու թվերը երկուսն էլ պահվում են որպես 64-բիթանոց կրկնակի
ճշգրտության լողացող կետի արժեք

42E
000
000
000
000
00 ժ

որը վերծանվում է որպես

1.0
000
000
000
000
000
000
000
000
000
0.0
00

Իհարկե, լողացող կետով թվերը հիշողության մեջ պահելու ձևաչափի մշակումը միայն մի փոքր մասն է այս
թվերը ձեր անսամբլալեզու ծրագրերում իրականում օգտագործելու մեջ: Եթե դուք իսկապես մշակում էիք
անապատային կղզու համակարգիչ, ապա այժմ ձեզ կբախվեր գործառույթների հավաքածու գրել, որոնք
գումարում, հանում, բազմապատկում և բաժանում են լողացող թվերը: Բարեբախտաբար, այս աշխատանքները
կարելի է բաժանել ավելի փոքր աշխատանքների, որոնք ներառում են ամբողջ թվերի ավելացում, հանում,
բազմապատկում և բաժանում , որը դուք արդեն գիտեք, թե ինչպես անել:
Օրինակ, լողացող կետով գումարումը հիմնականում պահանջում է, որ դուք ավելացնեք երկու նշանակություն.
Բարդ մասը երկու ցուցիչների օգտագործումն է՝ պարզելու, թե ինչպես են երկու նշանակությունները
միախառնվում: Ենթադրենք, որ դուք պետք է կատարեք հետևյալ հավելումը.

(1,1
101
x
25)
+
(1,0
010
x
22)

Պետք է ավելացնել 11101 և 10010, բայց ոչ հենց այդպես: Ցուցանիշների տարբերությունը ցույց է
տալիս, որ երկրորդ թիվը պետք է փոխվի առաջինից: Ամբողջ թվերի գումարումը իսկապես պահանջում է, որ
օգտագործեք 11101000 և 10010: Վերջնական գումարը.

1,1
111
010
x 25

Երբեմն ցուցիչները այնքան հեռու կլինեն միմյանցից, որ երկու թվերից մեկը նույնիսկ չի ազդի գումարի վրա:
Սա կլիներ այն դեպքը, եթե դուք ավելացնեիք Արեգակի հեռավորությունը և ջրածնի ատոմի շառավիղը:
Երկու լողացող թվերի բազմապատկում նշանակում է բազմապատկել երկու նշանակալիցները այնպես,
կարծես դրանք ամբողջ թվեր լինեն և գումարել երկու ամբողջ թվերի ցուցիչները: Նշանակալիության
նորմալացումը կարող է հանգեցնել մեկ կամ երկու անգամ նվազեցնելու նոր ցուցիչը:
Լողացող կետային թվաբանության բարդության մեկ այլ շերտ ներառում է զվարճալի նյութերի հաշվարկը,
ինչպիսիք են արմատները և աստիճանները, լոգարիթմները և եռանկյունաչափական ֆունկցիաները: Բայց
այս բոլոր աշխատանքները կարող են կատարվել չորս հիմնական լողացող կետով գործողություններով՝
գումարում, հանում, բազմապատկում և բաժանում:
Օրինակ, եռանկյունաչափության սինուսի ֆունկցիան կարելի է հաշվարկել շարքի ընդլայնմամբ, այսպես.

x արգումենտը պետք է լինի ռադիաններով : 360 աստիճանում կա 2π ռադիան: Բացականչական նշանը


գործոնային նշան է։ Նշանակում է 1-ից նշված թվով բոլոր ամբողջ թվերը միասին բազմապատկել։ Օրինակ,
5! հավասար է 1 x 2 x 3 x 4 x 5: Դա ընդամենը բազմապատկում է: Յուրաքանչյուր անդամի ցուցանիշը
նույնպես բազմապատկվում է: Մնացածը միայն բաժանում, գումարում և հանում է: Միակ իսկապես
սարսափելի մասը վերջում գտնվող էլիպսիսն է, ինչը նշանակում է հավիտյան շարունակել հաշվարկները :
Իրականում, սակայն, եթե դուք սահմանափակվում եք 0-ից π/2 միջակայքում (որից կարելի է բխել բոլոր
սինուսային արժեքները), դուք ստիպված չեք լինի ընդմիշտ գնալ որևէ տեղ մոտ: Մոտ մեկ տասնյակ
տերմիններից հետո դուք ճշգրիտ եք կրկնակի ճշգրտությամբ թվերի 53-բիթանոց լուծմանը:
Իհարկե, ենթադրվում է, որ համակարգիչները մարդկանց համար հեշտացնում են գործը, ուստի լողացող
կետով թվաբանություն կատարելու համար մի շարք առօրյաներ գրելու ծանրաբեռնվածությունը կարծես թե
հակասում է նպատակին: Այնուամենայնիվ, դա ծրագրային ապահովման գեղեցկությունն է: Երբ ինչ-որ մեկը
գրում է լողացող կետի ռեժիմները որոշակի մեքենայի համար, այլ մարդիկ կարող են օգտագործել դրանք:
Լողացող կետային թվաբանությունն այնքան կարևոր է գիտական և ինժեներական կիրառությունների համար,
որ ավանդաբար դրան շատ բարձր առաջնահերթություն է տրվում: Համակարգիչների ստեղծման սկզբնական
շրջանում լողացող կետով ռեժիմներ գրելը միշտ եղել է ծրագրային ապահովման առաջին աշխատանքներից
մեկը, երբ ստեղծվել է նոր տեսակի համակարգիչ:
Իրականում, նույնիսկ իմաստ ունի կիրառել համակարգչային մեքենայի կոդ հրահանգներ, որոնք
ուղղակիորեն կատարում են լողացող կետի թվաբանություն: Ակնհայտ է, որ դա ավելի հեշտ է ասել, քան
անել: Բայց ահա թե որքան կարևոր են լողացող կետի հաշվարկները: Եթե դուք կարողանաք իրականացնել
լողացող կետով թվաբանություն սարքաշարում, ինչպես 16-բիթանոց միկրոպրոցեսորների բազմապատկման
և բաժանման հրահանգները, մեքենայի վրա կատարված լողացող կետի բոլոր հաշվարկներն ավելի արագ
կլինեն:
Առաջին առևտրային համակարգիչը, որը ներառում էր լողացող կետով սարքավորում, որպես տարբերակ,
IBM 704-ն էր 1954 թվականին: 704-ը պահում էր բոլոր թվերը որպես 36-բիթանոց արժեքներ: Լողացող
կետով թվերի համար, որոնք բաժանվում են 27-բիթանոց նշանակության, 8-բիթանոց ցուցիչի և նշանի բիտի:
Լողացող կետով սարքավորումը կարող էր կատարել գումարում, հանում, բազմապատկում և բաժանում:
Լողացող կետով այլ գործառույթներ պետք է իրականացվեին ծրագրային ապահովման մեջ:
Սարքավորումների լողացող կետով թվաբանությունը աշխատասեղանին հայտնվեց 1980 թվականին, երբ
Intel-ը թողարկեց 8087 Numeric Data Coprocessor չիպը, ինտեգրալային սխեմայի մի տեսակ, որը
սովորաբար կոչվում է մաթեմատիկական համապրոցեսոր կամ լողացող կետով միավոր (FPU): 8087-ը
կոչվում է կոպրոցեսոր , քանի որ այն չի կարող օգտագործվել ինքնուրույն: Այն կարող էր օգտագործվել
միայն 8086 և 8088՝ Intel-ի առաջին 16-բիթանոց միկրոպրոցեսորների հետ համատեղ:
8087-ը 40 փինանոց չիպ է, որն օգտագործում է նույն ազդանշանները, ինչ 8086 և 8088 չիպերը: Այս
ազդանշանների միջոցով միացված են միկրոպրոցեսորը և մաթեմատիկական կոպրոցեսորը։ Երբ պրոցեսորը
կարդում է հատուկ հրահանգ, որը կոչվում է ESC Escape-ի համար , համապրոցեսորը վերցնում և կատարում
է մեքենայի հաջորդ կոդը, որը ցույց է տալիս 68 հրահանգներից մեկը, որը ներառում է
եռանկյունաչափություն, ցուցիչներ և լոգարիթմներ: Տվյալների տեսակները հիմնված են IEEE ստանդարտի
վրա: Այն ժամանակ 8087-ը համարվում էր երբևէ ստեղծված ամենաբարդ ինտեգրալային սխեման:
Դուք կարող եք համապրոցեսորի մասին պատկերացնել որպես փոքրիկ ինքնամփոփ համակարգիչ: Ի
պատասխան լողացող կետով մեքենայի կոդի որոշակի հրահանգի (օրինակ՝ FSQRT քառակուսի արմատը
հաշվարկելու համար), համապրոցեսորը ներքին կարգով կատարում է ROM-ում կոդավորված հրահանգների
իր շարքը: Այս ներքին հրահանգները կոչվում են միկրոկոդ : Հրահանգները սովորաբար պտտվում են, ուստի
հաշվարկի արդյունքն անմիջապես հասանելի չէ: Այնուամենայնիվ, մաթեմատիկական համապրոցեսորը
սովորաբար առնվազն 10 անգամ ավելի արագ է, քան ծրագրային ապահովման մեջ կատարված համարժեք
առօրյաները:
Բնօրինակ IBM PC-ի մայր տախտակը ուներ 8087 չիպի համար 40 փին վարդակ հենց 8088 չիպի կողքին:
Ցավոք, այս վարդակից դատարկ էր: Օգտատերերը, որոնց անհրաժեշտ էր լրացուցիչ լողացող կետի
արագություն, պետք է առանձին գնեին 8087 և տեղադրեին այն: Նույնիսկ մաթեմատիկական
համապրոցեսորի տեղադրումից հետո ոչ բոլոր հավելվածներն ավելի արագ կաշխատեն: Որոշ հավելվածներ,
ինչպիսիք են բառի մշակողները, շատ քիչ կարիք ունեն լողացող կետով թվաբանության: Մյուսները, օրինակ՝
աղյուսակային ծրագրերը, կարող են շատ ավելի շատ օգտագործել լողացող կետի հաշվարկը, և այս ծրագրերը
պետք է ավելի արագ աշխատեն, բայց ոչ բոլորն են արել:
Տեսեք, ծրագրավորողները պետք է հատուկ կոդ գրեին համապրոցեսորի համար, որն օգտագործում էր
կոպրոցեսորի մեքենայի կոդերի հրահանգները: Քանի որ մաթեմատիկական կոպրոցեսորը ստանդարտ
սարքաշար չէր, շատ ծրագրավորողներ չփորձեցին դա անել: Ի վերջո, նրանք, այնուամենայնիվ, պետք է գրեին
իրենց սեփական լողացող կետով ենթածրագրերը (քանի որ մարդկանց մեծամասնությունը չուներ տեղադրված
մաթեմատիկական համապրոցեսոր), ուստի լրացուցիչ աշխատանք դարձավ 8087 չիպին աջակցելը, ոչ
պակաս աշխատանք: Ի վերջո, ծրագրավորողները սովորեցին գրել իրենց հավելվածները՝ օգտագործելու
մաթեմատիկական կոպրոցեսորը, եթե այն առկա է մեքենայի վրա, որի վրա աշխատում էին իրենց ծրագրերը, և
ընդօրինակել այն, եթե այն չկա:
Տարիների ընթացքում Intel-ը թողարկեց նաև 287 մաթեմատիկական կոպրոցեսոր 286 չիպի համար, և
387՝ 386-ի համար: Բայց 1989-ին Intel 486DX-ի թողարկմամբ, FPU-ն կառուցվեց հենց պրոցեսորի մեջ:
Այլևս դա տարբերակ չէր: Ցավոք, 1991 թվականին Intel-ը թողարկեց ավելի ցածր գնով 486SX, որը չուներ
ներկառուցված FPU և փոխարենը որպես տարբերակ առաջարկեց 487SX մաթեմատիկական համապրոցեսոր:
1993 թվականին Pentium-ի թողարկումով, սակայն, ներկառուցված FPU-ն նորից դարձավ ստանդարտ,
գուցե բոլոր ժամանակների համար: Motorola-ն ինտեգրել է FPU-ն իր 68040 միկրոպրոցեսորով, որը
թողարկվել է 1990 թվականին: Նախկինում Motorola-ն վաճառել է 68881 և 68882 մաթեմատիկական
համապրոցեսորներ՝ 68000 ընտանիքի նախկին միկրոպրոցեսորներին աջակցելու համար: PowerPC
չիպերն ունեն նաև ներկառուցված լողացող կետով սարքավորում:
Թեև լողացող կետով թվաբանության սարքավորումը լավ նվեր է անսամբլի լեզվով զբաղվող ծրագրավորողի
համար, այն բավականին փոքր պատմական առաջընթաց է, երբ համեմատվում է 1950-ականների սկզբին
սկսված որոշ այլ աշխատանքների հետ: Մեր հաջորդ կանգառը՝ համակարգչային լեզուներ։
Գլուխ 24. Լեզուներ Բարձր և ցածր
Մեքենայի կոդով ծրագրավորումը նման է դագանակով ուտելուն: Խայթոցներն այնքան փոքր են, և
գործընթացն այնքան աշխատատար, որ ընթրիքը հավերժ է տևում: Նմանապես, մեքենայական կոդի բայթերը
կատարում են ամենափոքր և ամենապարզ հաշվողական առաջադրանքները՝ հիշողությունից թվի բեռնում
պրոցեսոր, ավելացնելով այն մյուսի մեջ, արդյունքը հետ պահելով հիշողության մեջ, այնպես որ դժվար է
պատկերացնել, թե ինչպես են դրանք նպաստում մի ամբողջության: ճաշ.
22-րդ գլխի սկզբում , որտեղ մենք օգտագործում էինք կառավարման վահանակի անջատիչներ երկուական
տվյալները հիշողության մեջ մուտքագրելու համար: Այդ գլխում մենք հայտնաբերեցինք, թե ինչպես կարող
ենք գրել պարզ ծրագրեր, որոնք թույլ են տալիս օգտագործել ստեղնաշարը և վիդեո էկրանը՝ մեքենայի կոդի
տասնվեցական բայթերը մուտքագրելու և ուսումնասիրելու համար: Սա, անշուշտ, ավելի լավ էր, բայց
բարելավումների վերջին խոսքը չէ:
Ինչպես գիտեք, մեքենայի կոդի բայթերը կապված են որոշակի կարճ մնեմոնիկայի հետ, ինչպիսիք են MOV-ը ,
ADD-ը , CALL-ը և HLT-ը , որոնք թույլ են տալիս անդրադառնալ մեքենայի կոդին անորոշ կերպով
անգլերենի նմանությամբ: Այս մնեմոնիկները հաճախ գրվում են օպերանդներով, որոնք հետագայում ցույց են
տալիս, թե ինչ է անում մեքենայի կոդի հրահանգը: Օրինակ, 8080 մեքենա-կոդի բայթ 46h ստիպում է
միկրոպրոցեսորին տեղափոխել գրանցամատյան B բայթը, որը պահվում է հիշողության հասցեում, որը
վկայակոչում է 16-բիթանոց արժեքը ռեգիստրի զույգ HL-ում: Սա ավելի հակիրճ գրված է այսպես
MOV B, [HL]

Իհարկե, շատ ավելի հեշտ է ծրագրեր գրել անսամբլի լեզվով, քան մեքենայական կոդով, բայց
միկրոպրոցեսորը չի կարողանում հասկանալ անսամբլի լեզուն: Ես բացատրել եմ, թե ինչպես եք թղթի վրա
գրում assembly լեզվով ծրագրեր: Միայն այն ժամանակ, երբ դուք մտածեիք, որ պատրաստ եք
միկրոպրոցեսորի վրա գործարկել անսամբլի լեզվով ծրագիր, այն ձեռքով կհավաքեիք, ինչը նշանակում է, որ
անսամբլի լեզվով հայտարարությունները կվերափոխեք մեքենայի կոդերի բայթերի և մուտքագրեք դրանք
հիշողության մեջ:
Ավելի լավն այն է, որ համակարգիչը ձեզ համար կատարի այս փոխակերպումը: Եթե դուք գործարկեիք CP/M
օպերացիոն համակարգը ձեր 8080 համակարգչի վրա, դուք արդեն կունենայիք ձեզ անհրաժեշտ բոլոր
գործիքները: Ահա թե ինչպես է այն աշխատում.
Սկզբում դուք ստեղծում եք տեքստային ֆայլ, որը պարունակում է ձեր ծրագիրը, որը գրված է անսամբլի
լեզվով: Այս աշխատանքի համար կարող եք օգտագործել ED.COM CP/M ծրագիրը: Այս ծրագիրը տեքստային
խմբագրիչ է, ինչը նշանակում է, որ այն թույլ է տալիս ստեղծել և փոփոխել տեքստային ֆայլեր։ Ենթադրենք,
դուք ստեղծում եք տեքստային ֆայլ PROGRAM1.ASM անունով: ASM ֆայլի տեսակը ցույց է տալիս, որ
այս ֆայլը պարունակում է assembly-լեզու ծրագիր: Ֆայլը կարող է այսպիսի տեսք ունենալ.
ORG 0100h
LXI DE, Text
MVI C,9
CALL 5
RET
Տեքստ՝ DB «Բարև!$»
ՎԵՐՋ

Այս ֆայլն ունի մի քանի հայտարարություն, որոնք նախկինում չէինք տեսել: Առաջինը ORG ( ծագման
համար ) հայտարարություն է: Այս հայտարարությունը չի համապատասխանում 8080 հրահանգին:
Փոխարենը, այն ցույց է տալիս, որ հաջորդ հայտարարության հասցեն պետք է սկսվի 0100h հասցեից, որը
դուք կհիշեք, որ այն հասցեն է, որտեղ CP/M-ը բեռնում է ծրագրերը հիշողության մեջ:
Հաջորդ հայտարարությունը LXI ( Load Extended Immediate ) հրահանգն է, որը բեռնում է 16-բիթանոց
արժեք DE ռեգիստրի զույգում: Այս դեպքում այդ 16-բիթանոց արժեքը տրվում է որպես պիտակի Text : Այդ
պիտակը գտնվում է ծրագրի ներքևի մասի մոտ՝ DB ( Տվյալների բայթ ) հայտարարության դիմաց, այլ բան,
որը մենք նախկինում չենք տեսել: DB հայտարարությանը կարող են հաջորդել մի քանի բայթ՝ բաժանված
ստորակետերով կամ ( ինչպես ես անում եմ այստեղ) առանձին չակերտներով որոշ տեքստով:
MVI ( Move Immediate ) հայտարարությունը տեղափոխում է 9 արժեքը C գրանցամատյանում: CALL 5
հայտարարությունը կատարում է CP/M ֆունկցիայի կանչ: 9-րդ ֆունկցիան նշանակում է ցուցադրել նիշերի
շարանը, որը սկսվում է DE ռեգիստրի զույգի կողմից տրված հասցեից և դադարում, երբ հանդիպում է դոլարի
նշան: (Կնկատեք, որ ծրագրի վերջին տողի տեքստը ավարտվում է դոլարի նշանով: Դոլարի նշանի
օգտագործումը նիշերի տողի վերջը նշանակելու համար բավականին տարօրինակ է, բայց CP/M-ն այդպես է
աշխատում: ) Վերջնական RET հայտարարությունը ավարտում է ծրագիրը և վերադարձնում
վերահսկողությունը CP/M-ին: (Սա իրականում CP/M ծրագիրն ավարտելու մի քանի եղանակներից մեկն
է:) END հայտարարությունը ցույց է տալիս հավաքման լեզվով ֆայլի ավարտը:
Այսպիսով, մենք ունենք տեքստային ֆայլ, որը պարունակում է յոթ տող տեքստ: Հաջորդ քայլը այն հավաքելն
է, ինչը նշանակում է փոխարկել մեքենայի կոդ: Նախկինում մենք դա արել ենք ձեռքով: Բայց քանի որ մենք
գործարկում ենք CP/M, մենք կարող ենք օգտագործել ASM.COM անունով CP/M-ի հետ ներառված ծրագիր:
Սա CP/M assembler- ն է : Մենք գործարկում ենք ASM.COM-ը CP/M հրամանի տողից այս կերպ.
ASM ԾՐԱԳԻՐ1.ASM

ASM ծրագիրը նայում է PROGRAM1.ASM ֆայլին և ստեղծում է PROGRAM1.COM անունով նոր ֆայլ,
որը պարունակում է մեքենայի կոդը, որը համապատասխանում է մեր գրած հավաքների լեզվով
հայտարարություններին: (Իրականում կա ևս մեկ քայլ գործընթացում, բայց այս հաշվում կարևոր չէ, թե ինչ
է տեղի ունենում:) Այժմ դուք կարող եք գործարկել PROGRAM1.COM-ը CP/M հրամանի տողից: Այն
ցուցադրում է «Բարև» տեքստը: իսկ հետո ավարտվում է:
PROGRAM1.COM ֆայլը պարունակում է հետևյալ 16 բայթերը.
11 09 01 OE 09 CD 05 00 C9 48 65 6C 6C 6F 21 24

Առաջին 3 բայթը LXI հրահանգն է, հաջորդ 2-ը ՝ MVI , հաջորդ 3-ը՝ CALL , իսկ հաջորդը՝ RET հրահանգը։
Վերջին 7 բայթը ASCII նիշերն են «Բարև» հինգ տառերի, բացականչական նշանի և դոլարի նշանի համար:
Այն, ինչ անում է ASM.COM-ի պես ասեմբլերը՝ կարդալ assembly-լեզու ծրագիր (հաճախ կոչվում է
սկզբնաղբյուրային կոդ ) և դուրս գրել մեքենայի կոդ պարունակող ֆայլ՝ գործարկվող ֆայլ: Իրերի մեծ
սխեմայի մեջ ասեմբլերները բավականին պարզ ծրագրեր են, քանի որ կա մեկ առ մեկ
համապատասխանություն անսամբլի լեզվի մնեմոնիկայի և մեքենայական կոդի միջև: Ասամբլեն աշխատում է
տեքստի յուրաքանչյուր տող առանձնացնելով մնեմոնիկայի և փաստարկների, այնուհետև համեմատելով այս
փոքր բառերն ու տառերը ցուցակի հետ, որը անսամբլերը պարունակում է բոլոր հնարավոր մնեմոնիկները և
փաստարկները: Այս համեմատությունները ցույց են տալիս, թե մեքենայի կոդերի որ հրահանգներն են
համապատասխանում յուրաքանչյուր հայտարարությանը:
Ուշադրություն դարձրեք, թե ինչպես է հավաքողը հասկանում, որ LXI հրահանգը պետք է գրանցի DE զույգը
սահմանի 0109h հասցեով: Եթե LXI հրահանգն ինքնին գտնվում է 0100h-ում (ինչպես, երբ CP/M-ը
բեռնում է ծրագիրը հիշողության մեջ՝ գործարկելու համար), հասցեն 0109h այն վայրն է, որտեղ սկսվում է
տեքստային տողը: Ընդհանուր առմամբ, ծրագրավորողն, որն օգտագործում է ասեմբլեր, կարիք չունի
անհանգստանալու ծրագրի տարբեր մասերի հետ կապված կոնկրետ հասցեների մասին:
Առաջին անձը, ով գրեց առաջին assembler-ը, իհարկե, պետք է ձեռքով հավաքեր ծրագիրը: Մարդը, ով գրում
է նոր (գուցե կատարելագործված) անսամբլեր նույն համակարգչի համար, կարող է այն գրել անսամբլի
լեզվով, այնուհետև օգտագործել առաջին ասեմբլերը՝ այն հավաքելու համար: Երբ նոր մոնտաժողը հավաքվի,
այն կարող է ինքն իրեն հավաքել:
Ամեն անգամ, երբ նոր միկրոպրոցեսոր է դուրս գալիս, անհրաժեշտ է նոր հավաքող: Նոր assembler-ը,
սակայն, կարող է նախ գրվել գոյություն ունեցող համակարգչի վրա՝ օգտագործելով այդ համակարգչի
assembler-ը: Սա կոչվում է խաչաձև հավաքող : Ասեմբլերն աշխատում է A համակարգչի վրա, բայց
ստեղծում է կոդ, որն աշխատում է B համակարգչի վրա:
Թեև ասեմբլերը վերացնում է անսամբլի լեզվով ծրագրավորման ավելի քիչ ստեղծագործական կողմերը
(ձեռքի հավաքման մասը), անսամբլի լեզուն դեռ երկու հիմնական խնդիր ունի: Առաջին խնդիրը (որը դուք
հավանաբար արդեն ենթադրել եք) այն է, որ այն կարող է շատ հոգնեցուցիչ լինել: Դուք աշխատում եք
միկրոպրոցեսորային չիպի մակարդակի վրա, և դուք պետք է անհանգստանաք ամեն փոքր բանի համար:
Երկրորդ խնդիրն այն է, որ assembly լեզուն շարժական չէ : Եթե դուք գրում եք անսամբլի լեզվով ծրագիր
Intel 8080-ի համար, այն հարմար չէ Motorola 6800-ի համար: Դուք պետք է վերագրեք ծրագիրը 6800
assembly լեզվով: Սա, հավանաբար, այնքան էլ դժվար չի լինի, որքան բնօրինակ ծրագիրը գրելը, քանի որ
դուք արդեն լուծել եք հիմնական կազմակերպչական և ալգորիթմական խնդիրները: Բայց դա դեռ շատ
աշխատանք է:
Ես բացատրեցի վերջին գլխում, թե ինչպես ժամանակակից միկրոպրոցեսորներն ունեն ներկառուցված
մեքենայի կոդ հրահանգներ, որոնք կատարում են լողացող կետի թվաբանություն: Սա, իհարկե, հարմար է,
բայց բավականաչափ հեռու չի գնում: Գերադասելի կլիներ ամբողջությամբ հրաժարվել պրոցեսորից կախված
մեքենա-կոդային հրահանգներից, որոնք կատարում են առանձին տարրական թվաբանական
գործողություններ, և փոխարենը արտահայտեն մի քանի մաթեմատիկական գործողություններ՝ օգտագործելով
ժամանակին հարգված հանրահաշվական նշում: Ահա մի օրինակ.

Ax
Sin
(2 x
PI +
B) /
C

որտեղ A, B և C թվեր են, իսկ PI-ն հավասար է 3,14159-ի:


Դե ինչո՞ւ ոչ։ Եթե նման հայտարարություն լինի տեքստային ֆայլում, ապա պետք է հնարավոր լինի գրել
անսամբլի լեզվով ծրագիր, որը կարդում է տեքստային ֆայլը և հանրահաշվական արտահայտությունը
փոխակերպում մեքենայի կոդի:
Եթե նման հանրահաշվական արտահայտությունը հաշվարկելու կարիք լիներ միայն մեկ անգամ, կարող էիր դա
անել ձեռքով կամ հաշվիչով։ Հավանաբար, դուք դիտարկում եք համակարգչային լուծում, քանի որ դուք պետք
է հաշվարկեք այդ արտահայտությունը A, B և C տարբեր արժեքներով: Այդ պատճառով հանրահաշվական
արտահայտությունը, հավանաբար, առանձին չի հայտնվի: Դուք նաև պետք է հաշվի առնեք արտահայտության
ինչ-որ համատեքստ, որը թույլ է տալիս այն գնահատել տարբեր արժեքների համար:
Այն, ինչ դուք այստեղ ստեղծելու շեմին եք, հայտնի է որպես բարձր մակարդակի ծրագրավորման լեզու:
Ասամբլեային լեզուն համարվում է ցածր մակարդակի լեզու, քանի որ այն շատ մոտ է համակարգչի
սարքաշարին: Թեև բարձր մակարդակ տերմինը օգտագործվում է ցանկացած ծրագրավորման լեզու
նկարագրելու համար, բացի անսամբլի լեզվից, որոշ լեզուներ համարվում են ավելի բարձր մակարդակ, քան
մյուսները: Եթե դուք լինեիք ընկերության նախագահ և կարողանայիք նստել ձեր համակարգչի մոտ և
մուտքագրել (կամ ավելի լավ, պարզապես ոտքերդ բարձրացնեք և թելադրեիք), «Հաշվե՛ք այս տարվա բոլոր
շահույթներն ու վնասները, գրե՛ք տարեկան հաշվետվություն, տպե՛ք։ թողեք մի քանի հազար օրինակ և
ուղարկեք դրանք մեր բոլոր բաժնետերերին», դուք իսկապես կաշխատեիք շատ բարձր մակարդակի լեզվով:
Իրական աշխարհում ծրագրավորման լեզուները ոչ մի տեղ չեն մոտենում այդ իդեալին:
Մարդկային լեզուները սովորաբար հարյուրավոր և հազարավոր տարիների բարդ ազդեցությունների,
պատահական փոփոխությունների և հարմարվողականությունների արդյունք են: Նույնիսկ այնպիսի
արհեստական լեզուները, ինչպիսին էսպերանտո է, մատնում են իրենց ծագումը իրական լեզվով: Բարձր
մակարդակի համակարգչային լեզուները, սակայն, ավելի կանխամտածված հասկացություններ են:
Ծրագրավորման լեզու հայտնագործելու մարտահրավերը բավականին գրավիչ է որոշ մարդկանց համար,
քանի որ լեզուն սահմանում է, թե ինչպես է մարդը հրահանգներ փոխանցում համակարգչին: 1993 թվականին
հաշվարկվել է, որ 1950-ականների սկզբից ի վեր ստեղծվել և ներդրվել են ավելի քան 1000 բարձր
մակարդակի լեզուներ։
Իհարկե, բավական չէ պարզապես բարձր մակարդակի լեզու սահմանելը (որը ներառում է շարահյուսության
մշակում ՝ արտահայտելու այն ամենը, ինչ ցանկանում եք անել լեզվի հետ); դուք պետք է նաև գրեք
կոմպիլյատոր , որն այն ծրագիրն է, որը ձեր բարձր մակարդակի լեզվի հայտարարությունները փոխակերպում
է մեքենայի կոդի: Ասեմբլերի նման, կոմպիլյատորը պետք է ընթերցի սկզբնաղբյուրային կոդով ֆայլը նիշ առ
նիշ և բաժանի այն կարճ բառերի, նշանների և թվերի: Կոմպիլյատորը, սակայն, շատ ավելի բարդ է, քան
assembler-ը: Ասեմբլերը որոշ չափով պարզեցված է՝ անսամբլի լեզվով հայտարարությունների և մեքենայի
կոդի միջև մեկ առ մեկ համապատասխանության պատճառով: Կոմպիլյատորը սովորաբար պետք է թարգմանի
բարձր մակարդակի լեզվի մեկ հայտարարություն մեքենայական կոդի բազմաթիվ հրահանգների:
Կոմպիլյատորները հեշտ չէ գրել: Ամբողջ գրքերը նվիրված են դրանց նախագծմանը և կառուցմանը:
Բարձր մակարդակի լեզուներն ունեն առավելություններ և թերություններ: Հիմնական առավելությունն այն է,
որ բարձր մակարդակի լեզուները սովորաբար ավելի հեշտ են սովորել և ծրագրավորել, քան անսամբլի
լեզուները: Բարձր մակարդակի լեզուներով գրված ծրագրերը հաճախ ավելի պարզ և հակիրճ են: Բարձր
մակարդակի լեզուները հաճախ շարժական են, այսինքն՝ դրանք կախված չեն որոշակի պրոցեսորից, ինչպես
անսամբլի լեզուները: Այսպիսով, նրանք թույլ են տալիս ծրագրավորողին աշխատել՝ առանց իմանալու
մեքենայի հիմքում ընկած կառուցվածքի մասին, որի վրա գործարկվելու է ծրագիրը: Իհարկե, եթե Ձեզ
անհրաժեշտ է ծրագիրը գործարկել մեկից ավելի պրոցեսորների վրա, ապա ձեզ անհրաժեշտ են
կոմպիլյատորներ, որոնք արտադրում են մեքենայի կոդ այդ պրոցեսորների համար: Փաստացի գործարկվող
ֆայլերը դեռ հատուկ են առանձին պրոցեսորներին:
Մյուս կողմից, գրեթե միշտ է պատահում, որ լավ assembly լեզվով ծրագրավորողը կարող է ավելի լավ կոդ
գրել, քան կոմպիլյատորը: Սա նշանակում է, որ բարձր մակարդակի լեզվով գրված ծրագրից ստեղծված
գործարկվողը կլինի ավելի մեծ և դանդաղ, քան անսամբլի լեզվով գրված ֆունկցիոնալ նույնական ծրագիրը:
(Վերջին տարիներին, սակայն, դա ավելի քիչ ակնհայտ է դարձել, քանի որ միկրոպրոցեսորները դարձել են
ավելի բարդ, իսկ կոմպիլյատորները նույնպես դարձել են ավելի բարդ կոդի օպտիմալացման հարցում):
Բացի այդ, թեև բարձր մակարդակի լեզուն կարող է հեշտացնել պրոցեսորը, այն ավելի հզոր չի դարձնում:
Այն ամենը, ինչ ունակ է պրոցեսորը, կարող եք օգտագործել անսամբլի լեզվով: Քանի որ բարձր մակարդակի
լեզուն պետք է թարգմանվի մեքենայական կոդի, բարձր մակարդակի լեզուն կարող է միայն նվազեցնել
պրոցեսորի հնարավորությունները: Իսկապես, եթե բարձր մակարդակի լեզուն իսկապես շարժական է, այն չի
կարող օգտագործել որոշակի պրոցեսորներին հատուկ գործառույթներ:
Օրինակ. Բազմաթիվ պրոցեսորներ ունեն bit-shifting հրահանգներ: Ինչպես հիշում եք, այս հրահանգները
կուտակիչի բիթերը տեղափոխում են աջ կամ ձախ: Բայց գրեթե ոչ մի բարձր մակարդակի ծրագրավորման
լեզու չի ներառում նման գործողություններ: Եթե դուք ունեք ծրագրավորման աշխատանք, որը կարող է
օգտագործել bit shifting-ը, դուք պետք է ընդօրինակեք այն՝ բազմապատկելով կամ բաժանելով 2-ով: (Ոչ թե
դա վատ է. Իրոք, շատ ժամանակակից կոմպիլյատորներ օգտագործում են պրոցեսորի bit-shifting
հրահանգները՝ բազմապատկելու կամ բաժանելու համար: երկուսի հզորությամբ:) Շատ լեզուներ նույնպես
չեն ներառում բուլյան գործողություններ բիթերի վրա:
Տնային համակարգիչների սկզբնական շրջանում կիրառական ծրագրերի մեծ մասը գրված էր անսամբլի
լեզվով: Այս օրերին, սակայն, ասեմբլ լեզուն հազվադեպ է օգտագործվում, բացառությամբ հատուկ
նպատակների: Քանի որ սարքավորումները ավելացվել են պրոցեսորներին, որոնք իրականացնում են
pipelining-ը` մի քանի հրահանգների կոդերի միաժամանակյա կատարումը, անսամբլի լեզուն դարձել է
ավելի բարդ և դժվար: Միևնույն ժամանակ, կոմպիլյատորները դարձել են ավելի բարդ: Այսօրվա
համակարգիչների պահեստավորման և հիշողության ավելի մեծ հզորությունը նույնպես իր դերն է խաղացել
այս միտումի մեջ. Ծրագրավորողները այլևս կարիք չեն զգում ստեղծել կոդ, որն աշխատում է փոքր
քանակությամբ հիշողության մեջ և տեղավորվում փոքր սկավառակի վրա:
Թեև շատ վաղ համակարգիչների դիզայներները փորձել են դրանց համար հանրահաշվական նշումներով
ձևակերպել խնդիրները, առաջին իրական աշխատանքային կոմպիլյատորը, ընդհանուր առմամբ, համարվում է
A-0-ը UNIVAC-ի համար, որը ստեղծվել է Գրեյս Մյուրեյ Հոփերի կողմից (1906–1992)
Ռեմինգթոն-Ռանդում 1952 թվականին։ Բժ.
Ամենահին բարձր մակարդակի լեզուն, որը դեռ օգտագործվում է այսօր (թեև տարիների ընթացքում լայնորեն
վերանայվել է) FORTRAN-ն է: Համակարգչային շատ լեզուներ ունեն հորինված անուններ, որոնք գրված են
մեծատառով, քանի որ դրանք մի տեսակ հապավումներ են: FORTRAN-ը FORmula-ի առաջին երեք տառերի
և TRANSlation-ի առաջին չորս տառերի համակցություն է: Այն մշակվել է IBM-ում 1950-ականների
կեսերին 704 շարքի համակարգիչների համար: Երկար տարիներ FORTRAN-ը համարվում էր
գիտնականների և ինժեներների ընտրության լեզուն: Այն ունի շատ ընդարձակ լողացող կետի աջակցություն
և նույնիսկ աջակցում է բարդ թվերին (որոնք, ինչպես ես բացատրեցի վերջին գլխում, իրական և
երևակայական թվերի համակցություններ են):
Ծրագրավորման բոլոր լեզուներն ունեն իրենց պաշտպաններն ու քննադատողները, և մարդիկ կարող են
կրքոտ լինել իրենց ֆավորիտներով: Փորձելով չեզոք դիրք գրավել՝ ես ընտրել եմ լեզու, որը կծառայի որպես
ծրագրավորման հայեցակարգերի այս հաշվետվության արխետիպ, որը գրեթե ոչ ոք այլևս չի օգտագործում:
Նրա անունն է ALGOL (որը նշանակում է ALGOrithmic Language, բայց ALGOL լեզուն նույնպես
կիսում է իր անունը Պերսևսի համաստեղության երկրորդ ամենապայծառ աստղի հետ): ALGOL-ը նաև
հարմար է բարձր մակարդակի ծրագրավորման լեզուների էության այս ուսումնասիրության համար, քանի որ
այն շատ առումներով կարևոր լեզու է, վերջին 40 տարիների շատ հայտնի ընդհանուր նշանակության
լեզուների անմիջական նախահայրը: Այսօր էլ մարդիկ դիմում են «ALGOL-ի նման» ծրագրավորման
լեզուներին։
Լեզվի առաջին տարբերակը, որը հայտնի է որպես ALGOL 58, մշակվել է միջազգային կոմիտեի կողմից
1957 և 1958 թվականներին: Այն բարելավվել է երկու տարի անց՝ 1960 թվականին, իսկ վերանայված
տարբերակը կոչվել է ALGOL 60: Ի վերջո, հայտնվեց ALGOL 68, բայց Այս գլխի համար ես կօգտագործեմ
ALGOL-ի տարբերակը, ինչպես նկարագրված է «Ալգորիթմական լեզվի վերանայված զեկույց ALGOL 60»
փաստաթղթում, որն ավարտվել է 1962 թվականին և առաջին անգամ հրապարակվել է 1963 թվականին:
Եկեք գրենք ALGOL կոդ: Մենք ենթադրում ենք, որ ունենք ALGOL կոմպիլյատոր՝ ALGOL.COM անունով,
որն աշխատում է CP/M կամ գուցե MS-DOS-ի տակ: Մեր առաջին ALGOL ծրագիրը FIRST.ALG անունով
տեքստային ֆայլ է: Ուշադրություն դարձրեք ALG ֆայլի տեսակին:
սկիզբ և վերջ բառերի մեջ : Ահա մի ծրագիր, որը ցուցադրում է տեքստի տող.
սկսել
տպել («Սա իմ առաջին ALGOL ծրագիրն է»);
վերջ

Դուք կարող եք գործարկել ALGOL կոմպիլյատորը՝ նշելով FIRST.ALG ծրագիրը հետևյալ կերպ.
ALGOL FIRST.ALG

ALGOL կոմպիլյատորը հավանաբար կպատասխանի՝ ցուցադրելով հետևյալի նման մի բան.


Տող 3. «ende» չճանաչված հիմնաբառ:

Կազմողն ավելի ընտրող է ուղղագրության հարցում, քան հնաոճ անգլերենի ուսուցիչը: Ծրագիրը
մուտքագրելիս ես սխալ գրեցի end բառը , ուստի կոմպիլյատորն ինձ ասում է, որ ծրագիրն ունի
շարահյուսական սխալ : Այն պահին, երբ այն հանդիպեց ավարտին , այն ակնկալում էր գտնել բանալի բառ,
որը նա ճանաչում է:
Խնդիրը շտկելուց հետո կարող եք նորից գործարկել ALGOL կոմպիլյատորը: Երբեմն կոմպիլյատորը
ուղղակիորեն գործարկվող նյութ է ստեղծում (FIRST.COM անունը, կամ գուցե FIRST.EXE MS-DOS-ի
ներքո); երբեմն անհրաժեշտ է մեկ այլ քայլ կատարել: Անկախ նրանից, շուտով դուք կկարողանաք գործարկել
ԱՌԱՋԻՆ ծրագիրը հրամանի տողից.
ԱՌԱՋԻՆ

ԱՌԱՋԻՆ ծրագիրը արձագանքում է՝ ցուցադրելով


Սա իմ առաջին ALGOL ծրագիրն է:

Վա՜յ Եվս մեկ ուղղագրական սխալ. Սա մեկն է, որը չի կարելի ակնկալել, որ կոմպիլյատորը կգտնի: Այդ
պատճառով այն կոչվում է գործարկման ժամանակի սխալ ՝ սխալ, որն ակնհայտ է միայն ծրագիրը
գործարկելիս:
Ինչպես հավանաբար ակնհայտ է, մեր առաջին ALGOL ծրագրի տպագիր հայտարարությունը ցուցադրում է
էկրանին ինչ-որ բան, այս դեպքում տեքստի տող: (Այսպիսով, ծրագիրը ALGOL-ի համարժեքն է CP/M
assembly-լեզու ծրագրի, որը ցուցադրվել է ավելի վաղ այս գլխում:) Տպագիր հայտարարությունը
իրականում ALGOL լեզվի պաշտոնական բնութագրի մաս չէ, բայց ես ենթադրում եմ, որ կոնկրետ ALGOL-ը
Կոմպիլյատորը, որը մենք օգտագործում ենք, ներառում է այնպիսի հնարավորություն, որը երբեմն կոչվում է
ներկառուցված ֆունկցիա : ALGOL հայտարարություններից շատերին (բայց ոչ սկիզբն ու ավարտը ) պետք է
հաջորդեն ստորակետը: Տպման դրույթի նահանջը պարտադիր չէ, սակայն նահանջը հաճախ օգտագործվում է
ծրագրի կառուցվածքն ավելի պարզ դարձնելու համար:
Հիմա ենթադրենք, որ ցանկանում եք գրել ծրագիր, որը բազմապատկում է երկու թվեր։ Ծրագրավորման
յուրաքանչյուր լեզու ներառում է փոփոխականների հասկացությունները : Ծրագրում փոփոխականի անունը
տառ է, տառերի կարճ հաջորդականություն կամ նույնիսկ կարճ բառ: Իրականում փոփոխականը
համապատասխանում է հիշողության տեղակայմանը, սակայն ծրագրում այն հիշատակվում է ոչ թե թվային
հիշողության հասցեի, այլ անվան միջոցով: Այս ծրագիրն ունի երեք փոփոխական՝ a , b և c անուններով .
սկսել
իրական a, b, c;

a := 535.43;
b = 289,771;
գ := axb;
տպել (', a, ' և ', b, '-ը ', c-ի արտադրյալն է);
վերջ

Իրական հայտարարությունը կոչվում է հայտարարագիր : Այն ցույց է տալիս, որ ցանկանում եք հայտարարել


ձեր ծրագրում փոփոխականների առկայության մասին: Այս դեպքում փոփոխականները կոչվում են a , b և c և
իրական կամ լողացող թվեր են: (ALGOL-ն աջակցում է նաև ամբողջ թիվ բանալի բառը ՝ ամբողջ թվով
փոփոխականներ հայտարարելու համար:) Սովորաբար ծրագրավորման լեզուները պահանջում են, որ
փոփոխականների անունները սկսվեն տառով: Փոփոխականների անունները կարող են նաև թվեր
պարունակել, քանի դեռ առաջին նիշը տառ է, բայց դրանք չպետք է պարունակեն բացատներ կամ շատ այլ
նիշեր: Հաճախ կոմպիլյատորները սահմանափակումներ են դնում փոփոխականի անվան երկարության վրա:
Այս գլխի օրինակում ես պարզապես կօգտագործեմ առանձին տառեր:
Եթե կոնկրետ ALGOL կոմպիլյատորը, որը մենք օգտագործում ենք, աջակցում է IEEE լողացող կետի
ստանդարտին, ապա ծրագրի երեք փոփոխականներից յուրաքանչյուրը պահանջում է 4 բայթ պահեստավորում
(մեկ ճշգրիտ թվերի համար) կամ 8 բայթ պահեստավորում (կրկնակի ճշգրիտ թվերի համար):
Հաջորդ երեք հայտարարությունները հանձնարարության հայտարարություններ են: ALGOL-ում դուք միշտ
կարող եք ճանաչել հանձնարարության դրույթը, քանի որ այն նշանակված է երկու կետով, որին հաջորդում է
հավասարության նշանը: (Համակարգչային լեզուների մեծ մասում հանձնարարականի համար պահանջվում է
միայն հավասարության նշանը:) Ձախ կողմում փոփոխական է: Աջ կողմում արտահայտություն է.
Փոփոխականը սահմանվում է այն թվին, որը ստացվում է արտահայտության գնահատումից: Առաջադրման
առաջին երկու հայտարարությունները ցույց են տալիս, որ և՛ a-ին , և՛ b-ին վերագրված են որոշակի
արժեքներ: Ծրագրի երրորդ հանձնարարականը c փոփոխականը վերագրում է a և b փոփոխականների
արտադրյալին :
Այս օրերին ծանոթ x բազմապատկման նշանը սովորաբար չի թույլատրվում ծրագրավորման լեզուներում,
քանի որ այն ASCII և EBCDIC նիշերի հավաքածուի մաս չէ: Ծրագրավորման լեզուներից շատերը
բազմապատկումը ցույց տալու համար օգտագործում են աստղանիշ: Մինչ ALGOL-ը բաժանման համար
օգտագործում է շեղ (/), լեզուն ներառում է նաև բաժանման նշան (÷) ամբողջ թվի բաժանման համար, որը
ցույց է տալիս, թե քանի անգամ է բաժանարարը պարունակվում դիվիդենտում: ALGOL-ը նաև սահմանում է
սլաք (↑), մեկ այլ ոչ ASCII նիշ, հզորացման համար:
Վերջապես տպագիր հայտարարությունը ցուցադրում է ամեն ինչ: Այն միավորում է տեքստը և
ստորակետերով առանձնացված փոփոխականները: ASCII նիշերի ցուցադրումը, հավանաբար, տպագիր
հայտարարության համար կարևոր աշխատանք չէ , բայց այստեղ ֆունկցիան պետք է նաև փոխակերպի
լողացող կետով թվերը ASCII-ի.
535.43 և 289.771 թվերի արտադրյալը 155152.08653 է:

Այնուհետև ծրագիրը դադարեցվում է և վերահսկումը վերադարձնում օպերացիոն համակարգին:


Եթե ցանկանում եք բազմապատկել մի քանի այլ թվեր, դուք պետք է խմբագրեք ծրագիրը, փոխեք թվերը, նորից
կազմեք այն և նորից գործարկեք: Դուք կարող եք խուսափել այս հաճախակի վերակազմավորումից՝ օգտվելով
մեկ այլ ներկառուցված գործառույթից, որը կոչվում է read :
սկսել
իրական a, b, c;

տպել ('Մուտքագրեք առաջին համարը');


կարդալ (a);

տպել ('Մուտքագրեք երկրորդ համարը');


կարդալ (բ);
գ := axb;

տպել (', a, ' և ', b, '-ը ', c-ի արտադրյալն է);


վերջ

Կարդացված հայտարարությունները կարդում են ASCII նիշերը, որոնք դուք մուտքագրում եք ստեղնաշարի


վրա և փոխակերպում դրանք լողացող կետի արժեքների :
Բարձր մակարդակի լեզուներում շատ կարևոր շինարարություն օղակն է : Օղակը թույլ է տալիս գրել ծրագիր,
որն անում է նույն բանը փոփոխականի շատ տարբեր արժեքների համար: Ենթադրենք, դուք ցանկանում եք
գրել ծրագիր, որը հաշվարկում է 3, 5, 7 և 9 թվերի խորանարդները: Կարող եք դա անել այսպես.
սկսել
իրական a, b;

a := 3, 5, 7, 9-ի համար
սկսվում է
b := axaxa;
տպել («', a, '-ի խորանարդն է', b);
վերջ
վերջ

For հայտարարությունը նախադրում է a փոփոխականը 3 արժեքին, այնուհետև կատարում է


հայտարարությունը, որը հետևում է do բանալի բառին: Եթե կան մեկից ավելի հայտարարություններ, որոնք
պետք է կատարվեն (ինչպես դա տեղի է ունենում այստեղ), ապա մի քանի հայտարարությունները պետք է
ներառվեն սկզբի և ավարտի միջև : Այս երկու հիմնաբառերը սահմանում են հայտարարությունների բլոկ :
Այնուհետև for հայտարարությունը կատարում է այդ նույն հայտարարությունները 5-ի, 7-ի և 9-ի a փաթեթի
համար :
Ահա հայտարարության մեկ այլ տարբերակ : Այս մեկը հաշվարկում է կենտ թվերի խորանարդները 3-ից
մինչև 99.
սկսել
իրական a, b;

a := 3 քայլ 2-ի համար մինչև 99-ը


սկսվում է
b := axaxa;
տպել («', a, '-ի խորանարդն է', b);
վերջ
վերջ

For հայտարարությունը սկզբնապես սահմանում է a փոփոխականը 3 և կատարում է for-ի ցուցումին


հաջորդող բլոկը : Այնուհետև a-ն ավելանում է քայլ բանալի բառին հաջորդող թվով , որը 2 է: a- ի նոր
արժեքը , որը 5 է, օգտագործվում է բլոկը գործարկելու համար: a փոփոխականը կշարունակի աճել 2-ով: Երբ
այն գերազանցի 99-ը, for-ի օղակն ավարտվում է:
Ծրագրավորման լեզուները սովորաբար ունեն շատ խիստ շարահյուսություն։ Օրինակ, Algol 60-ում բանալի
բառին կարող է հաջորդել միայն մեկ տեսակի բան՝ փոփոխական անուն: Անգլերենում, սակայն, « for» բառին
կարող են հաջորդել բոլոր տեսակի տարբեր բառեր, ինչպես օրինակ նախորդ նախադասության օրինակը : Թեև
կոմպիլյատորները գրելու համար հասարակ ծրագրեր չեն, դրանք ակնհայտորեն շատ ավելի հեշտ են, քան այն
ծրագրերը, որոնք պետք է մեկնաբանեն մարդկային լեզուները:
Ծրագրավորման լեզուների մեծ մասի մեկ այլ կարևոր հատկանիշ պայմանական է : Սա հայտարարություն է,
որը ստիպում է մեկ այլ հայտարարությունը կատարել միայն այն դեպքում, եթե որոշակի պայման ճիշտ է:
Ահա մի օրինակ, որն օգտագործում է ALGOL ներկառուցված sqrt ֆունկցիան , որը հաշվարկում է
քառակուսի արմատը: Sqrt ֆունկցիան չի աշխատում բացասական թվերի համար, ուստի այս ծրագիրը
խուսափում է նման երևույթից .
սկսել
իրական a, b;

տպել ('Մուտքագրեք համարը');


կարդալ (a);

եթե a < 0, ապա


տպեք («Կներեք, թիվը բացասական էր»);
else
start
b = sqrt(a);
տպել (', a, '-ի քառակուսի արմատը ' է, b);
վերջ
վերջ

Ձախ անկյունային փակագիծը (<) փոքր նշան է: Եթե այս ծրագրի օգտատերը մուտքագրում է 0-ից փոքր թիվ,
ապա առաջին տպագիր հայտարարությունը կատարվում է: Եթե ոչ, այսինքն, եթե թիվը մեծ է կամ հավասար է
0-ին, ապա կատարվում է տպագիր մյուս հայտարարությունը պարունակող բլոկը:
Մինչ այժմ այս գլխի ծրագրերում ցուցադրված փոփոխականները պահում են միայն մեկ արժեք: Հաճախ նույն
փոփոխականի համար հարմար է բազմաթիվ արժեքներ պահել: Սա հայտնի է որպես զանգված : ALGOL
ծրագրում զանգվածը հայտարարվում է հետևյալ կերպ.
իրական զանգված a[1:100];

Այս դեպքում մենք նշել ենք, որ ցանկանում ենք օգտագործել այս փոփոխականը 100 տարբեր լողացող կետի
արժեքներ պահելու համար, որոնք կոչվում են զանգվածի տարրեր : Առաջինը հիշատակվում է a[1]- ով ,
երկրորդը՝ a[2] , իսկ վերջինը՝ a[100 ]: Փակագծերում նշված թիվը կոչվում է զանգվածի ինդեքս ։
Այս ծրագիրը հաշվարկում է 1-ից 100-ի բոլոր քառակուսի արմատները և պահում դրանք զանգվածում:
Այնուհետև տպում է դրանք.
սկսել
իրական զանգված a[1:100];
ամբողջ թիվ i;

համար i := 1 քայլ 1 մինչև 100 անել


a[i] := sqrt(i);

համար i := 1 քայլ 1 մինչև 100 do


print (', i, '-ի քառակուսի արմատը ', a[i] է);
վերջ

Այս ծրագիրը նաև ցույց է տալիս i անունով ամբողջ փոփոխական (որը ամբողջ թվով փոփոխականի
ավանդական անունն է, քանի որ այն բառի առաջին տառն է): Առաջին for հանգույցում զանգվածի
յուրաքանչյուր տարրին վերագրվում է իր ինդեքսի քառակուսի արմատը։ Երկրորդ for loop-ում դրանք
տպագրվում են:
Ի լրումն իրական և ամբողջ թվերի , փոփոխականները կարող են հայտարարվել նաև որպես բուլյան : (Հիշում
եք Ջորջ Բուլին 10-րդ գլխից :) Բուլյան փոփոխականն ունի միայն երկու հնարավոր արժեք, որոնք են true և
false : Այս գլխի վերջին ծրագրում ես օգտագործում եմ Բուլյան զանգվածը (և գրեթե բոլոր մյուս
առանձնահատկությունները, որոնց մասին մենք իմացել ենք մինչ այժմ), ծրագիր, որն իրականացնում է պարզ
թվեր գտնելու հայտնի ալգորիթմ, որը կոչվում է Էրատոստենեսի մաղ: Էրատոստենեսը (մոտ մ.թ.ա. 276–196
թթ.) Ալեքսանդրիայի լեգենդար գրադարանի գրադարանավարն էր և այսօր ամենալավը հիշվում է երկրի
շրջագիծը ճշգրիտ հաշվարկելու համար։
Պարզ թվերն այն ամբողջ թվերն են, որոնք առանց մնացորդի բաժանվում են միայն իրենց և 1-ի վրա: Առաջին
պարզ թիվը 2-ն է (միակ պարզ թիվը), իսկ պարզերը շարունակվում են 3, 5, 7, 11, 13, 17 և 3-ով: եւ այլն.
Էրատոսթենեսի տեխնիկան սկսվում է 2-ով սկսվող դրական ամբողջ թվերի ցանկով: Քանի որ 2-ը պարզ թիվ
է, խաչեք բոլոր այն թվերը, որոնք 2-ի բազմապատիկ են: (Սա բոլոր զույգ թվերն են, բացի 2-ից): Այդ թվերը
պարզ թվեր չեն: . Քանի որ 3-ը պարզ թիվ է, անցեք բոլոր այն թվերը, որոնք 3-ի բազմապատիկ են: Մենք
արդեն գիտենք, որ 4-ը պարզ թիվ չէ, քանի որ այն խաչված է: Հաջորդ պարզը 5-ն է, ուստի հատեք 5-ի բոլոր
բազմապատիկները: Շարունակեք այսպես: Այն, ինչ ձեզ մնում է, պարզ թվերն են:
ALGOL ծրագիրը՝ որոշելու բոլոր պարզ թվերը մինչև 10,000-ը, կարող է իրականացնել այս ալգորիթմը՝
հայտարարելով Բուլյան զանգված՝ 2-ից մինչև 10,000 ինդեքսներով:
սկսել
Բուլյան զանգված a[2:10000];
ամբողջ թիվ i, j;

համար i := 2 քայլ 1 մինչև 10000 արեք


a[i] := ճշմարիտ;

i := 2 քայլ 1 մինչև 100 անել,


եթե a[i] ապա
j := 2 քայլ 1 մինչև 10000 ÷ i անում եմ
a[ixj] := false;

համար i := 2 քայլ 1 մինչև 10000 անել,


եթե a[i] ապա
տպել (i);
վերջ

Առաջին for հանգույցը զանգվածի բոլոր տարրերը դնում է բուլյան true արժեքի վրա : Այսպիսով, ծրագիրը
սկսվում է ենթադրելով, որ բոլոր թվերը պարզ են: Երկրորդ համարի հանգույցն անցնում է 1-ից մինչև 100
(10000 քառակուսի արմատ): Եթե թիվը պարզ է, ինչը նշանակում է, որ a[i]-ը ճշմարիտ է, ապա մեկ այլ for
օղակ սահմանում է այդ թվի բոլոր բազմապատիկները false- ի : Այդ թվերը պարզ չեն: Վերջնական for
հանգույցը տպում է բոլոր պարզ թվերը, որոնք i- ի արժեքներն են, որտեղ a[i]- ը ճշմարիտ է:
Երբեմն մարդիկ վիճում են՝ ծրագրավորումն արվեստ է, թե գիտություն: Մի կողմից, դուք ունեք քոլեջի
ուսումնական ծրագրեր համակարգչային գիտության ոլորտում , իսկ մյուս կողմից՝ ունեք այնպիսի գրքեր,
ինչպիսիք են Դոնալդ Կնուտի հայտնի « Համակարգչային ծրագրավորման արվեստը» շարքը: «Ավելի շուտ,-
գրում է ֆիզիկոս Ռիչարդ Ֆեյնմանը,- համակարգչային գիտությունը նման է ճարտարագիտությանը. այն
ամենն ինչ-որ բան անելն է:
Եթե դուք խնդրեք 100 տարբեր մարդկանց գրել ծրագիր, որը տպում է պարզ թվեր, դուք կստանաք 100
տարբեր լուծումներ: Նույնիսկ այն ծրագրավորողները, ովքեր օգտագործում են Էրատոսթենեսի մաղը, չեն
կիրառի այն ճիշտ այնպես, ինչպես ես եմ արել: Եթե ծրագրավորումն իսկապես գիտություն լիներ, այդքան
հնարավոր լուծումներ չէին լինի, իսկ սխալ լուծումներն ավելի ակնհայտ կլինեին: Երբեմն ծրագրավորման
խնդիրը հրահրում է կրեատիվության և խորաթափանցության փայլերը, և դա «արվեստի» մասն է: Բայց
ծրագրավորումը հիմնականում նախագծման և կառուցման գործընթաց է, ի տարբերություն կամուրջ
կառուցելու:
Վաղ ծրագրավորողներից շատերը գիտնականներ և ինժեներներ էին, որոնցից կարելի էր ակնկալել, որ իրենց
խնդիրները կձևակերպեին FORTRAN-ի և ALGOL-ի կողմից պահանջվող մաթեմատիկական
ալգորիթմներում: Ծրագրավորման լեզուների պատմության ընթացքում, այնուամենայնիվ, մարդիկ փորձել են
ստեղծել լեզուներ, որոնք կարող են օգտագործվել մարդկանց ավելի լայն շրջանակի կողմից:
Առաջին հաջողակ լեզուներից մեկը, որը նախատեսված էր գործարարների և բիզնեսի խնդիրների համար,
COBOL-ն էր (Ընդհանուր բիզնեսի վրա հիմնված լեզուն), որը դեռ լայնորեն օգտագործվում է այսօր:
Հանձնաժողովը, որը միավորում էր ամերիկյան արդյունաբերությունը և պաշտպանության բաժինը, ստեղծեց
COBOL-ը սկսած 1959թ.-ից՝ ազդվելով Գրեյս Հոփերի վաղ շրջանի կազմողների կողմից: Մասամբ
COBOL-ը նախագծված էր այնպես, որ կառավարիչները, չնայած, հավանաբար, չեն անում իրական
կոդավորումը, կարողանային գոնե կարդալ ծրագրի կոդը և ստուգել, թե արդյոք նա անում է այն, ինչ պետք է
աներ: (Իրական կյանքում, սակայն, դա հազվադեպ է պատահում):
COBOL-ը լայնածավալ աջակցություն ունի գրառումների ընթերցման և հաշվետվություններ ստեղծելու
համար : Գրառումները հետևողական ձևով կազմակերպված տեղեկատվության հավաքածու են: Օրինակ,
ապահովագրական ընկերությունը կարող է պահել մեծ ֆայլեր, որոնք պարունակում են տեղեկատվություն իր
վաճառած բոլոր քաղաքականությունների վերաբերյալ: Յուրաքանչյուր քաղաքականություն կլինի առանձին
գրառում: Գրառումը պետք է ներառի անձի անունը, ծննդյան ամսաթիվը և այլ տեղեկություններ: Շատ վաղ
COBOL ծրագրեր գրվել են IBM-ի դակիչ քարտերի վրա պահվող 80 սյունակների գրառումների հետ
գործելու համար: Այս քարտերի վրա հնարավորինս քիչ տարածք օգտագործելու համար օրացուցային
տարիները հաճախ կոդավորվում էին որպես երկնիշ, քան չորս, ինչը հանգեցնում էր տխրահռչակ
«հազարամյակի սխալի» ամենատարածված (բայց ամենաքիչ հանրայնացված) դեպքերին, երբ մոտենում էր
2000 թվականը:
1960-ականների կեսերին IBM-ը, կապված իր System/360 նախագծի հետ, մշակեց PL/I անունով լեզու։
(Իրականում I-ը հռոմեական թիվ է և արտասանվում է , ուստի PL/I-ն իրականում նշանակում է
ծրագրավորման լեզու թիվ մեկ:) PL/I-ը նպատակ ուներ ներառել ALGOL-ի բլոկային կառուցվածքը,
FORTRAN-ի գիտական և մաթեմատիկական ֆունկցիաները և գրառումը և հաշվետվություն COBOL-ի
հնարավորությունների մասին: Բայց լեզուն երբեք չի հասել FORTRAN-ի և COBOL-ի
հանրաճանաչությանը:
Թեև FORTRAN-ի, ALGOL-ի, COBOL-ի և PL/I-ի տարբերակները հասանելի էին տնային
համակարգիչների համար, դրանցից և ոչ մեկն այնքան ազդեցություն չունեցավ փոքր մեքենաների վրա,
ինչպիսին BASIC-ն ուներ:
BASIC-ը (Beginner's All-purpose Symbolic Instruction Code) մշակվել է 1964 թվականին Ջոն
Քեմենիի և Թոմաս Կուրցի կողմից՝ Դարթմութի մաթեմատիկայի բաժնից՝ կապված Դարթմութի ժամանակի
փոխանակման համակարգի հետ: Դարտմուտի ուսանողներից շատերը մաթեմատիկայի կամ
ճարտարագիտության մասնագիտություն չէին, և, հետևաբար, չէր կարելի ակնկալել, որ նրանք կխառնվեին
դակիչ քարտերի և դժվար ծրագրի շարահյուսության հետ: Տերմինալում նստած Դարտմուտի ուսանողը կարող
է ստեղծել BASIC ծրագիր՝ պարզապես մուտքագրելով BASIC հայտարարություններ, որոնց նախորդում են
թվեր: Թվերը նշում էին հաղորդման մեջ հայտարարությունների հերթականությունը։ Թվերով չնախորդված
հայտարարությունները համակարգին ուղղված հրամաններ էին, ինչպիսիք են SAVE (պահպանել BASIC
ծրագիրը սկավառակի վրա), LIST (ցուցադրել տողերը հերթականությամբ) և RUN (կազմել և գործարկել
ծրագիրը): Առաջին BASIC ծրագիրը առաջին հրատարակված BASIC հրահանգների ձեռնարկում էր
10 LET X = (7 + 8) / 3
20 PRINT X
30 END
Ի տարբերություն ALGOL-ի, BASIC-ը ծրագրավորողից չէր պահանջում նշել, թե արդյոք փոփոխականը
պետք է պահվի որպես ամբողջ թիվ, թե լողացող կետի արժեք: Թվերի մեծ մասը պահվում էր որպես լողացող
կետի արժեքներ՝ առանց ծրագրավորողի անհանգստանալու դրա մասին:
կոմպիլյատորների , այլ թարգմանիչների տեսքով : Ինչպես ավելի վաղ բացատրեցի, կոմպիլյատորը կարդում
է աղբյուրի կոդով ֆայլը և ստեղծում գործարկվող ֆայլ: Թարգմանիչը, այնուամենայնիվ, կարդում է
աղբյուրի կոդը և կատարում այն ուղղակիորեն, երբ այն կարդում է՝ առանց գործարկվող ֆայլ ստեղծելու:
Թարգմանիչները ավելի հեշտ են գրել, քան կոմպիլյատորները, բայց մեկնաբանվող ծրագրի կատարման
ժամանակը ավելի դանդաղ է, քան կոմպիլյատորը: Տնային համակարգիչների վրա BASIC-ը շատ շուտ սկսեց,
երբ ընկերներ Բիլ Գեյթսը (ծնված 1955թ.) և Փոլ Ալենը (ծնված 1953թ.) 1975թ.-ին գրեցին BASIC
թարգմանիչ Altair 8800-ի համար և սկսեցին իրենց ընկերությունը՝ Microsoft Corporation-ը:
Pascal ծրագրավորման լեզուն, որն իր կառուցվածքի մեծ մասը ժառանգել է ALGOL-ից, բայց ներառում է
ձայնագրությունների մշակում COBOL-ից, նախագծվել է 1960-ականների վերջին շվեյցարացի
համակարգչային գիտության պրոֆեսոր Նիկլաուս Վիրտի կողմից (ծնված 1934 թ.): Pascal-ը բավականին
տարածված էր IBM PC ծրագրավորողների համար, բայց շատ հատուկ ձևով. Turbo Pascal արտադրանքը,
որը ներկայացվել է Borland International-ի կողմից 1983 թվականին, սակարկային գնով 49,95 դոլար:
Turbo Pascal-ը (գրել է դանիացի ուսանող Անդերս Հեյլսբերգը, ծնվել է 1960 թ.) Պասկալի տարբերակն
էր, որը հագեցած էր զարգացման ինտեգրված միջավայրով : Տեքստի խմբագրիչը և կոմպիլյատորը միավորվել
են մեկ ծրագրում, որը հեշտացրել է շատ արագ ծրագրավորումը: Ինտեգրված զարգացման միջավայրերը
հայտնի էին խոշոր հիմնական համակարգիչներում, սակայն Turbo Pascal-ը ազդարարեց դրանց ժամանումը
փոքր մեքենաների վրա:
Պասկալը նաև մեծ ազդեցություն է ունեցել Ադայի վրա, մի լեզու, որը մշակվել է Միացյալ Նահանգների
պաշտպանության նախարարության կողմից օգտագործելու համար: Լեզուն անվանվել է Ավգուստա Ադա
Բայրոնի պատվին, ում ես հիշատակեցի 18-րդ գլխում որպես Չարլզ Բեբիջի վերլուծական շարժիչի
տարեգիր։
Եվ հետո կա C-ն՝ շատ սիրելի ծրագրավորման լեզու, որը ստեղծվել է 1969-1973 թվականներին
հիմնականում Դենիս Մ. Ռիչիի կողմից Bell Telephone Laboratories-ում: Մարդիկ հաճախ հարցնում են,
թե ինչու է լեզուն կոչվում C: Պարզ պատասխանն այն է, որ այն առաջացել է B կոչվող վաղ լեզվից, որը
BCPL-ի (Basic CPL) պարզեցված տարբերակն էր, որը բխում էր CPL-ից (Combined Programming
Language):
Ես նշեցի 22-րդ գլխում , որ UNIX օպերացիոն համակարգը նախատեսված էր շարժական լինելու համար: Այն
ժամանակ գործող համակարգերի մեծ մասը գրված էր անսամբլի լեզվով կոնկրետ պրոցեսորի համար: 1973
թվականին UNIX-ը գրվեց (ավելի ճիշտ՝ վերաշարադրվեց) C-ով, և այդ ժամանակվանից ի վեր օպերացիոն
համակարգը և լեզուն սերտորեն նույնականացվեցին:
C-ն, ընդհանուր առմամբ, շատ կարճ լեզու է: Օրինակ, ALGOL-ում և Pascal-ում բլոկները
սահմանազատելու համար սկսվող և վերջ բառերի փոխարեն , C-ն օգտագործում է գանգուր փակագծերը { և }:
Ահա ևս մեկ օրինակ. Ծրագրավորողի համար շատ սովորական է փոփոխականին հաստատուն գումար
ավելացնել.
i = i + 5;

C-ում դուք կարող եք կրճատել սա


i += 5;

Եթե փոփոխականին միայն անհրաժեշտ է ավելացնել 1 (այսինքն՝ այն մեծացնելու համար), կարող եք էլ
ավելի կրճատել հայտարարությունը.
i++;

16-բիթանոց կամ 32-բիթանոց միկրոպրոցեսորների վրա նման հայտարարությունը կարող է իրականացվել


մեկ մեքենա-կոդի հրահանգով:
Ավելի վաղ ես նշեցի, որ բարձր մակարդակի լեզուների մեծ մասը չի ներառում բիթային գործողություններ
կամ բուլյան գործողություններ բիթերի վրա, որոնք բազմաթիվ պրոցեսորների կողմից աջակցվող
գործառույթներ են: C-ն այս կանոնից բացառություն է: Բացի այդ, C-ի կարևոր հատկանիշը ցուցիչների
աջակցությունն է , որոնք, ըստ էության, թվային հիշողության հասցեներ են: Քանի որ C-ն ունի
գործողություններ, որոնք զուգահեռում են շատ ընդհանուր պրոցեսորի հրահանգներ, C-ն երբեմն
դասակարգվում է որպես բարձր մակարդակի հավաքման լեզու : Ավելի քան ALGOL-ի նմանվող ցանկացած
լեզու, C-ն սերտորեն ընդօրինակում է պրոցեսորի ընդհանուր հրահանգների հավաքածուները:
Այնուամենայնիվ, բոլոր ALGOL-ի նման լեզուները, որոնք իրականում նշանակում են ամենից հաճախ
օգտագործվող ծրագրավորման լեզուները, նախագծվել են ֆոն Նեյմանի ճարտարապետության
համակարգիչների հիման վրա: Համակարգչային լեզու նախագծելիս ֆոն Նեյմանի մտածելակերպից դուրս
գալը հեշտ չէ, և այլ մարդկանց նման լեզու օգտագործելն ավելի դժվար է: Նման ոչ ֆոն Նեյման լեզուներից
մեկը LISP-ն է (որը նշանակում է List Processing), որը նախագծվել է Ջոն Մաքքարթիի կողմից
1950-ականների վերջին և օգտակար է արհեստական ինտելեկտի ոլորտում աշխատանքի համար: Մեկ այլ
լեզու, որը նույնքան անսովոր է, բայց նման չէ LISP-ին, APL-ն է (ծրագրավորման լեզու), որը մշակվել է
1950-ականների վերջին Քենեթ Այվերսոնի կողմից: APL-ն օգտագործում է կենտ նշանների հավաքածու,
որոնք գործողություններ են կատարում թվերի ամբողջ զանգվածների վրա միանգամից:
Թեև ALGOL-ի նման լեզուները պահպանել են իրենց գերակայությունը, վերջին տարիներին նրանք ձեռք են
բերել որոշակի բարելավումներ, որոնք հանգեցրել են այն, ինչ կոչվում է օբյեկտի վրա հիմնված լեզու: Այս
լեզուները օգտակար են գրաֆիկական օպերացիոն համակարգերի հետ աշխատելու համար, որոնք ես
նկարագրելու եմ հաջորդ (և վերջին) գլխում:
Գլուխ 25. Գրաֆիկական հեղափոխությունը
Life ամսագրի 1945 թվականի սեպտեմբերի 10-ի համարի ընթերցողները հիմնականում հանդիպել են
հոդվածների և լուսանկարների սովորական էկլեկտիկ խառնուրդին. պատմություններ Երկրորդ
համաշխարհային պատերազմի ավարտի մասին, պարող Վասլավ Նիժինսկու Վիեննայում ապրած
պատմությունը, ֆոտոշարադրություն United Auto-ի մասին: Աշխատողներ. Այդ համարում ներառված էր
նաև մի անսպասելի բան՝ Վանևար Բուշի (1890–1974) սադրիչ հոդվածը գիտական հետազոտությունների
ապագայի մասին։ Վան Բուշը (ինչպես նրան անվանում էին) արդեն իր հետքն էր դրել հաշվողական
տեխնիկայի պատմության մեջ՝ նախագծելով ամենակարևոր անալոգային համակարգիչներից մեկը՝
դիֆերենցիալ անալիզատորը, 1927-ից 1931 թվականներին՝ լինելով MIT-ի ճարտարագիտության
պրոֆեսոր: 1945 թվականին Life հոդվածի հրապարակման ժամանակ Բուշը ծառայում էր որպես Գիտական
հետազոտությունների և զարգացման գրասենյակի տնօրեն, որը պատասխանատու էր պատերազմի ժամանակ
ԱՄՆ գիտական գործունեության համակարգման համար, ներառյալ Մանհեթենի նախագիծը:
Բուշի կյանքի «Ինչպես կարող ենք մտածել» հոդվածը, որը փոքր-ինչ խտացված էր իր առաջին հայտնվելուց
երկու ամիս առաջ The Atlantic Monthly- ում, նկարագրում էր ապագայի որոշ հիպոթետիկ գյուտեր, որոնք
իբրևէ գիտնականի և հետազոտողի համար պետք է զբաղվեն անընդհատ աճող թվով տեխնիկական
ամսագրերով և հոդվածներով: . Բուշը միկրոֆիլմը տեսավ որպես լուծում և պատկերացրեց մի սարք, որը նա
անվանեց Memex ՝ գրասեղանի ներսում գրքեր, հոդվածներ, գրառումներ և նկարներ պահելու համար:
Memex-ը նաև թույլ է տվել օգտատիրոջը թեմատիկ կապեր հաստատել այս աշխատանքների միջև՝
համաձայն մարդկային մտքի կողմից սովորաբար ստեղծված ասոցիացիաների: Նա նույնիսկ պատկերացնում
էր մարդկանց մի նոր պրոֆեսիոնալ խումբ, որը կձևեր ասոցիացիայի այս ուղիները տեղեկատվական
զանգվածների միջոցով:
Թեև ապագայի հրճվանքների մասին հոդվածները տարածված են եղել ամբողջ քսաներորդ դարում, «Ինչպես
մենք կարող ենք մտածել», տարբեր է: Սա կենցաղային աշխատուժ խնայող սարքերի կամ ֆուտուրիստական
տրանսպորտի կամ ռոբոտների մասին պատմություն չէ: Սա պատմություն է տեղեկատվության և այն մասին,
թե ինչպես նոր տեխնոլոգիաները կարող են օգնել մեզ հաջողությամբ հաղթահարել դրա հետ:
Առաջին ռելե հաշվիչների կառուցումից հետո վեց ու կես տասնամյակների ընթացքում համակարգիչները
միևնույն ժամանակ դարձել են ավելի փոքր, ավելի արագ և էժան: Այս միտումը փոխել է հաշվարկների
բնույթը: Քանի որ համակարգիչները էժանանում են, յուրաքանչյուր մարդ կարող է ունենալ իր սեփականը:
Քանի որ համակարգիչները փոքրանում և արագանում են, ծրագրակազմը կարող է ավելի բարդ դառնալ, և
մեքենաները կարող են ավելի ու ավելի շատ աշխատել:
Այս հավելյալ հզորությունն ու արագությունը լավ օգտագործելու եղանակներից մեկը համակարգչային
համակարգի ամենակարևոր մասի բարելավումն է, որն օգտատիրոջ միջերեսն է ՝ այն կետը, որտեղ մարդն ու
համակարգիչը հանդիպում են: Մարդիկ և համակարգիչները շատ տարբեր կենդանիներ են, և, ցավոք, ավելի
հեշտ է համոզել մարդկանց կատարել ճշգրտումներ՝ համապատասխանեցնելու համակարգիչների
առանձնահատկություններին, քան հակառակը:
Վաղ օրերում թվային համակարգիչներն ընդհանրապես ինտերակտիվ չէին: Դրանցից մի քանիսը
ծրագրավորվել են անջատիչների և մալուխների միջոցով, իսկ մյուսներն օգտագործել են դակված թղթե
ժապավեն կամ թաղանթ: 1950-ականներին և 1960-ականներին (և նույնիսկ շարունակվելով մինչև
1970-ական թվականները), համակարգիչները զարգացել էին այն աստիճան, որտեղ խմբաքանակի մշակումը
նորմ էր. ծրագրերն ու տվյալները խրվում էին քարտերի վրա, որոնք այնուհետև ընթերցվում էին
համակարգչային հիշողության մեջ: Ծրագիրը վերլուծել է տվյալները, կատարել որոշ եզրակացություններ և
արդյունքները տպել թղթի վրա:
Ամենավաղ ինտերակտիվ համակարգիչները օգտագործել են հեռագրամեքենաներ: Նախորդ գլխում
նկարագրված Dartmouth-ի ժամանակի փոխանակման համակարգը (թվագրված է 1960-ականների
սկզբից), ինչպես օրինակ՝ Դարտմուտի ժամանակի փոխանակման համակարգը, աջակցում էին մի քանի
հեռագրամեքենաների, որոնք կարող էին օգտագործվել միաժամանակ: Նման համակարգում օգտատերը տող է
տպում հեռագրամեքենայում, իսկ համակարգիչը պատասխանում է մեկ կամ մի քանի տողերով:
Հեռագրամեքենայի և համակարգչի միջև տեղեկատվության փոխանակումն ամբողջությամբ բաղկացած է
ASCII-ի (կամ մեկ այլ նիշերի հավաքածուից) հոսքերից, որոնք գրեթե ամբողջությամբ նիշերի կոդեր են՝ որոշ
պարզ կառավարման կոդերով, ինչպիսիք են փոխադրման վերադարձը և գիծը: Գործարքն ընթանում է միայն
մեկ ուղղությամբ՝ թղթի գլանափաթեթով:
Այնուամենայնիվ, կաթոդային խողովակը (որն ավելի տարածված է դարձել 1970-ականներին) չպետք է
ունենա նման սահմանափակումներ: Ծրագրային ապահովումը կարող է ավելի ճկուն կերպով վերաբերվել
ամբողջ էկրանին՝ որպես տեղեկատվության երկչափ հարթակ: Այնուամենայնիվ, հավանաբար փորձելով
ընդհանրացված պահել օպերացիոն համակարգի ցուցադրման ելքային տրամաբանությունը, փոքր
համակարգիչների համար գրված շատ վաղ ծրագրակազմը շարունակում էր CRT-ին վերաբերվել որպես
«ապակե հեռագրամեքենա»՝ ցուցադրելով ելքը տող առ տող՝ իջնելով էկրանով և պտտելով
բովանդակությունը։ էկրանի վերև, երբ տեքստը հասավ ներքևի մասում: CP/M-ի բոլոր կոմունալ
ծառայությունները և MS-DOS-ի կոմունալ ծառայություններից շատերն օգտագործում էին վիդեո
ցուցադրումը հեռագրամեքենայի ռեժիմում: Թերևս, հեռագրամեքենայի արխետիպային օպերացիոն
համակարգը UNIX-ն է, որը դեռ հպարտորեն պահպանում է այդ ավանդույթը:
Բավականին հետաքրքիր է, որ ASCII նիշերի հավաքածուն ամբողջովին անբավարար չէ կաթոդային
ճառագայթների խողովակի հետ գործ ունենալու համար: Երբ ASCII-ն ի սկզբանե նախագծված էր, 1Bh
ծածկագիրը պիտակավորված էր Escape և հատուկ նախատեսված էր նիշերի հավաքածուի ընդլայնումները
մշակելու համար: 1979 թվականին Ամերիկյան ստանդարտների ազգային ինստիտուտը (ANSI)
հրապարակեց ստանդարտ՝ «Տեղեկատվության փոխանակման ամերիկյան ազգային ստանդարտ կոդով
օգտագործման լրացուցիչ հսկողություն» վերնագրով։ Սույն ստանդարտի նպատակն էր «բավարարել երկչափ
նիշերի պատկերման սարքերի մուտքային/ելքային հսկողության կանխատեսելի կարիքները, ներառյալ
կաթոդային ճառագայթային խողովակի և տպիչի տեսակների ինտերակտիվ տերմինալները…»:
Իհարկե, Escape կոդը 1Bh ընդամենը 1 բայթ է և կարող է նշանակել միայն մեկ բան: Escape կոդը
աշխատում է փոփոխական երկարությամբ հաջորդականությունների նախադասման միջոցով, որոնք կատարում
են մի շարք գործառույթներ: Օրինակ, հաջորդականությունը
1Bh 5Bh 32h 4Ah

որը Escape կոդն է, որին հաջորդում են նիշերը [2J , սահմանված է ամբողջ էկրանը ջնջելու և կուրսորը
վերին ձախ անկյուն տեղափոխելու համար: Սա մի բան չէ, որ կարելի է անել հեռագրամեքենայով:
Հերթականությունը
1բժ 5ժ 35ժ 3բժ 32ժ 39ժ 48ժ

[5;29H նիշերը , կուրսորը տեղափոխում է 5-րդ տող և 29-րդ սյունակ:


Համակցված ստեղնաշարը և CRT-ն, որն արձագանքում է ASCII կոդերին (և, հնարավոր է, Escape
հաջորդականությունների հավաքածուին), որը գալիս է հեռավոր համակարգչից, երբեմն կոչվում է համր
տերմինալ : Այդպիսի տերմինալներն ավելի արագ են, քան հեռագրամեքենաները և որոշ չափով ավելի ճկուն,
բայց դրանք այնքան էլ արագ չեն օգտատիրոջ միջերեսում իրական նորարարությունների համար: Նման
նորամուծությունները եղան 1970-ականներին փոքր համակարգիչների հետ, որոնք, ինչպես 21-րդ գլխում
կառուցված հիպոթետիկ համակարգիչը, ներառում էին վիդեո ցուցադրման հիշողությունը որպես
միկրոպրոցեսորի հասցեների տարածության մաս:
Առաջին ցուցումը, որ տնային համակարգիչները շատ են տարբերվելու իրենց ավելի մեծ և թանկ
զարմիկներից, հավանաբար, VisiCalc հավելվածն էր: Ձևավորվել և ծրագրավորվել է Դեն Բրիկլինի (ծնված
1951) և Բոբ Ֆրանկսթոնի (ծնված 1949 թ.) կողմից և ներդրվել է 1979 թվականին Apple II-ի համար՝
VisiCalc-ն օգտագործել է էկրանը՝ օգտատիրոջը աղյուսակի երկչափ տեսք հաղորդելու համար: Մինչ
VisiCalc-ը, աղյուսակը (կամ աշխատաթերթը) տողերով և սյունակներով թղթի կտոր էր, որը սովորաբար
օգտագործվում էր մի շարք հաշվարկներ կատարելու համար: VisiCalc-ը թուղթը փոխարինեց տեսացուցիչով՝
թույլ տալով օգտվողին շրջել աղյուսակի շուրջ, մուտքագրել թվեր և բանաձևեր և վերահաշվարկել ամեն ինչ
փոփոխությունից հետո:
VisiCalc-ի համար զարմանալին այն է, որ դա ծրագիր էր, որը հնարավոր չէր կրկնօրինակել ավելի մեծ
համակարգիչների վրա : VisiCalc-ի նման ծրագիրը պետք է շատ արագ թարմացնի էկրանը: Այդ իսկ
պատճառով այն ուղղակիորեն գրել է պատահական մուտքի հիշողությանը, որն օգտագործվում է Apple II-ի
վիդեո ցուցադրման համար: Այս հիշողությունը միկրոպրոցեսորի հասցեների տարածության մի մասն է:
Խոշոր ժամանակով համօգտագործվող համակարգչի և համր տերմինալի միջև ինտերֆեյսը պարզապես
բավականաչափ արագ չէ աղյուսակային ծրագիրը օգտագործելի դարձնելու համար:
Որքան արագ համակարգիչը կարող է արձագանքել ստեղնաշարին և փոխել տեսահոլովակի ցուցադրումը,
այնքան ավելի ուժեղ է հնարավոր փոխազդեցությունը օգտատիրոջ և համակարգչի միջև: Ծրագրաշարի մեծ
մասը, որը գրվել է IBM Personal Computer-ի առաջին տասնամյակում (մինչև 1980-ական
թվականները) ուղղակիորեն գրել է վիդեո ցուցադրման հիշողության մեջ: Քանի որ IBM-ը սահմանել է
ապարատային ստանդարտ, որին հետևում են այլ համակարգչային արտադրողներ, ծրագրային ապահովման
արտադրողները կարող են շրջանցել օպերացիոն համակարգը և ուղղակիորեն օգտագործել ապարատը՝ առանց
վախենալու, որ իրենց ծրագրերը ճիշտ (կամ ընդհանրապես) չեն աշխատի որոշ մեքենաների վրա: Եթե ԱՀ-ի
բոլոր կլոնները տարբեր ապարատային ինտերֆեյս ունենային իրենց վիդեո ցուցադրիչների համար, ապա
ծրագրային ապահովման արտադրողների համար չափազանց դժվար կլիներ տեղավորել բոլոր տարբեր
ձևավորումները:
Մեծ մասամբ, IBM PC-ի վաղ հավելվածները օգտագործում էին միայն տեքստային ելք, այլ ոչ գրաֆիկական:
Տեքստի ելքի օգտագործումը նաև օգնեց, որ հավելվածները հնարավորինս արագ աշխատեն: Երբ վիդեո
ցուցադրումը նախագծված է Գլուխ 21- ում նկարագրվածի նման , ծրագիրը կարող է էկրանին ցուցադրել
որոշակի նիշ՝ պարզապես հիշողության մեջ գրելով կերպարի ASCII կոդը: Գրաֆիկական վիդեո ցուցադրիչ
օգտագործող ծրագիրը սովորաբար պետք է հիշողության մեջ գրի 8 կամ ավելի բայթ՝ տեքստային նիշի
պատկերը նկարելու համար:
Սիմվոլների ցուցադրումից դեպի գրաֆիկական անցումը, այնուամենայնիվ, չափազանց կարևոր քայլ էր
համակարգիչների էվոլյուցիայում: Այնուամենայնիվ, համակարգչային տեխնիկայի և ծրագրային
ապահովման զարգացումը, որոնք աշխատում են գրաֆիկական պատկերներով, այլ ոչ թե պարզապես տեքստով
և թվերով, զարգանում է շատ դանդաղ: Դեռևս 1945 թ.-ին Ջոն ֆոն Նոյմանը պատկերացրեց օսցիլոսկոպի
նման էկրան, որը կարող էր պատկերավոր տեղեկատվությունը պատկերել: Բայց միայն 1950-ականների
սկզբին համակարգչային գրաֆիկան պատրաստ էր իրականություն դառնալու, երբ MIT-ը (IBM-ի
օգնությամբ) ստեղծեց Լինքոլնի լաբորատորիան՝ ռազմաօդային ուժերի հակաօդային պաշտպանության
համակարգի համար համակարգիչներ մշակելու համար: Այս նախագիծը հայտնի էր որպես SAGE
(Semi-Automatic Ground Environment) և ներառում էր գրաֆիկական էկրաններ, որոնք օգնում էին
օպերատորներին վերլուծել մեծ քանակությամբ տվյալներ:
Վաղ վիդեո ցուցադրիչները, որոնք օգտագործվում էին այնպիսի համակարգերում, ինչպիսին է SAGE-ը, նման
չէին մեր այսօրվա անհատական համակարգիչներին: Այսօրվա սովորական ԱՀ էկրանները հայտնի են որպես
ռաստերային էկրաններ: Հեռուստացույցի նման, ընդհանուր պատկերը կազմված է մի շարք հորիզոնական
ռաստերային գծերից, որոնք գծված են էլեկտրոնային ատրճանակով, որը արձակում է ճառագայթ, որը շատ
արագ շարժվում է էկրանով առաջ և առաջ: Էկրանը կարելի է պատկերացնել որպես կետերի մեծ ուղղանկյուն
զանգված, որը կոչվում է պիքսել ( նկարի տարրեր ): Համակարգչի ներսում հիշողության բլոկը նվիրված է
տեսանյութի ցուցադրմանը և պարունակում է 1 կամ ավելի բիթ էկրանի յուրաքանչյուր պիքսելի համար: Այս
բիթերի արժեքները որոշում են, թե արդյոք պիքսելները լուսավորված են և ինչ գույն են դրանք:
Օրինակ, համակարգչային էկրանների մեծ մասը մեր օրերում ունեն առնվազն 640 պիքսել հորիզոնական և
480 պիքսել ուղղահայաց լուծում: Փիքսելների ընդհանուր թիվը այս երկու թվերի արտադրյալն է՝ 307200:
Եթե յուրաքանչյուր պիքսելին հատկացված է միայն 1 բիթ հիշողություն, յուրաքանչյուր պիքսել
սահմանափակվում է ընդամենը երկու գույնով, սովորաբար սև և սպիտակ: Օրինակ, 0 պիքսելը կարող է լինել
սև, իսկ 1 պիքսելը սպիտակ: Նման վիդեո ցուցադրման համար պահանջվում է 307200 բիթ հիշողություն
կամ 38400 բայթ:
Հնարավոր գույների քանակի ավելացումը պահանջում է ավելի շատ բիթ մեկ պիքսելում և մեծացնում է
էկրանի ադապտերի հիշողության պահանջները: Օրինակ՝ յուրաքանչյուր պիքսելի համար կարող է
օգտագործվել բայթ՝ մոխրագույն երանգները կոդավորելու համար: Նման դասավորության դեպքում 00h
բայթը սև է, FFh-ը՝ սպիտակ, իսկ միջև եղած արժեքները մոխրագույնի երանգներ են։
CRT-ի գույնը ձեռք է բերվում երեք էլեկտրոնային ատրճանակների միջոցով, որոնցից մեկը երեք հիմնական
գույներից յուրաքանչյուրի համար՝ կարմիր, կանաչ և կապույտ: (Դուք կարող եք խոշորացույցով զննել
հեռուստացույցը կամ համակարգչի գունավոր էկրանը՝ ինքներդ ձեզ համոզելու համար, որ դա ճիշտ է:
Տպագրությունը օգտագործում է հիմնական նյութերի այլ հավաքածու:) Կարմիրի և կանաչի համադրությունը
դեղին է, կարմիրի և կապույտի համադրությունը մագենտա է, կանաչի և կապույտի համադրությունը կապույտ
է, իսկ բոլոր երեք հիմնական գույների համադրությունը սպիտակն է:
Գունավոր գրաֆիկական ցուցադրման ադապտերների ամենապարզ տեսակը պահանջում է 3 բիթ մեկ
պիքսելում: Փիքսելները կարող են կոդավորվել այսպես՝ յուրաքանչյուր հիմնական գույնի համար 1 բիթ.

Գույ
Բիթ
ն
եր
000 Սեվ
Կապ
001
ույտ
Կան
010
աչ
Cya
011
n
Կար
100
միր
Մագ
101 ենտ
ա
Դեղ
110
ին
Սպի
111
տակ

Բայց նման սխեման հարմար կլինի միայն պարզ մուլտֆիլմի պատկերների համար: Իրական աշխարհի
գույների մեծ մասը կարմիր, կանաչ և կապույտ տարբեր մակարդակների համակցություններ են: Եթե
ցանկանում եք յուրաքանչյուր պիքսելին հատկացնել 2 բայթ, կարող եք հատկացնել 5 բիթ յուրաքանչյուր
հիմնական գույնի համար (մնաց 1 բիթ): Դա ձեզ տալիս է կարմիր, կանաչ և կապույտ 32 մակարդակ և
ընդհանուր առմամբ 32,768 տարբեր գույներ: Այս սխեման հաճախ կոչվում է բարձր գույն կամ հազարավոր
գույներ :
Հաջորդ քայլը յուրաքանչյուր պիքսելի համար 3 բայթ կամ 1 բայթ յուրաքանչյուր հիմնականի համար
օգտագործելն է: Այս կոդավորման սխեմայի արդյունքում ստացվում են կարմիր, կանաչ և կապույտ 256
մակարդակներ՝ ընդհանուր 16,777,216 տարբեր գույների համար, որոնք հաճախ կոչվում են ամբողջական
գույն կամ միլիոնավոր գույներ : Եթե վիդեո էկրանի լուծաչափը 640 պիքսել է հորիզոնական և 480 պիքսել
ուղղահայաց, ապա պահանջվող հիշողության ընդհանուր քանակը կազմում է 921,600 բայթ կամ գրեթե մեկ
մեգաբայթ:
Մեկ պիքսելում բիթերի թիվը երբեմն կոչվում է գույնի խորություն կամ գունային լուծում : Տարբեր գույների
քանակը կապված է մեկ պիքսելի բիթերի քանակի հետ այս կերպ.

Գույ
ների
քան
ակը
=2
բիթե
րի
քան
ակը
մեկ
պիքս
ելու
մ

Վիդեո ադապտերների տախտակն ունի միայն որոշակի քանակությամբ հիշողություն, ուստի այն
սահմանափակ է հնարավոր լուծումների և գունային խորությունների համակցություններում: Օրինակ՝ վիդեո
ադապտերների տախտակը, որն ունի մեկ մեգաբայթ հիշողություն, կարող է կատարել 640 x 480 լուծաչափ՝
յուրաքանչյուր պիքսելում 3 բայթ: Բայց եթե ցանկանում եք օգտագործել 800-ից 600-ի լուծաչափը, ապա
պիքսելում 3 բայթի համար բավարար հիշողություն չկա: Փոխարենը, դուք պետք է օգտագործեք 2 բայթ մեկ
պիքսելում:
Թեև ռաստերային ցուցադրումները մեզ հիմա շատ բնական են թվում, վաղ օրերում դրանք այնքան էլ
գործնական չէին, քանի որ պահանջում էին այն ժամանակվա մեծ հիշողություն: Փոխարենը, SAGE վիդեո
էկրանները վեկտորային էկրաններ էին, որոնք ավելի շատ նման էին օսցիլոսկոպի, քան հեռուստացույցի:
Էլեկտրոնային ատրճանակը կարող է էլեկտրական դիրքավորվել այնպես, որ ցույց տա էկրանի ցանկացած
հատված և ուղղակիորեն գծեր ու կորեր: Էկրանի վրա պատկերի կայունությունը թույլ տվեց այս գծերն ու
կորերը հավաքել տարրական նկարների մեջ:
SAGE համակարգիչները նաև աջակցում էին լուսային գրիչներ , որոնք թույլ էին տալիս օպերատորներին
փոխել պատկերները էկրանի վրա: Լույսի գրիչները յուրահատուկ սարքեր են, որոնք նման են ստիլուսի՝ մի
ծայրին ամրացված մետաղալարով: Եթե համապատասխան ծրագրակազմն աշխատում է, համակարգիչը կարող
է հայտնաբերել լուսային գրիչի ուղղությունը էկրանի վրա և փոխել պատկերը՝ ի պատասխան գրչի
շարժումների:
Ինչպե՞ս է սա աշխատում: Նույնիսկ տեխնոլոգիական բարդ մասնագետները երբեմն տարակուսում են, երբ
առաջին անգամ հանդիպում են թեթև գրիչին: Հիմնական բանն այն է, որ լուսային գրիչը լույս չի արձակում ,
այն հայտնաբերում է լույսը: Սխեման, որը վերահսկում է էլեկտրոնային ատրճանակի շարժումները CRT-ում
(անկախ նրանից, թե օգտագործվում է ռաստեր կամ վեկտորային էկրան), կարող է նաև որոշել, թե երբ է
էլեկտրոնային ատրճանակի լույսը դիպչում լուսային գրիչին և, հետևաբար, թե որտեղ է լուսային գրիչը
ուղղված էկրանին: .
Առաջին մարդկանցից մեկը, ով պատկերացնում էր ինտերակտիվ հաշվարկների նոր դարաշրջանը, Իվան
Սաթերլենդն էր (ծնված 1938 թ.), ով 1963-ին ցուցադրեց հեղափոխական գրաֆիկական ծրագիր, որը
մշակել էր SAGE համակարգիչների համար Sketchpad անունով: Sketchpad-ը կարող է պահել
պատկերների նկարագրությունները հիշողության մեջ և ցուցադրել պատկերները տեսահոլովակի էկրանին:
Բացի այդ, դուք կարող եք օգտագործել լուսային գրիչը էկրանի վրա պատկերներ նկարելու և դրանք փոխելու
համար, և համակարգիչը կհետևեր այդ ամենին:
Ինտերակտիվ հաշվարկների մեկ այլ վաղ տեսլականը Դուգլաս Էնգելբարտն էր (ծնված 1925 թ.), ով
կարդաց Վանևար Բուշի «Ինչպես մենք կարող ենք մտածել» հոդվածը, երբ այն հրապարակվեց 1945
թվականին, և հինգ տարի անց սկսեց աշխատել համակարգչային միջերեսներում նոր գաղափարներ մշակելու
համար: 1960-ականների կեսերին, երբ գտնվում էր Սանֆորդի գիտահետազոտական ինստիտուտում,
Էնգելբարտը ամբողջությամբ վերանայեց մուտքային սարքերը և ստեղծեց հրամաններ մուտքագրելու համար
հինգ թեւավոր ստեղնաշար (որը երբեք չէր բռնվում) և ավելի փոքր սարք անիվներով և կոճակով, որը նա
անվանեց մկնիկ ։ . Այժմ մկնիկը գրեթե համընդհանուր ընդունված է էկրանի շուրջ ցուցիչ տեղափոխելու
համար՝ էկրանի վրա գտնվող օբյեկտներ ընտրելու համար:
Ինտերակտիվ գրաֆիկական հաշվարկների վաղ էնտուզիաստներից շատերը (չնայած ոչ Էնգելբարտը)
հավաքվեցին Xerox-ում, բարեբախտաբար այն ժամանակ, երբ ռաստերային ցուցադրումը դարձավ
տնտեսապես իրագործելի: Xerox-ը հիմնել է Palo Alto Research Center-ը (PARC) 1970 թվականին՝
մասամբ օգնելու մշակել այնպիսի ապրանքներ, որոնք թույլ կտան ընկերությանը մուտք գործել
համակարգչային արդյունաբերություն: Թերևս PARC-ի ամենահայտնի տեսլականը Ալան Քեյն էր (ծնված
1940 թ.), ով հանդիպեց Վան Բուշի միկրոֆիլմերի գրադարանին (Ռոբերտ Հայնլայնի կարճ պատմվածքում),
երբ նա 14 տարեկան էր, և ով արդեն մտահղացել էր շարժական համակարգչի մասին, որը նա անվանեց
Dynabook:
PARC-ում առաջին մեծ նախագիծը Alto-ն էր, որը նախագծվել և կառուցվել է 1972-1973 թվականներին:
Այդ տարիների չափանիշներով այն տպավորիչ աշխատանք էր: Հատակի կանգնած համակարգի միավորն
ուներ 16-բիթանոց պրոցեսինգ, երկու 3-ՄԲ սկավառակի կրիչներ, 128 ԿԲ հիշողություն (ընդարձակվում է
մինչև 512 ԿԲ) և երեք կոճակով մկնիկ: Քանի որ Alto-ն նախորդում էր 16-բիթանոց մեկ չիպային
միկրոպրոցեսորների առկայությանը, Alto պրոցեսորը պետք է կառուցվեր մոտ 200 ինտեգրված
սխեմաներից:
Տեսանյութի ցուցադրումը Ալտոյի մի քանի անսովոր կողմերից մեկն էր: Էկրանը մոտավորապես թղթի
թերթիկի չափ ու ձև էր՝ 8 դյույմ լայնություն և 10 դյույմ բարձրություն։ Այն աշխատում էր ռաստերային
գրաֆիկական ռեժիմով՝ 606 պիքսել հորիզոնական և 808 պիքսել ուղղահայաց, ընդհանուր 489,648
պիքսել: Յուրաքանչյուր պիքսելին հատկացվել է մեկ բիթ հիշողություն, ինչը նշանակում է, որ
յուրաքանչյուր պիքսել կարող է լինել կամ սև կամ սպիտակ: Տեսանյութի ցուցադրմանը հատկացված
հիշողության ընդհանուր ծավալը կազմում էր 64 ԿԲ, որը պրոցեսորի հասցեների տարածքի մի մասն էր:
Այս վիդեո ցուցադրման հիշողության մեջ գրելով՝ ծրագրաշարը կարող է նկարներ նկարել էկրանին կամ
ցուցադրել տեքստ տարբեր տառատեսակներով և չափերով: Մկնիկը գրասեղանի վրա գլորելով՝ Alto-ի
օգտատերը կարող էր ցուցիչը տեղադրել էկրանին և շփվել էկրանի օբյեկտների հետ: Տեսանյութի էկրանին
վերաբերվելու փոխարեն, ինչպես հեռագրամեքենան՝ գծային կերպով արձագանքելով օգտվողի
մուտքագրմանը և դուրս գրելու ծրագրի ելքը, էկրանը դարձավ տեղեկատվության երկչափ բարձր խտության
զանգված և օգտագործողի մուտքագրման ավելի անմիջական աղբյուր:
1970-ականների մնացած մասում Ալտոյի համար գրված ծրագրերը զարգացրին մի քանի շատ հետաքրքիր
առանձնահատկություններ: Մի քանի ծրագրեր տեղադրվեցին պատուհաններում և միաժամանակ
ցուցադրվեցին նույն էկրանին: Alto-ի վիդեո գրաֆիկան թույլ տվեց ծրագրային ապահովմանը անցնել
տեքստի սահմաններից և իսկապես արտացոլել օգտվողի երևակայությունը: Գրաֆիկական օբյեկտները
(օրինակ՝ կոճակները և ընտրացանկերը և փոքր նկարները, որոնք կոչվում են պատկերակներ ) դարձան
օգտատիրոջ միջերեսի մի մասը: Մկնիկը օգտագործվում էր պատուհաններ ընտրելու կամ գրաֆիկական
օբյեկտները գործարկելու համար՝ ծրագրի գործառույթները կատարելու համար:
Սա ծրագրային ապահովում էր, որը դուրս եկավ օգտատիրոջ միջերեսից և մտավ օգտատիրոջ մտերմություն,
ծրագրային ապահովում, որը հեշտացնում էր համակարգչի ընդլայնումը դեպի հասարակ թվերի ճռճռացող
ոլորտներից դուրս: Սա ծրագրային ապահովում էր, որը նախագծված էր՝ մեջբերելու 1963 թվականին
Դուգլաս Էնգելբարտի կողմից գրված լեգենդար թերթի վերնագիրը՝ «մարդու ինտելեկտի ավելացման
համար»:
Այն, ինչ PARC-ն զարգացրեց Alto-ում , կիրառական գրաֆիկական ինտերֆեյսի կամ GUI-ի սկիզբն էր :
Սակայն Xerox-ը չվաճառեց Alto-ն (եթե վաճառեին, մեկը կարժենար ավելի քան 30,000 դոլար), և անցավ
մեկ տասնամյակ, մինչև Alto-ի գաղափարները կմարմնավորվեին հաջող սպառողական արտադրանքի մեջ:
1979 թվականին Սթիվ Ջոբսը և Apple Computer-ի մի խումբ այցելեցին PARC և բավականին
տպավորված էին իրենց տեսածով: Բայց նրանցից ավելի քան երեք տարի պահանջվեց գրաֆիկական
ինտերֆեյս ունեցող համակարգիչ ներկայացնելու համար: Սա չարաբաստիկ Apple Lisa-ն էր 1983
թվականի հունվարին: Սակայն մեկ տարի անց Apple-ը ներկայացրեց շատ ավելի հաջողակ Macintosh-ը:
Բնօրինակ Macintosh-ն ուներ Motorola 68000 միկրոպրոցեսոր, 64 ԿԲ ROM, 128 ԿԲ օպերատիվ
հիշողություն, 3½ դյույմանոց սկավառակի սկավառակ (400 ԿԲ յուրաքանչյուր սկավառակի համար),
ստեղնաշար, մկնիկ և տեսահոլովակ, որը կարող է 512 պիքսել հորիզոնական ցուցադրել: 342 պիքսել
ուղղահայաց: (CRT-ն ինքնին չափել է ընդամենը 9 դյույմ անկյունագծով): Դա ընդհանուր 175,104 պիքսել
է: Յուրաքանչյուր պիքսել կապված էր 1 բիթ հիշողության հետ և կարող էր գունավորվել ինչպես սև, այնպես
էլ սպիտակ, ուստի տեսահոլովակի ցուցադրման RAM-ի համար պահանջվում էր մոտ 22 ԿԲ:
Բնօրինակ Macintosh-ի ապարատը էլեգանտ էր, բայց հազիվ թե հեղափոխական: Այն, ինչ Mac-ն այդքան
տարբերվում էր մյուս համակարգիչներից 1984 թվականին, Macintosh օպերացիոն համակարգն էր, որն
այն ժամանակ սովորաբար կոչվում էր համակարգային ծրագրակազմ , իսկ ավելի ուշ հայտնի դարձավ որպես
Mac OS :
Տեքստի վրա հիմնված մեկ օգտատիրոջ օպերացիոն համակարգը, ինչպիսին է CP/M-ը կամ MS-DOS-ը,
այնքան էլ մեծ չէ և չունի կիրառական ծրագրավորման ընդարձակ միջերես (API): Ինչպես ես բացատրեցի
22-րդ գլխում , հիմնականում այն, ինչ պահանջվում է տեքստի վրա հիմնված այս օպերացիոն
համակարգերում, հավելվածների համար ֆայլային համակարգը օգտագործելու միջոց է: Գրաֆիկական
օպերացիոն համակարգը, ինչպիսին Mac OS-ն է, այնուամենայնիվ, շատ ավելի մեծ է և ունի հարյուրավոր
API գործառույթներ: Նրանցից յուրաքանչյուրը նույնացվում է անունով, որը նկարագրում է, թե ինչ է անում
գործառույթը:
Թեև տեքստի վրա հիմնված օպերացիոն համակարգը, ինչպիսին MS-DOS-ն է, ապահովում է API-ի մի քանի
պարզ գործառույթներ, որոնք թույլ են տալիս կիրառական ծրագրերին ցուցադրել տեքստը էկրանին
հեռագրամեքենայով, գրաֆիկական օպերացիոն համակարգը, ինչպիսին է Mac OS-ը, պետք է ապահովի
ծրագրերի ցուցադրման միջոց: գրաֆիկա էկրանին: Տեսականորեն, դա կարելի է իրականացնել մեկ API
ֆունկցիայի ներդրմամբ, որը թույլ է տալիս հավելվածին սահմանել պիքսելի գույնը որոշակի հորիզոնական
և ուղղահայաց կոորդինատում: Բայց պարզվում է, որ սա անարդյունավետ է և հանգեցնում է շատ դանդաղ
գրաֆիկայի:
Օպերացիոն համակարգի համար ավելի խելամիտ է տրամադրել գրաֆիկական ծրագրավորման ամբողջական
համակարգ, ինչը նշանակում է, որ օպերացիոն համակարգը ներառում է API ֆունկցիաներ՝ գծեր,
ուղղանկյուններ և էլիպսներ (ներառյալ շրջանակները), ինչպես նաև տեքստ գծելու համար: Գծերը կարող են
լինել կամ ամուր կամ կազմված գծիկներից կամ կետերից: Ուղղանկյունները և էլիպսները կարելի է լրացնել
տարբեր նախշերով։ Տեքստը կարող է ցուցադրվել տարբեր տառատեսակներով և չափսերով և այնպիսի
էֆեկտներով, ինչպիսիք են թավը և ընդգծումը: Գրաֆիկական համակարգը պատասխանատու է որոշելու, թե
ինչպես կարելի է այս գրաֆիկական օբյեկտները ցուցադրել որպես կետերի հավաքածու:
Գրաֆիկական օպերացիոն համակարգի ներքո աշխատող ծրագրերը օգտագործում են նույն API-ները՝
գրաֆիկա նկարելու համար և՛ համակարգչի վիդեո էկրանին, և՛ տպիչին: Բառի մշակման հավելվածն
այսպիսով կարող է փաստաթուղթ ցուցադրել էկրանին այնպես, որ այն շատ նման լինի հետագայում
տպագրված փաստաթղթին, որը հայտնի է որպես WYSIWYG (արտասանված wizzy wig ): Սա «Այն, ինչ
տեսնում եք, այն է, ինչ ստանում եք» բառի հապավումն է, կատակերգու Ֆլիպ Ուիլսոնի ներդրումը
համակարգչային լեզվի մեջ իր Ջերալդինի կերպարում:
Գրաֆիկական ինտերֆեյսի գրավչության մի մասն այն է, որ տարբեր հավելվածներ աշխատում են
մոտավորապես նույնը և օգտագործում են օգտագործողի փորձը: Սա նշանակում է, որ օպերացիոն
համակարգը պետք է նաև աջակցի API գործառույթներին, որոնք թույլ են տալիս հավելվածներին
իրականացնել օգտատիրոջ միջերեսի տարբեր բաղադրիչներ, ինչպիսիք են կոճակները և ընտրացանկերը:
Չնայած GUI-ն ընդհանուր առմամբ դիտվում է որպես օգտատերերի համար հեշտ միջավայր, այն նաև
նույնքան կարևոր միջավայր է ծրագրավորողների համար: Ծրագրավորողները կարող են կիրառել
ժամանակակից ինտերֆեյս՝ առանց անիվը նորից հորինելու:
Նույնիսկ Macintosh-ի ներդրումից առաջ մի քանի ընկերություններ սկսել էին ստեղծել գրաֆիկական
օպերացիոն համակարգ IBM PC-ի և համատեղելիների համար: Ինչ-որ իմաստով, Apple-ի
ծրագրավորողներն ավելի հեշտ գործ ունեին, քանի որ նրանք միասին նախագծում էին ապարատային և
ծրագրային ապահովումը: Macintosh համակարգի ծրագրակազմը պետք է ապահովեր միայն մեկ տեսակի
սկավառակի սկավառակ, մեկ տեսակի տեսացուցիչ և երկու տպիչ: Այնուամենայնիվ, ԱՀ-ի համար
գրաֆիկական օպերացիոն համակարգի ներդրումը պահանջում էր ապարատային շատ տարբեր մասերի
աջակցություն:
Ավելին, չնայած IBM PC-ն ներկայացվել էր ընդամենը մի քանի տարի առաջ (1981թ.), շատերը սովոր էին
օգտագործել իրենց սիրելի MS-DOS հավելվածները և պատրաստ չէին հրաժարվել դրանցից: Համարվում էր,
որ գրաֆիկական օպերացիոն համակարգի համար ԱՀ-ի համար շատ կարևոր է գործարկել MS-DOS
հավելվածները, ինչպես նաև նոր օպերացիոն համակարգի համար հատուկ նախագծված հավելվածները:
(Macintosh-ը չի գործարկել Apple II ծրագրակազմը հիմնականում այն պատճառով, որ այն օգտագործում
էր այլ միկրոպրոցեսոր):
1985 թվականին Digital Research-ը (CP/M-ի ետևում գտնվող ընկերությունը) ներկայացրեց GEM-ը
(Գրաֆիկական միջավայրի կառավարիչ), VisiCorp-ը (VisiCalc շուկայավարող ընկերություն)
ներկայացրեց VisiOn-ը, իսկ Microsoft-ը թողարկեց Windows-ի 1.0 տարբերակը, որն արագորեն
ընկալվեց որպես հավանական հաղթող: «պատուհանների պատերազմներ». Միայն 1990-ի մայիսին
Windows 3.0-ի թողարկումից հետո Windows-ը սկսեց գրավել շատ օգտվողների: Այդ ժամանակից ի վեր
նրա ժողովրդականությունը մեծացել է, և այսօր Windows-ը օպերացիոն համակարգ է, որն օգտագործվում է
փոքր համակարգիչների մոտ 90 տոկոսի վրա: Չնայած Macintosh-ի և Windows-ի նման տեսքին, երկու
համակարգերի API-ները շատ տարբեր են:
Տեսականորեն, բացի գրաֆիկական էկրանից, գրաֆիկական օպերացիոն համակարգը ապարատային առումով
շատ ավելին չի պահանջում, քան տեքստի վրա հիմնված օպերացիոն համակարգը: Տեսականորեն նույնիսկ
կոշտ սկավառակ չի պահանջվում. բնօրինակ Macintosh-ը չուներ, իսկ Windows 1.0-ը չուներ:
Windows 1.0-ը նույնիսկ մկնիկ չէր պահանջում, չնայած բոլորը համաձայն էին, որ այն շատ ավելի հեշտ է
օգտագործել մկնիկի հետ:
Այնուամենայնիվ, զարմանալի չէ, որ օգտատերերի գրաֆիկական ինտերֆեյսներն ավելի տարածված են
դարձել, քանի որ միկրոպրոցեսորներն ավելի արագ են աճել, իսկ հիշողությունն ու հիշողությունը դարձել են
ավելի առատ: Քանի որ ավելի ու ավելի շատ հնարավորություններ են ավելացվում գրաֆիկական օպերացիոն
համակարգերին, դրանք մեծացել են: Այսօրվա գրաֆիկական օպերացիոն համակարգերը սովորաբար
պահանջում են մի քանի հարյուր մեգաբայթ կոշտ սկավառակի տարածություն և ավելի քան 32 մեգաբայթ
հիշողություն:
Գրաֆիկական օպերացիոն համակարգերի համար հավելվածները գրեթե երբեք չեն գրվում անսամբլի լեզվով:
Վաղ օրերին Macintosh հավելվածների համար հայտնի լեզուն Pascal-ն էր: Windows-ի հավելվածների
համար դա C-ն էր: Բայց ևս մեկ անգամ PARC-ն այլ մոտեցում ցուցաբերեց: Մոտավորապես 1972
թվականից սկսած, PARC-ի հետազոտողները մշակում էին Smalltalk անունով լեզու, որը մարմնավորում էր
օբյեկտի վրա հիմնված ծրագրավորման հայեցակարգը կամ OOP (արտասանվում է oop ):
Ավանդաբար, բարձր մակարդակի ծրագրավորման լեզուները տարբերակում են կոդը (որը
հայտարարություններ են, որոնք սովորաբար սկսվում են հիմնաբառով, ինչպիսիք են set , for or if ) և
տվյալները, որոնք թվեր են, որոնք ներկայացված են փոփոխականներով: Այս տարբերությունը, անկասկած,
ծագում է ֆոն Նեյմանի համակարգիչների ճարտարապետությունից, որտեղ ինչ-որ բան կամ մեքենայի կոդ է,
կամ տվյալների վրա գործող մեքենայական ծածկագիրը:
Այնուամենայնիվ, օբյեկտի վրա հիմնված ծրագրավորման մեջ օբյեկտը կոդի և տվյալների համակցություն է:
Օբյեկտի տվյալների պահպանման փաստացի ձևը հասկանալի է միայն օբյեկտի հետ կապված կոդով:
Օբյեկտները միմյանց հետ շփվում են՝ ուղարկելով և ստանալով հաղորդագրություններ , որոնք հրահանգներ
են տալիս օբյեկտին կամ տեղեկատվություն են խնդրում նրանից:
Օբյեկտ-կողմնորոշված լեզուները հաճախ օգտակար են գրաֆիկական օպերացիոն համակարգերի համար
հավելվածների ծրագրավորման համար, քանի որ ծրագրավորողը կարող է էկրանի օբյեկտներին (օրինակ՝
պատուհաններին և կոճակներին) վերաբերվել այնպես, ինչպես օգտատերն է դրանք ընկալում: Կոճակը
օբյեկտ կողմնորոշված լեզվով օբյեկտի օրինակ է: Կոճակն ունի որոշակի հարթություն և դիրք էկրանի վրա և
ցուցադրում է որոշ տեքստ կամ փոքրիկ նկար, որոնք բոլորը տվյալներ են՝ կապված օբյեկտի հետ: Օբյեկտի
հետ կապված ծածկագիրը որոշում է, թե երբ օգտվողը «սեղմում է» կոճակը ստեղնաշարի կամ մկնիկի
միջոցով և ուղարկում է հաղորդագրություն, որը ցույց է տալիս, որ կոճակը գործարկվել է:
Փոքր համակարգիչների համար ամենահանրաճանաչ առարկայական լեզուները, սակայն, ավանդական
ALGOL-ի նման լեզուների ընդլայնումներն են, ինչպիսիք են C-ն և Pascal-ը: C-ի ամենահայտնի օբյեկտին
ուղղված ընդլայնումը կոչվում է C++: (Ինչպես կարող եք հիշել, C-ում երկու գումարած նշանները աճող
օպերատոր են): C (թեև շատ տգեղ և գործնականում անընթեռնելի C): Այնուհետև C ծրագիրը կարող է
կազմվել նորմալ:
Օբյեկտ-կողմնորոշված լեզուները չեն կարող անել ավելին, քան ավանդական լեզուները, իհարկե: Բայց
ծրագրավորումը խնդիր լուծելու գործունեություն է, և օբյեկտ-կողմնորոշված լեզուները թույլ են տալիս
ծրագրավորողին դիտարկել տարբեր լուծումներ, որոնք հաճախ կառուցվածքային առումով գերազանցում են:
Հնարավոր է նաև, թեև այնքան էլ հեշտ չէ, գրել մեկ ծրագիր՝ օգտագործելով օբյեկտ-կողմնորոշված լեզու,
որը կարող է կազմվել՝ գործարկելու կամ Macintosh-ի կամ Windows-ի տակ: Նման ծրագիրն
ուղղակիորեն չի վերաբերում API-ներին, այլ ավելի շուտ օգտագործում է օբյեկտներ, որոնք իրենց հերթին
կանչում են API ֆունկցիաներ: Երկու տարբեր օբյեկտների սահմանումներ են օգտագործվում Macintosh-ի
կամ Windows API-ի համար ծրագիրը կազմելու համար:
Փոքր համակարգիչների վրա աշխատող ծրագրավորողներից շատերն այլևս չեն գործարկում կոմպիլյատորը
հրամանի տողից: Փոխարենը, ծրագրավորողները օգտագործում են ինտեգրված զարգացման միջավայր (IDE),
որը միավորում է նրանց անհրաժեշտ բոլոր գործիքները մեկ հարմար ծրագրի մեջ, որն աշխատում է մյուս
գրաֆիկական հավելվածների նման: Ծրագրավորողները նաև օգտվում են տեսողական ծրագրավորում կոչվող
տեխնիկայից , որտեղ պատուհանները ինտերակտիվ ձևավորվում են՝ օգտագործելով մկնիկը կոճակներ և այլ
բաղադրիչներ հավաքելու համար:
22-րդ գլխում ես նկարագրեցի տեքստային ֆայլեր, որոնք միայն ASCII նիշեր են պարունակում և որոնք
ընթեռնելի են ինձ և ձեզ նման մարդկանց համար: Տեքստի վրա հիմնված օպերացիոն համակարգերի
ժամանակներում տեքստային ֆայլերը իդեալական էին հավելվածների միջև տեղեկատվություն
փոխանակելու համար: Տեքստային ֆայլերի մեծ առավելություններից մեկն այն է, որ դրանք որոնելի են,
այսինքն՝ ծրագիրը կարող է դիտել բազմաթիվ տեքստային ֆայլեր և որոշել, թե դրանցից որն է պարունակում
որոշակի տեքստային տող: Բայց երբ դուք օպերացիոն համակարգում ունեք տեքստ ցուցադրելու
հնարավորություն՝ օգտագործելով տարբեր տառատեսակներ և չափեր և էֆեկտներ, ինչպիսիք են
շեղատառերը, թավատառերը և ընդգծումները, տեքստային ֆայլը հանկարծ ողբալիորեն անբավարար է թվում:
Իրոք, բառերի մշակման ծրագրերի մեծ մասը փաստաթղթերը պահում է սեփական երկուական ձևաչափով:
Տեքստային ֆայլերը նույնպես հարմար չեն պատկերային տեղեկատվության համար:
Բայց հնարավոր է տեքստի հետ միասին կոդավորել տեղեկատվությունը (օրինակ՝ տառատեսակի
բնութագրերը և պարբերության դասավորությունը) և դեռևս ունենալ ընթեռնելի տեքստային ֆայլ: Հիմնական
բանը այս տեղեկատվությունը նշելու համար փախուստի նշան ընտրելն է: Հարուստ տեքստի ձևաչափում
(RTF), որը մշակվել է Microsoft-ի կողմից՝ որպես հավելվածների միջև ֆորմատավորված տեքստ
փոխանակելու միջոց, { և } գանգուր փակագծերը և ետ կտրվածքի նշանը \ օգտագործվում են
տեղեկատվություն փակելու համար, որը ցույց է տալիս, թե ինչպես է տեքստը ձևավորվելու:
PostScript-ը տեքստային ֆայլի ձևաչափ է, որն այս հայեցակարգը հասցնում է ծայրահեղությունների:
Նախագծված Ջոն Ուորնոքի կողմից (ծնված 1940թ.), Adobe Systems-ի համահիմնադիրը, PostScript-ը
ընդհանուր ընդհանուր նշանակության գրաֆիկական ծրագրավորման լեզու է, որն այսօր օգտագործվում է
հիմնականում բարձրակարգ համակարգչային տպիչների վրա տեքստ և գրաֆիկա նկարելու համար:
Գրաֆիկական պատկերների ներդրումը անհատական հաշվողական միջավայրում ավելի լավ և էժան
սարքավորումների անմիջական արդյունքն է: Քանի որ միկրոպրոցեսորները դարձել են ավելի արագ, քանի որ
հիշողությունն էժանացել է, քանի որ վիդեո էկրաններն ու տպիչները մեծացել են լուծաչափով և ծաղկել են
գունավոր, այդ հզորությունը օգտագործվել է համակարգչային գրաֆիկայի միջոցով:
Համակարգչային գրաֆիկան գալիս է երկու տարբերակով, որոնք հիշատակվում են նույն բառերով, որոնք ես
օգտագործել էի ավելի վաղ՝ գրաֆիկական վիդեո ցուցադրումները տարբերելու համար՝ վեկտոր և ռաստեր:
Վեկտորային գրաֆիկան ներառում է պատկերների ստեղծումը ալգորիթմորեն՝ օգտագործելով ուղիղ գծեր,
կորեր և լցված տարածքներ: Սա համակարգչային օգնությամբ նկարչության (կամ CAD) ծրագրի մարզն է :
Վեկտորային գրաֆիկան գտնում է իր ամենակարևոր կիրառությունը ինժեներական և ճարտարապետական
ձևավորման մեջ: Վեկտորային գրաֆիկական պատկերը կարող է պահվել ֆայլի մեջ այն ձևաչափով, որը
կոչվում է մետաֆայլ : Մետաֆայլը պարզապես վեկտորային գրաֆիկայի գծագրման հրամանների հավաքածու
է, որը սովորաբար կոդավորված է երկուական ձևով:
Գծերի, կորերի և վեկտորային գրաֆիկայի լցված տարածքների օգտագործումը լիովին տեղին է, երբ դուք
կամուրջ եք նախագծում, բայց անհուսալիորեն անբավարար է, երբ ցանկանում եք ցույց տալ, թե իրականում
կառուցված կամուրջը ինչ տեսք ունի: Այդ կամուրջը իրական աշխարհի պատկեր է։ Այն պարզապես
չափազանց բարդ է վեկտորային գրաֆիկայով ներկայացնելու համար:
Ռաստերային գրաֆիկան (նաև հայտնի է որպես bitmap գրաֆիկա ) գալիս է օգնության: Bitmap-ը
պատկերը կոդավորում է որպես բիթերի ուղղանկյուն զանգված, որը համապատասխանում է ելքային սարքի
պիքսելներին: Ինչպես վիդեո ցուցադրումը, բիթքարտեզն ունի տարածական չափ (կամ լուծում), որը
պատկերի լայնությունն ու բարձրությունն է պիքսելներով: Bitmaps-ն ունի նաև գունային հարթություն
(կամ գունային լուծում կամ գույնի խորություն), որը յուրաքանչյուր պիքսելի հետ կապված բիթերի քանակն
է: Bitmap-ի յուրաքանչյուր պիքսել ունի նույն թվով բիթ:
Չնայած bitmap պատկերը երկչափ է, բիթքարտեզն ինքնին բայթերի միայն մեկ հոսք է, սովորաբար
պիքսելների վերին շարքը, որին հաջորդում է երկրորդ շարքը, որին հաջորդում է երրորդ շարքը և այլն:
Որոշ bitmap պատկերներ ստեղծվում են «ձեռքով» ինչ-որ մեկի կողմից՝ օգտագործելով paint ծրագիր, որը
նախատեսված է գրաֆիկական օպերացիոն համակարգի համար: Այլ bitmap պատկերները ստեղծվում են
ալգորիթմական եղանակով համակարգչային կոդով: Այս օրերին, սակայն, bitmaps-ը շատ հաճախ
օգտագործվում է իրական աշխարհից պատկերների համար (օրինակ՝ լուսանկարներ), և կան մի քանի տարբեր
սարքավորումներ, որոնք թույլ են տալիս պատկերները իրական աշխարհից տեղափոխել համակարգիչ: Այս
սարքերը սովորաբար օգտագործում են մի բան, որը կոչվում է լիցքավորված սարք (CCD), որը կիսահաղորդիչ
է, որը լույսի ազդեցության տակ թողարկում է էլեկտրական լիցք: Յուրաքանչյուր պիքսելի նմուշառման
համար պահանջվում է մեկ CCD բջիջ:
Սկաները այս սարքերից ամենահինն է : Լուսապատճենահանող մեքենայի նման, այն օգտագործում է մի շարք
CCD-ներ, որոնք անցնում են տպված պատկերի մակերևույթի երկայնքով, օրինակ՝ լուսանկարում: CCD-ները
առաջացնում են էլեկտրական լիցքեր՝ հիմնվելով լույսի ինտենսիվության վրա: Ծրագրաշարը, որն աշխատում
է սկաների հետ, պատկերը թարգմանում է ֆայլի մեջ պահվող բիթքարտեզի:
Տեսախցիկները պատկերներ նկարահանելու համար օգտագործում են CCD բջիջների երկչափ զանգված:
Սովորաբար այս պատկերները ձայնագրվում են տեսաերիզների վրա: Բայց վիդեո ելքը կարող է ուղղակիորեն
սնվել վիդեո շրջանակ գրավիչի մեջ , որը տախտակ է, որը փոխակերպում է անալոգային վիդեո ազդանշանը
պիքսելների արժեքների զանգվածի: Այս կադրերը կարող են օգտագործվել ցանկացած սովորական վիդեո
աղբյուրի հետ, ինչպիսին է VCR-ից կամ լազերային սկավառակի նվագարկիչից կամ նույնիսկ անմիջապես
կաբելային հեռուստատեսության տուփից:
Բոլորովին վերջերս թվային տեսախցիկները դարձել են ֆինանսապես կենսունակ տնային օգտագործողի
համար: Դրանք հաճախ շատ նման են սովորական տեսախցիկների: Բայց ֆիլմի փոխարեն, CCD-ների
զանգվածն օգտագործվում է պատկեր ստանալու համար, որը պահվում է անմիջապես տեսախցիկի
հիշողության մեջ և հետագայում փոխանցվում համակարգիչ:
Գրաֆիկական օպերացիոն համակարգը հաճախ աջակցում է bitmaps-ի պահպանումը ֆայլերում որոշակի
ձևաչափով: Macintosh-ն օգտագործում է Paint ձևաչափը, որի անվանումը հղում է MacPaint ծրագրին,
որը բացել է ձևաչափը: (Macintosh PICT ձևաչափը, որը համատեղում է bitmaps-ը և վեկտորային
գրաֆիկան, իրականում նախընտրելի ձևաչափն է:) Windows-ում բնօրինակ ձևաչափը կոչվում է BMP, որը
ֆայլի անվան ընդլայնումն է, որն օգտագործվում է bitmaps-ի համար:
Bitmap-ները կարող են բավականին մեծ լինել, և ձեռնտու է դրանք փոքրացնելու ինչ-որ ձև գտնել: Այս
ջանքերը պատկանում են համակարգչային գիտության ոլորտին, որը հայտնի է որպես տվյալների սեղմում :
Ենթադրենք, մենք գործ ունեինք պատկերի հետ, որն ունի 3 բիթ յուրաքանչյուր պիքսելում, ինչպիսին ես
նկարագրեցի ավելի վաղ: Դուք ունեք երկնքի և տան և սիզամարգերի պատկեր: Այս նկարը, հավանաբար, ունի
կապույտ և կանաչի մեծ բծեր: Միգուցե bitmap-ի ամենավերին տողը անընդմեջ ունի 72 կապույտ պիքսել:
Bitmap ֆայլը կարող է փոքրացվել, եթե գոյություն ունենար ֆայլում 72 թիվը փաստացի կոդավորելու
ինչ-որ ձև, ինչը նշանակում է, որ կապույտ պիքսելը կրկնվում է 72 անգամ: Սեղմման այս տեսակը հայտնի է
որպես գործարկման երկարության կոդավորում կամ RLE:
Ընդհանուր գրասենյակային ֆաքսի մեքենան օգտագործում է RLE սեղմում` պատկերի չափը նվազեցնելու
համար, նախքան այն հեռախոսագծով ուղարկելը: Քանի որ ֆաքսը պատկերը մեկնաբանում է որպես սև և
սպիտակ՝ առանց մոխրագույն երանգների կամ գույների, սովորաբար սպիտակ պիքսելների երկար
հատվածներ կան:
Bitmap ֆայլի ձևաչափը, որը հայտնի է ավելի քան մեկ տասնամյակ, Graphics Interchange Format-ն է
կամ GIF-ը (արտասանվում է jif , ինչպես գետնանուշի կարագը), որը մշակվել է CompuServe-ի կողմից
1987թ.-ին: GIF ֆայլերը օգտագործում են սեղմման տեխնիկա, որը կոչվում է LZW, որը նշանակում է իր
ստեղծողները՝ Lempel: , Զիվ և Ուելչ։ LZW-ն ավելի հզոր է, քան RLE-ը, քանի որ այն հայտնաբերում է
տարբեր արժեք ունեցող պիքսելների օրինաչափություններ , այլ ոչ թե նույն արժեքի պիքսելների
հաջորդական տողեր:
Երկուսն էլ RLE-ն և LZW-ն կոչվում են անկորուստ սեղմման տեխնիկա, քանի որ բնօրինակ ֆայլը կարող է
ամբողջությամբ վերստեղծվել սեղմված տվյալներից: Այլ կերպ ասած, սեղմումը շրջելի է : Բավականին հեշտ
է ապացուցել, որ հետադարձելի սեղմումը չի աշխատում բոլոր տեսակի ֆայլերի համար: Որոշ դեպքերում
«սեղմված» ֆայլը իրականում ավելի մեծ է, քան սկզբնական ֆայլը:
Վերջին տարիներին տարածված են դարձել կորուստներով սեղմման տեխնիկան: Կորուստային սեղմումը
հետադարձելի չէ, քանի որ սկզբնական տվյալների մի մասը արդյունավետորեն անտեսվում է: Դուք չեք
ցանկանա օգտագործել կորուստներով սեղմում ձեր աղյուսակների կամ բառի մշակման փաստաթղթերի վրա:
Ենթադրաբար յուրաքանչյուր թիվ և բառ կարևոր է: Բայց դուք, հավանաբար, դեմ չեք լինի պատկերների
համար կորուստներով սեղմելը, քանի դեռ անտեսված տվյալները ընդհանուր պատկերի մեջ մեծ
տարբերություն չեն թողնում: Ահա թե ինչու կորստի սեղմման տեխնիկան հիմնված է հոգեվիզուալ
հետազոտության վրա, որն ուսումնասիրում է մարդու տեսողությունը՝ որոշելու, թե ինչն է կարևոր և ինչը ոչ:
Կորուստներով սեղմման ամենակարևոր մեթոդները, որոնք օգտագործվում են bitmaps-ի համար, ընդհանուր
առմամբ կոչվում են JPEG (արտասանված jay peg ): JPEG-ը հանդես է գալիս որպես Համատեղ
լուսանկարչության փորձագետների խումբ և իրականում նկարագրում է սեղմման մի քանի տեխնիկա՝ որոշ
անկորուստ և որոշ կորուստներ:
Մետաֆայլը bitmap-ի վերածելը բավականին պարզ է: Քանի որ վիդեո ցուցադրման հիշողությունը և
բիթքարտեզները կոնցեպտուալ առումով նույնական են, եթե ծրագիրը գիտի, թե ինչպես նկարել մետաֆայլ
վիդեո ցուցադրման հիշողության մեջ, նա գիտի, թե ինչպես նկարել մետաֆայլ բիթքարտեզի վրա:
Բայց bitmap-ը մետաֆայլի վերածելը այնքան էլ հեշտ չէ, և որոշ բարդ պատկերների համար կարող է
անհնար լինել: Այս աշխատանքին առնչվող տեխնիկաներից մեկը նիշերի օպտիկական ճանաչումն է կամ
OCR: OCR-ն օգտագործվում է, երբ դուք ունեք որոշ տեքստի բիթքարտեզ (հավանաբար, ֆաքսի սարքից կամ
տպված էջերից սկանավորված) և պետք է այն փոխարկեք ASCII նիշերի կոդերի: OCR ծրագրաշարը պետք է
վերլուծի բիթերի օրինաչափությունները և որոշի, թե դրանք ինչ նիշ են ներկայացնում: Այս աշխատանքի
ալգորիթմական բարդության պատճառով OCR ծրագրակազմը սովորաբար 100 տոկոս ճշգրիտ չէ: Նույնիսկ
ավելի քիչ ճշգրիտ է ծրագրակազմը, որը փորձում է ձեռագիրը փոխարկել ASCII տեքստի:
Bitmaps-ը և metafiles-ը տեսողական տեղեկատվության թվային ներկայացումն են: Աուդիո
տեղեկատվությունը կարող է նաև վերածվել բիթերի և բայթերի:
Թվայնացված ձայնը մեծ աղմուկ բարձրացրեց սպառողների կողմից 1983 թվականին կոմպակտ սկավառակի
միջոցով, որը դարձավ սպառողական էլեկտրոնիկայի երբևէ հաջողության ամենամեծ պատմությունը:
Սկավառակը մշակվել է Philips-ի և Sony-ի կողմից՝ 12 սանտիմետր տրամագծով սկավառակի մի կողմում
74 րոպե թվայնացված ձայն պահելու համար: 74 րոպե տեւողությունը ընտրվել է այնպես, որ Բեթհովենի
իններորդ սիմֆոնիան տեղավորվի մեկ ձայնասկավառակի վրա։
Ձայնը կոդավորված է CD-ի վրա՝ օգտագործելով մի տեխնիկա, որը կոչվում է իմպուլսային կոդի
մոդուլյացիա կամ PCM: Չնայած շքեղ անվանմանը, PCM-ն կոնցեպտուալ առումով բավականին պարզ
գործընթաց է:
Ձայնը թրթռում է: Մարդու ձայնալարերը թրթռում են, խողովակը թրթռում է, անտառում ընկած ծառը թրթռում
է, և այդ առարկաները ստիպում են օդի մոլեկուլները շարժվել։ Օդը հերթափոխով հրում և քաշում է,
սեղմվում և նոսրանում, ետ ու առաջ հարյուրավոր կամ հազարավոր անգամներ վայրկյանում: Օդն իր հերթին
թրթռում է մեր ականջի թմբկաթաղանթը, և մենք զգում ենք ձայնը:
Ձայնի այս ալիքներին նման են փոքրիկ բլուրներն ու ձորերը թիթեղյա փայլաթիթեղի գլանի մակերևույթում,
որն օգտագործվում էր ձայնը ձայնագրելու և նվագարկելու համար Թոմաս Էդիսոնի առաջին ֆոնոգրաֆում
1877 թվականին: Մինչև կոմպակտ սկավառակը ձայնի ձայնագրման այս տեխնիկան գրեթե չի փոխվել, թեև
բալոնները: փոխարինվեցին սկավառակներով, իսկ թիթեղյա փայլաթիթեղը՝ մոմով և ի վերջո պլաստիկով:
Վաղ ֆոնոգրաֆները ամբողջովին մեխանիկական էին, բայց ի վերջո օգտագործվեց էլեկտրական ուժեղացում
ձայնը ուժեղացնելու համար: Միկրոֆոնի փոփոխական ռեզիստորը ձայնը վերածում է էլեկտրականության,
իսկ բարձրախոսի էլեկտրամագնիսը՝ էլեկտրականությունը նորից ձայնի:
Էլեկտրական հոսանքը, որը ներկայացնում է ձայնը, նման չէ միացված-անջատված թվային ազդանշաններին,
որոնք մենք հանդիպել ենք այս գրքում: Ձայնային ալիքները անընդհատ տատանվում են, ինչպես նաև նման
հոսանքի լարումը։ Էլեկտրական հոսանքը ձայնային ալիքների անալոգն է։ Սարքը, որը հայտնի է որպես
անալոգային-թվային փոխարկիչ (ADC), որը սովորաբար իրականացվում է չիպի մեջ, փոխակերպում է
անալոգային լարումը երկուական թվի: ADC-ի ելքը թվային ազդանշանների որոշակի քանակ է, սովորաբար
8, 12 կամ 16, որոնք միասին ցույց են տալիս լարման հարաբերական մակարդակը: Օրինակ, 12-բիթանոց
ADC-ն լարումը վերածում է թվի 000h-ի և FFFh-ի միջև և կարող է տարբերակել 4096 տարբեր լարման
մակարդակներ:
Տեխնիկայի մեջ, որը հայտնի է որպես զարկերակային կոդի մոդուլյացիա , ձայնային ալիքը ներկայացնող
լարումը հաստատուն արագությամբ վերածվում է թվային արժեքների: Այս թվերը պահվում են սկավառակի
վրա սկավառակի մակերեսին փորագրված փոքրիկ անցքերի տեսքով: Դրանք ընթերցվում են ձայնասկավառակի
մակերեսից արտացոլված լազերային լույսով: Նվագարկման ընթացքում թվերը կրկին վերածվում են
էլեկտրական հոսանքի՝ օգտագործելով թվային-անալոգային փոխարկիչ կամ DAC: (DAC-ն օգտագործվում է
նաև գունավոր գրաֆիկական տախտակներում՝ պիքսելային արժեքը վերափոխելու անալոգային գունավոր
ազդանշանների, որոնք գնում են մոնիտոր):
Ձայնային ալիքի լարումը վերածվում է թվերի հաստատուն արագությամբ, որը հայտնի է որպես նմուշառման
արագություն : 1928 թվականին Bell Telephone Laboratories-ից Հարի Նիքվիստը ցույց տվեց, որ
նմուշառման արագությունը պետք է լինի առնվազն երկու անգամ առավելագույն հաճախականությունից, որը
պետք է ձայնագրվի և նվագարկվի: Սովորաբար ենթադրվում է, որ մարդիկ լսում են 20 Հց-ից մինչև 20000
Հց հաճախականությամբ ձայներ: Սկավառակների համար օգտագործվող նմուշառման հաճախականությունը մի
փոքր ավելի է, քան առավելագույնը կրկնակի, մասնավորապես՝ 44,100 նմուշ վայրկյանում:
Մեկ նմուշի բիթերի քանակը որոշում է ձայնասկավառակի դինամիկ տիրույթը, որը տարբերվում է
ձայնագրվող և նվագարկվող ամենաբարձր և մեղմ ձայնի միջև: Սա որոշ չափով բարդ է. Քանի որ
էլեկտրական հոսանքը ետ ու առաջ տատանվում է որպես ձայնային ալիքների անալոգ, այն գագաթները,
որոնց նա դիպչում է, ներկայացնում է ալիքի ամպլիտուդը : Այն, ինչ մենք ընկալում ենք որպես ձայնի
ինտենսիվություն , համաչափ է ամպլիտուդի երկու անգամ: Բելը ( որը Ալեքսանդր Գրեհեմ Բելի ազգանվան
երեք քառորդն է) ինտենսիվության տասնապատիկ աճ է. դեցիբելը բելի տասներորդն է : Մեկ դեցիբելը
ներկայացնում է ձայնի մոտավորապես ամենափոքր աճը, որը մարդը կարող է ընկալել:
Պարզվում է, որ մեկ նմուշի համար 16 բիթ օգտագործելը թույլ է տալիս 96 դեցիբելի դինամիկ միջակայք,
ինչը մոտավորապես տարբերվում է լսողության շեմի (որից ներքևում մենք ոչինչ չենք կարող լսել) և ցավի
շեմի միջև։ Կոմպակտ սկավառակը օգտագործում է 16 բիթ մեկ նմուշ:
Այսպիսով, ձայնի յուրաքանչյուր վայրկյանի համար կոմպակտ սկավառակը պարունակում է 44100 նմուշ՝
յուրաքանչյուրը 2 բայթ: Բայց դուք հավանաբար ցանկանում եք նաև ստերեո: Այսպիսով, կրկնապատկվում է,
ընդհանուր առմամբ 176,400 բայթ վայրկյանում: Դա 10,584,000 բայթ է ձայնի րոպեում: (Այժմ դուք
գիտեք, թե ինչու ձայնի թվային ձայնագրումը տարածված չէր մինչև 1980-ականները:) CD-ի 74 րոպեանոց
ստերեո ձայնը պահանջում է 783,216,000 բայթ:
Թվայնացված ձայնը շատ հայտնի առավելություններ ունի անալոգային ձայնի նկատմամբ: Մասնավորապես,
երբ անալոգային ձայնը պատճենվում է (օրինակ, երբ ձայնագրիչ ձայնագրությունը ստեղծվում է հիմնական
ձայնագրման ժապավենից), որոշակի հավատարմություն կորչում է: Թվայնացված ձայնը թվեր են, սակայն, և
թվերը միշտ կարելի է հավատարմորեն արտագրել և պատճենել: Ժամանակին այն էր, որ որքան երկար էր
հեռախոսի ազդանշանը հաղորդալարով, այնքան ավելի վատ էր հնչում: Սա արդեն այդպես չէ։ Քանի որ
հեռախոսային համակարգի մեծ մասն այժմ թվային է, երկրի տարբեր ծայրերից ստացվող զանգերը նույնքան
պարզ են հնչում, որքան մյուս փողոցից ստացվող զանգերը:
Սկավառակները կարող են պահել տվյալներ, ինչպես նաև ձայն: Երբ դրանք օգտագործվում են բացառապես
տվյալների համար, դրանք կոչվում են CD-ROM (CD միայն կարդալու հիշողություն): CD-ROM-ը
սովորաբար սահմանափակվում է մոտ 660 մեգաբայթով: Մեր օրերում համակարգիչների մեծ մասում
տեղադրված են CD-ROM կրիչներ, իսկ հավելվածների և խաղերի ծրագրակազմի մեծ մասը բաշխված է
CD-ROM-ով:
Ձայնի, երաժշտության և տեսանյութի ներմուծումն անհատական համակարգիչ հայտնի էր որպես
մուլտիմեդիա ընդամենը մեկ տասնամյակ առաջ և այժմ այնքան տարածված է, որ հատուկ անուն կարիք չունի:
Այսօր վաճառվող տնային համակարգիչների մեծ մասն ունի ձայնային տախտակ, որը ներառում է ADC՝
խոսափողի միջոցով ձայնը թվային ձայնագրելու համար, և DAC՝ ձայնագրված ձայնը բարձրախոսների
միջոցով նվագարկելու համար: Հնչյունները կարող են պահվել սկավառակի վրա ալիքային ֆայլերում :
Քանի որ ձեզ միշտ չէ, որ անհրաժեշտ է ձայնասկավառակի որակի ձայն տնային համակարգիչներով
ձայնագրելիս և նվագարկելիս, Macintosh-ը և Windows-ն առաջարկում են նմուշառման ավելի ցածր
արագություն, մասնավորապես՝ 22,050 Հց, 11,025 Հց և 8000 Հց; ավելի ցածր նմուշի չափը 8 բիթ; և
մոնոֆոնիկ ձայնագրություն։ Ձայնը կարելի է ձայնագրել վայրկյանում 8000 բայթ արագությամբ, ինչը
կազմում է 480000 բայթ/րոպե:
Գիտաֆանտաստիկ ֆիլմերից և հեռուստատեսային շոուներից բոլորը գիտեն, որ ապագայի համակարգիչները
խոսակցական անգլերենով զրուցում են իրենց օգտատերերի հետ: Երբ համակարգիչը հագեցած է ապարատով՝
ձայնը թվային կերպով ձայնագրելու և նվագարկելու համար, այս նպատակի հետ կապված մնացած ամեն ինչ
ծրագրային խնդիր է:
Կան մի քանի եղանակներ, որոնց միջոցով համակարգիչները կարող են խոսել ճանաչելի բառերով և
նախադասություններով: Մոտեցումներից մեկն այն է, որ մարդը գրանցի նախադասության բեկորներ,
արտահայտություններ, բառեր և թվեր, որոնք այնուհետև կարող են պահվել ֆայլերում և տարբեր ձևերով
շարել իրար: Այս մոտեցումը հաճախ օգտագործվում է հեռախոսով հասանելի տեղեկատվական համակարգերի
համար, և այն լավ է աշխատում, երբ կան միայն սահմանափակ թվով բառերի և թվերի համակցություններ,
որոնք պետք է նվագարկվեն:
Ձայնի սինթեզի ավելի ընդհանուր ձևը ներառում է մի գործընթաց, որը կամայական ASCII տեքստը
փոխակերպում է ալիքային տվյալների: Քանի որ, օրինակ, անգլերենի ուղղագրությունը միշտ չէ, որ
համահունչ է, նման ծրագրային համակարգը օգտագործում է բառարան կամ բարդ ալգորիթմներ՝ որոշելու
բառերի իրական արտասանությունը: Հիմնական վոկալ հնչյունները (կոչվում են հնչյուններ) համակցվում են
ամբողջական բառեր կազմելու համար: Հաճախ ծրագրաշարը պետք է այլ ճշգրտումներ կատարի: Օրինակ, եթե
նախադասությանը հաջորդում է հարցական նշան, ապա վերջին բառի հնչյունը պետք է հաճախականացվի:
Ձայնի ճանաչումը՝ ալիքային տվյալների փոխակերպումը ASCII տեքստի, շատ ավելի բարդ խնդիր է: Իրոք,
շատ մարդիկ խնդիրներ ունեն՝ հասկանալու խոսակցական լեզվի տարածաշրջանային տարբերությունները:
Թեև անհատական համակարգչի համար թելադրող ծրագրակազմը հասանելի է, այն սովորաբար պահանջում է
որոշակի ուսուցում, որպեսզի կարողանա ողջամտորեն արտագրել կոնկրետ անձի ասածը: ASCII տեքստի
փոխարկումից շատ ավելի հեռու համակարգիչը ծրագրավորելու խնդիրն է, որպեսզի նա իրականում
«հասկանա» ասվածը: Նման խնդիրն արհեստական ինտելեկտի ոլորտում է ։
Ներկայիս համակարգիչների ձայնային տախտակները մատակարարվում են նաև էլեկտրոնային
երաժշտության փոքր սինթեզատորներով, որոնք կարող են ընդօրինակել 128 տարբեր երաժշտական
գործիքների և 47 տարբեր հարվածային գործիքների ձայները: Դրանք կոչվում են MIDI (արտասանված
middy ) սինթեզատորներ: MIDI-ն երաժշտական գործիքի թվային ինտերֆեյս է, որը մշակվել է
1980-ականների սկզբին էլեկտրոնային երաժշտության սինթեզատորների արտադրողների կոնսորցիումի
կողմից՝ այս էլեկտրոնային գործիքները միմյանց և համակարգիչներին միացնելու համար:
MIDI սինթեզատորների տարբեր տեսակներ օգտագործում են գործիքների ձայների սինթեզման տարբեր
մեթոդներ, որոնցից մի քանիսն ավելի իրատեսական են, քան մյուսները: Կոնկրետ MIDI սինթեզատորի
ընդհանուր որակը բավականին դուրս է MIDI սպեցիֆիկացիայից: Պահանջվում է միայն, որ սինթեզատորը
արձագանքի կարճ հաղորդագրություններին՝ սովորաբար 1, 2 կամ 3 բայթ երկարությամբ, հնչյուններ
նվագարկելու միջոցով: MIDI հաղորդագրությունները հիմնականում ցույց են տալիս, թե ինչ գործիք է
ցանկալի, որ որոշակի նոտա պետք է սկսի նվագել, կամ որ ներկայումս հնչող նոտան պետք է դադարեցնի
նվագելը:
MIDI ֆայլը MIDI հաղորդագրությունների հավաքածու է՝ ժամանակի մասին տեղեկություններով: MIDI
ֆայլը սովորաբար պարունակում է մի ամբողջ երաժշտական կոմպոզիցիա, որը կարող է նվագարկվել
համակարգչի MIDI սինթեզատորով: MIDI ֆայլը սովորաբար շատ ավելի փոքր է, քան նույն երաժշտությունը
պարունակող ալիքային ֆայլը: Հարաբերական չափի առումով, եթե ալիքային ֆայլը նման է bitmap ֆայլի,
MIDI ֆայլը նման է վեկտորային գրաֆիկական մետաֆայլի: Բացասական կողմն այն է, որ MIDI ֆայլում
կոդավորված երաժշտությունը կարող է հիանալի հնչել մի MIDI սինթեզատորի վրա, իսկ մյուսում՝
բավականին սարսափելի:
Մուլտիմեդիայի մեկ այլ առանձնահատկություն թվայնացված ֆիլմերն են: Կինոյի և հեռուստատեսային
պատկերների ակնհայտ շարժումը ձեռք է բերվում առանձին անշարժ պատկերների հաջորդականության արագ
ցուցադրմամբ: Այս անհատական պատկերները կոչվում են շրջանակներ : Ֆիլմերն ընթանում են վայրկյանում
24 կադր արագությամբ, հյուսիսամերիկյան հեռուստատեսությունը՝ 30 կադր վայրկյանում, իսկ
հեռուստատեսությունը աշխարհի շատ այլ վայրերում՝ 25 կադր/վրկ արագությամբ։
Ֆիլմի ֆայլը համակարգչում պարզապես ձայնային բիթքարտեզների շարք է: Բայց առանց սեղմման, ֆիլմի
ֆայլը պահանջում է հսկայական քանակությամբ տվյալներ: Օրինակ, դիտարկեք ֆիլմ, որի յուրաքանչյուր
կադրը ունի 640 x 480 պիքսել համակարգչային էկրանի չափ, 24 բիթ գույնով: Դա կազմում է 921600
բայթ մեկ կադրի համար: 30 կադր/վրկ արագությամբ մենք հասնում ենք վայրկյանում 27,648,000 բայթ:
Շարունակեք բազմապատկել, և դուք կստանաք 1,658,880,000 բայթ/րոպե, և 199,065,600,000 բայթ՝
ընդամենը մոտ 200 գիգաբայթ, երկու ժամ տևողությամբ ֆիլմի համար: Ահա թե ինչու անհատական
համակարգչի վրա ցուցադրվող ֆիլմերի մեծ մասը կարճ է, փոքր և ցատկոտ:
Ինչպես JPEG սեղմումն օգտագործվում է անշարժ պատկերներ պահելու համար պահանջվող տվյալների
քանակը նվազեցնելու համար, այնպես էլ MPEG սեղմումն օգտագործվում է ֆիլմերի համար: MPEG
(արտասանվում է em peg ) նշանակում է Moving Pictures Expert Group: Շարժվող պատկերների
սեղմման տեխնիկան օգտագործում է այն փաստը, որ որոշակի շրջանակ սովորաբար պարունակում է շատ
տեղեկատվություն, որը կրկնօրինակված է նախորդ կադրից:
Կան տարբեր MPEG ստանդարտներ տարբեր լրատվամիջոցների համար: MPEG-2-ը նախատեսված է բարձր
հստակությամբ հեռուստատեսության (HDTV) և թվային տեսասկավառակների (DVD) համար , որոնք նաև
կոչվում են թվային բազմակողմանի սկավառակներ : DVD-ները նույն չափի են, ինչ CD-ները, բայց դրանք
կարող են ձայնագրվել երկու կողմից և յուրաքանչյուր կողմում երկու շերտով: DVD-ների վրա տեսանյութը
սեղմվում է մոտ 50 գործակցով, ուստի երկու ժամանոց ֆիլմի համար պահանջվում է ընդամենը 4 գիգաբայթ,
որը կարող է տեղավորվել մի կողմի մեկ շերտի վրա: Երկու շերտերի և երկու կողմերի օգտագործումը
մեծացնում է DVD-ների հզորությունը մինչև մոտ 16 գիգաբայթ, ինչը մոտ 25 անգամ գերազանցում է CD-ի
հզորությունը: Ակնկալվում է, որ DVD-ROM-ը ի վերջո կփոխարինի CD-ROM-ին՝ ծրագրային ապահովման
բաշխման համար:
Արդյո՞ք CD-ROM-ը և DVD-ROM-ը Vannevar Bush's Memex-ի ժամանակակից իրականացումն են: Նա
սկզբում պատկերացնում էր Memex-ը որպես միկրոֆիլմ օգտագործող, սակայն CD-ROM-ը և
DVD-ROM-ը շատ ավելի իմաստալից են նման սարքի համար: Էլեկտրոնային լրատվամիջոցներն
առավելություն ունեն ֆիզիկական կրիչների նկատմամբ՝ հեշտությամբ որոնելի լինելով: Ցավոք, քչերն ունեն
միաժամանակ մի քանի CD կամ DVD կրիչներ: Բուշի հայեցակարգին ամենամոտեցվածը չի ներառում ձեր
գրասեղանի մոտ ձեզ անհրաժեշտ ողջ տեղեկատվությունը պահելը: Այն ներառում է համակարգիչների
փոխկապակցում , որպեսզի նրանց հնարավորություն ընձեռվի փոխանակել տեղեկատվություն և օգտագործել
պահեստը շատ ավելի արդյունավետ:
Առաջին մարդը, ով հրապարակայնորեն աշխատեց համակարգիչը հեռավոր վայրից, Ջորջ Ստիբիցն էր, նույն
մարդը, ով 1930-ականներին նախագծեց Bell Labs ռելե համակարգիչը: Ռելեային համակարգչի հեռավոր
աշխատանքը տեղի է ունեցել Դարտմութում 1940 թվականին տեղի ունեցած ցույցի ժամանակ:
Հեռախոսային համակարգը կառուցված է լարերի միջոցով ձայնը փոխանցելու համար, այլ ոչ թե բիթ:
Հեռախոսային լարերի միջոցով բիթեր ուղարկելու համար անհրաժեշտ է, որ բիթերը վերածվեն ձայնի,
այնուհետև նորից հետ: Մեկ հաճախականության և մեկ ամպլիտուդի շարունակական ձայնային ալիքը
(կոչվում է կրիչ ) ընդհանրապես որևէ էական տեղեկատվություն չի հաղորդում: Բայց ինչ-որ բան փոխեք այդ
ձայնային ալիքի վերաբերյալ, այլ կերպ ասած՝ մոդուլավորեք այդ ձայնային ալիքը երկու տարբեր վիճակների
միջև, և դուք կարող եք ներկայացնել 0 և 1: Բիթերի և ձայնի միջև փոխակերպումը տեղի է ունենում մոդեմ
կոչվող սարքում (որը նշանակում է մոդուլյատոր/դեմոդուլատոր): Մոդեմը սերիական ինտերֆեյսի ձև է ,
քանի որ բայթի առանձին բիթերը ուղարկվում են մեկը մյուսի հետևից, այլ ոչ թե միանգամից: (Տպիչները
հաճախ միացված են զուգահեռ ինտերֆեյսով համակարգիչներին. ութ լարը թույլ է տալիս մի ամբողջ բայթ
փոխանցել միաժամանակ):
Վաղ մոդեմներում օգտագործվում էր մի տեխնիկա, որը կոչվում էր հաճախականության հերթափոխի
ստեղնավորում (FSK): 300 բիթ/վրկ արագությամբ աշխատող մոդեմը (օրինակ) կարող է 0 բիթը վերածել
1070 Հց հաճախականության, իսկ 1 բիթը՝ 1270 Հց հաճախականության: Յուրաքանչյուր բայթ
նախաբանվում է սկզբնական բիթով և ավարտվում է կանգառով, ուստի յուրաքանչյուր բայթ պահանջում է 10
բիթ: 300 բիթ/վրկ արագությամբ փոխանցման արագությունը կազմում է ընդամենը 30 բայթ/վրկ: Ավելի
ժամանակակից մոդեմները օգտագործում են ավելի բարդ տեխնիկա՝ ավելի քան 100 անգամ արագություն
ձեռք բերելու համար:
Վաղ տնային համակարգչի սիրահարը կարող է համակարգիչ և մոդեմ տեղադրել որպես տեղեկատու
համակարգ (BBS), որին այլ համակարգիչներ կարող են զանգահարել և ներբեռնել ֆայլեր, ինչը նշանակում
է ֆայլեր փոխանցել հեռավոր համակարգչից սեփական համակարգիչ: Այս հայեցակարգը տարածվեց խոշոր
տեղեկատվական ծառայությունների մեջ, ինչպիսին է CompuServe-ը: Շատ դեպքերում
հաղորդակցությունն ամբողջությամբ եղել է ASCII տեքստի տեսքով:
Ինտերնետը որակապես տարբերվում է այս վաղ փորձերից, քանի որ այն ապակենտրոնացված է: Ինտերնետը
իսկապես գոյություն ունի որպես արձանագրությունների հավաքածու, որպեսզի համակարգիչներն իրար հետ
խոսեն: Հիմնական նշանակություն ունի TCP/IP-ն, որը բաղկացած է Փոխանցման վերահսկման
արձանագրությունից և ինտերնետ արձանագրությունից : Փոխանակ ASCII նիշերը լարերի միջոցով
ուղարկելու փոխարեն, TCP/IP-ի վրա հիմնված հաղորդիչները տվյալների ավելի մեծ բլոկները բաժանում են
փոքր փաթեթների , որոնք ուղարկվում են առանձին հաղորդման գծով (հաճախ հեռախոսային գիծ) և նորից
հավաքվում մյուս ծայրում:
Համացանցի հանրաճանաչ գրաֆիկական մասը Համաշխարհային ցանցն է, որն օգտագործում է HTTP-ը՝
հիպերտեքստի փոխանցման արձանագրությունը : Վեբ էջերում դիտվող փաստացի տվյալները սահմանվում են
տեքստային ձևաչափով, որը կոչվում է HTML կամ Hypertext Markup Language : Այս անունների
հիպերտեքստային մասը մի բառ է, որն օգտագործվում է ասոցիացված տեղեկատվության կապակցումը
նկարագրելու համար, ինչպես Վանևար Բուշի առաջարկած Memex-ի համար: HTML ֆայլը կարող է
պարունակել հղումներ դեպի այլ վեբ էջեր, որոնք կարող են հեշտությամբ կանչվել:
HTML-ը նման է Rich Text Format-ին, որը ես նկարագրեցի ավելի վաղ, քանի որ այն պարունակում է
ASCII տեքստ՝ ձևաչափման տեղեկություններով: HTML-ը նաև թույլ է տալիս հղումներ կատարել
նկարներին GIF ֆայլերի, PNG (Portable Network Graphics) ֆայլերի և JFIF (JPEG File
Interchange Format) ֆայլերի տեսքով: Համաշխարհային ցանցի բրաուզերների մեծ մասը թույլ է տալիս
դիտել HTML ֆայլերը, ինչը նրանց տեքստային ձևաչափի առավելությունն է: HTML-ը որպես տեքստային
ֆայլ սահմանելու մեկ այլ առավելությունն այն է, որ այն ավելի հեշտությամբ որոնելի է: Չնայած իր
անվանը՝ HTML-ն իրականում ծրագրավորման լեզու չէ, ինչպիսին մենք ուսումնասիրել ենք Գլուխ 19- ում
և 24-րդ Գլուխներում : Վեբ զննարկիչը կարդում է HTML ֆայլը և համապատասխանաբար ձևավորում է
տեքստը և գրաֆիկան:
Երբեմն օգտակար է, եթե որոշակի վեբ էջեր դիտելիս և աշխատելիս գործարկվի հատուկ ծրագրի կոդ: Նման
կոդը կարող է գործարկվել կամ սերվերի վրա (որն այն համակարգիչն է, որի վրա պահվում են բնօրինակ վեբ
էջերը), կամ հաճախորդը , որը ձեր համակարգիչն է: Սերվերի կողմից սովորաբար բոլոր անհրաժեշտ
աշխատանքները (օրինակ՝ առցանց ձևաթղթերի մեկնաբանումը, որոնք հաճախորդը լրացնում է) կարող են
իրականացվել Common Gateway Interface (CGI) սկրիպտներով: Հաճախորդի կողմից HTML ֆայլերը
կարող են պարունակել պարզ ծրագրավորման լեզու, որը հայտնի է որպես JavaScript : Ձեր վեբ զննարկիչը
մեկնաբանում է JavaScript-ի հայտարարությունները ճիշտ այնպես, ինչպես մեկնաբանում է HTML
տեքստը:
Ինչու՞ վեբ կայքը չի կարող պարզապես ապահովել գործարկվող ծրագիր, որը կարող է աշխատել ձեր
համակարգչում: Դե, մեկ է, ինչ է ձեր համակարգիչը: Եթե դա Macintosh է, ապա նրան անհրաժեշտ է
գործարկվող, որը պարունակում է PowerPC մեքենայի կոդը և օգտագործում է Mac OS API-ն: ԱՀ-ի հետ
համատեղելի համար անհրաժեշտ է գործարկիչ, որը պարունակում է Intel Pentium մեքենայի կոդը և,
հավանաբար, օգտագործում է Windows API: Բայց կան այլ համակարգիչներ և այլ գրաֆիկական
օպերացիոն համակարգեր: Ավելին, դուք չեք ցանկանում անխտիր ներբեռնել գործարկվող ֆայլեր: Նրանք
կարող են ծագել անվստահելի աղբյուրից և կարող են ինչ-որ կերպ չարամիտ լինել:
Այս խնդիրների պատասխանը տրվել է Sun Microsystems-ի կողմից Java լեզվով (չշփոթել JavaScript-ի
հետ): Java-ն լիարժեք օբյեկտի վրա հիմնված ծրագրավորման լեզու է, ինչպես C++-ը: Նախորդ գլխում ես
բացատրեցի տարբերությունը կազմված լեզուների (որը հանգեցնում է գործարկվողի, որը պարունակում է
մեքենայական կոդ) և մեկնաբանված լեզուների միջև (որոնք չեն պարունակում): Java-ն ինչ-որ տեղ
արանքում է: Java ծրագրերը պետք է կազմված լինեն, բայց կոմպիլյացիայի արդյունքը սովորաբար
մեքենայական կոդ չէ: Փոխարենը Java բայթ կոդերն են : Սրանք կառուցվածքով նման են մեքենայի կոդին,
բայց դրանք նախատեսված են երևակայական համակարգչի համար, որը կոչվում է Java վիրտուալ մեքենա
(JVM): Կոմպիլացված Java ծրագիրը աշխատող համակարգիչը նմանակում է JVM-ին՝ մեկնաբանելով Java
բայթի կոդերը: Java ծրագիրը օգտագործում է ցանկացած գրաֆիկական օպերացիոն համակարգ, որն առկա է
մեքենայի վրա՝ այդպիսով թույլ տալով հարթակից անկախ ծրագրավորում:
Թեև այս գրքի մեծ մասը կենտրոնացած է էլեկտրաէներգիայի օգտագործման վրա՝ ազդանշաններ և
տեղեկատվություն մետաղալարով ուղարկելու համար, ավելի արդյունավետ միջոց է լույսը, որը հաղորդվում
է օպտիկական մանրաթելերի միջոցով՝ բարակ խողովակներ՝ պատրաստված ապակուց կամ պոլիմերից, որոնք
ուղղորդում են լույսը անկյուններով: Նման օպտիկական մանրաթելերի միջով անցնող լույսը կարող է հասնել
տվյալների փոխանցման արագության գիգահերց շրջանում՝ մի քանի միլիարդ բիթ վայրկյանում:
Այսպիսով, թվում է, որ ոչ թե էլեկտրոնները, այլ ֆոտոնները պատասխանատու կլինեն ապագայի
տեղեկատվության մեծ մասը մեր տներ և գրասենյակներ հասցնելու համար. դրանք նման կլինեն Մորզեի կոդի
ավելի արագ կետերին և գծիկներին և թարթող լույսի այդ զգույշ իմպուլսներին, որոնք ժամանակին
օգտագործում էինք ուշ գիշերվա իմաստությունը մեր լավագույն ընկերոջը փոխանցելու ճանապարհին:

You might also like