Danh sách các thanh ghi ARM và mục đích sử dụng
Danh sách các thanh ghi ARM và mục đích sử dụng

Số lượng thanh ghi trong ARM là bao nhiêu?

ARM (Advanced RISC Machines) là một kiến trúc tập lệnh được sử dụng rộng rãi trong các thiết bị điện tử, từ điện thoại thông minh đến máy chủ. Hiểu về số lượng và chức năng của thanh ghi trong ARM là rất quan trọng cho việc lập trình và tối ưu hóa hiệu năng. Vậy ARM có bao nhiêu thanh ghi?

Theo tài liệu tham khảo của ARM, hầu hết các phiên bản ARM đều có 30 thanh ghi đa năng 32-bit. Ngoại lệ duy nhất là các bộ xử lý dựa trên ARMv6-M và ARMv7-M. Trong số này, 16 thanh ghi đầu tiên (r0-r15) có thể truy cập ở chế độ người dùng, trong khi các thanh ghi còn lại chỉ khả dụng trong chế độ đặc quyền (privileged mode). Bài viết này sẽ tập trung vào 16 thanh ghi r0-r15, được chia thành hai nhóm: thanh ghi đa năng và thanh ghi mục đích đặc biệt.

Phân loại thanh ghi ARM

# Bí danh Mục đích sử dụng
R0 Đa năng
R1 Đa năng
R2 Đa năng
R3 Đa năng
R4 Đa năng
R5 Đa năng
R6 Đa năng
R7 Lưu trữ số hiệu Syscall
R8 Đa năng
R9 Đa năng
R10 Đa năng
R11 FP Con trỏ khung (Frame Pointer)
R12 IP Gọi nội bộ thủ tục (Intra Procedural Call)
R13 SP Con trỏ ngăn xếp (Stack Pointer)
R14 LR Thanh ghi liên kết (Link Register)
R15 PC Bộ đếm chương trình (Program Counter)
CPSR Thanh ghi trạng thái chương trình hiện tại (Current Program Status Register)

So sánh thanh ghi ARM và x86

Bảng dưới đây so sánh tương quan giữa các thanh ghi ARM và Intel x86:

ARM Mô tả x86
R0 Đa năng EAX
R1-R5 Đa năng EBX, ECX, EDX, ESI, EDI
R6-R10 Đa năng
R11 (FP) Con trỏ khung EBP
R12 (IP) Gọi nội bộ thủ tục
R13 (SP) Con trỏ ngăn xếp ESP
R14 (LR) Thanh ghi liên kết
R15 (PC) Bộ đếm chương trình EIP
CPSR Thanh ghi trạng thái/Cờ EFLAGS

Chức năng của một số thanh ghi quan trọng

R0-R12: Được sử dụng để lưu trữ các giá trị tạm thời, con trỏ đến bộ nhớ,… R0 có thể được sử dụng như bộ tích lũy trong các phép toán số học hoặc lưu trữ kết quả của hàm được gọi trước đó. R7 lưu trữ số hiệu syscall. R11 hoạt động như con trỏ khung, giúp theo dõi ranh giới trên ngăn xếp. R0-R3 cũng được sử dụng để lưu trữ bốn đối số đầu tiên của một hàm.

R13 (SP): Con trỏ ngăn xếp, trỏ đến đỉnh của ngăn xếp. Ngăn xếp là một vùng nhớ được sử dụng để lưu trữ dữ liệu cụ thể của hàm và được thu hồi khi hàm trả về.

R14 (LR): Khi một hàm được gọi, LR sẽ được cập nhật với địa chỉ bộ nhớ của lệnh tiếp theo sau khi hàm được gọi. Điều này cho phép chương trình quay lại hàm “cha” sau khi hàm “con” hoàn thành.

R15 (PC): Bộ đếm chương trình, tự động tăng lên theo kích thước của lệnh được thực thi. PC lưu trữ địa chỉ của lệnh hiện tại cộng thêm 8 (hai lệnh ARM) trong chế độ ARM và cộng thêm 4 (hai lệnh Thumb) trong chế độ Thumb(v1). Khác với x86, PC trong ARM không trỏ đến lệnh tiếp theo sẽ được thực thi mà trỏ đến lệnh tiếp theo cộng thêm hai lệnh nữa. Điều này là do các bộ xử lý ARM cũ luôn tìm nạp hai lệnh trước lệnh hiện tại để tăng hiệu suất.

Kết luận

Số lượng thanh ghi trong ARM là 30 (32-bit), với 16 thanh ghi (r0-r15) thường được sử dụng nhất trong lập trình. Mỗi thanh ghi có chức năng riêng, đóng vai trò quan trọng trong việc thực thi chương trình và quản lý bộ nhớ. Hiểu rõ về các thanh ghi này sẽ giúp lập trình viên viết mã hiệu quả hơn trên kiến trúc ARM.

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 *