Duy Nguyen Hoang A fully enthusiastic boy

MIPS Architecture Series – Phần 6: Stack

2 min read

mips sp stack pointer

Credit: https://bh-cookbook.github.io/mips-asm/the-stack-part-4.html

Chào mừng bạn đến với bài viết thứ 6 của loạt bài về Kiến trúc MIPS. Trong phần này, chúng ta sẽ tìm hiểu về ngăn xếp (stack) và cách sử dụng nó trong MIPS.

Giới thiệu về stack

Ngăn xếp (stack) là một cấu trúc dữ liệu được sử dụng trong lập trình để lưu trữ các giá trị tạm thời. Nó hoạt động theo nguyên tắc “last-in, first-out” (LIFO), có nghĩa là phần tử được đưa vào cuối cùng sẽ được lấy ra đầu tiên.

stack

Thanh ghi $sp trong MIPS

Trong MIPS, thanh ghi $sp (stack pointer) được sử dụng để lưu trữ địa chỉ hiện tại của đỉnh ngăn xếp. Khi một giá trị được đưa vào ngăn xếp, giá trị của $sp sẽ giảm đi để trỏ đến vị trí mới nhất trên ngăn xếp.

Cách sử dụng stack trong MIPS với thanh ghi $sp

Để đẩy một giá trị vào ngăn xếp (push), chúng ta sử dụng lệnh sw (store word) để lưu trữ giá trị từ một thanh ghi vào vị trí của $sp hiện tại. Sau đó, giá trị của $sp sẽ được giảm đi 4 byte để trỏ đến vị trí mới.

Để lấy một giá trị từ ngăn xếp (pop), chúng ta sử dụng lệnh lw (load word) để tải giá trị từ vị trí của $sp hiện tại vào một thanh ghi. Sau đó, giá trị của $sp sẽ được tăng lên 4 byte để trỏ đến vị trí mới.

Ví dụ code mẫu

Dưới đây là một ví dụ code mẫu để minh họa cách sử dụng ngăn xếp trong MIPS:

    # Khởi tạo giá trị của $sp
    li $sp, 0x7fffeffc

    # Push giá trị 10 vào ngăn xếp
    sw $t0, 0($sp)
    sub $sp, $sp, 4

    # Push giá trị 20 vào ngăn xếp
    sw $t1, 0($sp)
    sub $sp, $sp, 4

    # Pop giá trị khỏi ngăn xếp và lưu vào $t2
    addi $sp, $sp, 4
    lw $t2, 0($sp)

    # Pop giá trị khỏi ngăn xếp và lưu vào $t3
    addi $sp, $sp, 4
    lw $t3, 0($sp)

Kết luận

Trong phần này, chúng ta đã tìm hiểu về ngăn xếp và cách sử dụng nó trong MIPS. Thanh ghi $sp được sử dụng để trỏ đến vị trí hiện tại trên ngăn xếp và các lệnh swlw được sử dụng để đẩy và lấy giá trị từ ngăn xếp. Việc hiểu về cách hoạt động của ngăn xếp là rất quan trọng để xây dựng các chương trình MIPS hiệu quả và ổn định.

Avatar photo
Duy Nguyen Hoang A fully enthusiastic boy

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *