თარიღი
/   ავტორიSCSA

როგორ სრულდება ბრძანებები პროცესორის მიერ

 რუბრიკა:  კომპიუტერები და სისტემები

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

არსებობს ორნაირი პროცეოსრის არქიტექტურა:

პირველი – RISC (Reduced Instruction Set Computer). კომპიუტერი რომელსაც აქვს მცირე ბრძანებების რიცხვი. ეს სახელი მან მიიღო პირველი კომპიუტერიდან რომლსაც ასევე ბრძანებების მცირე რიცხვი ჰქონდა.

RISC I – ამ არქიტექტურის იდეა დაფუძნებულია იმაზე რომ , პროცესორი ძალიან დიდ დროს ხარჯავს “შებოჭილ” ინსტრუქციებზე (მაგ. გადასვლებზე, ცვლადების მინიჭებაზე და ა.შ.), სხვა ბრძანებები იშვიათად გამოიყენება. RISC – ის არქიტექტორებმა შექმნეს

„აადვილებული“ პროცესორი. შიდა ლოგიკის გაადვილებული ტიპის ხარჯზე საგრძნობლად

შემცირდა ბრძანებების შესრულების დრო და სიჩქარემაც მოიმატა. RISC – ის არქიტექტურა ჰგავს გაწრთვნილ ძაღლთან ურთიერთობას, იცის  სულ რამოდენიმე ბრძანება, მაგრამ მათ ძალიან სწრაფად ასრულებს.

მეორე ტიპის არქიტექტურას აქვს გაცილებით მეტი ბრძანება და მას CISC ეწოდება. Complex Instruction Set Computer) – კომპიუტერი ბრძანებების რთული კომპლექსით. CISC- ის

არქიტექტურა მოიცავს ბრძანებების რთულ ინსტრუქციებს, რომლებიც ასევე იყოფიან

მარტივებზე, CISC არქიტექტურა მოთავსებულია ყველა x86 პროცესორებში. განვიხილოთ ბრძანება <<შევიტანოთ რიცხვი 0x1234 რეგისტრში AX >>. ასემბლერის ენაზე ეს ძალიან მარტივად ჩაიწერება: MOV АХ, 0x1234

უკვე ვიცით, რომ ყველა ბრძანება მანქანის კოდზე ჩაიწერება ორობითი სისტემის სახით, ბრძანება MOV АХ, 0x1234 მანქანის კობზე ჩაიწერება შემდეგნაირად:

0x11хх: წინა ბრძანება

0x1111: 0хВ8, 0x34, 0x12

0x1114: შემდეგი ბრძანება

ჩვენი ბრძანება მდებარეობს 0x1111 მისამართზე, შემდეგი ბრძანება იწყება 3 ბაიტის შემდეგ. მეორე და მესამე ბიაიტი შეიცავს MOV ბრძანების ოპერანდებს. პირველი ნაწილი – 1011 – ეს არის ბრძანება MOV და პროცესორი ნახავს რომ კოდი არის 1011.

პროცესორი იგებს, რომ მის წინ არის ბრძანება MOV. შემდეგი ციფრი 1 ნიშნავს იმას, რომ ოპერანდები იქნება 16 განყოფილებიანი, ბოლო სამი ციფრი ასახავს დანიშნულების რეგისტრს. სამი ნული შეესაბამება რეგისტრ AX-ს (ან AL თუ წინა ბიტი იყო 0-ის ტოლი, და მიანიშნებს, რომ ოპერანდები იქნება 8 განყოფილებიანი).

იმისათვის, რომ  მოხდეს ბრძანებების დეკოდირება, კონტროლიორმა ბრძანება მეხსიერებიდან თავიდან უნდა წაიკითხოს. დავუშვათ, რომ პროცესორმა ეხლახანს დაამთავრა წინა ბრძანების შესრულება და IP (ბრძანებების მიმთითებელი) მოიცავს 0x1111 მნიშვნელობას იქმადე, სანამ დაიწყებს შემდეგი ბრძანების დამუშავებას. პროცესორი მიმართავს მმართველ შინას იმისათვის, რომ გაიგოს საჭიროა თუ არა აპარატული შეწყვეტა. თუ შეწყვეტის მოთხოვნილება არ ყოფილა მაშინ პროცესორი ტვირთავს 0x1111 მეხსიერებაში მყოფ მნიშვნელობას თავის შიდა (მბრძანებელ) რეგისტრში, რომ AX რეგისტრში საჭიროა მოთავსდეს 16 განყოფილებიანი ბრძანება ოპეი შემდეგი ბაიტი 0x1112 და 0x1123 მოიცავს ჩვენ მნიშვნელობას 0x1234.

ახლა პროცესორმა უნდა მიიღოს მეხსიერებიდან ეს ორი ბაიტი. ამისთვის პროცესორი აგზავნის შინაზე საჭირო ბრძანებას და ელოდება სანამ მმართველი შინიდან არ მოიტანს პასუხს ამ ორი ბაიტით. ინფორმაციის მიღების შემდეგ პროცესორი ჩაწერს მათ რეგისტრ AX -ში. ამის შემდეგ პროცესორი გაადიდებს მნიშვნელობას რეგისტრ IP-ში 3 ბაიტით (ჩვენი ბრძანების ზომა 3 ბაიტია) ისევ შეამოწმებს მოსულია თუ არა მოთხოვნა შეწყვეტაზე და თუ არ მოსულა მაშინ ჩატვირთავს ერთ ბაიტს 0x1114 მისამართზე და გააგრძელებს პროგრამის ბრძანებების შესრულებას.

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

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

ოპერანდები

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

მეხსიერების ბლოკზე, ან რეგისტრი. რაც შეეხება განყოფილებებს – არსებობს 32, 16 და 8 განყოფილებიაბი ოპერანდები. თითქმის ყოველი ბრძანება მოითხოვს, რომ ოპერანდები იყოს ერთი ზომის. ბრძანებას MOV AX, 0x1234-ს აქვს 2 ოპერანდი: რეგისტრის ოპერანდი და მნიშვნელობადა ორივე არის 16 ბიტიანი.

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

მეხსიერებაში იმყოფება, იღებს მათ მეხსიერებიდან როგორც მნიშვნელობას.

დოკუმენტაციებში assembly-ზე სხვადასხვა ტიპის ოპერანდები გამოიყოფიან შემდეგი

ობრევიატურებით:

  • reg8 — ნებისმიერი საერთო დანიშნულების 8 განყოფილების მქონე რეგისტრი;
  • regl6 — ნებისმიერი საერთო დანიშნულების 16 განყოფილების მქონე რეგისტრი;
  • reg32 — ნებისმიერი საერთო დანიშნულების 32 განყოფილების მქონე რეგისტრი;
  • m — ოპერანდი შეიძლება იყოს მOთავსებული მეხსიერებაში;
  • imm8 — მარტო 8 განყოფილებიანი მნიშვნელობა;
  • imml6 — მარტო

პუბლიკაციის გაზიარება

Facebook
Twitter
LinkedIn
Telegram

მოგეწონათ სტატია ?

გამოიწერეთ ჩვენი სიახლეები

სხვა სტატიები

I agree to Privacy Policy of Scientific Cyber Security Association