2012-09-18 51 views
11

Tôi hoàn toàn hiểu một hệ thống 32 hoặc 64 bit có nghĩa là gì. về cơ bản tất cả các thanh ghi hoặc độ dài từ là 32 hoặc 64 bit.Cách một byte bộ nhớ được truy cập bởi CPU trong bộ nhớ 32 bit và bộ xử lý 32 bit

Để đơn giản, chúng ta hãy sử dụng hệ thống 32 bit và nói rằng tôi đang viết một chương trình trong C. nếu tôi khai báo kiểu int nói "int a = 5;" sau đó một vị trí bộ nhớ của một chiều dài từ được dành riêng cho var a. vì vậy khi tôi muốn truy cập nó, tôi có thể làm như vậy bằng cách sử dụng địa chỉ từ cho vị trí bộ nhớ đó.

Nhưng nói tôi có 4 ký tự "char a, b, c, d;" vì nó là một byte, tất cả chúng được đặt trong một từ, vì vậy tôi phải làm gì nếu tôi muốn truy cập char b? (nói rằng bộ nhớ là byte địa chỉ) bây giờ nói b là byte thứ ba trong từ ... . Sau đó, nó đi vào xe buýt như thế nào? is'nt the 3rd byte cứng có dây đến 17th đến 24 dòng trong xe buýt? vậy điều gì sẽ xảy ra với 24 dòng khác khi chỉ b đang được truy cập?

+0

Kiểm tra ngôn ngữ máy, ngôn ngữ lắp ráp, cho CPU cụ thể đó, đặc biệt là các bộ phận về địa chỉ bộ nhớ và thanh ghi CPU. – theglauber

+1

@deepak, Trên nền tảng 32 bit hỗ trợ địa chỉ byte, có thể ghi một byte đơn vào bộ nhớ bằng ba byte khác được ghi (theo các tín hiệu Bật tắt Byte). –

+0

@EricZ, bây giờ điều gì sẽ xảy ra nếu byte tôi muốn là byte thứ hai (bắt đầu đếm từ số không) trong bộ nhớ? thường khi tôi truy cập một từ trong bộ nhớ, byte thứ hai nằm giữa vị trí bit 23 - 16 của thanh ghi. Nhưng trong trường hợp này, nó sẽ phải hạ cánh ở vị trí 7 - 0. Điều này làm tôi bối rối vì tôi nghĩ rằng bit 0 từ bộ nhớ được kết nối với đất lên ở bit 0 của thanh ghi, và bit 31 đến bit 31. Tôi nghĩ nó là tất cả trong mạch, vậy làm thế nào có thể một bit được cho là đất ở vị trí bit 16, đất lên ở vị trí 0 trong khi truy cập byte? – deepak

Trả lời

3

Câu trả lời cho câu hỏi của bạn phần lớn phụ thuộc vào trình biên dịch bạn sử dụng và hoạt động bên trong của CPU, bộ điều khiển bộ nhớ và kiến ​​trúc bộ nhớ (bộ nhớ đệm và bộ nhớ ngoài).
Bạn chỉ có quyền kiểm soát trình biên dịch (giả sử bạn đang sử dụng trình biên dịch C hoặc C++). Trình biên dịch có các chế độ khác nhau cho các trường hợp khi bạn đang sử dụng các biến nhỏ hơn kích thước từ. Có những cờ để tối ưu hóa tốc độ và tối ưu hóa bộ nhớ. Tùy thuộc vào những lá cờ nào được bật, trình biên dịch có thể chọn tạo mã để gói tất cả bốn biến (trong trường hợp của bạn) thành một từ. Hoặc trình biên dịch có thể chọn cấp phát một từ bộ nhớ cho mỗi biến nhưng sử dụng một byte cụ thể để lưu trữ giá trị thực. Cách trình biên dịch sẽ làm điều đó cho mỗi trường hợp là tạo ra các bộ hướng dẫn khác nhau cho CPU. Trong trường hợp thứ hai, nếu biến được đọc từ bộ nhớ thì toàn bộ từ được đặt trên xe buýt và sau đó vào một thanh ghi mục đích chung. Trong trường hợp trước đây, từ được đặt trong thanh ghi nhưng sau đó từ đó có thể được chuyển bit khôn ngoan và các bit khác có thể được zeroed ra bằng cách sử dụng logic và hoạt động. Bằng cách đó, byte phải sẽ nằm trong thanh ghi. Hoặc có thể là kiến ​​trúc CPU hỗ trợ truy cập mức byte trong một từ trong trường hợp đó nó sẽ chỉ là một hoạt động được thực hiện bởi CPU. Cuối cùng, bạn nên hiểu những gì xảy ra bên trong nhưng bạn sẽ không quan tâm nhiều vì tập hợp các lệnh được tạo bởi trình biên dịch sẽ hoạt động chính xác từ quan điểm của bạn. Thời gian duy nhất bạn sẽ quan tâm là khi bạn viết phần mềm hiệu suất nhạy cảm. Trong trường hợp đó, bạn sẽ cần phải biết chi tiết về CPU và bộ nhớ của bạn cũng như các cờ được trình biên dịch hỗ trợ.

3

Nó phụ thuộc vào bộ lắp ráp, nó có thể chọn cung cấp một từ bộ nhớ hoặc một byte.
Vì vậy, ngay bây giờ ngay cả khi bạn có 4 ký tự khác nhau trong từ, điều sẽ xảy ra là tất cả chúng đều được truy cập cùng một lúc, nhưng chỉ một cái bạn yêu cầu được vận hành. tức là tất cả chúng đi vào bộ xử lý từ bộ nhớ, sau đó chỉ có byte bạn muốn được xem xét, các byte khác bị từ chối.

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