2012-05-14 30 views
7

Nếu một thứ gì đó được lưu trữ ở 0x1001 0000, điều tiếp theo sẽ được lưu ở 0x1001 0004. Và nếu tôi sửa các bộ nhớ trong kiến ​​trúc 32 bit thì mỗi bit 32 bit. Vì vậy, sẽ 0x1001 0002 điểm đến nửa thứ hai của 32 bit?Tại sao địa chỉ bộ nhớ lại tăng lên 4 trong MIPS?

+0

Địa chỉ bộ nhớ được tăng lên * 4 *, không * 4 bit *. – Gabe

Trả lời

8

Trước hết, địa chỉ bộ nhớ trong kiến ​​trúc MIPS không tăng thêm 4. MIPS sử dụng byte giải quyết, vì vậy bạn có thể giải quyết bất kỳ byte từ bộ nhớ (xem ví dụ lblbu để đọc một byte duy nhất, lhlhu để đọc một một nửa).

Thực tế là nếu bạn đọc các từ có độ dài 32 bit (4 byte, lw), thì hai từ liên tiếp sẽ cách nhau 4 byte. Trong trường hợp này, bạn sẽ thêm 4 vào địa chỉ của từ đầu tiên để lấy địa chỉ của từ tiếp theo.

Bên cạnh đó, nếu bạn đọc các từ bạn phải căn chỉnh chúng theo bội số của 4, nếu không bạn sẽ nhận được một ngoại lệ căn chỉnh. Trong ví dụ của bạn, nếu từ đầu tiên được lưu trữ trong 0x10010000 thì từ tiếp theo sẽ là 0x10010004 và dĩ nhiên nửa đầu/nửa thứ hai sẽ là 0x1001000 và 0x1001002 (thứ tự sẽ phụ thuộc vào endianness của kiến ​​trúc).

0

Dường như bạn đã tự trả lời câu hỏi này! 32 bit tạo 4 byte, vì vậy nếu bạn đang sử dụng đẩy vào một ngăn xếp, trong đó tất cả các phần tử được đẩy như cùng kích thước, mỗi mục tiếp theo sẽ là 4 byte phía trước (hoặc trước) tiếp theo.

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