Thanh ghi CPU là gì?


27

Câu hỏi này đã làm phiền tôi một thời gian và hôm nay tôi đoán rằng tôi sẽ Google nó. Tôi đã đọc một số thứ về nó và nó có vẻ rất giống với cái mà tôi luôn gọi là bộ đệm của bộ xử lý .

Có sự khác biệt giữa hai hoặc tôi đúng khi tôi nghĩ họ giống nhau? Là một thanh ghi thực sự cần phải ở trong CPU để nó hoạt động?

Theo Wikipedia, một thanh ghi là một vị trí trong CPU nơi bộ nhớ có thể được truy cập và sửa đổi nhanh chóng trước khi được gửi trở lại RAM. Tôi đã hiểu điều này sai hay bộ đệm và đăng ký thực sự giống nhau?


13
Một thanh ghi CPU là một tổ chức theo dõi CPU của bạn cho bạn. NSA là một ví dụ về thanh ghi CPU.
Jimmy Hoffa

3
Bộ nhớ cache cấp 1 của CPU thường được làm bằng cùng loại vật liệu silicon như các thanh ghi. Nó không hoàn toàn nhanh như vậy bởi vì nó cần tra cứu thêm để liên kết các địa chỉ được lưu trong bộ nhớ cache với các vị trí bộ đệm. Nhưng các thanh ghi và bộ nhớ cache chắc chắn là những nơi khác nhau trên chip.
Zan Lynx

3
@JimmyHoffa: Tôi sợ rằng nhận xét của bạn sẽ rất khó hiểu với OP, gây bất lợi cho kiến ​​thức khoa học máy tính.
rwong

3
@rwong Nah Tôi hiểu rồi, tôi nghĩ nó khá buồn cười. : P
Jeroen

1
Và một sự khác biệt khác là kích thước: một tệp đăng ký hiếm khi lớn hơn vài trăm từ, trong khi bộ đệm L1 có thể dễ dàng có dung lượng lớn tới 64k.
SK-logic

Câu trả lời:


61

Chúng không hoàn toàn giống nhau. Các thanh ghi là nơi chứa các giá trị mà CPU thực sự hoạt động. Thiết kế CPU sao cho nó chỉ có thể thực sự sửa đổi hoặc hành động theo một giá trị khi nó nằm trong một thanh ghi. Vì vậy, các thanh ghi có thể hoạt động logic, trong khi bộ nhớ (bao gồm cả bộ đệm) chỉ có thể giữ các giá trị mà CPU đọc và ghi vào.

Hãy tưởng tượng một thợ mộc tại nơi làm việc. Anh ta có một vài vật phẩm trong tay (các thanh ghi) và sau đó, rất gần với bàn làm việc (bộ đệm) của anh ta những thứ anh ta thường xuyên làm việc, nhưng không sử dụng ngay lúc này, và sau đó trong xưởng (bộ nhớ chính) những thứ liên quan đến dự án trong tay nhưng điều đó không đủ quan trọng ngay lập tức trên bàn làm việc.

EDIT: Đây là một lời giải thích đơn giản cho cách đăng ký logic hoạt động.

Hãy tưởng tượng chúng ta có bốn thanh ghi có tên là R1..R4. Nếu bạn biên dịch một câu lệnh trông như thế này:

x = y + z * 3;

trình biên dịch sẽ xuất mã máy mà (khi được tháo rời) trông giống như thế này:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Vì hầu hết các CPU hiện đại đều có các thanh ghi rộng 32 hoặc 64 bit, chúng có thể thực hiện toán trên bất kỳ giá trị nào với kích thước chúng có thể giữ. Họ không cần đăng ký đặc biệt cho các giá trị nhỏ hơn; họ chỉ sử dụng các hướng dẫn ASM đặc biệt để bảo nó chỉ sử dụng một phần của thanh ghi. Và, giống như thợ mộc chỉ có hai tay, các thanh ghi chỉ có thể chứa một lượng nhỏ dữ liệu cùng một lúc, nhưng chúng có thể được sử dụng lại, truyền dữ liệu hoạt động vào và ra, có nghĩa là "rất nhiều thanh ghi" không cuối cùng là cần thiết (Tất nhiên có sẵn rất nhiều cho phép trình biên dịch tạo mã nhanh hơn, tất nhiên, nhưng nó không thực sự cần thiết.)


26
Và nhiều thứ khác trong kho trên khắp thị trấn (đĩa) và những thứ khác mà anh ấy có thể có trong FedEx (mạng) :-)
Dan Pichelman

2
Phụ thuộc rất nhiều vào kiến ​​trúc hệ thống trong câu hỏi.
Kỹ sư thế giới

5
@Binero trong bộ xử lý x86 16 bit, bạn có các thanh ghi có tên Ax, Bx, v.v. Khi họ chuyển sang bộ xử lý 32 bit, họ đã mở rộng các thanh ghi thành EAx 32 bit, EBx, nếu bạn truy cập Axe, bạn sẽ nhận được 16 bit EAx thấp. Trong chế độ 64 bit, họ đặt tên cho các thanh ghi RAx với 32 bit thấp hơn là EAx và 16 bit thấp hơn vẫn là Axe. kiểm tra các sơ đồ này để xem cách bạn đến các phần khác của byte như AH để lấy byte cao của thanh ghi Axe 16 bit: en.wikipedia.org/wiki/X86#Str
struct

2
Và trong các CPU hiện đại, loại này cũng bị hỏng do các thanh ghi chỉ là ánh xạ tạm thời vào ngân hàng lõi của Bộ nhớ thực sự nhanh, thay đổi tùy theo luồng lệnh và mức độ theo dõi của luồng lệnh được dự đoán.
Vatine

2
@MasonWheeler Một lựa chọn tốt về phía bạn.
Vatine

3

Trên thực tế Một thanh ghi thuật ngữ CPU là bộ nhớ nhỏ Được đặt tên bên trong bộ vi xử lý (CPU), các thanh ghi có tên, kích cỡ và chức năng cụ thể khác nhau từ bộ xử lý đến bộ xử lý, ví dụ, nếu lấy 8085 bộ vi xử lý là bộ xử lý 8 bit có 8 bit Thanh ghi -bit (A: Accumulators, B, C, D, E, H và L Thanh ghi và một thanh ghi cờ tất cả đều là 8 bit). Hai thanh ghi 16 bit PC và SP đều có chức năng đặc biệt và các chức năng đi vào hình ảnh trong quá trình lập trình lắp ráp. Ít kiểm soát đăng ký là ngoài lập trình viên.

Nếu bạn lấy một bộ xử lý khác, các thanh ghi sẽ khác nhau, giả sử 8086 là bộ xử lý 16 bit và nó có các thanh ghi AX, BX, CX và DX đều là các thanh ghi 16 bit, PC, SP và Flag.

như bạn đã trích dẫn trong câu hỏi họ phải tăng tốc độ thực thi chương trình và hoạt động như bộ đệm của bộ xử lý nhưng giờ đây kiến ​​trúc bộ xử lý đã thay đổi và họ (Intel) thêm rất nhiều bộ nhớ cache của bộ xử lý gọi bộ nhớ

nhưng có một chút khác biệt giữa bộ đệm của bộ xử lý (CPU) và Bộ đăng ký bộ xử lý (CPU), các thanh ghi thực sự cần thiết cho một số hoạt động đặc biệt như con trỏ bộ nhớ, trạng thái chương trình, v.v. Ví dụ: PC: Bộ đếm chương trình hoạt động con trỏ bộ nhớ trong bộ nhớ chương trình, SP: Con trỏ ngăn xếp hoạt động một con trỏ bộ nhớ trong bộ nhớ ngăn xếp. và Accumulator là bộ đệm và thanh ghi chính để truy cập ALU cho Ops số học ...

Bạn có thể thấy lời giải thích của Mason Wheeler cho exaples


1

Tôi nghĩ rằng nó giúp để nghĩ rằng Đăng ký không phải là bộ nhớ và không nên nghĩ như vậy.

Hãy suy nghĩ giống như OO - Đăng ký là một lớp, không xuất phát từ Bộ nhớ và Bộ nhớ là một lớp không xuất phát từ đăng ký, nhưng lớp Đăng ký có các phương thức (Mã máy Op) để chuyển đổi dữ liệu của nó sang và từ Bộ nhớ. Mặt khác, bộ nhớ không biết gì về Đăng ký và không thể gọi các hành động trên chúng. Kết quả là, tất cả các hoạt động của CPU được thực hiện bởi các thanh ghi, thường truy cập bộ nhớ.

Không có gì lạ khi thấy các thanh ghi chỉ ghi - hầu như không phải là một thuộc tính của bộ nhớ. Cũng có thể giá trị đăng ký thay đổi mà không cần ghi vào nó - một lần nữa, không phải là hành vi bạn mong đợi của bộ nhớ.


Trong I / O được ánh xạ bộ nhớ, các vùng chỉ ghi của "bộ nhớ" không phải là hiếm.
SK-logic

@ SK-logic - Chính xác - tuy nhiên bối cảnh của câu hỏi được hỏi rõ ràng OP nghĩ về bộ nhớ như một thứ bạn đọc và ghi vào. Không cần phải nhầm lẫn anh ấy nhiều hơn :)
mattnz

0

Câu trả lời được cung cấp bởi @Mason Wheeler là chính xác, nhưng tôi nghĩ có thể đặt câu hỏi của bạn dưới một góc nhìn khác. Đánh giá theo câu hỏi của bạn, nó nghe có vẻ với tôi khái niệm bạn cần để hiểu một cách hoàn hảo sự khác biệt giữa bộ đệm và thanh ghi là đường dẫn dữ liệu . Như Mason đã chỉ ra một cách chính xác, logic của CPU (tức là đường dẫn dữ liệu của nó) được thiết kế theo cách mà thông tin bộ nhớ không thể được xử lý trực tiếp bởi CPU và đó là lý do tại sao các thanh ghi tồn tại. Trong thực tế, CPU thậm chí không có khả năng giải mã lệnh hiện tại của chương trình mà nó đang chạy nếu lệnh đó không được tải trong thanh ghi thích hợp trước tiên (thường là lệnh có tên IR, "Thanh ghi lệnh").

Điều này có liên quan đến cách CPU có dây. Không có đường dẫn vật lý giữa bộ nhớ và ALU; tất cả dữ liệu được cung cấp cho ALU phải được đệm bằng cách nào đó trong một số thanh ghi. Nó có thể khác nhau, nhưng mạch cần thiết để kết nối trực tiếp bộ nhớ vào ALU sẽ quá phức tạp: việc điều hòa tất cả giao tiếp giữa bộ nhớ và ALU thông qua tệp đăng ký , được xác định theo đường dẫn dữ liệu đã nói ở trên . Trong thực tế, ngay cả khi một lệnh đã cho chỉ định vị trí bộ nhớ là toán hạng (chế độ địa chỉ được gọi là địa chỉ trực tiếp ), đơn vị dữ liệu tương ứng được tải vào một thanh ghi được gọi là MBR (Thanh ghi bộ nhớ đệm, đôi khi được gọi là MDR, Bộ đệm dữ liệu bộ nhớ ).

Lưu ý rằng từ quan điểm của CPU, sẽ không thực sự quan trọng nếu thông tin (dữ liệu hoặc mã) đến từ bộ nhớ chính hoặc bộ đệm, nhưng cái sau nhanh hơn nhiều. Bộ nhớ cache tồn tại vì lý do hiệu năng, các thanh ghi tồn tại do thiết kế của CPU (nghĩa là do đường dẫn dữ liệu). Các lập trình viên thông minh (thực sự là trình biên dịch) cố gắng tối đa hóa việc sử dụng các thanh ghi để giảm thiểu truy cập bộ nhớ (các thanh ghi nhanh hơn cả bộ nhớ cache hoặc bộ nhớ). Điều này là hợp lý bởi vì thông tin được lưu trữ trong các thanh ghi có xu hướng được sử dụng nhiều lần và trên thực tế, đây là một trong những nguyên tắc của triết lý RISC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.