Bộ đếm Chương Trình

Thanh ghi bộ xử lý cho biết máy tính đang ở đâu trong trình tự chương trình của nó
Mặt trước của máy tính IBM 701 ra mắt năm 1952. Đèn ở giữa hiển thị nội dung của nhiều thanh ghi khác nhau. Bộ đếm lệnh nằm ở góc dưới bên trái.

Bộ đếm chương trình ( PC ), [1] thường được gọi là con trỏ lệnh ( IP ) trong bộ vi xử lý Intel x86 và Itanium , và đôi khi được gọi là thanh ghi địa chỉ lệnh ( IAR ), [2] [1] bộ đếm lệnh , [3] hoặc chỉ là một phần của trình tự lệnh, [4] là một thanh ghi bộ xử lý cho biết vị trí của máy tính trong trình tự chương trình của nó . [5] [nb 1]

Thông thường, PC được tăng lên sau khi lấy một lệnh và giữ địa chỉ bộ nhớ của (" trỏ đến") lệnh tiếp theo sẽ được thực thi. [6] [nb 2]

Bộ xử lý thường lấy lệnh tuần tự từ bộ nhớ, nhưng lệnh chuyển lệnh điều khiển thay đổi trình tự bằng cách đặt một giá trị mới vào PC. Chúng bao gồm các nhánh (đôi khi được gọi là lệnh nhảy), lệnh gọi chương trình con và lệnh trả về . Một lệnh chuyển lệnh có điều kiện dựa trên tính đúng đắn của một số khẳng định cho phép máy tính thực hiện một trình tự khác trong các điều kiện khác nhau.

Một nhánh cung cấp lệnh tiếp theo được lấy từ nơi khác trong bộ nhớ. Một lệnh gọi chương trình con không chỉ rẽ nhánh mà còn lưu nội dung trước đó của PC ở đâu đó. Một lệnh trả về truy xuất nội dung đã lưu của PC và đặt lại vào PC, tiếp tục thực hiện tuần tự với lệnh theo sau lệnh gọi chương trình con.

Triển khai phần cứng

Trong một bộ xử lý trung tâm (CPU) đơn giản, PC là một bộ đếm kỹ thuật số (là nguồn gốc của thuật ngữ "bộ đếm chương trình") có thể là một trong một số thanh ghi phần cứng . Chu kỳ hướng dẫn [8] bắt đầu bằng một lệnh fetch , trong đó CPU đặt giá trị của PC trên bus địa chỉ để gửi đến bộ nhớ. Bộ nhớ phản hồi bằng cách gửi nội dung của vị trí bộ nhớ đó trên bus dữ liệu . (Đây là mô hình máy tính lưu trữ chương trình , trong đó một không gian bộ nhớ duy nhất chứa cả lệnh thực thi và dữ liệu thông thường. [9] ) Sau khi fetch, CPU tiến hành thực thi , thực hiện một số hành động dựa trên nội dung bộ nhớ mà nó thu được. Tại một thời điểm nào đó trong chu kỳ này, PC sẽ được sửa đổi để lệnh tiếp theo được thực thi là một lệnh khác (thường được tăng lên để lệnh tiếp theo là lệnh bắt đầu tại địa chỉ bộ nhớ ngay sau vị trí bộ nhớ cuối cùng của lệnh hiện tại).

Giống như các thanh ghi bộ xử lý khác, PC có thể là một ngân hàng chốt nhị phân, mỗi chốt biểu diễn một bit giá trị của PC. [10] Số bit (chiều rộng của PC) liên quan đến kiến ​​trúc bộ xử lý. Ví dụ, CPU “32 bit” có thể sử dụng 32 bit để có thể định địa chỉ 2 32 đơn vị bộ nhớ. Trên một số bộ xử lý, chiều rộng của bộ đếm chương trình thay vào đó phụ thuộc vào bộ nhớ có thể định địa chỉ; ví dụ, một số bộ vi điều khiển AVR có PC bao quanh sau 12 bit. [11]

Nếu PC là bộ đếm nhị phân, nó có thể tăng lên khi một xung được áp dụng cho đầu vào COUNT UP của nó hoặc CPU có thể tính toán một số giá trị khác và tải nó vào PC bằng một xung đến đầu vào LOAD của nó. [12]

Để xác định lệnh hiện tại, PC có thể được kết hợp với các thanh ghi khác xác định một phân đoạn hoặc trang . Cách tiếp cận này cho phép PC có ít bit hơn bằng cách giả định rằng hầu hết các đơn vị bộ nhớ quan tâm đều nằm trong vùng lân cận hiện tại.

Hậu quả trong kiến ​​trúc máy móc

Việc sử dụng một PC thường tăng dần giả định rằng những gì máy tính làm là thực hiện một chuỗi lệnh tuyến tính thông thường. Một PC như vậy là trung tâm của kiến ​​trúc von Neumann . Do đó, các lập trình viên viết một luồng điều khiển tuần tự ngay cả đối với các thuật toán không nhất thiết phải tuần tự. " Nút thắt von Neumann " kết quả dẫn đến nghiên cứu về điện toán song song [13] , bao gồm các mô hình luồng dữ liệu hoặc không phải von Neumann không sử dụng PC; ví dụ, thay vì chỉ định các bước tuần tự, lập trình viên cấp cao có thể chỉ định chức năng mong muốn và lập trình viên cấp thấp có thể chỉ định chức năng này bằng cách sử dụng logic kết hợp .

Nghiên cứu này cũng dẫn đến những cách giúp CPU thông thường chạy nhanh hơn trên PC, bao gồm:

  • Kỹ thuật xử lý theo đường ống , trong đó phần cứng khác nhau trong CPU thực hiện các giai đoạn khác nhau của nhiều lệnh cùng một lúc.
  • Kiến trúc từ lệnh rất dài (VLIW), trong đó một lệnh duy nhất có thể tạo ra nhiều hiệu ứng.
  • Các kỹ thuật để dự đoán việc thực hiện không theo trình tự và chuẩn bị các hướng dẫn tiếp theo để thực hiện ngoài trình tự thông thường.

Hậu quả trong lập trình cấp cao

Các ngôn ngữ lập trình cấp cao hiện đại vẫn tuân theo mô hình thực thi tuần tự và thực sự, một cách phổ biến để xác định lỗi lập trình là với "thực thi thủ tục" trong đó ngón tay của lập trình viên xác định điểm thực thi như PC sẽ làm. Ngôn ngữ cấp cao về cơ bản là ngôn ngữ máy của máy ảo, [14] quá phức tạp để được xây dựng dưới dạng phần cứng mà thay vào đó được mô phỏng hoặc diễn giải bằng phần mềm.

Tuy nhiên, các mô hình lập trình mới vượt xa lập trình thực thi tuần tự:

  • Khi viết một chương trình đa luồng , lập trình viên có thể viết mỗi luồng dưới dạng một chuỗi lệnh mà không cần chỉ định thời gian của bất kỳ lệnh nào liên quan đến các lệnh trong các luồng khác.
  • Trong lập trình hướng sự kiện , lập trình viên có thể viết chuỗi lệnh để phản hồi các sự kiện mà không cần chỉ định chuỗi tổng thể cho chương trình.
  • Trong lập trình luồng dữ liệu , lập trình viên có thể viết từng phần của đường ống tính toán mà không cần chỉ định thời gian liên quan đến các phần khác.

Xem thêm

  • Dự đoán nhánh
  • Bộ nhớ đệm hướng dẫn
  • Chu kỳ hướng dẫn
  • Đơn vị hướng dẫn
  • Đường ống hướng dẫn
  • Sổ đăng ký hướng dẫn
  • Lịch trình hướng dẫn
  • Từ trạng thái chương trình

Ghi chú

  1. ^ Đối với các bộ xử lý hiện đại, khái niệm "vị trí của nó trong trình tự" quá đơn giản, vì có thể xảy ra hiện tượng song song ở cấp độ lệnh và thực thi không theo thứ tự .
  2. ^ Trong bộ xử lý mà sự gia tăng diễn ra trước khi lấy, PC trỏ đến lệnh hiện tại đang được thực thi. Trong một số bộ xử lý, PC trỏ đến một khoảng cách nào đó xa hơn lệnh hiện tại; ví dụ, trong ARM7 , giá trị của PC mà lập trình viên có thể nhìn thấy trỏ đến lệnh hiện tại và xa hơn khe trễ . [7]

Tài liệu tham khảo

  1. ^ ab Hayes, John P. (1978). Kiến trúc và tổ chức máy tính . McGraw-Hill. trang 245. ISBN 0-07-027363-4.
  2. ^ Mead, Carver ; Conway, Lynn (1980). Giới thiệu về Hệ thống VLSI . Reading, Hoa Kỳ: Addison-Wesley . ISBN 0-201-04358-0.
  3. ^ Nguyên tắc hoạt động, Kiểu 701 và Thiết bị liên quan (PDF) . IBM . 1953.
  4. ^ Harry Katzan (1971), Tổ chức máy tính và hệ thống/370 , Công ty Van Nostrand Reinhold , New York, Hoa Kỳ, LCCCN 72-153191
  5. ^ Bates, Martin (2011). "Hoạt động của vi điều khiển". Vi điều khiển PIC . Elsevier. trang 27–44. doi :10.1016/b978-0-08-096911-4.10002-3. ISBN 978-0-08-096911-4. Bộ đếm chương trình (PC) là một thanh ghi theo dõi trình tự chương trình, bằng cách lưu trữ địa chỉ của lệnh hiện đang được thực thi. Nó được tự động tải bằng số không khi chip được cấp nguồn hoặc đặt lại. Khi mỗi lệnh được thực thi, PC được tăng lên (tăng thêm một) để trỏ đến lệnh tiếp theo.
  6. ^ Silberschatz, Abraham ; Gagne, Greg; Galvin, Peter B. (tháng 4 năm 2018). Operating System Concepts. Hoa Kỳ: Wiley . trang 27, G-29. ISBN 978-1-119-32091-3.
  7. ^ "ARM Developer Suite, Assembler Guide. Phiên bản 1.2". ARM Limited . 2001. Truy cập ngày 18 tháng 10 năm 2019 .
  8. ^ John L. Hennessy và David A. Patterson (1990), Kiến trúc máy tính: một phương pháp tiếp cận định lượng , Nhà xuất bản Morgan Kaufmann , Palo Alto, Hoa Kỳ, ISBN 1-55860-069-8 
  9. ^ B. Randall (1982), Nguồn gốc của máy tính số , Springer-Verlag , Berlin, D
  10. ^ C. Gordon Bell và Allen Newell (1971), Cấu trúc máy tính: Bài đọc và ví dụ , Công ty sách McGraw-Hill , New York, Hoa Kỳ
  11. ^ Arnold, Alfred (2020) [1996, 1989]. "E. Predefined Symbols". Macro Assembler AS – User's Manual. V1.42. Biên dịch bởi Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. tr. Bảng E.3: Predefined Symbols – Phần 3. Lưu trữ bản gốc ngày 28-02-2020 . Truy cập ngày 28-02-2020 . 3.2.12. WRAPMODE […] AS sẽ giả định rằng bộ đếm chương trình của bộ xử lý không có độ dài đầy đủ là 16 bit do kiến ​​trúc cung cấp, mà thay vào đó là độ dài vừa đủ để giải quyết ROM bên trong. Ví dụ, trong trường hợp của AT90S8515 , điều này có nghĩa là 12 bit, tương ứng với 4 Kwords hoặc 8 Kbytes. Giả định này cho phép các nhánh tương đối từ đầu đến cuối ROM và ngược lại, điều này sẽ dẫn đến lỗi ngoài nhánh khi sử dụng số học nghiêm ngặt. Ở đây, chúng hoạt động vì các bit nhớ kết quả từ phép tính địa chỉ đích bị loại bỏ. […] Trong trường hợp AT90S8515 được đề cập ở trên, tùy chọn này thậm chí còn cần thiết vì đây là cách duy nhất để thực hiện lệnh nhảy trực tiếp qua toàn bộ không gian địa chỉ […]
  12. ^ Walker, BS (1967). Giới thiệu về Kỹ thuật máy tính . London, Vương quốc Anh: Nhà xuất bản Đại học London . ISBN 0-340-06831-0.
  13. ^ FB Chambers, DA Duce và GP Jones (1984), Distributed Computing , Academic Press , Orlando, Hoa Kỳ, ISBN 0-12-167350-2 
  14. ^ Douglas Hofstadter (1980), Gödel, Escher, Bach: một bím tóc vàng vĩnh cửu , Penguin Books , Harmondsworth, Vương quốc Anh, ISBN 0-14-005579-7 

Từ khóa » Thanh Ghi đếm Chương Trình