Անվերապահ անցումներ. Ծրագրավորման հիմունքներ MP սարքեր (Դասախոսություն) Վերահսկել փոխանցման հրամանները

  • 10.01.2024

Թվաբանական հաշվարկների միջոցների հետ միկրոպրոցեսորային հրահանգների համակարգն ունի նաև տվյալների տրամաբանական փոխակերպման միջոցներ։ Տրամաբանական ասելով հասկանում ենք տվյալների այնպիսի փոխակերպումներ, որոնք հիմնված են ֆորմալ տրամաբանության կանոններ.

Ֆորմալ տրամաբանությունը գործում է ճշմարիտ և կեղծ հայտարարությունների մակարդակով։ Միկրոպրոցեսորի համար դա սովորաբար նշանակում է համապատասխանաբար 1 և 0: Համակարգիչը բնիկ է զրոների և միավորների լեզվով, սակայն տվյալների ամենափոքր միավորը, որի վրա գործում են մեքենայի հրահանգները, բայթն է: Այնուամենայնիվ, համակարգի մակարդակում հաճախ անհրաժեշտ է լինում աշխատել ծայրահեղ ցածր մակարդակում՝ բիթային մակարդակում:

Բրինձ. 29. Տրամաբանական տվյալների մշակման գործիքներ


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

Նախքան այս գործիքները մանրամասն ուսումնասիրելը, եկեք դիտարկենք, թե որոնք են տրամաբանական տվյալները և ինչ գործողություններ են կատարվում դրանց վրա:

Տրամաբանական տվյալներ

Տրամաբանական տվյալների մշակման տեսական հիմքն է ֆորմալ տրամաբանություն.Տրամաբանության մի քանի համակարգեր կան. Ամենահայտնիներից մեկն է առաջարկական հաշվարկ.Հայտարարությունը ցանկացած հայտարարություն է, որը կարելի է ասել մեկին ճիշտ,կամ կեղծ.

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

Առաջարկվող հաշվարկը շատ ներդաշնակորեն համակցված է համակարգչային աշխատանքի սկզբունքների և դրա ծրագրավորման հիմնական մեթոդների հետ։ Համակարգչային ապարատային բոլոր բաղադրիչները կառուցված են տրամաբանական չիպերի վրա: Համակարգչում տեղեկատվությունը ամենացածր մակարդակով ներկայացնելու համակարգը հիմնված է բիթ հասկացության վրա: Մի քիչ, ունենալով ընդամենը երկու վիճակ (0 (սխալ) և 1 (ճշմարիտ)), բնականաբար տեղավորվում է առաջարկային հաշվարկի մեջ:

Համաձայն տեսության՝ հայտարարությունների (բիթների վրա) կարելի է կատարել հետևյալ տրամաբանական գործողությունները.


1. Բացասականություն (տրամաբանական ՉԻ) -տրամաբանական գործողություն մեկ օպերանդի վրա, որի արդյունքը սկզբնական օպերանդի հակառակն է։

Այս գործողությունը եզակիորեն բնութագրվում է հետևյալ ճշմարտության աղյուսակով (Աղյուսակ 12):

Աղյուսակ 12. Ճշմարտության աղյուսակ տրամաբանական ժխտման համար

2. Տրամաբանական հավելում (տրամաբանական ներառյալ ԿԱՄ) -տրամաբանական գործողություն երկու օպերանդների վրա, որոնց արդյունքը ճշմարիտ է (1), եթե մեկ կամ երկու օպերանդները ճիշտ են (1), և սխալ (0), եթե երկու օպերանդներն էլ սխալ են (0):

Այս գործողությունը նկարագրված է հետևյալ ճշմարտության աղյուսակի միջոցով (Աղյուսակ 13):

Աղյուսակ 13. Ճշմարտության աղյուսակ տրամաբանական ներառական ԿԱՄ-ի համար

3. Տրամաբանական բազմապատկում (տրամաբանական ԵՎ) -տրամաբանական գործողություն երկու օպերանդների վրա, որը գնահատվում է true (1) միայն այն դեպքում, եթե երկու օպերանդները գնահատվում են true (1): Մնացած բոլոր դեպքերում գործողության արժեքը կեղծ է (0):

Այս գործողությունը նկարագրված է հետևյալ ճշմարտության աղյուսակի միջոցով (Աղյուսակ 14):

Աղյուսակ 14. Ճշմարտության աղյուսակ տրամաբանական ԵՎ-ի համար

4. Տրամաբանական բացառիկ հավելում (տրամաբանական բացառիկ ԿԱՄ) -տրամաբանական գործողություն երկու օպերանդների վրա, որոնց արդյունքը ճշմարիտ է (1), եթե երկու օպերանդներից միայն մեկն է ճիշտ (1), և սխալ (0), եթե երկու օպերանդներն էլ կեղծ են (0) կամ «ճշմարիտ» (1): Այս գործողությունը նկարագրված է՝ օգտագործելով հետևյալ ճշմարտության աղյուսակը (Աղյուսակ 15):

Աղյուսակ 15. Ճշմարտության աղյուսակ տրամաբանական բացառիկ ԿԱՄ-ի համար

Միկրոպրոցեսորային հրահանգների համակարգը պարունակում է հինգ հրահանգներ, որոնք աջակցում են այս գործողություններին: Այս հրահանգները տրամաբանական գործողություններ են կատարում օպերանդների բիթերի վրա։ Օպերանդների չափերը, բնականաբար, պետք է նույնը լինեն։ Օրինակ, եթե օպերանդների չափը բառ է (16 բիթ), ապա տրամաբանական գործողությունը նախ կատարվում է օպերանդների զրոյական բիթերի վրա, և դրա արդյունքը գրվում է արդյունքի 0-ի փոխարեն։ Այնուհետև հրամանը հաջորդաբար կրկնում է այս գործողությունները բոլոր բիթերի վրա՝ առաջինից մինչև տասնհինգերորդը:

Տրամաբանական հրամաններ

Միկրոպրոցեսորային հրահանգների համակարգը ունի հետևյալ հրամանների շարքը, որոնք աջակցում են տրամաբանական տվյալների հետ աշխատելուն.

1) և օպերանդ_1, օպերանդ_2 – տրամաբանական բազմապատկման գործողություն: Հրամանը կատարում է բիթային տրամաբանական AND գործողություն (կապակցում) operand_1 և operand_2 օպերանդների բիթերի վրա: Արդյունքը գրվում է operand_1;

2) og operand_1, operand_2 – տրամաբանական գումարման գործողություն: Հրամանը կատարում է բիթային տրամաբանական OR գործողություն (դիսյունկցիա) operand_1 և operand_2 օպերանդների բիթերի վրա։ Արդյունքը գրվում է operand_1;

3) hog operand_1, operand_2 – տրամաբանական բացառիկ գումարման գործողություն: Հրահանգը կատարում է բիթային տրամաբանական բացառիկ OR գործողություն operand_1 և operand_2 օպերանդների բիթերի վրա: Արդյունքը գրվում է օպերանդի փոխարեն;

4) test operand_1, operand_2 – «ստուգել» գործողություն (տրամաբանական բազմապատկման միջոցով): Հրամանը կատարում է բիթային տրամաբանական AND գործողություն operand_1 և operand_2 օպերանդների բիթերի վրա: Օպերանդների վիճակը մնում է նույնը, փոխվում են միայն zf, sf և pf դրոշները, ինչը հնարավորություն է տալիս վերլուծել օպերանդի առանձին բիթերի վիճակը՝ առանց դրանց վիճակը փոխելու.

5) ոչ օպերանդ՝ տրամաբանական ժխտման գործողություն: Հրամանը կատարում է օպերանդի յուրաքանչյուր բիթերի բիթային ինվերսիա (արժեքը փոխարինելով հակառակ մեկով): Արդյունքը գրվում է օպերանդի փոխարեն։

Միկրոպրոցեսորային հրահանգների համակարգում տրամաբանական հրահանգների դերը հասկանալու համար շատ կարևոր է հասկանալ դրանց կիրառման շրջանակը և ծրագրավորման մեջ դրանք օգտագործելու բնորոշ տեխնիկան:

Տրամաբանական հրամանների միջոցով հնարավոր է հատկացումառանձին բիթերը օպերանդում նպատակի համար կարգավորում, վերակայում, շրջում կամ պարզապես որոշակի արժեքի ստուգում:

Բիթերով նման աշխատանք կազմակերպելու համար operand_2 սովորաբար խաղում է դիմակի դեր։ Օգտագործելով այս դիմակի 1 բիթում սահմանված բիթերը՝ որոշվում են որոշակի գործողության համար անհրաժեշտ operand_1 բիթերը: Եկեք ցույց տանք, թե ինչ տրամաբանական հրամաններ կարող են օգտագործվել այս նպատակով.

1) որոշակի բիթերը 1-ի սահմանելու համար օգտագործեք og operand_1, operand_2 հրամանը:

Այս հրահանգում operand_2-ը, որը գործում է որպես դիմակ, պետք է պարունակի մեկ բիթ այն բիթերի փոխարեն, որոնք պետք է սահմանվեն 1-ի operand_1-ում;

2) որոշակի բիթերը 0-ի վերակայելու համար օգտագործեք հրամանը և operand_1, operand_2:

Այս հրահանգում operand_2-ը, որը գործում է որպես դիմակ, պետք է պարունակի զրո բիթ այն բիթերի փոխարեն, որոնք պետք է սահմանվեն 0-ի operand_1-ում;

3) հրամանը hog operand_1, operand_2 կիրառվում:

ա) պարզել, թե օպերանդ_1-ի և օպերանդի որ բիթերն են տարբեր.

բ) շրջել օպերանդ_1-ում նշված բիթերի վիճակը:

Hog հրամանը կատարելիս մեզ հետաքրքրող դիմակի բիթերը (օպերանդ_2) պետք է լինեն մեկ, մնացածը՝ զրո;

Նշված բիթերի կարգավիճակը ստուգելու համար օգտագործեք հրամանի թեստային operand_1, operand_2 (ստուգեք operand_1):

Դիմակի operand_1-ի ստուգված բիթերը (operand_2) պետք է ունենան մեկ արժեք: Test հրամանի գործողությունը նման է and հրամանի ալգորիթմին, բայց այն չի փոխում operand_1-ի արժեքը: Հրամանի արդյունքը զրոյական դրոշի zf արժեքը սահմանելն է.

1) եթե zf = 0, ապա տրամաբանական բազմապատկման արդյունքում ստացվել է զրոյական արդյունք, այսինքն՝ դիմակի մեկ միավոր բիթ, որը չի համապատասխանում օպերանդի համապատասխան մեկ բիթին.

2) եթե zf = 1, ապա տրամաբանական բազմապատկումը հանգեցրեց ոչ զրոյական արդյունքի, այսինքն. գոնե մեկըդիմակի մեկ բիթը համապատասխանում է operand_1-ի համապատասխան մեկ բիթին:

Փորձարկման հրամանի արդյունքին արձագանքելու համար խորհուրդ է տրվում օգտագործել jump հրամանը jnz label (Jump if Not Zero) - ցատկել, եթե զրոյական դրոշակ zf զրոյական չէ, կամ հակառակ գործողությամբ հրաման - jz label (Jump): եթե Զրո) - ցատկել, եթե զրոյական դրոշը zf = 0:

Հաջորդ երկու հրամանները փնտրում են օպերանդի առաջին բիթը, որը դրված է 1: Դուք կարող եք որոնել օպերանդի սկզբից կամ վերջից.

1) bsf operand_1, operand_2 (Bit Scanning Forward) – բիթերի առաջ սկանավորում: Հրահանգը սկանավորում է operand_2-ի բիթերը ամենաքիչ նշանակալից մինչև ամենակարևորը (0-ից մինչև ամենակարևոր բիթը) փնտրելով 1-ի սահմանած առաջին բիթը: Եթե ​​operand_2-ի բոլոր բիթերը 0 են, ապա zf-ի զրոյական դրոշակը սահմանվում է 1-ի, հակառակ դեպքում zf դրոշակը վերականգնվում է 0-ի;

2) bsr operand_1, operand_2 (Bit Scanning Reset) – բիթերի սկանավորում հակառակ հերթականությամբ: Հրահանգը փնտրում է (սկանավորում) operand_2-ի բիթերը ամենակարևորից մինչև ամենանվազ նշանակալի (ամենա նշանակալի բիթից մինչև բիթ 0) փնտրելով 1-ի սահմանած առաջին բիթը: ամբողջ արժեք. Կարևոր է, որ ձախ կողմում գտնվող առաջին բիթերի դիրքը դեռևս հաշվվում է 0-ի համեմատ: Եթե operand_2-ի բոլոր բիթերը հավասար են 0-ի, ապա zf զրոյական դրոշակը սահմանվում է 1-ի, հակառակ դեպքում zf դրոշը վերականգնվում է 0-ի: .

Intel միկրոպրոցեսորների վերջին մոդելներում տրամաբանական հրամանների խմբում հայտնվել են ևս մի քանի հրամաններ, որոնք թույլ են տալիս մուտք գործել օպերանդի մեկ կոնկրետ բիթ: Օպերանդը կարող է տեղակայվել կամ հիշողության մեջ կամ ընդհանուր նշանակության ռեգիստրում: Բիթերի դիրքը որոշվում է օպերանդի ամենաքիչ նշանակալից բիտի նկատմամբ բիտի օֆսեթով: Օֆսեթ արժեքը կարող է սահմանվել կամ որպես ուղղակի արժեք կամ պարունակվել ընդհանուր նշանակության ռեգիստրում: Որպես օֆսեթ արժեք կարող եք օգտագործել bsr և bsf հրամանների արդյունքները: Բոլոր հրահանգները ընտրված բիտի արժեքը վերագրում են ԵԽ դրոշակին

1) bt օպերանդ, բիթ օֆսեթ (Bit Test) – ստուգեք բիթը: Հրամանը բիթային արժեքը փոխանցում է cf դրոշակին;

2) bts օպերանդ, բիթային օֆսեթ (Bit Test and Set) – բիթը ստուգում և կարգավորում: Հրահանգը փոխանցում է բիթային արժեքը CF դրոշակին և այնուհետև սահմանում է փորձարկվող բիթը 1;

3) btr գործառնական, բիթային օֆսեթ (Bit Test and Reset) – ստուգում և վերականգնում է բիթը: Հրահանգը փոխանցում է բիթի արժեքը CF դրոշակին և այնուհետև սահմանում է այս բիթը 0-ի;

4) btc օպերանդ, բիթային օֆսեթ (Bit Test and Convert) – ստուգեք և շրջեք բիթը: Հրահանգը փոխանցում է բիթ-ի արժեքը cf դրոշակին և այնուհետև շրջում է այդ բիտի արժեքը:

Shift հրամաններ

Այս խմբի հրահանգները նաև ապահովում են օպերանդների առանձին բիթերի մանիպուլյացիա, բայց այլ կերպ, քան վերը քննարկված տրամաբանական հրահանգները:

Բոլոր հերթափոխի հրահանգները օպերանդի դաշտում բիթերը տեղափոխում են ձախ կամ աջ՝ կախված օպերանդի կոդից: Բոլոր հերթափոխի հրահանգներն ունեն նույն կառուցվածքը՝ cop operand, shift_counter:

Տեղափոխված բիթերի քանակը – shift_counter –գտնվում է երկրորդ օպերանդի տեղում և կարող է նշվել երկու եղանակով.

1) ստատիկորեն,որը ներառում է ֆիքսված արժեքի նշում՝ օգտագործելով անմիջական օպերանդը.

2) դինամիկ,ինչը նշանակում է հերթափոխի հաշվիչի արժեքը պահել cl ռեգիստրում նախքան հերթափոխի հրահանգը կատարելը։

Ելնելով cl ռեգիստրի չափից՝ պարզ է, որ հերթափոխի հաշվիչի արժեքը կարող է տատանվել 0-ից մինչև 255: Բայց իրականում դա ամբողջովին ճիշտ չէ: Օպտիմալացման նպատակով միկրոպրոցեսորն ընդունում է միայն արժեքը հինգ ամենանվազ նշանակալի բիթհաշվիչը, այսինքն՝ արժեքը տատանվում է 0-ից 31:

Բոլոր shift հրամանները սահմանում են կրելու դրոշը տես.

Քանի որ բիթերը տեղաշարժվում են օպերանդից այն կողմ, նրանք նախ հարվածում են կրող դրոշակին՝ այն հավասարեցնելով հաջորդ բիտի արժեքին, որն ավարտվում է օպերանդից դուրս: Որտեղ է այս բիթը հաջորդում, կախված է հերթափոխի հրահանգի տեսակից և ծրագրի ալգորիթմից:

Գործառնական սկզբունքի հիման վրա հերթափոխի հրամանները կարելի է բաժանել երկու տեսակի.

1) գծային հերթափոխի հրամաններ.

2) ցիկլային հերթափոխի հրամաններ.

Գծային հերթափոխի հրամաններ

Այս տեսակի հրամանները ներառում են հրամաններ, որոնք կատարում են տեղաշարժ հետևյալ ալգորիթմի համաձայն.

1) հաջորդ «մղված» բիթը սահմանում է CF դրոշը.

2) մյուս ծայրից օպերանդ ներմուծված բիթն ունի 0 արժեքը.

3) երբ հաջորդ բիթը տեղափոխվում է, այն անցնում է CF դրոշակ, և նախորդ տեղաշարժված բիթը կորչում է: Գծային հերթափոխի հրամանները բաժանվում են երկու ենթատեսակի.

1) տրամաբանական գծային հերթափոխի հրամաններ.

2) թվաբանական գծային հերթափոխի հրամաններ.

Տրամաբանական գծային հերթափոխի հրամանները ներառում են հետևյալը.

1) shl օպերանդ, shift_counter (Shift Logical Left) – տրամաբանական տեղաշարժ դեպի ձախ: Օպերանդի բովանդակությունը տեղափոխվում է ձախ՝ ըստ shift_count արժեքի որոշված ​​բիթերի քանակի: Աջ կողմում (նվազագույն նշանակալի բիտի դիրքում) մուտքագրվում են զրոներ.

2) shr օպերանդ, shift_counter (Shift Logical Right) – տրամաբանական տեղաշարժ դեպի աջ: Օպերանդի բովանդակությունը տեղափոխվում է աջ՝ ըստ shift_count արժեքի որոշված ​​բիթերի քանակի։ Ձախ կողմում (ամենանշանակալի, նշանի բիտի դիրքում) մուտքագրվում են զրոներ:

Նկար 30-ը ցույց է տալիս, թե ինչպես են աշխատում այս հրամանները:

Բրինձ. 30. Գծային տրամաբանական հերթափոխի հրամանների գործողության սխեման


Թվաբանական գծային հերթափոխի հրահանգները տարբերվում են տրամաբանական հերթափոխի հրահանգներից նրանով, որ գործում են օպերանդի նշանի բիտի վրա հատուկ ձևով։

1) sal օպերանդ, shift_counter (Shift Arithmetic Left) – թվաբանական տեղաշարժ դեպի ձախ: Օպերանդի բովանդակությունը տեղափոխվում է ձախ՝ ըստ shift_count արժեքի որոշված ​​բիթերի քանակի: Աջ կողմում (ամենաքիչ նշանակալի բիտի դիրքում) զրոներն են: Sal հրամանը չի պահպանում նշանը, բայց դրոշակ է սահմանում նշանի փոփոխության դեպքում/մեկ այլ ետ քաշվող բիտ: Հակառակ դեպքում sal հրամանը լիովին նման է shl հրամանին;

2) sar օպերանդ, shift_counter (Shift Arithmetic Right) – թվաբանական տեղաշարժ դեպի աջ: Օպերանդի բովանդակությունը տեղափոխվում է աջ՝ ըստ արժեքի որոշված ​​բիթերի քանակի shift_counter.Ձախ կողմում զրոները մուտքագրվում են օպերանդի մեջ: sar հրամանը պահպանում է նշանը՝ վերականգնելով այն յուրաքանչյուր հաջորդ բիթը տեղափոխելուց հետո:

Նկար 31-ը ցույց է տալիս, թե ինչպես են աշխատում գծային թվաբանական հերթափոխի հրահանգները:


Բրինձ. 31. Գծային թվաբանական հերթափոխի հրամանների գործողության սխեման

Պտտեցնել հրամանները

Rotate shift հրամանները հրամաններ են, որոնք պահպանում են տեղաշարժվող բիթերի արժեքները: Պտտման հրամանների երկու տեսակ կա.

1) պարզ ցիկլային հերթափոխի հրամաններ.

2) ցիկլային հերթափոխի հրամանները կրելու դրոշի միջոցով տես.

Թիմերին պարզ ցիկլայինտեղաշարժերը ներառում են.

1) դեր օպերանդ, shift_counter (պտտել ձախ) – ցիկլային տեղաշարժ դեպի ձախ: Օպերանդի բովանդակությունը տեղափոխվում է ձախ օպերանդի կողմից որոշված ​​բիթերի քանակով shift_counter.Ձախ տեղաշարժված բիթերը գրվում են աջ կողմում գտնվող նույն օպերանդի վրա.

2) gog օպերանդ, shift_counter (պտտել աջ) – ցիկլային տեղաշարժ դեպի աջ: Օպերանդի բովանդակությունը տեղափոխվում է աջ՝ օպերանդի կողմից որոշված ​​բիթերի քանակով shift_counter.Աջ տեղաշարժված բիթերը գրվում են ձախ կողմում գտնվող նույն օպերանդում:

Բրինձ. 32. Պարզ ցիկլային հերթափոխի հրամանների գործողության սխեման


Ինչպես երևում է Նկար 32-ից, պարզ ցիկլային հերթափոխի հրահանգներն իրենց գործողության ընթացքում կատարում են մեկ օգտակար գործողություն, այն է՝ ցիկլային տեղաշարժված բիթը ոչ միայն մյուս ծայրից մղվում է օպերանդի մեջ, այլ միևնույն ժամանակ դրա արժեքը դառնում է արժեքի արժեքը: ԵԽ դրոշ

Պտտեցնել հրամանները կրել դրոշակ CF-ի միջոցովտարբերվում են պարզ ցիկլային հերթափոխի հրամաններից նրանով, որ տեղաշարժվող բիթն անմիջապես չի գնում օպերանդի մյուս ծայրից, այլ նախ գրվում է CE կրող դրոշակին: Այս հերթափոխի հրահանգի միայն հաջորդ կատարումը (ենթադրելով, որ այն կատարվում է օղակում) հանգեցնում է նրան, որ նախկինում տեղաշարժված բիթը տեղադրվում է օպերանդի մյուս ծայրում:(նկ. 33):

Ցիկլիկ հերթափոխի հրամաններին կրել դրոշի միջոցովկապված են հետևյալը.

1) rcl օպերանդ, shift_counter (Rotate through Carry Left) – ցիկլային տեղաշարժ դեպի ձախ՝ տեղափոխման միջոցով:

Օպերանդի բովանդակությունը տեղափոխվում է ձախ օպերանդի կողմից որոշված ​​բիթերի քանակով shift_counter.Տեղաշարժված բիթերը հերթափոխով դառնում են կրելու դրոշի արժեքը տես.

2) rcg օպերանդ, shift_counter (Rotate through Carry Right) – ցիկլային տեղաշարժ դեպի աջ՝ տեղափոխման միջոցով:

Օպերանդի բովանդակությունը տեղափոխվում է աջ՝ օպերանդի կողմից որոշված ​​բիթերի քանակով shift_counter.Տեղաշարժված բիթերը հերթափոխով դառնում են կրող դրոշակի CF արժեքը:

Բրինձ. 33. Ցիկլային հերթափոխի հրամաններ կրող դրոշակ CF-ի միջոցով


Նկար 33-ից պարզ է դառնում, որ փոխադրման դրոշակի միջով անցնելիս հայտնվում է միջանկյալ տարր, որի օգնությամբ, մասնավորապես, հնարավոր է փոխարինել ցիկլային տեղաշարժված բիթերը, մասնավորապես. անհամապատասխանությունբիթերի հաջորդականությունը.

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

Լրացուցիչ հերթափոխի հրամաններ

Intel-ի միկրոպրոցեսորների վերջին մոդելների հրամանատարական համակարգը, սկսած i80386-ից, պարունակում է լրացուցիչ հերթափոխի հրամաններ, որոնք ընդլայնում են մեր նախկինում քննարկված հնարավորությունները: Սրանք հերթափոխի հրամաններ են կրկնակի ճշգրտություն. 1) shld operand_1, operand_2, shift_counter – կրկնակի ճշգրիտ ձախ հերթափոխ: Shld հրամանը կատարում է փոխարինում՝ operand_1-ի բիթերը տեղափոխելով ձախ՝ լրացնելով դրա բիթերը աջ կողմում operand_2-ից տեղահանված բիթերի արժեքներով՝ համաձայն Նկ. 34. Տեղափոխվող բիթերի թիվը որոշվում է արժեքով shift_counter, օպերանդ_2չի փոխվում.


Բրինձ. 34. shld հրամանի սխեման


2) shrd operand_1, operand_2, shift_counter – կրկնակի ճշգրիտ աջ հերթափոխ: Հրահանգը կատարում է փոխարինում operand_1-ի բիթերը տեղափոխելով աջ՝ ձախ կողմում լրացնելով բիթերի արժեքները, որոնք տեղաշարժված են operand_2-ից՝ համաձայն Նկար 35-ի դիագրամի: Տեղափոխված բիթերի քանակը որոշվում է արժեքով: shift_counter,որը կարող է լինել 0 միջակայքում... 31. Այս արժեքը կարող է սահմանվել որպես անմիջական օպերանդ կամ պարունակվել cl ռեգիստրում: Իմաստը օպերանդ_2չի փոխվում.

Բրինձ. 35. shrd հրամանի սխեման


Ինչպես նշեցինք, shld և shrd հրամանները կատարում են մինչև 32 բիթ տատանումներ, սակայն օպերանդների և գործող ալգորիթմի ճշգրտման առանձնահատկությունների պատճառով այս հրամանները կարող են օգտագործվել մինչև 64 բիթ երկարությամբ դաշտերի հետ աշխատելու համար:

2. Վերահսկիչ փոխանցման հրամաններ

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

1) անվերապահ -այս պահին անհրաժեշտ է կառավարումը փոխանցել ոչ թե հաջորդ հրամանին, այլ մյուսին, որը գտնվում է ընթացիկ հրամանից որոշ հեռավորության վրա.

2) պայմանական -Որոշումը, թե որ հրամանը կկատարվի հաջորդ, կայացվում է որոշ պայմանների կամ տվյալների վերլուծության հիման վրա:

Ծրագիրը հրամանների և տվյալների հաջորդականություն է, որը զբաղեցնում է որոշակի քանակությամբ RAM-ի տարածք: Այս հիշողության տարածքը կարող է լինել կամ հարակից կամ կազմված մի քանի բեկորներից:

Միկրոպրոցեսորը գիտի, թե որ ծրագրի հաջորդ հրահանգը պետք է կատարվի զույգ ռեգիստրների բովանդակությամբ cs:(e)ip:

1) cs – սեգմենտի կոդերի ռեգիստր, որը պարունակում է ընթացիկ ծածկագրի սեգմենտի ֆիզիկական (բազային) հասցեն.

2) eip/ip – հրահանգների ցուցիչի ռեգիստր, որը պարունակում է արժեք, որը ներկայացնում է հաջորդ կատարվող հրահանգի հիշողության օֆսեթը ընթացիկ կոդի հատվածի սկզբի համեմատ:

Թե կոնկրետ որ ռեգիստրը կօգտագործվի, կախված է նրանից, թե արդյոք հասցեավորման ռեժիմը սահմանված է use16 կամ use32: Եթե ​​նշված է օգտագործումը 16, ապա օգտագործվում է ip, եթե use32, ապա օգտագործվում է eip:

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

Գործողության սկզբունքի հիման վրա միկրոպրոցեսորային հրամանները, որոնք ապահովում են ծրագրում անցումների կազմակերպումը, կարելի է բաժանել 3 խմբի.

1. Հսկողության անվերապահ փոխանցման հրամաններ.

1) անվերապահ ցատկի հրաման.

2) կարգադրություն կանչելու և ընթացակարգից վերադառնալու հրաման.

3) ծրագրային ընդհատումներ կանչելու և ծրագրային ընդհատումներից վերադառնալու հրաման:

2. Կառավարման հրամանների պայմանական փոխանցում.

1) ցատկման հրամաններ՝ հիմնված էջի համեմատման հրամանի արդյունքի վրա.

2) անցումային հրամաններ՝ հիմնված որոշակի դրոշի վիճակի վրա.

3) հրամաններ՝ նավարկելու ecx/cx ռեգիստրի բովանդակության մեջ:

3. Ցիկլի կառավարման հրամաններ.

1) հրահանգ ecx/cx հաշվիչով ցիկլ կազմակերպելու համար.

2) հրահանգ՝ ecx/cx հաշվիչով ցիկլ կազմակերպելու լրացուցիչ պայմանով ցիկլից վաղաժամկետ դուրս գալու հնարավորությամբ.

Անվերապահ թռիչքներ

Նախորդ քննարկումը բացահայտեց անցումային մեխանիզմի որոշ մանրամասներ։ Անցնել հրահանգները փոփոխում են eip/ip հրահանգների ցուցիչի ռեգիստրը և, հնարավոր է, cs կոդը հատվածի ռեգիստրը: Թե կոնկրետ ինչ պետք է փոփոխվի, կախված է.

1) օպերանդի տեսակի մասին անվերապահ թռիչք հրամանում (մոտ կամ հեռու).

2) ցատկի հասցեից առաջ (jump հրամանի մեջ) նշումից. փոփոխիչ;Այս դեպքում թռիչքի հասցեն ինքնին կարող է տեղակայվել կամ ուղղակիորեն հրամանի մեջ (ուղիղ թռիչք), կամ ռեգիստրում կամ հիշողության բջիջում (անուղղակի թռիչք):

Փոփոխիչկարող է վերցնել հետևյալ արժեքները.

1) մոտ ptr - ուղղակի անցում դեպի պիտակ ընթացիկ ծածկագրի հատվածի ներսում: Միայն eip/ip ռեգիստրը փոփոխվում է (կախված կոդային հատվածի նշված տեսակից use16 կամ use32)՝ հիմնվելով հրամանում նշված հասցեի (պիտակի) վրա կամ արժեքի արդյունահանման նշանի օգտագործմամբ արտահայտության վրա՝ $;

2) far ptr – ուղղակի անցում դեպի պիտակ մեկ այլ կոդի հատվածում: Անցնելու հասցեն նշված է որպես անմիջական օպերանդ կամ հասցե (պիտակ) և բաղկացած է 16-բիթանոց ընտրիչից և 16/32-բիթանոց օֆսեթից, որոնք համապատասխանաբար բեռնվում են cs և ip/eip ռեգիստրներում;

3) բառը ptr - անուղղակի անցում դեպի պիտակ ընթացիկ ծածկագրի հատվածում: Փոփոխվում է միայն eip/ip-ը (հիշողության օֆսեթ արժեքով հրամանում նշված հասցեում կամ ռեգիստրից): Օֆսեթ չափը 16 կամ 32 բիթ;

4) dword ptr – անուղղակի անցում դեպի պիտակ մեկ այլ կոդի հատվածում: Երկու գրանցամատյանները՝ cs և eip/ip, փոփոխվում են (հիշողությունից ստացված արժեքով և միայն հիշողությունից՝ ռեգիստրից): Այս հասցեի առաջին բառը/dword-ը ներկայացնում է օֆսեթը և բեռնվում է ip/eip-ում; երկրորդ/երրորդ բառը բեռնվում է cs-ում: jmp անվերապահ թռիչք հրաման

Անվերապահ jump հրամանի շարահյուսությունն է jmp [modifier] jump_address - անվերապահ թռիչք առանց վերադարձի կետի մասին տեղեկատվության պահպանման:

Jump_address-ը կա՛մ պիտակի հասցե է, կա՛մ հիշողության տարածքի հասցեն, որտեղ գտնվում է jump-ցուցիչը:

Ընդհանուր առմամբ, միկրոպրոցեսորային հրահանգների համակարգը պարունակում է մի քանի jmp անվերապահ jump մեքենայի հրահանգների կոդեր:

Դրանց տարբերությունները որոշվում են անցումային հեռավորությամբ և թիրախային հասցեն նշելու եղանակով: Շրջանականցումը որոշվում է օպերանդի գտնվելու վայրով անցման_հասցե:Այս հասցեն կարող է լինել ընթացիկ կոդի հատվածում կամ որևէ այլ հատվածում: Առաջին դեպքում անցումը կոչվում է ինտրասեգմենտալ,կամ Սիրելիների,երկրորդում - միջսեգմենտալ,կամ հեռավորՆերսեգմենտային թռիչքը ենթադրում է, որ փոխվում է միայն eip/ip ռեգիստրի բովանդակությունը:

Jmp հրամանի ներսեգմենտային օգտագործման երեք տարբերակ կա.

1) ուղիղ կարճ;

2) ուղիղ;

3) անուղղակի.


Ընթացակարգեր

Ասամբլեային լեզուն ունի մի քանի գործիքներ, որոնք լուծում են ծրագրի կոդի բաժինների կրկնօրինակման խնդիրը: Դրանք ներառում են.

1) ընթացակարգերի մեխանիզմ.

2) մակրոհավաքիչ;

3) ընդհատման մեխանիզմ.

Ընթացակարգը, որը հաճախ կոչվում է ենթածրագր -սա որոշ առաջադրանքի տարրալուծման (մի քանի մասի բաժանման) հիմնական ֆունկցիոնալ միավորն է: Ընթացակարգը հրամանների խումբ է կոնկրետ ենթաառաջադրանք լուծելու համար և ունի ավելի բարձր մակարդակի առաջադրանք կանչելու և վերահսկողությունը այս կետին վերադարձնելու հսկողություն ստանալու միջոցներ:

Ամենապարզ դեպքում ծրագիրը կարող է բաղկացած լինել մեկ ընթացակարգից։ Այլ կերպ ասած, ընթացակարգը կարող է սահմանվել որպես ճիշտ ձևաչափված հրամանների հավաքածու, որը նկարագրելուց հետո անհրաժեշտության դեպքում կարող է կոչվել ծրագրի ցանկացած կետում:

Հրամանների հաջորդականությունը որպես ընթացակարգ նկարագրելու համար անսամբլի լեզուն օգտագործում է երկու հրահանգ՝ PROC և ENDP:

Ընթացակարգը նկարագրելու շարահյուսությունը հետևյալն է (նկ. 36):


Բրինձ. 36. Ծրագրում ընթացակարգ նկարագրելու շարահյուսություն


Նկար 36-ից երևում է, որ ընթացակարգի վերնագրում (PROC հրահանգ) պահանջվում է միայն ընթացակարգի անվանումը: PROC հրահանգի մեծ թվով օպերանդների թվում առանձնահատուկ հիշատակման է արժանի [հեռավորությունը]: Այս հատկանիշը կարող է արժեքներ ընդունել մոտ կամ հեռու և բնութագրում է այլ ծածկագրի հատվածից ընթացակարգ կանչելու հնարավորությունը: Լռելյայնորեն, [distance] հատկանիշը դրված է մոտ:

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

Պայմանական թռիչքներ

Միկրոպրոցեսորն ունի 18 պայմանական ցատկի հրահանգ: Այս հրամանները թույլ են տալիս ստուգել.

1) ստորագրված օպերանդների միջև փոխհարաբերությունները («ավելի շատ – պակաս»).

2) չստորագրված օպերանդների հարաբերությունները («վերևում – ներքևում»).

3) թվաբանական դրոշների վիճակները ZF, SF, CF, OF, PF (բայց ոչ AF):

Պայմանական թռիչքի հրամաններն ունեն նույն շարահյուսությունը.

jcc transition_label

Ինչպես տեսնում եք, բոլոր հրամանների մնեմոնիկ ծածկագիրը սկսվում է «j» բառից ցատկել(ցատկում), նրա -սահմանում է հրամանի կողմից վերլուծված հատուկ պայմանը:

Օպերանդի վերաբերյալ անցումային_պիտակ,ապա այս պիտակը կարող է տեղակայվել միայն ընթացիկ ծածկագրի հատվածում, պայմանական անցումներում հսկողության միջսեգմենտային փոխանցումը չի թույլատրվում: Այս առումով անհետանում է փոփոխողի հարցը, որն առկա էր անվերապահ ցատկի հրամանների շարահյուսության մեջ։ Միկրոպրոցեսորների վաղ մոդելներում (i8086, i80186 և i80286) պայմանական ցատկի հրահանգները կարող էին կատարել միայն կարճ թռիչքներ՝ -128-ից +127 բայթ հեռավորություն պայմանական ցատկի հրահանգին հետևող հրահանգից: Սկսած 80386 միկրոպրոցեսորային մոդելից, այս սահմանափակումը հանվում է, բայց, ինչպես տեսնում եք, միայն ընթացիկ ծածկագրի հատվածում:

Որպեսզի որոշում կայացվի, թե որտեղ է փոխանցվելու հսկողությունը պայմանական թռիչքի հրամանով, նախ պետք է ստեղծվի մի պայման, որի հիման վրա կկայացվի հսկողությունը փոխանցելու որոշումը։

Նման պայմանի աղբյուրները կարող են լինել.

1) ցանկացած հրաման, որը փոխում է թվաբանական դրոշների վիճակը.

2) համեմատել հրամանի էջը, որը համեմատում է երկու օպերանդների արժեքները.

3) ecx/cx ռեգիստրի վիճակը.


cmp համեմատության հրաման

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

Էջի հրամանը, ինչպես ենթ հրամանը, հանում է օպերանդները և դնում դրոշներ: Միակ բանը, որ չի անում, հանման արդյունքն առաջին օպերանդի փոխարեն գրելն է։

Էջի հրամանի շարահյուսությունն է page operand_1, operand_2 (համեմատել) – համեմատում է երկու օպերանդ և սահմանում դրոշներ՝ հիմնվելով համեմատության արդյունքների վրա:

Էջի հրամանով սահմանված դրոշները կարող են վերլուծվել՝ օգտագործելով հատուկ պայմանական ճյուղային հրամաններ: Նախքան դրանց նայելը, եկեք մի փոքր ուշադրություն դարձնենք այս պայմանական թռիչքի հրամանների մնեմոնիկներին (Աղյուսակ 16): Պայմանական ցատկի հրամանների անունները կազմելիս նշումը հասկանալը (մեր կողմից նշանակված jcc հրամանի անվանման տարրը) կհեշտացնի դրանք մտապահելը և հետագա գործնական օգտագործումը:

Աղյուսակ 16. jcc հրամանի անվանման հապավումների նշանակությունը
Աղյուսակ 17. Պայմանական ցատկի հրամանների ցանկ հրամանի էջի համար operand_1, operand_2

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


Պայմանական մասնաճյուղի հրահանգներ և դրոշներ

Որոշ պայմանական թռիչքային հրամանների մնեմոնիկ նշումը արտացոլում է դրոշի անվանումը, որի վրա նրանք աշխատում են և ունի հետևյալ կառուցվածքը. «j» նիշը առաջին տեղում է: (ցատկել,անցում), երկրորդը կա՛մ դրոշի նշանակումն է, կա՛մ «n» ժխտման նշանը, որին հաջորդում է դրոշի անվանումը: Թիմի այս կառուցվածքը արտացոլում է իր նպատակը: Եթե ​​«n» նիշը չկա, ապա դրոշի վիճակը ստուգվում է, եթե այն հավասար է 1-ի, անցում է կատարվում թռիչքի պիտակին: Եթե ​​առկա է «n» նիշը, ապա դրոշի վիճակը ստուգվում է 0 հավասարության համար, իսկ հաջողության դեպքում ցատկում է կատարվում դեպի ցատկի պիտակը:

Հրամանի մնեմոնիկ կոդերը, դրոշների անունները և անցումային պայմանները տրված են Աղյուսակ 18-ում: Այս հրամանները կարող են օգտագործվել ցանկացած հրամանից հետո, որը փոխում է նշված դրոշները:

Աղյուսակ 18. Պայմանական թռիչքի հրամաններ և դրոշակներ

Եթե ​​ուշադիր նայեք 17-րդ և 18-րդ աղյուսակներին, կարող եք տեսնել, որ դրանցում առկա պայմանական թռիչքի հրամաններից շատերը համարժեք են, քանի որ երկուսն էլ հիմնված են նույն դրոշների վերլուծության վրա:


Պայմանական թռիչքի հրահանգներ և ecx/cx ռեգիստրը

Միկրոպրոցեսորի ճարտարապետությունը ներառում է բազմաթիվ ռեգիստրների հատուկ օգտագործում: Օրինակ՝ EAX/AX/AL ռեգիստրն օգտագործվում է որպես կուտակիչ, իսկ BP և SP ռեգիստրներն օգտագործվում են ստեկի հետ աշխատելու համար։ ESH/CX ռեգիստրն ունի նաև հատուկ գործառական նպատակ՝ այն կատարում է դերը հաշվիչհանգույցի կառավարման հրամաններում և նիշերի տողերի հետ աշխատելիս: Հնարավոր է, որ ֆունկցիոնալ առումով ecx/cx ռեգիստրի հետ կապված պայմանական jump հրամանը ավելի ճիշտ դասակարգվի որպես հրամանների այս խումբ:

Այս պայմանական ճյուղի հրամանի շարահյուսությունը հետևյալն է.

1) jcxz jump_label (Jump if ex is Zero) – jump if cx is zero;

2) jecxz jump_label (Jump Equal exx Zero) – ցատկել, եթե exx-ը զրո է:

Այս հրամանները շատ հարմար են օգտագործել հանգույց կազմակերպելիս և նիշերի տողերի հետ աշխատելիս:

Պետք է նշել, որ jcxz/jecxz հրամանին բնորոշ սահմանափակում կա: Ի տարբերություն այլ պայմանական կառավարման փոխանցման հրահանգների, jcxz/jecxz հրահանգը կարող է ուղղել միայն կարճ ցատկերը՝ -128 բայթ կամ +127 բայթ հաջորդ հրահանգից:

Ցիկլերի կազմակերպում

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

Եկեք այս հրամանների համառոտ նկարագրությունը տանք. 1) loop jump_label (Loop) – կրկնել ցիկլը: Հրամանը թույլ է տալիս կազմակերպել օղակներ, որոնք նման են loops-ին բարձր մակարդակի լեզուներով՝ հանգույցի հաշվիչի ավտոմատ նվազեցմամբ: Թիմի խնդիրն է անել հետևյալը.

բ) ESX/CX ռեգիստրը զրոյի հետ համեմատելը. եթե (ECX/CX) = 0, ապա կառավարումը փոխանցվում է հաջորդ հրամանին հանգույցից հետո.

2) loope/loopz transition_label

Loope և loopz հրամանները բացարձակ հոմանիշներ են: Հրամանների աշխատանքն է կատարել հետևյալ գործողությունները.

ա) ESH/CX ռեգիստրի նվազում.

գ) զրոյական դրոշի ZF վիճակի վերլուծություն, եթե (ECX/CX) = 0 կամ XF = 0, կառավարումը փոխանցվում է հաջորդ հրամանին հանգույցից հետո:

3) loopne/loopnz transition_label

Loopne և loopnz հրամանները նույնպես բացարձակ հոմանիշներ են։ Հրամանների աշխատանքն է կատարել հետևյալ գործողությունները.

ա) ESH/CX ռեգիստրի նվազում.

բ) ESX/CX ռեգիստրը զրոյի հետ համեմատելը.

գ) ZF դրոշի զրոյական վիճակի վերլուծություն. եթե (ECX/CX) = 0 կամ ZF = 1, կառավարումը փոխանցվում է հաջորդ հրամանին հանգույցից հետո:

Loope/loopz և loopne/loopnz հրամաններն իրենց գործող սկզբունքով հակադարձ են: Նրանք ընդլայնում են loop հրամանի գործողությունը՝ լրացուցիչ վերլուծելով zf դրոշը, ինչը հնարավորություն է տալիս կազմակերպել վաղաժամ ելք հանգույցից՝ օգտագործելով այս դրոշը որպես ցուցիչ։

Loop, loope/loopz և loopne/loopnz հրամանների թերությունն այն է, որ դրանք իրականացնում են միայն կարճ թռիչքներ (-128-ից մինչև +127 բայթ): Երկար օղակների հետ աշխատելու համար ձեզ հարկավոր է օգտագործել պայմանական ճյուղերի հրամաններ և jmp հրամանը, այնպես որ փորձեք տիրապետել օղակների կազմակերպման երկու եղանակներին:

MP սարքերի ծրագրավորման հիմունքներ (Դասախոսություն)

ԴԱՍԱԽՈՍՈՒԹՅԱՆ ՊԼԱՆ

1. Միկրոպրոցեսորային հրամանների դասակարգում

2.Հասցեավորման տեսակները

3. MP KR580VM80-ի կառուցվածքը և հրամանի ձևաչափերը

1. Միկրոպրոցեսորային հրամանների դասակարգում

Ինչպես արդեն նշվեց, MP-ի հիմնարար առավելությունը ծրագրավորելիությունն է: Սա նշանակում է, որ MP մուտքագրման վրա հրամաններ կիրառելով, հնարավոր է ապահովել գործողությունների ցանկալի հաջորդականությունը, այսինքն. կոնկրետ ալգորիթմի իրականացում: Լուծվող խնդրի ալգորիթմը կարող է լինել այնքան բարդ, որքան ցանկանում եք, միայն անհրաժեշտ է, որ այս ալգորիթմը բաժանվի քայլերի՝ համաձայն պատգամավորի հրամանի համակարգին: Հետևաբար, հրամանատարական համակարգը կարևոր չէ. միայն այն տեսակետից, թե ինչ կարող է անել պատգամավորը, այլ նաև ինչպես է իրականացվում ալգորիթմը։ Ցանկացած հրամանի կամ հրամանների խմբի առկայությունը կամ բացակայությունը կարող է էապես ազդել կոնկրետ հավելվածի պատգամավորի ընտրության վրա:

MP հրամանների դասակարգումը ներկայացված է Նկար 8-ում:

Մեկ հրամանի համար անհրաժեշտ հիշողության բջիջների քանակի հիման վրա առանձնանում են մեկ, երկու կամ երեք բառի երկարությամբ հրամաններ: Երկու կամ երեք բառ երկարությամբ ցուցումները պահանջում են համապատասխանաբար երկու կամ երեք հիշողության մուտքի ցիկլեր՝ բեռնելու համար:

Շատ դեպքերում, մասնավորապես, համանման ճարտարապետության հետ պատգամավորներին համեմատելիս, օգտակար է հրամանները դասակարգել պատգամավորի ճարտարապետական ​​բնութագրերին համապատասխան:

Ֆունկցիոնալ տեսանկյունից թիմերը բաժանվում են երեք խոշոր խմբերի՝ փոխանցում, կառավարում և տվյալների մշակում: Եկեք մանրամասն քննարկենք MP-ում օգտագործվող հիմնական հրամանները՝ օգտագործելով դասակարգումը ըստ ֆունկցիոնալ բնութագրերի: Հրամանների անվանումները կնշվեն ռուսերեն բառերով, որոնք ցույց են տալիս կատարվող գործողությունների իմաստը:

Տվյալների փոխանցման հրամաններ ապահովել տեղեկատվության պարզ փոխանցում՝ առանց որևէ մշակման գործողություն կատարելու: Այս խմբի հրամանները բաժանված են հիշողության հասանելիության, գրանցման մուտքի հրամանների և մուտքային/ելքային հրամանների հետ կապված:

Հիշողության հասանելիության հետ կապված հրամանները ներառում են.

ՀԻՇԵՔ(ԳՐԵԼ), որով ռեգիստրի պարունակությունն ուղարկվում է հիշողության բջիջ։

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

Մուտքի ռեգիստրների հետ կապված հրամանները պետք է նշեն տեղեկատվության աղբյուրի և արդյունքների գրանցման համարը: Տվյալների փոխանցման հրամանների այս ենթախումբը ներառում է հրամանները.

ՆԵՐԲԵՌՆԵԼ ՈՒՂԻՂ, որում հրամանի կոդում նշված հաստատունը գրված է ռեգիստրում.

ԱՌԱՋ, որի միջոցով մի ռեգիստրի պարունակությունն ուղարկվում է մյուսին։

I/O հրամանները ներառում են.

ՄՏՆԵԼ, որով մուտքային սարքի պարունակությունն ուղարկվում է պատգամավորի ներքին ռեգիստր.

ԵԶՐԱԿԱՑՈՒԹՅՈՒՆ, որում MP-ի ներքին ռեգիստրի բովանդակությունը (սովորաբար կուտակիչ) ուղարկվում է ելքային սարք։

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

Անվերապահ թռիչքի հրամանները ներառում են.

ԱՆՊԱՅՄԱՆ ՑԱՏԿ(BP), ըստ որի BP հրամանի հասցեի դաշտի բովանդակությունը գրվում է ծրագրի հաշվիչին, այսինքն. ապահովում է ծրագրում անցում հրամանի մեջ նշված հասցեին.

ԱՆՊԱՅՄԱՆ ՓՈԽԱՆՑՈՒՄ ՎԵՐԱԴԱՐՁՈՎ(անցում ենթածրագրին), ըստ որի նոր բովանդակությունը գրվում է ծրագրի հաշվիչին (ենթածրագրի առաջին հրամանի հասցեն), սակայն, ի տարբերություն BP հրամանի, ծրագրի հաշվիչի և որոշ այլ ռեգիստրների վիճակը պահպանվում է հիշողության մեջ։ . Երբ ենթածրագրը կատարվում է իր վերջին RETURN հրամանով, ծրագրի հաշվիչի բովանդակությունը և բոլոր ռեգիստրները վերականգնվում են:

Պայմանական ցատկման հրահանգները ստուգում են ռեգիստրի բիթերի, դրոշակի շեղման կամ այլ պարամետրի վիճակը: Ստուգման արդյունքն է որոշում՝ անցումը կկատարվի, թե ոչ։ Սովորաբար, անցումը կատարվում է, եթե ստուգման արդյունքը համապատասխանում է հրամանում նշված պայմանին: Կառավարման հրամանների այս ենթախումբը ներառում է.

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

ՊԱՅՄԱՆԱԿԱՆ ԱՆՑՈՒՄ ՎԵՐԱԴԱՐՁՈՎ, որը տարբերվում է ԱՆՊԱՅՄԱՆԱԿԱՆ JUMP WITH RETURN հրամանից նրանով, որ անցումը ենթածրագրին տեղի է ունենում միայն նշված պայմանը բավարարելու դեպքում։

Որպես կանոն, MP հրամանի համակարգը ներառում է ևս մի քանի օժանդակ հրամաններ, որոնք թույլ են տալիս վերահսկել ռեգիստրների կամ գործարկիչների վիճակը, որոնք ազդում են պայմանական անցումների կատարման վրա, օրինակ՝ SET FLAG, RESET FLAG, SET BATTERY HIGH BIT, RESET BATTERY HIGH BIT և այլն: .

Տվյալների մշակման հրամաններ բաժանվում են թվաբանական և տրամաբանական: Թվաբանականները ներառում են.

FOLDերկու ռեգիստրի կամ ռեգիստրի և հիշողության բջիջի բովանդակությունը.

ՀԱՆՁՆԱՑՆԵԼհիշողության բջջի կամ ռեգիստրի բովանդակությունից, ռեգիստրի բովանդակությունից.

ԱՎԵԼԱՑՆԵԼ 1-ՈՎ(INCREMENT) հիշողության բջջի կամ ռեգիստրի պարունակությունը (կույտի ցուցիչ, ինդեքսի ռեգիստր, կուտակիչ);

ՆՎԱԶԵԼ 1-ՈՎ(DECREMENT) հիշողության բջջի կամ ռեգիստրի բովանդակությունը.

ԱՎԵԼԱՑՐԵԼ ԻՐԱԿԱՆԱՑՆԵԼՈՎ, որով լրացում է կատարվում՝ հաշվի առնելով փոխանցման ձգանի վիճակը։ Սա հեշտացնում է մեծ թվերի մշակումը կազմակերպելը.

ՎԱՐԿԻ ՀԱՇՎԱՌՄԱՆ ՀԱՆՁՆԱՑՈՒՄ;

SHIFTհիշողության բջջի կամ ռեգիստրի բովանդակությունը (սովորաբար մեկ բիթ):

Տրամաբանական հրամանների ենթախումբը ներառում է հետևյալ հրամանները.

ԵՎ(LOGICAL MULTIPLY), որով կապակցման գործողությունը կատարվում է երկու ռեգիստրների կամ հիշողության բջիջի և ռեգիստրի բովանդակության միջև.

ԿԱՄ(ՏՐԱՄԱԲԱՆԱԿԱՆ ՀԱՎԵԼՈՒՄ), որով կատարվում է անջատման գործողություն երկու ռեգիստրների կամ հիշողության բջիջի և ռեգիստրի բովանդակության միջև.

ԱՆՎԱՎԵՐՈՒԹՅՈՒՆ, որը կատարում է երկու ռեգիստրների կամ հիշողության բջիջի և ռեգիստրի բովանդակության բիթային համեմատություն.

INVERSIONհիշողության բջջի կամ ռեգիստրի բովանդակությունը:

2.Հասցեավորման տեսակները

MP-ի ամենակարևոր ճարտարապետական ​​բնութագրիչներից մեկը հիշողության կամ հասցեավորման տեսակների հասանելիության հնարավոր մեթոդների ցանկն է: MP-ի հասցեական հնարավորությունները նշանակալի են երկու տեսանկյունից.

Նախ, հիշողության մեծ քանակությունը պահանջում է հասցեի մեծ երկարություն, քանի որ n-bit հասցեն թույլ է տալիս մուտք գործել հիշողություն 2n բառի հզորությամբ: Տիպիկ 8-բիթանոց MP բառերը հնարավորություն են տալիս ուղղակիորեն մուտք գործել միայն 256 հիշողության բջիջներ, ինչը ակնհայտորեն բավարար չէ: Եթե ​​հաշվի առնենք, որ հիշողություն մուտք գործելը ամենատարածված գործողությունն է, ապա ակնհայտ է, որ MP-ի օգտագործման արդյունավետությունը մեծապես որոշվում է MP-ի փոքր բիթ հզորությամբ մեծ ծավալի հիշողության հասցեագրման մեթոդներով:

Երկրորդ, ծրագրավորման հեշտության համար ցանկալի է ունենալ տվյալների հասցեներ ստեղծելու պարզ համակարգ զանգվածների, աղյուսակների և ցուցիչների հետ աշխատելիս։ Դիտարկենք այս խնդիրների լուծման ուղիները:

Եթե ​​հրամանի հասցեի դաշտը սահմանափակ է և բավարար չէ որևէ հիշողության բջիջ ուղղակիորեն մուտք գործելու համար, ապա հիշողությունը նման դեպքերում բաժանվում է էջերի, որտեղ 2n հիշողության բջիջները համարվում են էջ։

Փոքր բիթ հրամանի հասցեի դաշտը մեծ հզորության հիշողության հետ համապատասխանեցնելու համար («էջի» խնդիրը լուծելու համար) MP-ում օգտագործվում են հասցեավորման տարբեր տեսակներ.

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

Ուղղակի հասցեավորում՝ օգտագործելով էջի ռեգիստրը: Պատգամավորը պետք է ունենա ծրագրային առումով հասանելի էջի ռեգիստր՝ բեռնված հատուկ հրամանով: Այս ռեգիստրը մի քանի բիթ է ավելացնում հրահանգի հասցեի դաշտում, որոնք անհրաժեշտ են ողջ հիշողությունը հասցեագրելու համար:

Ուղղակի հասցեագրում՝ օգտագործելով կրկնակի բառեր: Հրամանի հասցեի դաշտի երկարությունը մեծացնելու համար հասցեի համար հատկացվում է լրացուցիչ բառ (իսկ անհրաժեշտության դեպքում՝ երկու)։

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

Հասցեագրում ինդեքսային ռեգիստրի համեմատ: Կատարման հասցեն ձևավորվում է ինդեքսի ռեգիստրի բովանդակության և հրամանի հասցեի դաշտի բովանդակության ամփոփմամբ, որը համարվում է ստորագրված ամբողջ թիվ: Ինդեքսային ռեգիստրը բեռնված է հատուկ հրամաններով:

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

3. MP KR580VM80-ի կառուցվածքը և հրամանի ձևաչափերը

KR580VM80 սերիայի MP հրամանատարական համակարգը պարունակում է հրամաններ երեք ձևաչափով. մեկ բայթ, կրկնակի բայթ և երեք բայթ.

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

Եթե ​​ռեգիստրները ներգրավված են գործողության մեջ, դրանցից մեկը կամ երկուսը կարող են նշված լինել հրամանի առաջին բայթում: Այս դեպքում հրամանի դաշտում ռեգիստրի համարներին վերագրվում են բավականին կոնկրետ բիթ. երեք ցածր կարգի բիթերը (b2 – b0) կոդավորում են օպերանդ պարունակող աղբյուր ռեգիստրի համարը, իսկ երեք միջինները (b5 – b3): - նպատակակետ ռեգիստրի համարը, որտեղ ուղարկվում է գործողության արդյունքը: Այն դեպքերում, երբ այդ ռեգիստրներից երկուսը կամ մեկը ներգրավված չեն գործողության կատարման մեջ, գործող կոդի համար օգտագործվում են համապատասխան բիթերը:

Հետևյալ ռեգիստրի կոդավորումն ընդունված է.

000 – գրանցամատյան B, 100 – գրանցամատյան H,

001 – գրանցամատյան C, 101 – գրանցամատյան L,

010 - գրանցամատյան D, 110 - հիշողության բջիջ,

011 – ռեգիստր E, 111 – մարտկոց Ա.

Կոդ 100-ը անուղղակի հիշողության հասցեավորման նշան է՝ օգտագործելով 16-բիթանոց հասցեն, որը գտնվում է H և L գրանցամատյաններում: Կախված հրամանի մեջ այս կոդի գտնվելու վայրից, համապատասխան հիշողության բջիջը հասանելի է լինում կամ օպերանդի կամ արդյունքները գրելու համար: վիրահատությունը։

Մի շարք MP հրամաններ ապահովում են կրկնակի երկարությամբ թվերի մշակում կամ փոխանցում: Այս դեպքերում B և C, D և E, կամ H և L ռեգիստրների զույգերը միավորվում են համապատասխանաբար 00, 01 և 10 համարներով 16-բիթանոց ռեգիստրների մեջ: Հրամաններում գրանցման զույգերի համարները վերագրվում են b2 և b1 (աղբյուր գրանցամատյան), b5 և b4 (նպատակային ռեգիստր) բիթերին, իսկ b0 և b3 բիթերն օգտագործվում են գործողության կոդը նշելու համար:

MP-ում կրկնակի բայթ հրամանները ներառում են ուղղակի հասցեավորման և մուտքային/ելքային հրամաններ: Համապատասխանաբար, այս խմբի հրամանի երկրորդ բայթը պարունակում է 8-բիթանոց օպերանդ կամ մուտքային կամ ելքային սարքի 8-բիթանոց հասցե:

Երեք բայթանոց հրահանգներում երկրորդ և երրորդ բայթերը պարունակում են 16-բիթանոց հասցեներ (ուղղակի հասցեագրման հրահանգներով) կամ 16-բիթանոց օպերանդներ (ռեգիստրների զույգերի բեռնման հրահանգներում և ստեկի ցուցիչում):

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

Ընդհատումների և ենթածրագրերին անցնելու ժամանակ պատգամավորի վիճակը պահպանելու և վերականգնելու հարմարության համար նշված բոլոր բնութագրերը պահվում են հատուկ գրանցամատյանում՝ բնութագրերի ռեգիստրում: Գրանցման բիթերում նշանների գտնվելու վայրը ներկայացված է աղյուսակում:

որտեղ S-ը «նշան» հատկանիշն է (ընդունում է ամենակարևոր բիտի արժեքը

արդյունք);

Z - զրոյական արդյունքի նշան;

AC-ը օժանդակ փոխանցման նշան է (եթե կա փոխանցում

բայթ տետրադների միջև, ապա AC=1, հակառակ դեպքում AC=0;

P - արդյունքի հավասարության նշան (եթե բայթում միավորների քանակը

արդյունքը զույգ է, ապա P=1, հակառակ դեպքում՝ P=0);

C - փոխանցման կամ փոխառության նշան (եթե հրամաններ կատարելիս.

Երբ ավագ կոչումից կամ փոխառություն է եղել ավագի,

Ամենաբարձր թվանշանը C=1 է, հակառակ դեպքում՝ C=0):

Նշում: Տրամաբանական բազմապատկման հրամանների համար AC օժանդակ կրիչ նշանը վերցնում է արդյունքի չորրորդ բիտի արժեքը:

MP սերիայի KR580VM80 ամբողջական հրամանատարական համակարգը տրված է «Միկրոպրոցեսորներ և միկրոպրոցեսորային համակարգեր» դասագրքի հավելվածում։ Այնտեղ յուրաքանչյուր հրամանի համար նշվում է, թե ինչպես է դրա կատարումից հետո փոխվում յուրաքանչյուր հատկանիշի արժեքը. այն սահմանվում է գործողության արդյունքին համապատասխան (+), չի փոխվում (–), զրոյականացվում է (0): ) կամ սահմանել մեկ (1):

Ընդհանուր առմամբ, հրամանը պետք է պարունակի հետևյալ տեղեկատվությունը.

– գործառնական կոդը, որը ցույց է տալիս այն գործողությունը, որը պետք է կատարի պատգամավորը.

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

- հիշողության բջիջի հասցեն, որտեղ պետք է տեղադրվի գործողության արդյունքը.

- հաջորդ հրամանի հասցեն:

Նրանք. հրամանը հիմնականում չորս հասցեից է: Այնուամենայնիվ, այս հրամանի կառուցվածքը հանգեցնում է ավելի երկար հրամանի ձևաչափի, որն, իր հերթին, կապված է ավելի բարդ մշակման գործընթացի և պրոցեսորի կառուցվածքի հետ: Հետևաբար, MP տեխնոլոգիայում առավել տարածված են անհասցե և unicast հրամանները, ինչը հնարավորություն է տալիս ստեղծել պարզ պրոցեսոր, սակայն բարդ գործողություններ կատարելիս օգտագործվում են տարբեր հրամանների ձևաչափեր։

580 սերիայի MP հրահանգների համակարգը ունի մեկ բայթ, կրկնակի բայթ և երեք բայթ հրահանգներ:

Տեղեկություններ այն մասին, թե ինչպես հասցեագրվելիք հրամանը պարունակվում է հրամանի առաջին բայթի օպերացիոն կոդում:

Հաշվարկներն արագացնելու համար որոշ օպերանդներ պահվում են RON բլոկում: Հրահանգները, որոնք գործում են այս օպերանդների վրա, օգտագործում են հասցեների կրճատված կոդեր (գրանցման հասցեավորում):

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

Վերահսկիչ փոխանցման հրամանների խմբում կան չորս տեսակի հրամաններ. անվերապահ ճյուղեր, պայմանական ճյուղեր, հանգույցներ և ընդհատումներ .

Անվերապահ ցատկման հրամաններ. Ներառում է երեք մնեմոնիկ կոդ՝ JMP (անվերապահ թռիչք), CALL (ենթածրագրային զանգ) և RET (վերադարձ ենթածրագրից):

JMP հրամանը թույլ է տալիս ցատկել ծրագրի ցանկացած կետ, որը գտնվում է ինչպես ընթացիկ ծրագրի հատվածում, այնպես էլ մեկ այլ հատվածում: Ծրագրի ընթացիկ հատվածում ցատկելիս օգտագործվում են առաջին երեք JMP հրահանգների ձևաչափերը:

Առաջին ձևաչափն ապահովում է ծրագրի կամայական կետի անցում ընթացիկ ծրագրի հատվածում, որի համար IP-ի բովանդակությանը ավելացվում է 16-բիթանոց օֆսեթ երկուսի լրացման կոդով, որի ամենակարևոր բիթը ստորագրված է: Երկրորդ, կրճատված ձևաչափը թույլ է տալիս ցատկել ծրագրում JMP հրահանգից ոչ ավելի, քան -128-f-127 հասցեներից որևէ կետ: Վերջապես, երրորդ ձևաչափը բեռնում է հրահանգի ցուցիչը 16-բիթանոց համարով, որը գտնվում է EA գործադիր հասցեում, որը որոշվում է հետբայթով: Այս անցումը կոչվում է անուղղակի, քանի որ օգտագործվում է անուղղակի հասցեավորում:

Անվերապահ ցատկում դեպի ծրագրի կետ, որը գտնվում է ընթացիկ ծրագրի հատվածից դուրս, երբ պահանջվում է CS հատվածի ռեգիստրի վերաբեռնում, օգտագործվում են չորրորդ և հինգերորդ JMP հրահանգների ձևաչափերը:

Չորրորդ ձևաչափը սահմանում է ուղիղ միջսեգմենտային անցում, որում ձևաչափի երկրորդ և երրորդ բայթերը ցույց են տալիս անցումային կետի հարաբերական հասցեն, իսկ չորրորդ և հինգերորդ բայթերը ցույց են տալիս նոր CS արժեքը: Հինգերորդ ձևաչափը, օգտագործելով հետբայթ, թույլ է տալիս որոշել EA գործադիր հասցեն, որում գտնվում է անցումային կետի հարաբերական հասցեն (հիշողության բայթերում EA, EA+1 հասցեներով) և նոր CS արժեքը (հիշողության բայթերում): EA+2, EA+3):

CALL հրամանը թույլ է տալիս զանգահարել ենթածրագր, որը գտնվում է կամ ընթացիկ ծրագրի հատվածում կամ հիշողության այլ տարածքում: Այն ունի նույն ձևաչափերը, ինչ JMP հրամանը, բացառությամբ, որ այն ավելի կարճ է: Ի տարբերություն նմանատիպ ձևաչափի JMP հրամանի, CALL հրամանը, նախքան IP-ի կամ IP-ի և CS-ի արժեքները փոխելը, ավտոմատ կերպով գրում է այս ռեգիստրների ընթացիկ արժեքները փաթեթում, ինչը ապահովում է ենթածրագրից վերադարձի կետի հիշումը:

Ենթածրագրից վերադառնալու համար օգտագործեք RET հրամանը, որը կառավարումը փոխանցում է վերադարձի հասցեին, որը դրված է փաթեթի վրա նախորդ CALL հրամանը կատարելիս: Ծրագրի ընթացիկ հատվածում տեղակայված ենթածրագրերից վերադառնալիս օգտագործվում են RET հրահանգի առաջին երկու ձևաչափերը, իսկ երկրորդ ձևաչափը տարբերվում է առաջինից նրանով, որ հրահանգի 2-րդ և 3-րդ բայթերում գրված հաստատուն է ավելացվում հրահանգի բովանդակությանը: կույտի ցուցիչը: Սա թույլ է տալիս ենթածրագրից վերադարձի հետ միաժամանակ վերակայել այս ենթածրագրի կատարման ընթացքում փաթեթում գրված և ապագայում չօգտագործվող պարամետրերը:

Միջսեգմենտների վերադարձի համար օգտագործվում են երրորդ և չորրորդ RET ձևաչափերը, որոնք ապահովում են ինչպես հրահանգների ցուցիչի, այնպես էլ ծրագրի հատվածի բովանդակության վերականգնում:

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

Պայմանական թռիչքի հրամանների մնեմոնիկ կոդերում ստորագրված թվերը համեմատելիս տառը օգտագործվում է «ավելի մեծ» պայմանը նշելու համար. G (ավելի մեծ- ավելին), իսկ նշանակել՝ «պակաս» տառ L (պակաս- պակաս): Նմանատիպ պայմանների դեպքում անստորագիր թվերը համեմատելիս օգտագործվում են համապատասխանաբար տառեր Ա (վերևում- վերևում) և Ստորև- տակ): Հավասարության պայմանը նշվում է տառով E (հավասար- հավասար է), իսկ ինչ-որ պայման չկատարելը` նամակով N (Ոչ- Ոչ): Հարկ է նշել, որ յուրաքանչյուր հրամանի համար թույլատրվում է օգտագործել երկու տարբեր մնեմոնիկ կոդ; Օրինակ, JL և JNGF մնեմոնիկ ծածկագրերը համարժեք են, քանի որ «պակաս» և «ոչ ավելի կամ հավասար» պայմանները նույնական են:

Հրամանի մնեմոնիկ կոդերի ամբողջական ցանկը, ստուգվող պայմանները, ինչպես նաև դրոշների համապատասխան բուլյան համակցությունները և դրանց արժեքները տրված են Աղյուսակում: 1.4.

Աղյուսակ 1.4

Հրամանի մնեմոնիկ կոդը Վիճակ Դրոշների իմաստը
Ստորագրված համարների համար
JL/JNGE Պակաս/ոչ ավելի, քան կամ հավասար SF + OF = լ
JNL / JGE Ոչ պակաս/մեծ կամ հավասար SF + OF = 0
JG/JNLE Ավելի քան/ոչ պակաս կամ հավասար (SF + OF) V ZF = 0
JNG/JLE Ոչ մեծ/պակաս կամ հավասար Անստորագրված թվերի համար (SF + OF) V ZF = լ
JB/JNAE Պակաս/ոչ ավելի, քան կամ հավասար CF=1
JNB / JAE Ոչ պակաս/մեծ կամ հավասար CF=0
JA/JNBE Ավելին CF V ZF = 0
JNA/JBE Այլևս չկա Այլ տվյալների համար CF V ZF = 1
ԺԵ/ՋԶ Հավասար/զրո ZF = 1
JNE/JNZ Ոչ հավասար/զրոյական ZF = 0
JS Մինուսով SF = 1
JNS Դրական կողմը SF = 0
ՋՈ Հորդել OF = լ
JNO Հորդառատ բացակայությամբ OF = 0
JP/JPE Հավասարաչափությամբ PF = 1
JNP/JPO Տարօրինակ պարիտետով PF = 0

Պայմանական թռիչքի բոլոր հրահանգներն ունեն նույն երկու բայթ ձևաչափը, որի առաջին բայթը գործառնական ծածկագիրն է (OPC), իսկ երկրորդը 8-բիթանոց օֆսեթ է, որը դիտվում է որպես ստորագրված թիվ և, հետևաբար, թույլ է տալիս հասցեների փոփոխությունները տիրույթում: -128-ից մինչև + 127: Եթե ​​պայմանը բավարարելու դեպքում ավելի հեռավոր («հեռավոր») անցում է պահանջվում, ապա օգտագործվում է լրացուցիչ անվերապահ անցումային հրաման:

Պայմանական ցատկի հրահանգներից յուրաքանչյուրի կատարման ժամանակը նշվում է երկու դեպքի համար՝ 1) պայմանը բավարարված է, և հսկողությունը փաստացի փոխանցվում է օֆսեթին համապատասխան, 2) պայմանը չի բավարարվում, ուստի հսկողությունը փոխանցվում է հաջորդ հրահանգին։

Ցիկլերի կազմակերպման թիմեր.Ներդրվել է պրոցեսոր՝ հաշվողական ցիկլերի կատարման հարմարության համար: Դրանք ներառում են հետևյալ մնեմոնիկ կոդերը՝ LOOP (հանգույց մինչև (CX) հավասար չէ 0-ի), LOOPNZ/LOOPNE (հանգույց մինչև զրո/ոչ հավասար), LOOPZ/LOOPE (հանգույց մինչև զրոյի/հավասար է) և JCXZ (ցատկել վրա): զրո SH-ում): Այս հրամաններից յուրաքանչյուրն ունի երկու բայթ ձևաչափ, որի երկրորդ բայթը նշում է 8-բիթանոց օֆսեթը, որն օգտագործվում է թռիչքը կազմակերպելու համար: Այս օֆսեթը դիտվում է որպես ստորագրված թիվ և ստորագրվում-ընդլայնվում է մինչև 16 բիթ մինչև թռիչքի հասցեն հաշվարկելը:

Օգտագործելով հանգույցի հրամանները լարային տարրերի մանիպուլյացիայի հրամանների հետ միասին, դուք կարող եք ստեղծել բավականին բարդ տողերի փոխակերպման ծրագրեր: Դիտարկենք ծրագրի ստեղծման օրինակ՝ տասնվեցական թվային համակարգում գրված տվյալների տողը փոխարկելու ինչ-որ կոդի, որի համար փոխակերպման աղյուսակը գտնվում է հիշողության մեջ՝ BX-ում նշված մեկնարկային հասցեից, ինչպես պահանջվում է XLAT-ի համար աղյուսակի փոխակերպման հրամանը օգտագործելու համար: ծածկագրերը։ Եկեք այնուհետև ենթադրենք, որ աղբյուրի տողը պարունակում է 80 տարր և գտնվում է հիշողության մեջ 100-ի հարաբերական սկզբնական հասցեից, և արդյունքի տողը պետք է տեղադրվի 200 հարաբերական հասցեից: Ծրագիրը, որը փոխակերպում է աղբյուրի տողը արդյունքի տողի, Ուղղության դրոշի արժեքը DF=0, կունենա հետևյալ ձևը.

ՄՈՎՍԻ, 100
MOV DI ,200
MOV CX, 80

Այստեղ օգտագործվում է XLAT աղյուսակի փոխակերպման հրամանը, որը նկարագրված է 1.2-ում:

Ընդհատման հրամաններ.Ներառում է երեք մնեմոնիկ՝ INT (ընդհատում), INTO (ընդհատում հորդառատ ժամանակ) և IRET (ընդհատման վերադարձ):

Ընդհատման հրամանը INT ժամը v=1ունի երկու բայթ ձևաչափ, որի երկրորդ բայթը պարունակում է տեսակը սահմանող 8 բիթանոց թիվ (տիպ)կամ ընդհատել մակարդակը: INT հրամանով տիպՊրոցեսորն անցնում է նշված մակարդակի ընդհատումների սպասարկման ծրագրի կատարմանը, և ընդհատման կետ վերադարձն ապահովելու համար անհրաժեշտ գործողությունները կատարվում են ավտոմատ կերպով: Այս գործողությունները հետևյալն են. F դրոշների ռեգիստրի բովանդակությունը գրվում է կույտում (PUSHF), IF և TF դրոշները վերակայվում են, CS ռեգիստրի ընթացիկ արժեքները և IP հրահանգի ցուցիչը գրվում են բուրգի վրա:

Ծառայության ծրագրի մեկնարկային հասցեն ըստ արժեքի որոշելու համար տիպՕգտագործվում է ընդհատման մակարդակի աղյուսակը: Այս աղյուսակի 256 ընդհատումների մակարդակներից յուրաքանչյուրի համար հատկացվում է չորս բայթ՝ առաջին երկու բայթը որոշում է IP հրահանգի ցուցիչի արժեքը, երկրորդը՝ CS հատվածի ռեգիստրի արժեքը: Այս չորս բայթը որոշում է սպասարկման ծրագրերի մեկնարկային հասցեները (Զույգ CS, IP արժեքներ), որոնք նախ պետք է գրվեն հիշողության բջիջներում 0-3FFH բացարձակ հասցեներով։ Աղյուսակի հասցեն, որը համապատասխանում է INT հրամանում նշվածին տիպընդհատման մակարդակը CPU-ում որոշվում է հետևյալ կերպ. CS-ի և GR-ի ընթացիկ արժեքները կույտում պահելուց հետո իրականացվում է բեռնում. CS = տիպ x 4 + 2 և IP = տիպ x 4. Նոր CS և IP արժեքներ՝ վերցված համապատասխանաբար հասցեի բջիջներից տիպ x 4 + 2 Եվ տիպ x 4, որոշել անհրաժեշտ սպասարկման ծրագրի մեկնարկային հասցեն.

Վերևում քննարկված INT ընդհատման հրամանը, երբ դաշտի արժեքն է v=0ունի մեկ բայթ ձևաչափ, այսինքն՝ այն չի պահանջում ընդհատման մակարդակի հատուկ նշում: Այս հրամանը ավտոմատ կերպով ընկալվում է պրոցեսորի կողմից որպես 3-րդ մակարդակի ընդհատում: (տեսակ=3)և սովորաբար օգտագործվում է ծրագրերում որպես անցակետ:

INTO overflow ընդհատման հրամանը հանգեցնում է անցում չորրորդ մակարդակի ընդհատման սպասարկմանը (տեսակ = 4)այն դեպքում, երբ արտահոսքի դրոշի արժեքը OF = 1: INTO հրամանը սովորաբար օգտագործվում է ստորագրված թվաբանական հրամաններից հետո: Սովորաբար, առաջին մի քանի ընդհատումների մակարդակները (մինչև 32) վերապահված են մի շարք կոնկրետ իրավիճակների մշակման համար, ինչպիսիք են զրոյի բաժանելու փորձը, արտահոսքը և այլն:

Պահեստավորված մակարդակների ընդհատումների մշակման առանձնահատկությունն այն է, որ պրոցեսորը անցնում է դրանց սպասարկմանը՝ անկախ IF-ի ընդհատման ակտիվացման արժեքից:

Մեկ բայթանոց IRET հրահանգը տեղադրվում է յուրաքանչյուր ընդհատման ծառայության ռեժիմի վերջում և ապահովում է ընդհատման վերադարձ: Այս հրամանով պրոցեսորը ստեկից վերցնում է IP հրահանգի ցուցիչի և CS ծրագրի հատվածի արժեքը, ինչպես նաև վերականգնում է F դրոշների ռեգիստրի նախկին բովանդակությունը (ինչպես POPF հրամանի դեպքում): Անհրաժեշտության դեպքում, ընդհատված ծրագրին համապատասխան մնացած պրոցեսորային ռեգիստրների բովանդակությունը կարող է պահվել փաթեթի վրա, երբ տեղափոխվում եք սպասարկման ծրագիր, այնուհետև վերականգնվում է դրանից վերադառնալիս՝ օգտագործելով stack access հրահանգները:

Անուղղակի հասցեով

PCHL – թռիչքի հասցեն պահվում է HL ռեգիստրի զույգում: Երբ այն կատարվում է (HL) → PC.

Պայմանական թռիչքի հրամաններ

Jcon @, որտեղ con-ը անգլերեն պայման բառից մնեմոնիկ պայման է:

Նախկինում նշվել էր, որ որպես անցումային պայման օգտագործվում է RgP (F) բիթերի (դրոշակների) վիճակը։ Այս վիճակներին համապատասխանող մնեմոնիկները ներկայացված են Նկ. 6.18.

Օրինակ՝ JC 8BFE – երբ C=1 գնում է 8BFE հասցե, երբ C=0 հասցեում հաջորդ հրամանը կատարվում է:

PP զանգելու և վերադառնալու հրամաններ

Նախկինում նշվել էր, որ վերադարձի հասցեն ավտոմատ կերպով պահվում է կույտի վրա, այսինքն. (PC) ® բուրգ.

Անվերապահ հրամաններ

CALL @ – ենթածրագրային զանգ;

RET – վերադարձ ենթածրագրից:

Պայմանական հրամաններ

Ccon @ – ենթածրագրային զանգ;

Rcon – վերադարձ ենթածրագրից:

Հրամանների գործողությունը նման է պայմանական թռիչքի հրամանների գործողությանը, այսինքն. եթե պայմանը ճիշտ է, ապա զանգահարեք կամ վերադարձեք: Եթե ​​ոչ, ապա կատարվում են հետևյալ հրամանները.

Կառավարման այլ հրամաններ

RST n, որտեղ n = 0.1,...,7 – վերագործարկել ըստ ընդհատման վեկտորի n-ի:

Երբ այս հրամանը կատարվում է, կառավարումը փոխանցվում է ենթածրագրին, որը սպասարկում է այս ընդհատումը: RST հրահանգի կատարման ժամանակ PC ծրագրի հաշվիչի պարունակությունը պահվում է ստեկի վրա, իսկ համապատասխան ընդհատման վեկտորի հասցեն գրվում է ԱՀ-ում։

Այս հասցեն սահմանված է հետևյալ կերպ. RST հրամանն ունի 11NN N111 կառուցվածքը, այսինքն. մեկ բայթ. Երեք բիթանոց NNN համակցությունը նշվում է n արժեքով (n = 0...7): 0000 0000 00NN N000 արժեքը մուտքագրվում է PC հրամանի հաշվիչում, որը ծառայում է որպես համապատասխան ընդհատման վեկտորի հասցե:

Այսպիսով, սահմանելով n-ի որոշակի արժեք, կարող եք գեներացնել 8 ընդհատման վեկտորներից մեկի հասցեն։ Այս հասցեները գտնվում են հասցեի տարածքի 0000H-ից մինչև 0038H գոտում և անցնում են 8 բայթ, այսինքն. Նրանց համար վերապահված են հիշողության առաջին 64 բջիջները (8 վեկտորներից յուրաքանչյուրին հատկացվում է 8 բայթ): Այս գոտիներում (յուրաքանչյուրը 8 բայթ) գրվում են միայն համապատասխան ենթածրագրեր (կառավարիչներ) ցատկելու հրամաններ, որոնք տեղակայված են հիշողության այլ տարածքներում։

Ընդհատվող ենթածրագրերը (ինչպես սովորական ենթածրագրերը) պետք է ավարտվեն RET հրամանով: Այս հրամանի կատարման ընթացքում հիմնական ծրագրի հրամանի հասցեն, որի առաջ տեղի է ունեցել ընդհատումը, ընտրվում է կույտից և փոխանցվում հասցեների ռեգիստր PA, իսկ 1-ով ավելացված արժեքը մուտքագրվում է ծրագրի հաշվիչ:

EI - ընդհատում է միացնել: Այս հրամանը տեղադրված է ծրագրի բաժնի սկզբում, որտեղ ընդհատումը միացված է: Այս հրամանով MP կառավարման ստորաբաժանումում ընդհատման միացման գործարկիչը դրվում է 1 վիճակի:

DI – ընդհատել անջատել: Այս հրամանը տեղադրվում է ծրագրի բաժնի վերջում, որտեղ միացված է ընդհատումը և վերականգնում է գործարկիչը 0 վիճակի:

NOP-ը «դատարկ» հրաման է: Բաց է թողնում 4 միջոց: Փոխվում է միայն համակարգիչը:

HLT – կանգառ: Ստիպում է ծրագրի կատարումը դադարեցնել և մտնել դադարեցված վիճակ: Պատգամավորն անջատված է արտաքին հասցեից և տվյալների ավտոբուսներից (այսինքն՝ դրանց բուֆերները մտնում են Z վիճակ): WAIT (սպասում) ելքը դրված է 1-ին մակարդակի վրա: Այս վիճակը կարող է ընդհատվել պատգամավորի մեկնարկի ազդանշաններով կամ տեղադրելով այն ընդհատման վիճակում:

ԻՆՔՆԱԹՍՏՈՒԹՅԱՆ ՀԱՐՑԵՐ

1. Ի՞նչ սարքեր են անհրաժեշտ պարզ միկրոհամակարգիչ ստեղծելու համար:

2. Թվարկե՛ք միկրոհամակարգիչների կառուցվածքների 5 տարբերակ:

3. Օգտագործելով միջանկյալ միջերես:

4. Ի՞նչ է ներառում «PU վերահսկիչ» հասկացությունը:

5. Թվարկե՛ք I8080 պրոցեսորի բնութագրերը։

6. Տվյալների գրանցամատյաններ. Նրանց նպատակը.

7. Նշանների գրանցամատյաններ. Ի՞նչ հատկանիշներ են պահվում այս գրանցամատյաններում:

8. Նկարագրեք տվյալների երկկողմանի փոխանակման սկզբունքը ներքին և արտաքին SD-ի միջև:

9. Ի՞նչ ռեգիստրներ կարող է օգտագործել ծրագրավորողը:

10. Ներկայացրե՛ք միկրոհամակարգչի բլոկ-սխեմա՝ հիմնված MP KR580VM80-ի վրա:

11. Ի՞նչ ցիկլերից է բաղկացած մեքենայական ցիկլը:

12. Թվարկե՛ք MP KR580VM80-ի տվյալների ձևաչափերը:

13. Թվարկե՛ք MP KR580VM80-ի հրամանի ձևաչափերը:

14. Հասցեավորման ի՞նչ մեթոդներ են օգտագործվում MP KR580VM80-ում:

15. Ի՞նչ խմբերի կարելի է բաժանել MP KR580VM80 թիմերը:

16. Մեկ բայթ փոխանցումներ: Տվեք այս խմբի հրամանների օրինակներ:

17. Կրկնակի բայթ փոխանցումներ: Տվեք այս խմբի հրամանների օրինակներ:

18. Մարտկոցի ի՞նչ գործառնություններ գիտեք:

19. Գործողություններ RON-ում և հիշողության մեջ: Ի՞նչ գործողություններ են դրանք ներառում:

20. Թվարկե՛ք կառավարման հրամանները:

ՎԵՐԱՀՍԿՈՂՈՒԹՅԱՆ ԱՌԱՋԱԴՐԱՆՔՆԵՐ

1. Պատասխանների թերթիկում պետք է նշվեն խմբի համարը, ուսանողի ազգանունը և ընտրանքի համարը:

2. Հարցերի համարներն ընտրվում են աշակերտի կողմից՝ ըստ դասարանի իր վերջին երկու թվանշանների: Աղյուսակ 6.1-ում n-1 թվի նախավերջին նիշն է, իսկ n-ը վերջին թվանշանն է: Աղյուսակի բջիջները պարունակում են հարցերի քանակ, որոնց պետք է գրավոր պատասխան տրվի:

Հարցերի համարներ Աղյուսակ 6.1

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

Անվերապահ անցումային գործողությունը (BP) վերաբերում է վերահսկողության անվերապահ փոխանցման գործողություններին և բաղկացած է հետևյալից. Գործողության սկզբում CC-ի բովանդակությունը, նշելով BP-ին հաջորդող հրամանը (վերադարձի հասցե), ուղարկվում է P1 AU, եթե ծրագիրը նախատեսում է վերադարձ. սա թույլ է տալիս պահպանել վերադարձի հասցեն՝ հետագայում P1-ի բովանդակությունը (օրինակ՝ 3G օպերացիայի միջոցով) փոխանցելով հիշողություն: Դա անելու համար ծրագրի բաժնի առաջին հրամանները, որոնց անցումը կատարվում է, պետք է պարունակեն համապատասխան գործողություն: Գործողության հաջորդ փուլում 1-14 բիթերի բովանդակությունը, որը հանդիսանում է անցումային հասցեն, կարդացվում է RAM-ից կամ ROM բջիջից SchK-ում BP հրամանում նշված հասցեով: Այս հասցեում այնուհետև հարցում է արվում ROM-ին այն հրամանի համար, որին կատարվում է անցումը:

Հերթափոխի գործողություն

Shift ձևաչափում (FSD) կոդավորված են «Թվաբանական տեղաշարժ աջ (ձախ)» և «Տրամաբանական տեղաշարժ աջ (ձախ)» գործողությունները: Երբ դրանք կատարվում են, գործողությունները կատարվում են AC-ում տեղակայված համարի վրա: Հրամանում նշված են ատրիբուտները՝ հերթափոխի ուղղությունը (5 r), հերթափոխի տեսակները (8.9 r) և դրանց թիվը (1-4 r): Գործողության ընթացքում P2 ռեգիստրի բիթերը տեղաշարժվում են, արդյունքը գրանցվում է P2 և РСм ռեգիստրներում, իսկ աջ անցումը կատարվում է միաժամանակ 3 բիթով, ձախ՝ 1 բիթ։ 5-րդ բիտի արժեքը, որը հավասար է «1»-ին, որոշում է անցումը դեպի ձախ, հավասար «0»-ի` դեպի աջ:

Գործողությունները ցիկլային են: Հերթափոխի ցիկլերի քանակը հաշվվում է ցիկլի հաշվիչով (CC): Նախքան գործողության ցիկլային մասը կատարելը կենտրոն է ուղարկվում հաստատուն և հերթափոխի նշան պարունակող հրամանի 1-5 բիթերի պարունակությունը։ Հաջորդը, P2-ի բովանդակությունը ուղարկվում է RSM: Հերթափոխն ինքնին իրականացվում է P2 և Pcm գրանցամատյանների բովանդակության «թեք» պատճենման շնորհիվ համապատասխանաբար P2' և Pcm': Այնուհետև PCm'-ից և P2'-ից SM1 և SM2 անցման արդյունքը վերագրվում է P2 և PSM: Գործողության ավարտը նշվում է SchT =0 արժեքով:

Կախված հերթափոխի տեսակից (L կամ A), կամ բոլոր 16 բիթերը (L) կամ միայն 15 բիթերը (մանտիսսա) առանց նշանի (A) տեղաշարժվում են: Երբ A-ն տեղաշարժվում է դեպի աջ, ազատված բարձր կարգի բիթերը լրացվում են նշանով, իսկ ձախ տեղափոխելիս՝ ազատված ցածր կարգի բիթերը լրացվում են զրոներով: Աջ կամ ձախ տրամաբանական տեղաշարժի ժամանակ ազատված բիթերը լցվում են զրոներով։

Կարող եք նաև ծրագրային կերպով փոխել հերթափոխի հաստատունը:

32 ԿԲ պրոցեսորի բլոկ-սխեմայի հանգույցների և տարրերի փոխազդեցությունը պայմանական թռիչքային գործողություններ կատարելիս:

Պայմանական թռիչքային գործողություններ



Գործողության կատարումը սկսվում է անցումային պայմանի իրագործելիությունը ստուգելով՝ համեմատելով նախորդ գործողության արդյունքի հատկանիշի արժեքը հրամանի «դիմակ» կոդի հետ: Եթե ​​պայմանը բավարարված է, ապա անցում է կատարվում հրամանի կատարմանը, որի հասցեն գտնվում է PFU ֆորմատի հասցե-օպերանդ մասում։ Եթե ​​անցումային պայմանը չի բավարարվում, ապա ծրագրում կատարվում է «Պայմանական ցատկ» հրամանին հաջորդող հրամանը:

«Պայմանական թռիչք» (JJ) հրամանը զբաղեցնում է երկու հարակից ROM բջիջ: Առաջին բջիջը պարունակում է հրամանը, երկրորդը պարունակում է թռիչքի հասցեն: Պայմանական թռիչքը որոշվում է հրամանի 7-9 բիթերի համադրությամբ, վերադարձի հասցեի տեղադրման պայմանը որոշվում է 6-րդ բիթով։

Երբ պայմանը կատարվում է, անցումային հասցեն մուտքագրվում է ծրագրի հաշվիչ, հետևաբար հաջորդ հրամանի կոդը կկարդացվի այս հասցեով բջիջից: Հետադարձ հասցեն մուտքագրվում է P1-ում, եթե 6-րդ բիթը հավասար է 0-ի, իսկ Pcm-ում, եթե այս բիտի արժեքը հավասար է մեկի:

Եթե ​​անցումային պայմանը չի կատարվում, հաջորդ հրահանգը ընտրվում է i+2 հասցեի կոդով բջիջից: Այս դեպքում նշված կոդը (վերադարձի հասցեն) մուտքագրվում է P1՝ անկախ հրամանի 6-րդ բիտի արժեքից։ Վերջինս որոշվում է SV պրոցեսորի գործառնական ալգորիթմով UE գործառնական կոդը վերծանելիս։

PCM-ի վրա վերադարձի հասցեն մուտքագրելը պայմանավորված է նրանով, որ AC-ից կոդի ավտոբուսի ելքը ունի միայն նշված ռեգիստրը:

NC գործողության կատարման առանձնահատկությունն այն է, որ եթե հրամանի «դիմակ» բիթերում կա 111 կամ 000 կոդ, պայմանական անցումը վերածվում է անվերապահի կամ համապատասխանաբար բազային ռեգիստրներ ուղարկելու գործողության: Այս դեպքերում թռիչքային հասցեները կամ բազային ռեգիստրներին ուղարկող հասցեն հրահանգի հասցե-օպերանդ մասի (AOC) բովանդակությունն է:

BR ուղարկելու օպերացիան կատարելիս AOC-ի պարունակությունն ուղարկվում է միանգամից մեկ կամ մի քանի BR՝ կախված հրամանի 15-17 բիթերի պարունակությունից։ Հետադարձ հասցեն այս դեպքում չի ուղարկվում P1 և RSM:



NC գործողության կատարումը որպես TCU գործողություն կարող է օգտագործվել ընդհատումների մեջ՝ ընդհատող ծրագրերին անցնելու համար: Դա անելու համար հրամանի 5-րդ բիթում դրված է ծրագրավորված անցման հատկանիշը (PNT): Այս դեպքում հրամանը կարդացվում է պրոցեսորի մեջ ROM-ից ընդհատման ազդանշանի (ISR) միջոցով: Այս դեպքում ROM մուտքի հասցեն (ընդհատման հասցեն) ստեղծվում է պրոցեսորի ընդհատման սխեմայի կողմից:

Գործողության առանձնահատկությունն այս դեպքում այն ​​է, որ ընդհատումների վերադարձի հասցեն ոչ թե FUP ձևաչափով հրամանին հաջորդող հրամանի հասցեն է, այլ այն հրամանի հասցեն, որից առաջ ընդհատվել է: ԱԷԿ-ի ազդանշանը մշակվում է հետևյալ կերպ. Այս ազդանշանի հիման վրա պրոցեսորի ընդհատման սխեման առաջացնում է ընդհատման հասցե (APr), որը հավասար է FUP(i) ձևաչափով jump հրահանգի առաջին բջիջի հասցեին: Այս հասցեն փոխանցվում է հիշողության անջատիչի և ROM հասցեի ռեգիստրի միջոցով: Ընդհատումների հասցեներն ընտրվում են այնպես, որ (i) հրամանի առաջին բջիջի հասցեն զույգ է, իսկ երկրորդ բջիջի հասցեն (i+1)՝ կենտ։ Երկրորդ հասցեն ստացվում է առանց ՍԴ-ի մասնակցության զրոյից մեկին փոխելով (ապարատային) նվազագույն նշանակալի թվանշանը: ROM-ից հրաման կարդալու և այն կատարելու գործընթացում SchK-ի (K+1) բովանդակությունը պահվում է AC-ի P1 ռեգիստրում, իսկ հրամանի երկրորդ բջիջի պարունակությունը (i+1), որը j հասցեով հրամանին անցնելու հասցեն է, մուտքագրվում են SchK: Հարցում է արվում ROM-ին ՍԴ-ի նոր բովանդակության վերաբերյալ: Այսպիսով, հաջորդ հրահանգի հասցեն ընդհատման պահին (K+1) պահվում է գրանցամատյան P1-ում։ Ընդհատումը մշակելուց հետո այս հասցեն օգտագործվում է ընդհատված ծրագրին վերադառնալու համար:

33 SV պրոցեսորի բլոկային դիագրամի հանգույցների և տարրերի փոխազդեցությունը պրոցեսորի և համակարգի կառավարման գործողություններ կատարելիս: