2012-04-11 59 views
5

Nếu tôi hiểu chính xác điều này, bộ đếm chương trình trỏ đến địa chỉ của lệnh được thực hiện và trong hầu hết các trường hợp, bạn thêm bốn vào bộ đếm chương trình để chuyển sang địa chỉ lệnh tiếp theo. Nhưng nói rằng bạn có một bộ đếm chương trình trỏ đến một từ (ví dụ: từ 15) trong bộ nhớ và bạn muốn chuyển sang lệnh tiếp theo, bạn có giả sử thêm 4 trực tiếp vào 15 để có được lệnh tiếp theo không ?? Mọi giải thích sẽ được đánh giá làBộ đếm chương trình?

Trả lời

6

Điều đó được gọi là con trỏ chỉ dẫn. Khi bộ xử lý giải mã lệnh hiện tại, nó tìm thấy bao nhiêu byte nó chiếm và biết bao nhiêu để thêm vào giá trị con trỏ lệnh hiện tại để tiến tới lệnh tiếp theo để khi lệnh hiện hành được thực thi, bộ xử lý biết phải làm gì tiếp theo. Vì vậy, ví dụ bộ xử lý bắt đầu với con trỏ lệnh lưu trữ giá trị 15 như trong ví dụ của bạn - có vẻ như điều gì xảy ra ở địa chỉ đó, sẽ có một lệnh chiếm 5 byte, không thành vấn đề - nó thêm 5 vào giá trị hiện tại và điều này mang lại 20 và do đó con trỏ chỉ dẫn lưu trữ giá trị 20 và bộ xử lý sau đó thực hiện lệnh hiện tại.

+1

Ví dụ của bạn có ý nghĩa, nhưng PC + 4 đến từ đâu nếu bạn thêm gì phụ thuộc vào những gì tại địa chỉ đó? – Ockham

+1

@ user28694: Điều này sẽ phụ thuộc vào bộ xử lý. Một số bộ xử lý có lệnh hướng dẫn trong đó tất cả các lệnh có cùng độ dài, vì vậy chúng có thể +4 vô điều kiện. Một số bộ vi xử lý sẽ có hướng dẫn độ dài thay đổi và chúng sẽ quyết định lệnh nào mà chúng xử lý bằng cách sử dụng các byte đầu tiên của chính lệnh đó. – sharptooth

+0

Không phải [Hướng dẫn MIPS tất cả 32-bit dài] (http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –

2

Bạn không bao giờ trực tiếp cập nhật chương trình - CPU thực hiện điều đó cho bạn bằng cách thực hiện chương trình của bạn. Là lập trình viên, bạn thao tác truy cập chương trình bằng cách thực hiện các lệnh nhảy khác nhau (có điều kiện, vô điều kiện, nhảy tới chương trình con, v.v.) Một trường hợp cụ thể khi bạn cần thêm bù đắp vào bộ đếm chương trình là khi bạn chi nhánh mã độc lập vị trí. Tuy nhiên, ngay cả trong trường hợp này, bạn không thêm kích thước của lệnh vào bộ đếm chương trình: thay vào đó, bạn cung cấp độ lệch của vị trí mà bạn muốn nhảy bằng cách thực thi "branch to relative address".

+0

Làm thế nào về khi chúng tôi đang viết một bộ nạp khởi động sẽ nhảy đến mã ứng dụng nằm ở địa chỉ tuyệt đối 0x4000? Trong trường hợp này, chúng tôi sẽ trực tiếp thay đổi bộ đếm chương trình thành địa chỉ tuyệt đối. – eepty

+0

@eepty Đó là những gì câu thứ hai nói: bạn đang làm nó với một hướng dẫn nhảy, không phải với một hướng dẫn cài đặt đăng ký. – dasblinkenlight

Các vấn đề liên quan