უპირობო გადასვლები. MP მოწყობილობების პროგრამირების საფუძვლები (ლექცია) გადაცემის ბრძანებების კონტროლი

  • 10.01.2024

არითმეტიკული გამოთვლების საშუალებებთან ერთად, მიკროპროცესორული ინსტრუქციის სისტემას აქვს მონაცემთა ლოგიკური გადაქცევის საშუალებებიც. ლოგიკურად ვგულისხმობთ მონაცემთა ისეთ ტრანსფორმაციას, რომელიც ეფუძნება ფორმალური ლოგიკის წესები.

ფორმალური ლოგიკა მუშაობს ჭეშმარიტი და მცდარი განცხადებების დონეზე. მიკროპროცესორისთვის ეს ჩვეულებრივ ნიშნავს 1 და 0, შესაბამისად. კომპიუტერი მშობლიურია ნულებისა და ერთების ენაზე, მაგრამ მონაცემთა უმცირესი ერთეული, რომელზედაც მუშაობს მანქანის ინსტრუქციები, არის ბაიტი. თუმცა, სისტემურ დონეზე, ხშირად აუცილებელია, რომ შეძლოთ მუშაობა უკიდურესად დაბალ დონეზე - ბიტის დონეზე.

ბრინჯი. 29. მონაცემთა დამუშავების ლოგიკური ინსტრუმენტები


ლოგიკური მონაცემების ტრანსფორმაციის საშუალებები მოიცავს ლოგიკურ ბრძანებებს და ლოგიკურ ოპერაციებს. ასამბლერის ინსტრუქციის ოპერანდი ზოგადად შეიძლება იყოს გამოხატულება, რომელიც თავის მხრივ არის ოპერატორებისა და ოპერანდების კომბინაცია. ამ ოპერატორებს შორის ასევე შეიძლება იყოს ოპერატორები, რომლებიც ახორციელებენ ლოგიკურ ოპერაციებს გამოხატვის ობიექტებზე.

სანამ ამ ინსტრუმენტებს დეტალურად განვიხილავთ, მოდით განვიხილოთ რა არის თავად ლოგიკური მონაცემები და რა ოპერაციები ხორციელდება მასზე.

ლოგიკური მონაცემები

მონაცემთა ლოგიკური დამუშავების თეორიული საფუძველია ფორმალური ლოგიკა.ლოგიკის რამდენიმე სისტემა არსებობს. ერთ-ერთი ყველაზე ცნობილი არის წინადადების გაანგარიშება.განცხადება არის ნებისმიერი განცხადება, რომლის თქმაც შესაძლებელია მართალია,ან ყალბი.

წინადადების გაანგარიშება არის წესების ერთობლიობა, რომელიც გამოიყენება განცხადებების ზოგიერთი კომბინაციის სიმართლის ან სიცრუის დასადგენად.

წინადადების გამოთვლა ძალიან ჰარმონიულად არის შერწყმული კომპიუტერის მუშაობის პრინციპებთან და მისი დაპროგრამების ძირითად მეთოდებთან. კომპიუტერული ტექნიკის ყველა კომპონენტი აგებულია ლოგიკურ ჩიპებზე. კომპიუტერში ინფორმაციის წარმოდგენის სისტემა ყველაზე დაბალ დონეზე ეფუძნება ბიტის კონცეფციას. ბიტი, რომელსაც აქვს მხოლოდ ორი მდგომარეობა (0 (მცდარი) და 1 (true)), ბუნებრივად ჯდება წინადადების კალკულუსში.

თეორიის მიხედვით, შემდეგი ლოგიკური ოპერაციების შესრულება შესაძლებელია განცხადებებზე (ბიტებზე).


1. უარყოფა (ლოგიკური არა) -ლოგიკური ოპერაცია ერთ ოპერანდზე, რომლის შედეგი არის თავდაპირველი ოპერანდის ინვერსია.

ეს ოპერაცია ცალსახად ხასიათდება შემდეგი ჭეშმარიტების ცხრილით (ცხრილი 12).

ცხრილი 12. სიმართლის ცხრილი ლოგიკური უარყოფისთვის

2. ლოგიკური დამატება (ლოგიკური ჩათვლით ან) -ლოგიკური ოპერაცია ორ ოპერანდზე, რომლის შედეგი არის true (1), თუ ერთი ან ორივე ოპერანდი არის true (1), და false (0), თუ ორივე ოპერანდი არის მცდარი (0).

ეს ოპერაცია აღწერილია შემდეგი ჭეშმარიტების ცხრილის გამოყენებით (ცხრილი 13).

ცხრილი 13. სიმართლის ცხრილი ლოგიკური ინკლუზიური OR-ისთვის

3. ლოგიკური გამრავლება (ლოგიკური და) -ლოგიკური ოპერაცია ორ ოპერანდზე, რომელიც ფასდება ჭეშმარიტად (1) მხოლოდ იმ შემთხვევაში, თუ ორივე ოპერანდი ფასდება ჭეშმარიტად (1). ყველა სხვა შემთხვევაში, ოპერაციის მნიშვნელობა არის ყალბი (0).

ეს ოპერაცია აღწერილია შემდეგი ჭეშმარიტების ცხრილის გამოყენებით (ცხრილი 14).

ცხრილი 14. სიმართლის ცხრილი ლოგიკური და

4. ლოგიკური ექსკლუზიური დამატება (ლოგიკური ექსკლუზიური ან) -ლოგიკური ოპერაცია ორ ოპერანდზე, რომლის შედეგი არის true (1), თუ ორი ოპერანდიდან მხოლოდ ერთი არის true (1), და მცდარი (0) თუ ორივე ოპერანდი არის მცდარი (0) ან "ჭეშმარიტება" (1). ეს ოპერაცია აღწერილია შემდეგი ჭეშმარიტების ცხრილის გამოყენებით (ცხრილი 15).

ცხრილი 15. სიმართლის ცხრილი ლოგიკური ექსკლუზიური OR

მიკროპროცესორული ინსტრუქციის სისტემა შეიცავს ხუთ ინსტრუქციას, რომლებიც მხარს უჭერენ ამ ოპერაციებს. ეს ინსტრუქციები ასრულებს ლოგიკურ ოპერაციებს ოპერანდების ბიტებზე. ოპერანდების ზომები, ბუნებრივია, უნდა იყოს იგივე. მაგალითად, თუ ოპერანდების ზომა არის სიტყვა (16 ბიტი), მაშინ ლოგიკური ოპერაცია შესრულებულია ჯერ ოპერანდების ნულოვან ბიტებზე და მისი შედეგი იწერება შედეგის 0 ბიტის ნაცვლად. შემდეგ ბრძანება თანმიმდევრულად იმეორებს ამ მოქმედებებს ყველა ბიტზე პირველიდან მეთხუთმეტემდე.

ლოგიკური ბრძანებები

მიკროპროცესორული ინსტრუქციის სისტემას აქვს შემდეგი ბრძანებები, რომლებიც მხარს უჭერენ ლოგიკურ მონაცემებთან მუშაობას:

1) და operand_1, operand_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) ტესტი 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 გამოიყენება:

ა) იმის გარკვევა, თუ რომელი ბიტი განსხვავდება operand_1-სა და operand-ში;

ბ) ოპერანდ_1-ში მითითებული ბიტების მდგომარეობის ინვერსია.

hog ბრძანების შესრულებისას ნიღბის ბიტები, რომლებიც გვაინტერესებს (ოპერანდი_2) უნდა იყოს ერთი, დანარჩენი ნული;

მითითებული ბიტების სტატუსის შესამოწმებლად გამოიყენეთ ბრძანება ტესტი operand_1, operand_2 (შეამოწმეთ operand_1).

operand_1-ის შემოწმებულ ბიტებს ნიღაბი (operand_2) უნდა ჰქონდეს ერთის მნიშვნელობა. ტესტის ბრძანების მოქმედება მსგავსია და ბრძანების ალგორითმისა, მაგრამ ის არ ცვლის operand_1-ის მნიშვნელობას. ბრძანების შედეგი არის ნულოვანი დროშის zf მნიშვნელობის დაყენება:

1) თუ zf = 0, მაშინ ლოგიკურმა გამრავლებამ გამოიღო ნულოვანი შედეგი, ანუ ნიღბის ერთი ერთეული ბიტი, რომელიც არ ემთხვეოდა ოპერანდის შესაბამის ერთ ბიტს;

2) თუ zf = 1, მაშინ ლოგიკურმა გამრავლებამ გამოიწვია არანულოვანი შედეგი, ე.ი. ერთი მაინცნიღბის ერთი ბიტი ემთხვევა operand_1-ის შესაბამის ერთ ბიტს.

ტესტის ბრძანების შედეგზე რეაგირებისთვის მიზანშეწონილია გამოიყენოთ ნახტომი ბრძანება jnz label (Jump if Not Zero) - jump თუ ნულოვანი დროშა zf არ არის ნულოვანი, ან ბრძანება საპირისპირო მოქმედებით - jz label (Jump თუ ნულოვანი) - გადახტომა, თუ ნულოვანი დროშა zf = 0.

შემდეგი ორი ბრძანება ეძებს 1-ზე დაყენებული ოპერანდის პირველ ბიტს. შეგიძლიათ მოძებნოთ ოპერანდის დასაწყისიდან ან ბოლოდან:

1) bsf operand_1, operand_2 (Bit Scanning Forward) – ბიტების წინ სკანირება. ინსტრუქცია სკანირებს operand_2-ის ბიტებს ნაკლებად მნიშვნელოვანიდან ყველაზე მნიშვნელოვანამდე (ბიტიდან 0-დან ყველაზე მნიშვნელოვან ბიტამდე) ეძებს პირველ ბიტს, რომელიც არის 1-ზე. თუ ის მოიძებნება, ამ ბიტის რიცხვი შეიყვანება operand_1-ში, როგორც მთელი რიცხვი. თუ operand_2-ის ყველა ბიტი არის 0, მაშინ ნულოვანი დროშა zf დაყენებულია 1-ზე, წინააღმდეგ შემთხვევაში zf დროშა გადატვირთულია 0-ზე;

2) bsr operand_1, operand_2 (ბიტი სკანირების გადატვირთვა) – ბიტების სკანირება საპირისპირო თანმიმდევრობით. ინსტრუქცია ეძებს (სკანირებს) operand_2-ის ბიტებს ყველაზე მნიშვნელოვანიდან ყველაზე ნაკლებად მნიშვნელოვანამდე (ყველაზე მნიშვნელოვანი ბიტიდან 0-მდე) ეძებს პირველ ბიტს 1-ზე. მთელი მნიშვნელობა. მნიშვნელოვანია, რომ პირველი ბიტის პოზიცია მარცხნივ მაინც დაითვლება 0-ის მიმართ. თუ operand_2-ის ყველა ბიტი ტოლია 0-ის, მაშინ ნულოვანი დროშა zf დაყენებულია 1-ზე, წინააღმდეგ შემთხვევაში zf დროშა გადატვირთულია 0-ზე. .

Intel-ის მიკროპროცესორების უახლეს მოდელებში ლოგიკური ბრძანებების ჯგუფში კიდევ რამდენიმე ბრძანება გამოჩნდა, რომლებიც ოპერანდის ერთ კონკრეტულ ბიტზე წვდომის საშუალებას იძლევა. ოპერანდი შეიძლება განთავსდეს როგორც მეხსიერებაში, ასევე ზოგადი დანიშნულების რეესტრში. ბიტის პოზიცია მითითებულია ბიტის ოფსეტურით ოპერანდის ყველაზე ნაკლებად მნიშვნელოვან ბიტთან მიმართებაში. ოფსეტური მნიშვნელობა შეიძლება განისაზღვროს როგორც პირდაპირი მნიშვნელობა ან შეტანილი ზოგადი დანიშნულების რეესტრში. თქვენ შეგიძლიათ გამოიყენოთ bsr და bsf ბრძანებების შედეგები, როგორც ოფსეტური მნიშვნელობა. ყველა ინსტრუქცია ანიჭებს არჩეული ბიტის მნიშვნელობას CE დროშას

1) bt ოპერანდი, ბიტის ოფსეტი (ბიტი ტესტი) – შეამოწმეთ ბიტი. ბრძანება გადასცემს ბიტის მნიშვნელობას cf დროშაზე;

2) bts operand, bit offset (Bit Test and Set) – ბიტის შემოწმება და დაყენება. ინსტრუქცია გადასცემს ბიტის მნიშვნელობას CF დროშაზე და შემდეგ აყენებს შესამოწმებელ ბიტს 1-ზე;

3) btr ოპერატიული, bit offset (Bit Test and Reset) – ბიტის შემოწმება და გადატვირთვა. ინსტრუქცია გადასცემს ბიტის მნიშვნელობას CF დროშაზე და შემდეგ აყენებს ამ ბიტს 0-ზე;

4) btc ოპერანდი, bit offset (Bit Test and Convert) – შეამოწმეთ და შეცვალეთ ბიტი. ინსტრუქცია გადასცემს ბიტის მნიშვნელობას cf დროშაზე და შემდეგ აბრუნებს ამ ბიტის მნიშვნელობას.

Shift ბრძანებები

ამ ჯგუფის ინსტრუქციები ასევე უზრუნველყოფს ოპერანდების ცალკეული ბიტების მანიპულირებას, მაგრამ განსხვავებულად, ვიდრე ზემოთ განხილული ლოგიკური ინსტრუქციები.

ცვლის ყველა ინსტრუქცია გადაადგილებს ბიტებს ოპერანდის ველში მარცხნივ ან მარჯვნივ, ოპკოდის მიხედვით. ცვლის ყველა ინსტრუქციას აქვს იგივე სტრუქტურა - cop operand, shift_counter.

გადატანილი ბიტების რაოდენობა - shift_counter -მდებარეობს მეორე ოპერანდის ადგილზე და შეიძლება მითითებული იყოს ორი გზით:

1) სტატიკურად,რომელიც გულისხმობს ფიქსირებული მნიშვნელობის დაზუსტებას უშუალო ოპერანდის გამოყენებით;

2) დინამიურად,რაც ნიშნავს shift მრიცხველის მნიშვნელობის შენახვას cl რეესტრში shift ინსტრუქციის შესრულებამდე.

cl რეგისტრის ზომიდან გამომდინარე, ცხადია, რომ shift მრიცხველის მნიშვნელობა შეიძლება მერყეობდეს 0-დან 255-მდე. მაგრამ სინამდვილეში ეს მთლად ასე არ არის. ოპტიმიზაციის მიზნით, მიკროპროცესორი იღებს მხოლოდ მნიშვნელობას ხუთი ყველაზე ნაკლებად მნიშვნელოვანი ბიტიმრიცხველი, ანუ მნიშვნელობა მერყეობს 0-დან 31-მდე.

ყველა shift ბრძანება ადგენს ტარების დროშას იხ.

როდესაც ბიტები გადაინაცვლებს ოპერანდს მიღმა, ისინი ჯერ ურტყამს ტარების დროშას, აყენებს მას შემდეგი ბიტის მნიშვნელობას, რომელიც მთავრდება ოპერანდის გარეთ. სად მიდის ეს ბიტი, ეს დამოკიდებულია ცვლის ინსტრუქციის ტიპზე და პროგრამის ალგორითმზე.

ოპერაციული პრინციპიდან გამომდინარე, shift ბრძანებები შეიძლება დაიყოს ორ ტიპად:

1) ხაზოვანი ცვლის ბრძანებები;

2) ციკლური ცვლის ბრძანებები.

ხაზოვანი ცვლის ბრძანებები

ამ ტიპის ბრძანებები მოიცავს ბრძანებებს, რომლებიც ასრულებენ ცვლას შემდეგი ალგორითმის მიხედვით:

1) შემდეგი „გადასხმული“ ბიტი აყენებს CF დროშას;

2) მეორე ბოლოდან ოპერანდში შეყვანილ ბიტს აქვს მნიშვნელობა 0;

3) როდესაც შემდეგი ბიტი გადაინაცვლებს, ის გადადის CF დროშაში და წინა გადანაცვლებული ბიტის მნიშვნელობა იკარგება! Linear shift ბრძანებები იყოფა ორ ქვეტიპად:

1) ლოგიკური წრფივი ცვლის ბრძანებები;

2) არითმეტიკული წრფივი ცვლა ბრძანებები.

ლოგიკური ხაზოვანი ცვლის ბრძანებები მოიცავს შემდეგს:

1) shl ოპერანდი, shift_counter (Shift Logical Left) – ლოგიკური ცვლა მარცხნივ. ოპერანდის შიგთავსი მარცხნივ გადაინაცვლებს shift_count-ის მნიშვნელობით განსაზღვრული ბიტების რაოდენობის მიხედვით. მარჯვნივ (უმცირესი ბიტის პოზიციაზე) შეყვანილია ნულები;

2) shr ოპერანდი, shift_counter (Shift Logical Right) – ლოგიკური ცვლა მარჯვნივ. ოპერანდის შიგთავსი მარჯვნივ გადაინაცვლებს shift_count-ის მნიშვნელობით განსაზღვრული ბიტების რაოდენობით. მარცხნივ (ყველაზე მნიშვნელოვანი, ნიშნის ბიტის პოზიციაზე) შეყვანილია ნულები.

სურათი 30 გვიჩვენებს, თუ როგორ მუშაობს ეს ბრძანებები.

ბრინჯი. 30. წრფივი ლოგიკური ცვლის ბრძანებების მოქმედების სქემა


არითმეტიკული წრფივი ცვლის ინსტრუქციები განსხვავდება ლოგიკური ცვლის ინსტრუქციებისგან იმით, რომ ისინი მოქმედებენ ოპერანდის ნიშნის ბიტზე სპეციალურად.

1) sal operand, 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) rol operand, shift_counter (როტაცია მარცხნივ) – ციკლური ცვლა მარცხნივ. ოპერანდის შინაარსი გადაინაცვლებს მარცხნივ ოპერანდით განსაზღვრული ბიტების რაოდენობის მიხედვით shift_counter.მარცხნივ გადაადგილებული ბიტები იწერება იმავე ოპერანდზე მარჯვნივ;

2) gog ოპერანდი, shift_counter (როტაცია მარჯვნივ) – ციკლური ცვლა მარჯვნივ. ოპერანდის შიგთავსი მარჯვნივ არის გადატანილი ოპერანდით განსაზღვრული ბიტების რაოდენობით shift_counter.მარჯვნივ გადანაცვლებული ბიტები იწერება იმავე ოპერანდზე მარცხნივ.

ბრინჯი. 32. მარტივი ციკლური ცვლის ბრძანებების მოქმედების სქემა


როგორც ნახაზი 32-დან ჩანს, მარტივი ციკლური ცვლის ინსტრუქციები ასრულებენ ერთ სასარგებლო მოქმედებას მათი მუშაობის დროს, კერძოდ: ციკლურად გადანაცვლებული ბიტი არა მხოლოდ მეორე ბოლოდან გადადის ოპერანდში, არამედ ამავე დროს მისი მნიშვნელობა ხდება მნიშვნელობა. CE დროშა

როტაციის ბრძანებები მეშვეობით carry flag CFგანსხვავდება მარტივი ციკლური ცვლის ბრძანებებისგან იმით, რომ გადატანილი ბიტი დაუყოვნებლივ არ მიდის ოპერანდზე მისი მეორე ბოლოდან, მაგრამ ჯერ იწერება CE-ის ტარების დროშაზე. ამ shift ინსტრუქციის მხოლოდ შემდეგი შესრულება (თუ ვივარაუდებთ, რომ იგი შესრულებულია ციკლში) იწვევს ადრე გადატანილი ბიტის მოთავსებას ოპერანდის მეორე ბოლოში.(სურ. 33).

ციკლური ცვლის ბრძანებებისკენ ტარების დროშის მეშვეობითშემდეგი დაკავშირებულია:

1) rcl ოპერანდი, shift_counter (Rotate through Carry Left) – ციკლური ცვლა მარცხნივ გადატანის გზით.

ოპერანდის შინაარსი გადაინაცვლებს მარცხნივ ოპერანდით განსაზღვრული ბიტების რაოდენობის მიხედვით shift_counter.გადაადგილებული ბიტები მონაცვლეობით ხდება ტარების დროშის მნიშვნელობა შდრ.

2) rcg ოპერანდი, shift_counter (Rotate through Carry Right) – ციკლური ცვლა მარჯვნივ გადატანის გზით.

ოპერანდის შიგთავსი მარჯვნივ არის გადატანილი ოპერანდით განსაზღვრული ბიტების რაოდენობით shift_counter.გადაადგილებული ბიტები მონაცვლეობით ხდება ტარების დროშის CF მნიშვნელობა.

ბრინჯი. 33. Cyclic shift ბრძანებები carry flag CF-ის მეშვეობით


სურათი 33-დან ირკვევა, რომ ტარების დროშის მეშვეობით გადაადგილებისას ჩნდება შუალედური ელემენტი, რომლის დახმარებით, კერძოდ, შესაძლებელია ციკლურად გადანაცვლებული ბიტების შეცვლა, კერძოდ, შეუსაბამობაბიტის თანმიმდევრობა.

ბიტის თანმიმდევრობის შეუსაბამობაში ჩვენ ვგულისხმობთ მოქმედებას, რომელიც საშუალებას გვაძლევს რაიმე გზით მოვახდინოთ ამ თანმიმდევრობის საჭირო მონაკვეთების ლოკალიზება და ამოღება და ჩაწეროთ ისინი სხვა ადგილას.

დამატებითი shift ბრძანებები

Intel-ის უახლესი მიკროპროცესორული მოდელების ბრძანების სისტემა, დაწყებული i80386-დან, შეიცავს დამატებით ცვლის ბრძანებებს, რომლებიც აფართოებს ჩვენ მიერ ადრე განხილულ შესაძლებლობებს. ეს არის shift ბრძანებები ორმაგი სიზუსტე: 1) shld operand_1, operand_2, shift_counter – ორმაგი სიზუსტით მარცხენა ცვლა. shld ბრძანება ახორციელებს ჩანაცვლებას operand_1-ის ბიტების მარცხნივ გადაწევით, ავსებს მის ბიტებს მარჯვნივ ოპერანდ_2-დან გადაადგილებული ბიტების მნიშვნელობებით, ნახ. 34. გადასატანი ბიტების რაოდენობა განისაზღვრება მნიშვნელობით shift_counter, ოპერანდი_2არ იცვლება.


ბრინჯი. 34. shld ბრძანების სქემა


2) shrd operand_1, operand_2, shift_counter – ორმაგი სიზუსტით მარჯვენა ცვლა. ინსტრუქცია ახორციელებს ჩანაცვლებას operand_1-ის ბიტების მარჯვნივ გადაწევით, ავსებს მის ბიტებს მარცხნივ ოპერანდ_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) ნახტომის მისამართის წინ მითითებიდან (ნახტომის ბრძანებაში) მოდიფიკატორი;ამ შემთხვევაში, ნახტომის მისამართი შეიძლება განთავსდეს პირდაპირ ბრძანებაში (პირდაპირი ნახტომი), ან რეესტრში ან მეხსიერების უჯრედში (ირიბი ნახტომი).

მოდიფიკატორიშეუძლია მიიღოს შემდეგი მნიშვნელობები:

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 – შეცვლილია (მნიშვნელობით მეხსიერებიდან - და მხოლოდ მეხსიერებიდან, რეგისტრიდან). ამ მისამართის პირველი სიტყვა/დვორდი წარმოადგენს ოფსეტს და იტვირთება ip/eip-ში; მეორე/მესამე სიტყვა იტვირთება cs-ში. jmp უპირობო ნახტომის ბრძანება

უპირობო ნახტომის ბრძანების სინტაქსია jmp [modifier] jump_address - უპირობო ნახტომი დაბრუნების წერტილის შესახებ ინფორმაციის შენახვის გარეშე.

Jump_address არის ლეიბლის მისამართი ან მეხსიერების არეალის მისამართი, სადაც მდებარეობს ნახტომის მაჩვენებელი.

მთლიანობაში, მიკროპროცესორული ინსტრუქციის სისტემა შეიცავს რამდენიმე jmp უპირობო ნახტომის მანქანის ინსტრუქციის კოდს.

მათი განსხვავებები განისაზღვრება გადასვლის მანძილით და სამიზნე მისამართის დაზუსტების მეთოდით. Დიაპაზონიგადასვლა განისაზღვრება ოპერანდის მდებარეობით გადასვლის_მისამართი.ეს მისამართი შეიძლება იყოს მიმდინარე კოდის სეგმენტში ან სხვა სეგმენტში. პირველ შემთხვევაში, გარდამავალი ეწოდება ინტრასეგმენტური,ან საყვარელ ადამიანებს,მეორეში - ინტერსეგმენტური,ან შორეულიშიდა სეგმენტური ნახტომი ვარაუდობს, რომ იცვლება მხოლოდ eip/ip რეგისტრის შინაარსი.

არსებობს jmp ბრძანების შიდა სეგმენტური გამოყენების სამი ვარიანტი:

1) სწორი მოკლე;

2) სწორი;

3) ირიბი.


პროცედურები

ასამბლეის ენას აქვს რამდენიმე ინსტრუმენტი, რომელიც წყვეტს პროგრამის კოდის სექციების დუბლირების პრობლემას. Ესენი მოიცავს:

1) პროცედურების მექანიზმი;

2) მაკრო ასამბლეერი;

3) შეწყვეტის მექანიზმი.

პროცედურა, რომელსაც ხშირად უწოდებენ ქვეპროგრამა -ეს არის გარკვეული ამოცანის დაშლის (რამდენიმე ნაწილად დაყოფის) ძირითადი ფუნქციური ერთეული. პროცედურა არის ბრძანებების ჯგუფი კონკრეტული ქვეამოცანის გადასაჭრელად და აქვს კონტროლის მოპოვების საშუალება უმაღლესი დონის დავალების გამოძახებისა და კონტროლის ამ პუნქტში დაბრუნების წერტილიდან.

უმარტივეს შემთხვევაში, პროგრამა შეიძლება შედგებოდეს ერთი პროცედურისგან. სხვა სიტყვებით რომ ვთქვათ, პროცედურა შეიძლება განისაზღვროს, როგორც სწორად ფორმატირებული ბრძანებების ნაკრები, რომელიც, როგორც კი აღწერილი იქნება, შეიძლება, საჭიროების შემთხვევაში, პროგრამის ნებისმიერ ადგილას გამოძახება.

ბრძანებების თანმიმდევრობის, როგორც პროცედურის აღწერისთვის, ასამბლეის ენა იყენებს ორ დირექტივას: PROC და ENDP.

პროცედურის აღწერის სინტაქსი ასეთია (სურ. 36).


ბრინჯი. 36. პროგრამაში პროცედურის აღწერის სინტაქსი


სურათი 36-დან ჩანს, რომ პროცედურის სათაურში (PROC დირექტივა) საჭიროა მხოლოდ პროცედურის სახელი. PROC დირექტივის დიდ რაოდენობას შორის [მანძილი] განსაკუთრებულ აღნიშვნას იმსახურებს. ამ ატრიბუტს შეუძლია მიიღოს მნიშვნელობები ახლოს ან შორს და ახასიათებს სხვა კოდის სეგმენტიდან პროცედურის გამოძახების შესაძლებლობას. ნაგულისხმევად, [დისტანცია] ატრიბუტი დაყენებულია ახლოს.

პროცედურა შეიძლება განთავსდეს პროგრამის ნებისმიერ ადგილას, მაგრამ ისე, რომ კონტროლი შემთხვევით არ მოხვდეს მასზე. თუ პროცედურა უბრალოდ ჩასმულია ბრძანებების ზოგად ნაკადში, მაშინ მიკროპროცესორი აღიქვამს პროცედურის ბრძანებებს, როგორც ამ ნაკადის ნაწილად და, შესაბამისად, შეასრულებს პროცედურის ბრძანებებს.

პირობითი ნახტომები

მიკროპროცესორს აქვს 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 შედარების ბრძანება

Compare page ბრძანებას აქვს საინტერესო ოპერაციული პრინციპი. ის აბსოლუტურად იგივეა, რაც გამოკლების ბრძანება - sub operand, operand_2.

page ბრძანება, ისევე როგორც sub ბრძანება, აკლებს ოპერანდებს და აყენებს დროშებს. ერთადერთი რასაც არ აკეთებს არის გამოკლების შედეგის დაწერა პირველი ოპერანდის ადგილზე.

page ბრძანების სინტაქსია 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 რეგისტრთან დაკავშირებული პირობითი ნახტომის ბრძანება უფრო სწორად კლასიფიცირებული იყოს ბრძანებების ამ ჯგუფად.

ამ პირობითი განშტოების ბრძანების სინტაქსია:

1) jcxz jump_label (Jump if ex is Zero) – გადასვლა თუ cx არის ნულოვანი;

2) jecxz jump_label (Jump Equal exx Zero) – ნახტომი თუ exx არის ნული.

ეს ბრძანებები ძალიან მოსახერხებელია ციკლის ორგანიზებისას და სიმბოლოების სტრიქონებთან მუშაობისას.

უნდა აღინიშნოს, რომ არსებობს jcxz/jecxz ბრძანების თანდაყოლილი შეზღუდვა. სხვა პირობითი კონტროლის გადაცემის ინსტრუქციებისგან განსხვავებით, jcxz/jecxz ინსტრუქციას შეუძლია მიმართოს მხოლოდ მოკლე ნახტომებს - -128 ბაიტი ან +127 ბაიტი შემდეგი ინსტრუქციიდან.

ციკლების ორგანიზება

ციკლი, როგორც მოგეხსენებათ, მნიშვნელოვანი ალგორითმული სტრუქტურაა, რომლის გამოყენების გარეშე, ალბათ, არც ერთ პროგრამას არ შეუძლია. თქვენ შეგიძლიათ მოაწყოთ პროგრამის გარკვეული მონაკვეთის ციკლური შესრულება, მაგალითად, პირობითი გადაცემის ბრძანებების ან უპირობო ნახტომის ბრძანების jmp გამოყენებით. ამ ტიპის ციკლური ორგანიზაციით, მის ორგანიზაციასთან დაკავშირებული ყველა ოპერაცია ხორციელდება ხელით. მაგრამ, ისეთი ალგორითმული ელემენტის მნიშვნელობის გათვალისწინებით, როგორიცაა ციკლი, მიკროპროცესორის დეველოპერებმა შეიტანეს სამი ბრძანების ჯგუფი ბრძანების სისტემაში, რათა ხელი შეუწყონ ციკლების დაპროგრამებას. ეს ბრძანებები ასევე იყენებენ ecx/cx რეგისტრს როგორც ციკლის მრიცხველი.

მოდით მივცეთ ამ ბრძანებების მოკლე აღწერა: 1) loop jump_label (Loop) – გაიმეორეთ ციკლი. ბრძანება საშუალებას გაძლევთ მოაწყოთ მარყუჟების მსგავსი მარყუჟები მაღალი დონის ენებზე, ციკლის მრიცხველის ავტომატური შემცირებით. გუნდის ამოცანაა გააკეთოს შემდეგი:

ბ) 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 ბრძანებები შებრუნებულია მათი მუშაობის პრინციპით. ისინი აგრძელებენ მარყუჟის ბრძანების მოქმედებას zf დროშის დამატებით ანალიზით, რაც შესაძლებელს ხდის მარყუჟიდან ადრეული გასვლის ორგანიზებას ამ დროშის ინდიკატორად გამოყენებით.

loop, loope/loopz და loopne/loopnz ბრძანებების მინუსი არის ის, რომ ისინი ახორციელებენ მხოლოდ მოკლე ნახტომებს (-128-დან +127 ბაიტამდე). გრძელ მარყუჟებთან მუშაობისთვის, თქვენ უნდა გამოიყენოთ პირობითი განშტოების ბრძანებები და jmp ბრძანება, ამიტომ შეეცადეთ დაეუფლოთ მარყუჟების ორგანიზების ორივე მეთოდს.

MP მოწყობილობების პროგრამირების საფუძვლები (ლექცია)

ლექციის გეგმა

1. მიკროპროცესორული ბრძანებების კლასიფიკაცია

2.მიმართვის სახეები

3. MP KR580VM80-ის სტრუქტურა და ბრძანების ფორმატები

1. მიკროპროცესორული ბრძანებების კლასიფიკაცია

როგორც უკვე აღვნიშნეთ, MP-ის ფუნდამენტური უპირატესობა არის პროგრამირებადობა. ეს ნიშნავს, რომ MP-ის შეყვანაზე ბრძანებების გამოყენებით შესაძლებელია ოპერაციების სასურველი თანმიმდევრობის უზრუნველყოფა, ე.ი. კონკრეტული ალგორითმის დანერგვა.პრობლემის გადაჭრის ალგორითმი შეიძლება იყოს ისეთივე რთული,როგორც გსურთ, მხოლოდ საჭიროა ეს ალგორითმი დაიყოს ეტაპებად MP-ის ბრძანების სისტემის შესაბამისად.ამიტომ, ბრძანების სისტემა მნიშვნელოვანია არა მხოლოდ იმ თვალსაზრისით, თუ რისი გაკეთება შეუძლია დეპუტატს, არამედ ის, თუ როგორ სრულდება ალგორითმი. ნებისმიერი ბრძანების ან ბრძანებების ჯგუფის არსებობამ ან არარსებობამ შეიძლება მნიშვნელოვნად იმოქმედოს MP-ის არჩევანზე კონკრეტული აპლიკაციისთვის.

MP ბრძანებების კლასიფიკაცია წარმოდგენილია სურათზე 8.

ერთი ბრძანების განსახორციელებლად საჭირო მეხსიერების უჯრედების რაოდენობის მიხედვით, განასხვავებენ ერთი, ორი ან სამი სიტყვის სიგრძის ბრძანებებს. ინსტრუქციები, რომლებიც შედგება ორი ან სამი სიტყვისგან, მოითხოვს, შესაბამისად, მეხსიერების წვდომის ორ ან სამ ციკლს.

ხშირ შემთხვევაში, განსაკუთრებით მსგავს არქიტექტურებთან დეპუტატების შედარებისას, სასარგებლოა ბრძანებების კლასიფიკაცია MP-ის არქიტექტურული მახასიათებლების შესაბამისად.

ფუნქციური თვალსაზრისით, გუნდები იყოფა სამ დიდ ჯგუფად: გადაცემა, მართვა და მონაცემთა დამუშავება. მოდით დეტალურად განვიხილოთ MP-ში გამოყენებული ძირითადი ბრძანებები, ფუნქციური მახასიათებლების მიხედვით კლასიფიკაციის გამოყენებით. ბრძანებების სახელები აღინიშნა რუსული სიტყვებით, რაც მიუთითებს შესრულებული ოპერაციების მნიშვნელობაზე.

მონაცემთა გადაცემის ბრძანებები უზრუნველყოს ინფორმაციის მარტივი გადაცემა დამუშავების ოპერაციების განხორციელების გარეშე. ამ ჯგუფის ბრძანებები იყოფა ბრძანებებად, რომლებიც დაკავშირებულია მეხსიერების წვდომასთან, რეგისტრაციის წვდომის ბრძანებებთან და შეყვანის/გამოსვლის ბრძანებებთან.

მეხსიერების წვდომასთან დაკავშირებული ბრძანებები მოიცავს:

დაიმახსოვრე(WRITE), რომლითაც რეგისტრის შინაარსი იგზავნება მეხსიერების უჯრედში.

ბაიტის ან სიტყვის გადაცემასთან დაკავშირებული ბრძანებები უნდა მიუთითებდეს კონკრეტული რეესტრის რაოდენობას, მეხსიერების უჯრედის მისამართს და საჭიროების შემთხვევაში შენახვის მოდულის რაოდენობას.

რეგისტრებთან წვდომასთან დაკავშირებული ბრძანებები უნდა მიუთითებდეს ინფორმაციის წყაროს და შედეგის რეგისტრის რაოდენობას.მონაცემთა გადაცემის ბრძანებების ეს ქვეჯგუფი მოიცავს ბრძანებებს:

ჩამოტვირთეთ პირდაპირ, რომელშიც რეესტრში იწერება ბრძანების კოდში მითითებული მუდმივი;

წინ, რომლის მეშვეობითაც ერთი რეესტრის შინაარსი იგზავნება მეორეში.

I/O ბრძანებები მოიცავს:

ENTER, რომლითაც შემავალი მოწყობილობის შიგთავსი იგზავნება დეპუტატის შიდა რეესტრში;

დასკვნა, რომელშიც MP-ის შიდა რეესტრის შიგთავსი (ჩვეულებრივ აკუმულატორი) იგზავნება გამომავალ მოწყობილობაზე.

საკონტროლო ბრძანებები , რომელსაც ხშირად უწოდებენ გარდამავალ ბრძანებებს, საშუალებას გაძლევთ შეასრულოთ სხვადასხვა მოქმედებები გარე სიგნალების მნიშვნელობის ან სისტემის შიგნით წარმოქმნილი პირობების შესაბამისად. ყველა საკონტროლო ბრძანება იყოფა უპირობო და პირობით გადასვლის ბრძანებებად.

უპირობო ნახტომის ბრძანებები მოიცავს:

უპირობო ხტომა(BP), რომლის მიხედვითაც BP ბრძანების მისამართის ველის შიგთავსი იწერება პროგრამის მრიცხველზე, ე.ი. უზრუნველყოფს პროგრამაში გადასვლას ბრძანებაში მითითებულ მისამართზე;

უპირობო გადარიცხვა თანხის დაბრუნებით(სუბრუტინაზე გადასვლა), რომლის მიხედვითაც ახალი შინაარსი იწერება პროგრამის მრიცხველში (ქვეპროგრამის პირველი ბრძანების მისამართი), მაგრამ BP ბრძანებისგან განსხვავებით, პროგრამის მრიცხველის მდგომარეობა და ზოგიერთი სხვა რეგისტრი ინახება მეხსიერებაში. . როდესაც ქვეპროგრამა შესრულებულია მისი ბოლო RETURN ბრძანებით, პროგრამის მრიცხველის შინაარსი და ყველა რეგისტრი აღდგება.

პირობითი გადახტომის ინსტრუქციები ამოწმებს რეგისტრის ბიტის, დროშის ფლიპ-ფლოპის ან სხვა პარამეტრის მდგომარეობას. შემოწმების შედეგი განსაზღვრავს, შესრულდება თუ არა გადასვლა. როგორც წესი, გადასვლა ხორციელდება იმ შემთხვევაში, თუ შემოწმების შედეგი ემთხვევა ბრძანებაში მითითებულ მდგომარეობას. საკონტროლო ბრძანებების ეს ქვეჯგუფი მოიცავს:

პირობითი ხტომა(UP) მისამართით. UP ბრძანების კოდი უნდა მიუთითებდეს შემოწმებულ მდგომარეობაზე, რისთვისაც MT იყენებს შედეგის ნულოვან ან არანულოვან მნიშვნელობას, შედეგის დადებით ან უარყოფით ნიშანს, ტარების არსებობას ან არარსებობას. სიგნალები, გადადინება და ა.შ პირობის დაკმაყოფილებისას მისამართების მრიცხველის შიგთავსი იწერება პროგრამის მრიცხველში UE ბრძანების ველები, ე.ი. უზრუნველყოფს პროგრამაში გადასვლას ბრძანებაში მითითებულ მისამართზე. თუ პირობა არ არის დაკმაყოფილებული, კონტროლი გადადის პროგრამის შემდეგ ბრძანებაზე;

პირობითი გადასვლა დაბრუნებით, რომელიც განსხვავდება UNCONDITIONAL JUMP WITH RETURN ბრძანებისგან იმით, რომ ქვეპროგრამაზე გადასვლა ხდება მხოლოდ მითითებული პირობის დაკმაყოფილების შემთხვევაში.

როგორც წესი, MP ბრძანების სისტემა მოიცავს კიდევ რამდენიმე დამხმარე ბრძანებას, რომელიც საშუალებას გაძლევთ აკონტროლოთ რეგისტრების ან ტრიგერების მდგომარეობა, რომლებიც გავლენას ახდენენ პირობითი გადასვლების შესრულებაზე, მაგალითად: SET FLAG, RESET FLAG, SET BATTERY HIGH BIT, RESET BATTERY HIGH BIT და ა.შ. .

მონაცემთა დამუშავების ბრძანებები იყოფა არითმეტიკად და ლოგიკურად. არითმეტიკაში შედის:

დასაკეციორი რეგისტრის ან რეგისტრისა და მეხსიერების უჯრედის შინაარსი;

გამოკლებამეხსიერების უჯრედის ან რეგისტრის შიგთავსიდან, რეესტრის შიგთავსიდან;

1-ით გაზრდა(INCREMENT) მეხსიერების უჯრედის ან რეგისტრის შიგთავსი (დაწყობის მაჩვენებელი, ინდექსის რეგისტრი, აკუმულატორი);

შემცირება 1-ით(DECREMENT) მეხსიერების უჯრედის ან რეგისტრის შინაარსი;

დაამატე CARRY OUT, რომლითაც მიმატება ხორციელდება გადაცემის ტრიგერის მდგომარეობის გათვალისწინებით. ეს აადვილებს დიდი რაოდენობის დამუშავების ორგანიზებას;

სესხის აღრიცხვის გამოკლება;

SHIFTმეხსიერების უჯრედის ან რეგისტრის შინაარსი (ჩვეულებრივ ერთი ბიტი).

ლოგიკური ბრძანებების ქვეჯგუფი მოიცავს შემდეგ ბრძანებებს:

და(LOGICAL MULTIPLY), რომლითაც ხდება შეერთების ოპერაცია ორი რეგისტრის ან მეხსიერების უჯრედისა და რეგისტრის შიგთავსს შორის;

ან(LOGICAL ADDITION), რომლითაც ხდება დისიუქციის ოპერაცია ორი რეგისტრის ან მეხსიერების უჯრედისა და რეგისტრის შიგთავსს შორის;

ინვალიდობა, რომელიც ახორციელებს ორი რეგისტრის ან მეხსიერების უჯრედისა და რეგისტრის შინაარსის ბიტვურ შედარებას;

ინვერსიამეხსიერების უჯრედის ან რეგისტრის შინაარსი.

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 – ბატარეა A.

კოდი 100 არის არაპირდაპირი მეხსიერების მიმართვის ნიშანი H და L რეგისტრებში განთავსებული 16-ბიტიანი მისამართის გამოყენებით. ბრძანებაში ამ კოდის მდებარეობიდან გამომდინარე, მეხსიერების შესაბამის უჯრედზე წვდომა ხდება ოპერანდისთვის ან შედეგების ჩასაწერად. ოპერაცია.

რამდენიმე MP ბრძანება ითვალისწინებს ორმაგი სიგრძის ნომრების დამუშავებას ან გადაცემას. ამ შემთხვევებში, რეგისტრების B და C, D და E, ან H და L წყვილი გაერთიანებულია 16-ბიტიან რეგისტრებში, ნომრებით 00, 01 და 10, შესაბამისად. ბრძანებებში რეგისტრის წყვილების რიცხვი ენიჭება ბიტებს 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 ინსტრუქციის სისტემას აქვს ერთი ბაიტი, ორბაიტი და სამ ბაიტი.

ინფორმაცია იმის შესახებ, თუ როგორ უნდა მიმართოთ ბრძანებას, შეიცავს ბრძანების პირველი ბაიტის opcode-ში.

გამოთვლების დასაჩქარებლად, ზოგიერთი ოპერანდი ინახება RON ბლოკში. ინსტრუქციები, რომლებიც მოქმედებს ამ ოპერანდებზე, იყენებენ მისამართის შემოკლებულ კოდებს (რეგისტრაციის მისამართები).

ეს ბრძანებები საშუალებას გაძლევთ აღმოფხვრათ RAM-ზე წვდომის შედარებით გრძელი ციკლი და ამით მნიშვნელოვნად გაზარდოთ ოპერაციების სიჩქარე. RON-ის შეზღუდული სიმძლავრის გამო და მონაცემთა დიდ მასივთან მუშაობისას გამოიყენება მიმართვის სხვა მეთოდები, რომლებიც საშუალებას აძლევს წვდომას MP-ის გარე მეხსიერებაში მდებარე ოპერანდებზე. ყველაზე გავრცელებული რეგისტრის არაპირდაპირი მისამართია, რომელიც იყენებს HL რეგისტრის წყვილს.

საკონტროლო გადაცემის ბრძანებების ჯგუფში არის ოთხი ტიპის ბრძანება: უპირობო ტოტები, პირობითი განშტოებები, მარყუჟები და წყვეტები .

უპირობო ნახტომის ბრძანებები. მოყვება სამ მნემონიკურ კოდს: JMP (უპირობო ნახტომი), CALL (ქვეპროგრამული ზარი) და RET (ქვეპროგრამიდან დაბრუნება).

JMP ბრძანება საშუალებას გაძლევთ გადახტეთ პროგრამის ნებისმიერ წერტილზე, რომელიც მდებარეობს როგორც მიმდინარე პროგრამის სეგმენტში, ასევე სხვა სეგმენტში. მიმდინარე პროგრამის სეგმენტში გადახტომისას გამოიყენება JMP ინსტრუქციის პირველი სამი ფორმატი.

პირველი ფორმატი უზრუნველყოფს პროგრამის თვითნებურ წერტილზე გადასვლას პროგრამის მიმდინარე სეგმენტში, რისთვისაც 16-ბიტიანი ოფსეტი ემატება IP შინაარსს ორი კომპლემენტის კოდში, რომლის ყველაზე მნიშვნელოვანი ბიტი ხელმოწერილია. მეორე, შემცირებული ფორმატი საშუალებას გაძლევთ გადახვიდეთ პროგრამის წერტილზე არაუმეტეს -128-f-127 მისამართებზე JMP ინსტრუქციიდან. და ბოლოს, მესამე ფორმატი იტვირთება ინსტრუქციის მაჩვენებელს 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 (ნაკლები- ნაკლები). მსგავსი პირობებისთვის, ხელმოუწერელი რიცხვების შედარებისას, შესაბამისად გამოიყენება ასოები A (ზემოთ- ზემოთ) და Ქვევით- ქვეშ). თანასწორობის პირობა აღინიშნება ასოთი 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
JE/JZ ტოლი/ნული 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) პირობა არ არის დაკმაყოფილებული, ამიტომ კონტროლი გადადის შემდეგ ინსტრუქციაზე.

ციკლების ორგანიზების გუნდები.შეყვანილია CPU-ში გამოთვლითი ციკლების შესრულების მოხერხებულობისთვის. ეს მოიცავს შემდეგ მნემონიკურ კოდებს: LOOP (ციკლი, სანამ (CX) არ არის 0-ის ტოლი), LOOPNZ/LOOPNE (ციკლი ნულამდე/არა ტოლი), LOOPZ/LOOPE (ციკლი ნულამდე/ტოლი) და JCXZ (გადახტომა ნული SH-ში). თითოეულ ამ ბრძანებას აქვს ორი ბაიტის ფორმატი, რომლის მეორე ბაიტი განსაზღვრავს 8-ბიტიან ოფსეტს, რომელიც გამოიყენება ნახტომის მოსაწყობად. ეს ოფსეტი განიხილება, როგორც ხელმოწერილი რიცხვი და ხელმოწერილი-გაფართოვდება 16 ბიტამდე, სანამ გადახტომის მისამართი გამოითვლება.

მარყუჟის ბრძანებების გამოყენებით სიმებიანი ელემენტების მანიპულირების ბრძანებებთან ერთად, შეგიძლიათ შექმნათ საკმაოდ რთული სტრიქონების კონვერტაციის პროგრამები. მოდით განვიხილოთ პროგრამის შედგენის მაგალითი თექვსმეტობით რიცხვთა სისტემაში დაწერილი მონაცემების სტრიქონის გადასაყვანად ზოგიერთ კოდში, რომლისთვისაც კონვერტაციის ცხრილი განთავსებულია მეხსიერებაში BX-ში მითითებული საწყისი მისამართიდან, როგორც საჭიროა XLAT-ისთვის ცხრილის კონვერტაციის ბრძანების გამოსაყენებლად. კოდები. დავუშვათ, რომ წყაროს სტრიქონი შეიცავს 80 ელემენტს და მდებარეობს მეხსიერებაში შედარებითი საწყისი მისამართიდან 100, ხოლო შედეგის სტრიქონი უნდა განთავსდეს ფარდობითი მისამართიდან 200. პროგრამა, რომელიც გარდაქმნის წყაროს სტრიქონს შედეგის სტრიქონში, მიმართულების დროშის მნიშვნელობა DF=0, ექნება ფორმა:

MOVSI, 100
MOV DI, 200
MOV CX, 80

1.2-ში აღწერილი XLAT ცხრილის კონვერტაციის ბრძანება აქ გამოიყენება.

შეწყვეტის ბრძანებები.მოიცავს სამ მნემონიკას: INT (შეწყვეტა), INTO (შეწყვეტა გადინებაზე) და IRET (შეწყვეტის დაბრუნება).

შეწყვეტის ბრძანება INT at v=1აქვს ორ ბაიტიანი ფორმატი, რომლის მეორე ბაიტი შეიცავს 8-ბიტიან რიცხვს, რომელიც განსაზღვრავს ტიპს (ტიპი)ან შეფერხების დონე. INT ბრძანებით ტიპიპროცესორი აგრძელებს განსაზღვრული დონის შეფერხების სერვისის პროგრამის შესრულებას და ავტომატურად შესრულდება შეფერხების წერტილში დაბრუნების უზრუნველსაყოფად აუცილებელი მოქმედებები. ეს მოქმედებები შემდეგია: F flags რეგისტრის შიგთავსი იწერება სტეკზე (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-მდე) არის რეზერვირებული რიგი კონკრეტული სიტუაციების დასამუშავებლად, როგორიცაა ნულზე გაყოფის მცდელობა, გადინება და სხვა.

რეზერვირებული დონეების შეფერხებების დამუშავების თავისებურება ის არის, რომ პროცესორი აგრძელებს მათ მომსახურებას, მიუხედავად შეწყვეტის enable flag IF.

ერთი ბაიტიანი IRET ინსტრუქცია მოთავსებულია ყოველი შეფერხების სერვისის რუტინის ბოლოს და უზრუნველყოფს შეწყვეტის დაბრუნებას. ამ ბრძანებით, პროცესორი ამოიღებს IP ინსტრუქციის მაჩვენებლის და CS პროგრამის სეგმენტის მნიშვნელობას დასტადან და ასევე აღადგენს F flags რეგისტრის წინა შიგთავსს (როგორც POPF ბრძანებით). საჭიროების შემთხვევაში, შეწყვეტილი პროგრამის შესაბამისი CPU-ს დარჩენილი რეგისტრების შიგთავსი შეიძლება შეინახოს დასტაზე სერვისის პროგრამაზე გადასვლისას და შემდეგ აღდგეს მისგან დაბრუნებისას სტეკის წვდომის ინსტრუქციების გამოყენებით.

არაპირდაპირი მისამართით

PCHL - გადახტომის მისამართი ინახება HL რეგისტრის წყვილში. როდესაც ის შესრულდება (HL) → კომპიუტერი.

პირობითი ნახტომის ბრძანებები

Jcon @, სადაც con არის მდგომარეობა მნემონური ინგლისური სიტყვიდან condition.

ადრე აღინიშნა, რომ 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 შედის კომპიუტერის ბრძანების მრიცხველში, რომელიც ემსახურება შესაბამისი შეფერხების ვექტორის მისამართს.

ამრიგად, n-ის გარკვეული მნიშვნელობის დაყენებით, შეგიძლიათ შექმნათ რვა შეფერხების ვექტორიდან ერთ-ერთის მისამართი. ეს მისამართები განთავსებულია მისამართების სივრცის 0000H-დან 0038H-მდე ზონაში და გადის 8 ბაიტს, ე.ი. მეხსიერების პირველი 64 უჯრედი მათთვის არის დაცული (8 ვექტორიდან თითოეულს 8 ბაიტი აქვს გამოყოფილი). ამ ზონებში (თითოეული 8 ბაიტი) იწერება მხოლოდ შესაბამის ქვეპროგრამებზე (დამმუშავებლებზე) გადახტომის ბრძანებები, რომლებიც განლაგებულია მეხსიერების სხვა ადგილებში.

შეწყვეტის ქვეპროგრამები (როგორც ჩვეულებრივი ქვეპროგრამები) უნდა დასრულდეს RET ბრძანებით. ამ ბრძანების შესრულებისას ძირითადი პროგრამის ბრძანების მისამართი, რომლის წინაშეც მოხდა შეფერხება, ირჩევა დასტადან და გადადის მისამართების რეესტრში PA, ხოლო 1-ით გაზრდილი მნიშვნელობა შეიტანება პროგრამის მრიცხველში.

EI – შეწყვეტის ჩართვა. ეს ბრძანება მოთავსებულია პროგრამის განყოფილების დასაწყისში, სადაც ჩართულია შეფერხება. ამ ბრძანებით, MP კონტროლის განყოფილებაში შეფერხების ჩართვა დაყენებულია მდგომარეობაზე 1.

DI - შეწყვეტის გამორთვა. ეს ბრძანება მოთავსებულია პროგრამის განყოფილების ბოლოს, სადაც ჩართული იყო შეფერხება და აბრუნებს ტრიგერის მდგომარეობას 0-ზე.

NOP არის "ცარიელი" ბრძანება. გამოტოვებს 4 ზომას. იცვლება მხოლოდ კომპიუტერი.

HLT – გაჩერება. იწვევს პროგრამის შესრულების შეჩერებას და შეჩერებულ მდგომარეობაში შესვლას. MP გათიშულია გარე მისამართებიდან და მონაცემთა ავტობუსებიდან (ანუ, მათი ბუფერები გადადის 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 CB პროცესორის ბლოკ-სქემის კვანძებისა და ელემენტების ურთიერთქმედება პირობითი ნახტომის ოპერაციების შესრულებისას.

პირობითი ნახტომის ოპერაციები



ოპერაციის შესრულება იწყება გარდამავალი პირობის მიზანშეწონილობის შემოწმებით, წინა ოპერაციის შედეგის ატრიბუტის მნიშვნელობის შედარებით ბრძანებაში „ნიღაბი“ კოდთან. თუ პირობა დაკმაყოფილებულია, მაშინ ხდება ბრძანების შესრულებაზე გადასვლა, რომლის მისამართი არის 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 ფორმატში ბრძანების შემდეგ ბრძანების მისამართი, არამედ იმ ბრძანების მისამართი, რომლის წინაშეც მოხდა შეფერხება. NPP სიგნალი დამუშავებულია შემდეგნაირად. ამ სიგნალზე დაყრდნობით, პროცესორის შეფერხების წრე წარმოქმნის შეწყვეტის მისამართს (APr), რომელიც უდრის FUP(i) ფორმატში ნახტომის ინსტრუქციის პირველი უჯრედის მისამართს. ეს მისამართი გადადის მეხსიერებაში გადამრთველისა და ROM მისამართების რეგისტრის მეშვეობით. შეწყვეტის მისამართები შეირჩევა ისე, რომ (i) ბრძანების პირველი უჯრედის მისამართი იყოს ლუწი, ხოლო მეორე უჯრედის (i+1) მისამართი კენტი. მეორე მისამართი მიიღება სკკ-ის მონაწილეობის გარეშე ნულიდან ერთამდე ყველაზე ნაკლებად მნიშვნელოვანი ციფრის შეცვლით. ROM-დან ბრძანების წაკითხვისა და მისი შესრულების პროცესში SchK-ის შიგთავსი (K+1) ინახება AC-ის P1 რეესტრში, ხოლო ბრძანების მეორე უჯრედის შიგთავსი (i+1), რომელიც არის j მისამართით ბრძანებაზე გადასვლის მისამართი, შეყვანილია SchK-ში. სს-ის ახალ შინაარსთან დაკავშირებით მოთხოვნილია ROM-ში. ამრიგად, შემდეგი ინსტრუქციის მისამართი შეფერხების დროს (K+1) ინახება რეესტრში P1. შეფერხების დამუშავების შემდეგ, ეს მისამართი გამოიყენება შეწყვეტილ პროგრამაში დასაბრუნებლად.

33 SV პროცესორის ბლოკ-სქემის კვანძებისა და ელემენტების ურთიერთქმედება პროცესორისა და სისტემის მართვის ოპერაციების შესრულებისას.