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?
Trả lời
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ụ lb
và lbu
để đọc một byte duy nhất, lh
và lhu
để đọ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).
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.
- 1. Tại sao bộ nhớ byte địa chỉ và không phải bộ nhớ địa chỉ 4 byte?
- 2. tại sao kích thước bộ nhớ cache mã java lại tăng lên?
- 3. Tại sao địa chỉ bộ nhớ bắt đầu bằng 0x?
- 4. Tại sao địa chỉ ngăn xếp phát triển theo hướng giảm địa chỉ bộ nhớ?
- 5. Phòng chống thực thi bộ nhớ MIPS
- 6. Tại sao apache giữ offsets vào bộ nhớ nơi php-cli giữ địa chỉ bộ nhớ ảo?
- 7. Tại sao bộ nhớ của chương trình này không tăng?
- 8. Tại sao địa chỉ bộ nhớ này có giá trị ngẫu nhiên?
- 9. Tại sao APC lại tăng "Tổng số bộ nhớ cache" cho Bộ nhớ cache của người dùng mặc dù nó có nhiều bộ nhớ khả dụng?
- 10. Tại sao tính chất bộ nhớ cache của địa phương lại có hiệu suất mảng?
- 11. Tại sao malloc (0) trả lại địa chỉ bộ nhớ hợp lệ? Việc sử dụng là gì?
- 12. C địa chỉ # bộ nhớ và biến
- 13. Tại sao thay đổi biến toàn cầu tăng sử dụng bộ nhớ trong Chrome
- 14. Địa chỉ bộ nhớ truy cập trong C#
- 15. MIPS - JAL nhầm lẫn: $ ra = PC + 4 hoặc PC + 8?
- 16. Tăng địa chỉ IP
- 17. Tại sao c không được tăng lên trong đầu ra?
- 18. Truy cập địa chỉ bộ nhớ đối tượng trong ruby ..?
- 19. Tại sao trung bình lại tăng lên dữ liệu. (Số nguyên so với gấp đôi)?
- 20. Làm thế nào để dịch địa chỉ bộ nhớ ảo sang địa chỉ thực?
- 21. Tại sao địa chỉ bộ nhớ ảo cho các tệp nhị phân Linux bắt đầu ở 0x8048000?
- 22. Tại sao lại bất hợp pháp để lấy địa chỉ của một giá trị tạm thời?
- 23. LLDB Break tại địa chỉ
- 24. Tại sao bộ nhớ dư thừa cho chuỗi trong Delphi?
- 25. Tại sao GC.GetTotalMemory() báo cáo phân bổ bộ nhớ lớn?
- 26. Tại sao phân mảnh bộ nhớ lại là vấn đề trên máy tính 64 bit?
- 27. java: Cách sử dụng bộ nhớ vượt quá 4 GB trong 32 bit JVM
- 28. gdb tìm địa chỉ bộ nhớ của số dòng
- 29. địa chỉ bộ nhớ in của biến số Python
- 30. Truy cập dữ liệu tại địa chỉ bộ nhớ với ctypes
Địa chỉ bộ nhớ được tăng lên * 4 *, không * 4 bit *. – Gabe