2011-08-29 26 views
9

Tôi dường như không hiểu khái niệm về những thứ này, ngay cả với sự trợ giúp của Google và sách giáo khoa trong tay tôi.Giải thích về hướng dẫn tải và lưu trữ đã ký/không ký (MIPS)

Sau khi định dạng (opcode, rs, rt, bù đắp) ...

  • Bạn có đăng ký gia hạn bù đắp trước khi thêm nó vào giá trị của địa chỉ? Hoặc thêm trước khi mở rộng?
  • Trong trường hợp lblbu, điểm khác biệt là gì? Liệu nó cũng tuân theo định nghĩa số học MIPS rằng 'unsigned' chỉ có nghĩa là nó sẽ không báo cáo tràn?
  • Tại sao không lw có phiên bản chưa được ký? Ngay cả các hướng dẫn cửa hàng không có một ...

Trả lời

23

Trong trường hợp của lblbu, sự khác biệt là gì?

Hướng dẫn "byte tải" lblbu tải một byte đơn vào byte ngoài cùng bên phải của thanh ghi 32 bit. Làm thế nào để bạn thiết lập 24 bit trên? Hoạt động không được ký sẽ đặt chúng thành 0; hoạt động đã ký sẽ sign-extend byte đã tải. Ví dụ, giả sử bạn đọc byte 0xFF từ bộ nhớ. lbu sẽ 0 mở rộng giá trị này thành 0x000000FF và diễn giải nó là 255, trong khi lb sẽ ký mở rộng nó thành 0xFFFFFFFF, được hiểu là -1.

Tại sao không lw có phiên bản chưa được ký? Ngay cả hướng dẫn của cửa hàng cũng không có ...

Mặt khác, tải một số lượng 32 bit vào thanh ghi 32 bit, vì vậy không có sự mơ hồ, và không cần phải có một phiên bản đặc biệt đã ký.

Nếu bạn đang lưu trữ ít hơn một từ 32 bit đầy đủ, không có gì bạn có thể làm với các bit phụ trong sổ đăng ký ngoại trừ vứt bỏ chúng đi (bỏ qua chúng).

Liệu nó có tuân theo định nghĩa số học MIPS rằng 'unsigned' chỉ có nghĩa là nó sẽ không báo cáo tràn?

Tôi nghĩ quy ước này chỉ dành cho hướng dẫn cộng và trừ. Đối với các hướng dẫn khác, đã ký/không ký cho biết liệu tiện ích mở rộng đăng ký có được thực hiện hay không.

Bạn có đăng ký gia hạn bù trừ trước khi thêm vào giá trị của địa chỉ không? Hoặc thêm trước khi mở rộng?

Nếu chênh lệch được gia hạn, chỉ cần làm điều đó trước khi thêm nó vào địa chỉ cơ sở. Tôi nghĩ rằng một đánh giá của two's complement số học sẽ làm cho điều này rõ ràng.

+0

Chỉ là câu trả lời tôi đang tìm kiếm, cảm ơn! – Check

+0

Còn lưu byte 'sb' thì sao? Là dấu byte mở rộng hoặc không được mở rộng trước khi lưu trữ? – NoName

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