Oh, ARM và đặt tên ngớ ngẩn của họ ...
Đó là một quan niệm sai lầm phổ biến, nhưng chính thức không có những điều như một "Thumb-2 tập lệnh".
Bỏ qua ARMv8 (nơi mọi thứ được đổi tên và AArch64 làm phức tạp mọi thứ), từ ARMv4T tới ARMv7-A có hai bộ hướng dẫn : ARM và Thumb. Cả hai đều là "32-bit" theo nghĩa là chúng hoạt động trên dữ liệu lên tới 32-bit trên các thanh ghi rộng 32 bit với các địa chỉ 32 bit. Trong thực tế, khi chúng chồng chéo chúng đại diện cho cùng một hướng dẫn chính xác - nó chỉ là hướng dẫn mã hóa khác biệt, và CPU có hiệu quả chỉ có hai đầu trước giải mã khác nhau cho đường ống mà nó có thể chuyển đổi giữa. Để rõ ràng, bây giờ tôi sẽ cố ý tránh các thuật ngữ "32-bit" và "16-bit" ...
Hướng dẫn ARM có mã hóa 4 byte có chiều rộng cố định yêu cầu căn chỉnh 4 byte. Hướng dẫn ngón tay cái có độ dài thay đổi (2 hoặc 4 byte, bây giờ được gọi là mã hóa "hẹp" và "rộng") yêu cầu liên kết 2 byte - hầu hết các hướng dẫn đều có mã hóa 2 byte, nhưng bl
và blx
luôn có mã hóa 4 byte *. Bit thực sự khó hiểu đến trong ARMv6T2, giới thiệu "Công nghệ Thumb-2". Thumb-2 bao gồm không chỉ bổ sung thêm hướng dẫn cho Thumb (chủ yếu với mã hóa 4 byte) để mang nó gần như ngang bằng với ARM, mà còn mở rộng trạng thái thực thi để cho phép thực hiện có điều kiện hầu hết các lệnh Thumb và cuối cùng giới thiệu toàn bộ cú pháp lắp ráp mới (UAL, "Unified Assembly Language") đã thay thế các cú pháp ARM và Thumb riêng biệt trước đó và cho phép viết mã một lần và lắp ráp nó vào một trong hai lệnh mà không sửa đổi. Các cấu trúc Cortex-M chỉ thực hiện bộ lệnh Thumb - ARMv7-M (Cortex-M3/M4/M7) hỗ trợ hầu hết các "Công nghệ Thumb-2", bao gồm thực thi và mã hóa có điều kiện cho các hướng dẫn VFP, trong khi ARMv6- M (Cortex-M0/M0 +) chỉ sử dụng Thumb-2 dưới dạng một số ít các lệnh hệ thống 4 byte.
Như vậy, mã hóa 4-byte mới (và những bổ sung sau này trong các phiên bản ARMv7) vẫn còn hướng dẫn Thumb - những "Thumb-2" khía cạnh của họ là họ thể có 4-byte mã hóa, và rằng họ có thể (chủ yếu) được thực thi theo điều kiện thông qua it
(và, tôi cho rằng, kinh nghiệm của họ chỉ được định nghĩa trong UAL).
* Trước ARMv6T2, nó thực sự là một chi tiết triển khai phức tạp về việc liệu bl
(hoặc blx
) đã được thực hiện dưới dạng lệnh 4 byte hay là một chỉ dẫn 2 byte. Định nghĩa kiến trúc là thứ hai, nhưng vì chúng chỉ có thể được thực hiện như một cặp theo thứ tự nên có rất ít mất (trừ khả năng ngắt quãng nửa chừng) bằng cách kết hợp chúng thành một lệnh duy nhất cho các lý do hiệu suất.ARMv6T2 chỉ định nghĩa lại mọi thứ liên quan đến việc thực hiện lệnh đơn hợp nhất
* Tôi có thể nói rằng Thumb (32-bit) giống với hướng dẫn ARM cũng là 32-bit không? * Câu trả lời là không. Thumb2 là sự kết hợp của 32/16bits với các mã hóa khác nhau so với ARM 32 bit thẳng. –