Mối quan hệ giữa thanh ghi MAR/MDR và MIPS

  1. Mọi người có thể cho mình hỏi thanh ghi MAR (Memory Address Register) hay MDR (Memory Data Register) giống hay khác như thế nào với khái niệm thanh ghi trong ngôn ngữ MIPS không.
    Mình học thì MIPS có 32 thanh ghi (xem thêm ở sheet MIPS reference data), nhưng khi xem giáo trình tham khảo thì CPU có thanh ghi MAR/MDR mà không thuộc 32 thanh ghi trên nên mình không hiểu.

  2. Ngoài ra thì khi mình học, có đụng đến lệnh sw là lệnh chuyển dữ liệu từ thanh ghi ra bộ nhớ. Nhưng mình không hiểu đã chuyển sang "bộ nhớ " thì tại sao ta vẫn đang thực hiện các phép toán trên “thanh ghi”.
    Ví dụ trong slide bài giảng của trường mình có ghi: sw $s1, 20($2) - có nghĩa là:

  • $s1: thanh ghi chứa dữ liệu cần lưu
    
  • Một hằng số (20) và thanh ghi ($s2) được sử dụng để truy cập
    vào bộ nhớ. Tổng số của hằng số và nội dung của thanh ghi
    này là địa chỉ bộ nhớ, nơi mà nội dung đang chứa trong thanh
    ghi $s1 sẽ được lưu vào đây. Mình tự hỏi là tại sao thanh ghi dời đi 20 thì sẽ trở thành địa chỉ bộ nhớ (RAM) được??
    Mình có hiểu sai hay chưa biết chỗ nào không, mong mọi người chỉ dẫn lại giúp mình. Mình cảm ơn m.n.
  1. Hai thanh ghi này dành riêng cho CPU sử dụng nội bộ.
  2. Vì các phép toán MIPS không hoạt động trên ô nhớ, để tập lệnh không trở nên quá phức tạp.
5 Likes
  1. CPU sử dụng nội bộ là sao bạn, mình chưa hiểu lắm.
  2. Cái mình hỏi là cơ chế để từ thanh ghi sang ô nhớ là như nào á?

Bạn có thể nói chi tiết hơn không, do mình đọc giải thích trên stack overfl cũng lú đầu chưa hiểu nữa

Trước tiên bạn có thể cho biết bạn hiểu thanh ghi là gì không? Bạn đã học qua môn Computer Architecture - Kiến trúc máy tính hoặc Micro-controller - Vi điều khiển chưa? Bạn đã học qua kiến trúc nào khác ngoài MIPS chưa? Và bạn đang tham khảo/học theo tài liệu/kiến trúc MIPS nào vậy? (link tài liệu tham khảo chính thức là gì?)

4 Likes

@Stanley00 Mình hiểu thanh ghi là một bộ nhớ dung lượng nhỏ giúp hoạt động đọc/ghi diễn ra nhanh hơn thay vì trực tiếp trên bộ nhớ. Câu hỏi này mình đặt ra khi học được những phần đầu của môn Kiến trúc máy tính. Ví dụ mà mình đưa ra bạn có thể đem search để thấy nó là giáo trình của UIT. Mình không phải chuyên ngành Kỹ thuật máy tính nên cũng chưa đụng những kiến trúc khác. Mong bạn có thể chỉ rõ hơn cho mình hoặc có thể đề xuất một keyword nào đó để tự mình tìm hiểu. Cảm ơn bạn.

Về ý CPU sử dụng nội bộ, theo như định nghĩa này:

Some registers are used internally and cannot be accessed outside the processor, while others are user-accessible.

Và:

Internal registers include the instruction register (IR), memory buffer register (MBR), memory data register (MDR), and memory address register (MAR).

Đó là giải thích cho ý mà @rogp10 đề cập đó cậu :smile: 2 thanh ghi này không nằm trong danh sách 32 thanh ghi mà MIPS hỗ trợ để cậu code, vì nó chỉ được access bởi CPU thôi.

Về ý thứ 2:

Mình tự hỏi là tại sao thanh ghi dời đi 20 thì sẽ trở thành địa chỉ bộ nhớ (RAM) được??

Ý nghĩa của câu lên store word mà cậu đưa là “lưu giá trị từ thanh ghi $s1 vào địa chỉ sau địa chỉ chứa trong thanh ghi $s2 20 byte”.
Ví dụ, giả sử:

  • Thanh ghi $s1 chứa giá trị 0x01 (số 1)
  • Thanh ghi $s2 chứa địa chỉ của mảng array nào đó trên RAM của cậu, với giá trị 0xff02ab02 (tớ made up giá trị này thôi nha :smile:)

Lệnh sw sẽ lưu 1 word từ thanh ghi $s1 (tức giá trị 0x01) vào phần tử thứ 5 của mảng (a.k.a array[4], và 1 word = 4 byte, nếu tớ không nhớ nhầm :sweat_smile:), ở ô nhớ 0xff02ab16.
$s2 chính xác là “con trỏ” trỏ tới 1 mảng (a.k.a reference tới mảng, nếu cậu không quen với C/Cpp), và thao tác ở ví dụ kể trên là cách cậu gán array[4] = 1 đó :smile:

Hope it helps!

4 Likes

Giải thích dễ hiểu thật, trước giờ mình ko hiểu nên cứ tưởng nó khó :)))). Cảm ơn bạn rất nhiều.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?