Tổng quan về giáo trình

Tài liệu bài giảng "Hệ Thống Máy Tính 04 – Bộ Lệnh MIPS 32 bit" là học liệu thuộc khối kiến thức cơ sở ngành trong chương trình đào tạo Cử nhân và Kỹ sư các ngành Khoa học Máy tính, Kỹ thuật Máy tính và Công nghệ Thông tin. Môn học giữ vị trí cầu nối then chốt giữa phần mềm cấp cao và cấu trúc phần cứng vi xử lý, giúp người học hiểu rõ cách thức mã nguồn được chuyển đổi và thực thi trực tiếp trên bộ xử lý trung tâm (CPU).

Mục tiêu học tập của tài liệu tập trung vào việc trang bị cho người học các kiến thức có hệ thống về kiến trúc tập lệnh vi xử lý RISC (Reduced Instruction Set Computer) thông qua mô hình chuẩn MIPS 32-bit. Sau khi hoàn thành nội dung bài giảng, người học có khả năng giải thích nguyên lý thiết kế vi xử lý, mô tả cơ chế hoạt động của tập thanh ghi, phân tích cấu trúc bộ nhớ và thành thạo kỹ năng chuyển đổi các cấu trúc lập trình từ ngôn ngữ bậc cao (như C/C++) sang ngôn ngữ hợp ngữ (Assembly).

Về cấu trúc và cách tiếp cận, giáo trình triển khai bài giảng theo phương pháp từ tổng quan kiến trúc phần cứng đến chi tiết các nhóm lệnh thực thi. Bắt đầu từ nguyên lý cơ bản của CPU, kích thước lệnh, 4 nguyên tắc thiết kế RISC, tài liệu đi sâu vào cấu trúc một chương trình hợp ngữ chuẩn (.data, .text), hệ thống 32 thanh ghi chức năng và phân loại 4 nhóm thao tác cốt lõi: số học, chuyển dịch dữ liệu, luận lý và rẽ nhánh.

Điểm đặc sắc của tài liệu nằm ở tính trực quan và gắn liền với thực nghiệm. Thay vì tiếp cận hoàn toàn bằng lý thuyết trừu tượng, mỗi chỉ thị MIPS đều được đặt trong sự đối chiếu trực tiếp với cú pháp ngôn ngữ C/C++, kèm theo các ví dụ mã nguồn mẫu và phân tích cơ chế xử lý ở cấp độ cổng mạch phần cứng.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung tài liệu được tổ chức thành các chủ đề kiến trúc liên kết chặt chẽ theo tiến trình sư phạm:

  1. Tổng quan về CPU và Kiến trúc tập lệnh (Instruction Set): Trình bày nhiệm vụ cơ bản của CPU trong việc thực thi lệnh; các yếu tố chi phối kích thước lệnh gồm đường truyền bus, cấu trúc bộ nhớ và tốc độ CPU; giải pháp tối ưu hóa thông qua lệnh ngắn gọn thực thi trong một chu kỳ xung nhịp và bộ nhớ đệm (cache). Giới thiệu 4 nguyên tắc thiết kế kiến trúc RISC.
  2. Cấu trúc chương trình hợp ngữ MIPS: Phân tích cú pháp cơ bản của một tập tin hợp ngữ MIPS, bao gồm phân vùng dữ liệu (.data) để khai báo nhãn dữ liệu (data label/biến), phân vùng mã lệnh (.text), khai báo nhãn toàn cục (.globl main), điểm khởi đầu chương trình (main:) và cơ chế thực thi lời gọi hệ thống (syscall) qua chương trình mẫu in chuỗi ký tự (Hello.data).
  3. Tổ chức hệ thống thanh ghi (Registers): Khảo sát 32 thanh ghi đa dụng 32-bit (được đánh số từ $0 đến $31), phân biệt thanh ghi toán hạng lưu giá trị biến ($s0–$s7, số hiệu 16–23) và thanh ghi tạm ($t0–$t7, số hiệu 8–15). Định nghĩa vai trò của các thanh ghi chuyên biệt như thanh ghi số không ($0 hay $zero), thanh ghi assembler ($at, số hiệu 1), thanh ghi dành cho hệ điều hành ($k0–$k1, số hiệu 26–27), cặp thanh ghi nhân/chia ($hi, $lo) và 32 thanh ghi dấu chấm động ($f0–$f31).
  4. Nhóm lệnh phép toán số học (Arithmetic Operations): Giới thiệu cú pháp tổng quát opt opr, opr1, opr2 với quy tắc bắt buộc 3 toán hạng; các thao tác cộng/trừ số nguyên có dấu và không dấu (add, sub, addu, subu), cộng/trừ với hằng số tức thời (addi); phép nhân (mult) và phép chia (div) lưu kết quả trong cặp thanh ghi $hi/$lo cùng các lệnh truy xuất (mfhi, mflo, mthi, mtlo); cơ chế phát hiện và xử lý tràn số (overflow) trên số nguyên bù 2.
  5. Nhóm lệnh di chuyển dữ liệu (Data Transfer Operations): Cơ chế trao đổi dữ liệu giữa bộ nhớ chính (RAM) và thanh ghi CPU; cú pháp lệnh nạp (lw, lb, lh, lbu) và lưu (sw, sb, sh); khái niệm địa chỉ cơ sở (base address) và độ dời (offset); các nguyên tắc tổ chức dữ liệu trong bộ nhớ gồm căn chỉnh địa chỉ (Alignment Restriction - bội số của 4 đối với từ nhớ 32-bit) và thứ tự lưu byte Big Endian; kỹ thuật phân tán thanh ghi (spilling register).
  6. Nhóm lệnh thao tác luận lý và dịch bit (Logical Operations): Các phép toán thao tác trên từng bit (and, or, nor, andi, ori); nguyên lý tối giản cổng logic (tạo phép NOT/XOR thông qua NOR và hằng số 0); các phép dịch bit logic (sll, srl) và dịch bit số học (sra) kèm cơ chế sign-extension.
  7. Nhóm lệnh rẽ nhánh và điều khiển luồng (Branching Operations): Lệnh rẽ nhánh có điều kiện (beq, bne), rẽ nhánh không điều kiện (j); phương pháp ánh xạ các cấu trúc điều khiển rẽ nhánh if-else và vòng lặp từ C sang nhãn lệnh trong MIPS.

Kiến thức nền tảng được xây dựng

Tài liệu thiết lập hệ thống lý thuyết nền tảng vững chắc xoay quanh:

  • 4 nguyên tắc thiết kế phần cứng RISC: (1) Càng đơn giản, càng ổn định; (2) Càng nhỏ gọn, xử lý càng nhanh; (3) Tăng tốc xử lý cho những trường hợp thường xuyên xảy ra; (4) Thiết kế đòi hỏi sự thỏa hiệp tốt.
  • Bản chất của thanh ghi toán hạng: Trong kiến trúc vi xử lý không tồn tại khái niệm biến như ngôn ngữ cấp cao; thanh ghi không mang kiểu dữ liệu nội tại mà kiểu dữ liệu được quyết định hoàn toàn bởi toán tử tác động.
  • Mô hình tổ chức không gian nhớ: Bộ nhớ chính được xem như mảng một chiều lớn đánh địa chỉ theo từng byte; sự khác biệt giữa kiến trúc Big Endian (byte có trọng số lớn nhất lưu tại địa chỉ thấp nhất, đặc trưng của MIPS) và Little Endian (đặc trưng của x86).

Kỹ năng phát triển

Qua việc tiếp thu nội dung tài liệu, người học phát triển các kỹ năng chuyên môn:

  • Kỹ năng kỹ thuật (Technical skills): Viết, đọc hiểu và gỡ lỗi chương trình hợp ngữ MIPS 32-bit; quản lý và sử dụng tối ưu tập thanh ghi hạn chế của phần cứng; lập trình xuất nhập dữ liệu qua lời gọi hệ thống syscall.
  • Kỹ năng phân tích (Analytical skills): Phân tích và chuyển dịch biểu thức đại số phức tạp nhiều toán hạng thành các chuỗi lệnh đơn giản 3 toán hạng; tính toán chính xác độ dời offset khi truy xuất mảng dữ liệu.
  • Kỹ năng thực hành (Practical competencies): Tối ưu hóa số lượng lệnh thực thi, áp dụng kỹ thuật dịch bit thay cho phép nhân/chia lũy thừa của 2, kiểm soát hiện tượng tràn số trong xử lý số học nhị phân bù 2.

Phương pháp giảng dạy và học tập

Tài liệu áp dụng phương pháp sư phạm đối chiếu song song (Comparative Approach) giữa ngôn ngữ lập trình bậc cao (C/C++) và ngôn ngữ hợp ngữ cấp thấp (MIPS Assembly). Phương pháp này giúp người học nhanh chóng liên hệ tư duy giải thuật đã biết với cơ chế vận hành thực tế của phần cứng vi xử lý.

Hệ thống bài tập và nghiên cứu tình huống (case studies) được xây dựng bám sát từng slide bài giảng:

  • Chuyển đổi biểu thức số học: Phân tích việc biên dịch biểu thức $a = b + c + d - e$ thành 3 lệnh add/sub, hoặc biểu thức $f = (g + h) - (i + j)$ sử dụng các thanh ghi tạm $t0, $t1.
  • Thao tác trên mảng dữ liệu: Chuyển đổi mã C truy xuất phần tử mảng $g = h + A[8]$ và $A[12] = h - A[8]$ sang mã MIPS kết hợp giữa lệnh nạp lw, lệnh tính toán add/sub và lệnh lưu sw với độ dời byte tương ứng (32 và 48 byte).
  • Hiện thực hóa cấu trúc điều kiện: Tình huống chuyển đổi mệnh đề if (i == j) f = g + h; else f = g - h; sang cấu trúc lệnh rẽ nhánh beq, câu lệnh rẽ nhánh không điều kiện j và hệ thống nhãn (TrueCase, Fin).

Về phương pháp đánh giá, tài liệu định hướng kiểm tra thông qua khả năng tối ưu số lượng lệnh sử dụng, tính chính xác khi căn chỉnh địa chỉ nhớ (Alignment) và khả năng quản lý tài nguyên thanh ghi khi số lượng biến vượt quá 32 thanh ghi phần cứng (kỹ thuật spilling register). Đối với hoạt động tự học, người học được khuyến nghị lập bảng theo dõi trạng thái thanh ghi qua từng bước thực thi và kiểm tra kết quả trên các công cụ mô phỏng vi xử lý.


Điểm nổi bật và cập nhật

  • Tính ứng dụng thực tế của kiến trúc MIPS: Tài liệu nêu rõ phạm vi ứng dụng thực tế của tập lệnh MIPS trong các hệ máy chơi game kinh điển (PlayStation 1, PlayStation 2, PSP), các thiết bị định tuyến mạng (Routers) và hệ điều hành nhúng (Windows CE), chứng minh giá trị thực tiễn của kiến trúc RISC trong công nghiệp điện tử.
  • Giải pháp tối ưu hóa phần cứng bằng quy ước phần mềm:
    • Phép gán không cần mạch riêng: Sử dụng thanh ghi zero ($0 hay $zero) luôn mang giá trị 0 cố định để thực hiện phép gán thông qua lệnh cộng add $s0, $s1, $zero, giúp tiết kiệm cổng mạch phần cứng.
    • Tối giản cổng logic luận lý: Không cần thiết kế các cổng mạch riêng cho phép NOT hay XOR; kiến trúc MIPS tạo ra phép NOT thông qua biểu thức tương đương A nor 0, tối ưu hóa diện tích vi mạch.
    • Linh hoạt trong kiểm soát tràn số: Cung cấp song song hai bộ lệnh số học có kiểm tra tràn số (add, addi, sub) và không kiểm tra tràn số (addu, addiu, subu), cho phép các trình biên dịch (như C compiler) chủ động lựa chọn để tối đa hóa hiệu năng xử lý.
  • Mở rộng xử lý dấu chấm động: Tích hợp hệ thống 32 thanh ghi chuyên dụng từ $f0 đến $f31 cho các phép toán số thực độ chính xác đơn (single precision) và cơ chế ghép đôi thanh ghi để biểu diễn độ chính xác kép (double precision).

Đối tượng sử dụng giáo trình

  • Sinh viên đại học: Giáo trình được thiết kế phù hợp cho sinh viên năm thứ nhất hoặc năm thứ hai chuyên ngành Khoa học Máy tính, Kỹ thuật Máy tính, Kỹ thuật Phần mềm, Hệ thống Thông tin và Điện tử - Viễn thông đang theo học học phần Hệ thống Máy tính hoặc Kiến trúc Máy tính.
  • Điều kiện tiên quyết (Prerequisites): Người học cần có kiến thức lập trình cơ bản với ngôn ngữ C/C++ (đặc biệt là biến, mảng, con trỏ và cấu trúc rẽ nhánh); hiểu biết về hệ thống số đếm (nhị phân, thập lục phân) và quy tắc biểu diễn số nguyên có dấu dạng bù 2.
  • Giảng viên và cán bộ giảng dạy: Tài liệu là khung tham chiếu chuẩn để biên soạn bài giảng điện tử, thiết kế đề mục bài giảng lý thuyết và xây dựng ngân hàng câu hỏi bài tập thực hành hợp ngữ.
  • Kỹ sư và người tự học: Phục vụ các kỹ sư phần mềm nhúng, kỹ sư phát triển trình biên dịch hoặc người học muốn tìm hiểu sâu về nguyên lý hoạt động của tập lệnh RISC ở cấp độ mã máy.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?
Tài liệu phù hợp với sinh viên ngành Công nghệ Thông tin, Kỹ thuật Máy tính và các kỹ sư phần mềm muốn nắm vững nguyên lý hoạt động của CPU và kiến trúc tập lệnh RISC.

2. Cần kiến thức nền nào để học?
Người học cần nắm vững kỹ thuật lập trình C/C++ cơ bản, hiểu các khái niệm về biến, mảng, con trỏ và kiến thức cơ sở về hệ thống số nhị phân, số bù 2 và hệ thập lục phân (hexadecimal).

3. Điểm khác biệt giữa biến trong ngôn ngữ bậc cao và thanh ghi trong MIPS là gì?
Biến trong ngôn ngữ bậc cao được lưu trong bộ nhớ chính (RAM) và có kiểu dữ liệu xác định. Trong khi đó, thanh ghi MIPS là các ô lưu trữ vật lý 32-bit nằm trực tiếp bên trong CPU, truy xuất với tốc độ rất nhanh, số lượng giới hạn (32 thanh ghi) và kiểu dữ liệu phụ thuộc vào câu lệnh thao tác.

4. Làm sao để tự học hiệu quả?
Người học nên kết hợp đọc lý thuyết với việc tự tay chuyển đổi các đoạn mã C mẫu sang mã MIPS, chú ý phân loại các thanh ghi lưu trữ ($s) và thanh ghi tạm ($t), đồng thời tuân thủ quy tắc căn chỉnh địa chỉ khi thao tác với bộ nhớ.

5. Bộ nhớ trong MIPS được tổ chức theo quy tắc nào?
Bộ nhớ MIPS được tổ chức theo quy tắc căn chỉnh địa chỉ (Alignment Restriction - một từ nhớ 32-bit/4 byte phải bắt đầu tại địa chỉ là bội số của 4) và lưu trữ thứ tự byte theo nguyên tắc Big Endian (byte có trọng số cao nhất nằm ở địa chỉ nhỏ nhất).


Kết luận

Bài giảng "Hệ Thống Máy Tính 04 – Bộ Lệnh MIPS 32 bit" cung cấp hệ thống kiến thức toàn diện và chuẩn mực về kiến trúc tập lệnh RISC. Nội dung tài liệu làm sáng tỏ mối quan hệ giữa cấu trúc phần cứng của CPU, hệ thống thanh ghi và cách thức phần mềm được thực thi ở mức nhị phân.

Lộ trình học tập đề xuất bắt đầu từ việc nắm vững 4 nguyên tắc RISC và bảng thanh ghi, tiếp tục thực hành 4 nhóm lệnh cơ bản (số học, di chuyển dữ liệu, luận lý, rẽ nhánh), và hoàn thiện bằng kỹ năng xây dựng chương trình hợp ngữ hoàn chỉnh với cấu trúc .data, .text và syscall. Người học có thể sử dụng thêm các phần mềm mô phỏng MIPS (như MARS hoặc SPIM) để thực thi và kiểm chứng các ví dụ mã nguồn trong bài giảng.