Lệnh nào được sử dụng để nạp thanh ghi cờ vào bộ nhớ?

Lệnh nào được sử dụng để nạp thanh ghi cờ vào bộ nhớ?

Trong kiến trúc ARM, việc truy cập bộ nhớ tuân theo mô hình load-store, nghĩa là chỉ các lệnh load/store (LDR và STR) mới có thể truy cập bộ nhớ. Không có lệnh nào trực tiếp nạp thanh ghi cờ (flag register) vào bộ nhớ. Thanh ghi cờ, thường được gọi là CPSR (Current Program Status Register) hoặc APSR (Application Program Status Register), chứa các bit cờ phản ánh trạng thái của các phép toán gần nhất.

Vậy làm thế nào để lưu trữ giá trị của thanh ghi cờ?

Để lưu trữ thông tin từ thanh ghi cờ, cần thực hiện gián tiếp thông qua việc di chuyển dữ liệu từ CPSR/APSR sang một thanh ghi mục đích chung, sau đó sử dụng lệnh STR để lưu thanh ghi đó vào bộ nhớ.

Ví dụ:

MRS R0, CPSR ; Di chuyển giá trị từ CPSR sang thanh ghi R0
STR R0, [R1] ; Lưu giá trị trong R0 vào địa chỉ bộ nhớ được chứa trong R1

Lệnh MRS (Move to Register from Special register) được sử dụng để chuyển dữ liệu từ một thanh ghi đặc biệt, như CPSR, sang một thanh ghi mục đích chung. Sau đó, lệnh STR lưu giá trị này vào bộ nhớ.

Chi tiết về lệnh LDR và STR:

Bài viết này sẽ tập trung vào việc tìm hiểu sâu hơn về các lệnh LDR và STR, là các lệnh cốt lõi cho việc truy cập bộ nhớ trong kiến trúc ARM. LDR được dùng để nạp dữ liệu từ bộ nhớ vào thanh ghi, trong khi STR được dùng để lưu dữ liệu từ thanh ghi vào bộ nhớ.

Hình thức offset:

Có ba hình thức offset chính được sử dụng với LDR và STR:

  1. Giá trị tức thời (Immediate): Offset là một giá trị hằng số được cộng hoặc trừ vào thanh ghi cơ sở.

    LDR R2, [R0, #4]  ; Nạp dữ liệu từ địa chỉ R0 + 4 vào R2
    STR R3, [R1, #-8] ; Lưu dữ liệu từ R3 vào địa chỉ R1 - 8
  2. Thanh ghi (Register): Offset là giá trị chứa trong một thanh ghi khác.

    LDR R2, [R0, R1]  ; Nạp dữ liệu từ địa chỉ R0 + R1 vào R2
    STR R3, [R1, R2] ; Lưu dữ liệu từ R3 vào địa chỉ R1 + R2
  3. Thanh ghi được chia tỷ lệ (Scaled Register): Offset là giá trị trong một thanh ghi được dịch trái hoặc phải một số bit nhất định.

    LDR R2, [R0, R1, LSL #2] ; Nạp dữ liệu từ địa chỉ R0 + (R1 << 2) vào R2

Chế độ địa chỉ:

Mỗi hình thức offset trên có thể được sử dụng với ba chế độ địa chỉ:

  • Offset: Thanh ghi cơ sở không bị thay đổi.
  • Pre-indexed: Thanh ghi cơ sở được cập nhật với địa chỉ được tính toán trước khi thực hiện lệnh LDR/STR.
  • Post-indexed: Thanh ghi cơ sở được cập nhật với địa chỉ được tính toán sau khi thực hiện lệnh LDR/STR.

Hình ảnh trên minh họa quá trình thực thi lệnh LDR và STR trong bộ nhớ và thanh ghi.

Kết luận:

Việc hiểu rõ cách thức hoạt động của lệnh LDR và STR, cùng với các hình thức offset và chế độ địa chỉ khác nhau, là rất quan trọng để lập trình hiệu quả trên kiến trúc ARM. Mặc dù không thể trực tiếp nạp thanh ghi cờ vào bộ nhớ bằng một lệnh duy nhất, nhưng việc sử dụng kết hợp MRSSTR cho phép lưu trữ giá trị của thanh ghi cờ một cách gián tiếp.

Comments

No comments yet. Why don’t you start the discussion?

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *