Khi so sánh với bộ lệnh ARM 32 bit, bộ chỉ dẫn 16 bit (không nói về phần mở rộng thumb2) mất ít dung lượng hơn vì hướng dẫn bằng một nửa kích thước, nhưng có hiệu suất giảm, nói chung, bởi vì nó cần thêm hướng dẫn để làm điều tương tự như trên cánh tay. Có ít tính năng hơn trong tập lệnh và hầu hết các lệnh chỉ hoạt động trên thanh ghi r0-r7. Táo để Táo so sánh hướng dẫn nhiều hơn để làm điều tương tự là chậm hơn.
Giờ đây, tiện ích mở rộng thumb2 sử dụng các hướng dẫn ngón tay cái chưa được xác định trước đây và tạo hướng dẫn bằng ngón tay cái 32 bit. Hiểu rằng có nhiều hơn một bộ mở rộng thumb2. ARMv6m có thể thêm vài chục. ARMv7m thêm một cái gì đó giống như 150 hướng dẫn để các thiết lập hướng dẫn ngón tay cái, tôi không biết những gì ARMv8 hoặc giữ trong tương lai. Vì vậy, giả sử ARMv7m, họ đã thu hẹp khoảng cách giữa những gì bạn có thể làm trong ngón tay cái và những gì bạn có thể làm trong ARM. Vì vậy, thumb2 là một tập lệnh ARM bị giảm như ngón tay cái, nhưng không phải là giảm. Vì vậy, nó vẫn có thể có thêm hướng dẫn để làm điều tương tự trong thumb2 (giả sử cộng với ngón tay cái) so với ARM làm điều tương tự.
Điều này mang lại một hương vị của vấn đề, một hướng dẫn duy nhất trong cánh tay và ngón tay cái tương đương của nó.
ARM
and r8,r9,r10
THUMB
push {r0,r1}
mov r0,r8
mov r1,r9
and r0,r1
mov r1,r10
and r0,r1
mov r8,r0
pop {r0,r1}
Bây giờ trình biên dịch sẽ không làm điều đó, trình biên dịch sẽ biết là nhắm mục tiêu ngón tay cái và làm việc khác bằng cách chọn các thanh ghi khác. Bạn vẫn phải đăng ký ít hơn và tính năng ít hơn theo hướng dẫn:
mov r0,r1
and r0,r2
Tuy nhiên có hai hướng dẫn/chu kỳ thực hiện để và hai thanh ghi lại với nhau, mà không sửa đổi các toán hạng, và đặt kết quả trong một thanh ghi thứ ba. Thumb2 có ba thanh ghi và vì vậy bạn quay trở lại một lệnh đơn bằng cách sử dụng phần mở rộng thumb2. Và lệnh thumb2 đó cho phép r0-r15 trên bất kỳ ba thanh ghi nào trong đó ngón tay cái bị giới hạn ở r0-r7.
Xem sách hướng dẫn tham khảo kiến trúc ARMv5, dưới mỗi hướng dẫn bằng ngón tay cái nó cho bạn thấy lệnh ARM tương đương. Sau đó đi đến lệnh ARM đó và so sánh những gì bạn có thể làm với lệnh hướng dẫn mà bạn không thể làm với lệnh thumb. Đó là một con đường một chiều các hướng dẫn ngón tay cái (không thumb2) có một mối quan hệ 1-1 với một lệnh ARM.tất cả các hướng dẫn ngón tay cái có hướng dẫn cánh tay tương đương. nhưng không phải tất cả các hướng dẫn cánh tay đều có chỉ dẫn ngón tay cái tương đương. Bạn sẽ có thể thấy từ bài tập này giới hạn trên các trình biên dịch khi sử dụng bộ chỉ dẫn ngón tay cái. Sau đó lấy ARMv7m Architectural Reference Manual và xem bộ hướng dẫn, và so sánh các mã hóa "tất cả các biến thể ngón tay cái" (những cái bao gồm ARMv4T) và những cái được giới hạn trong ARMv6 và/hoặc v7 và xem việc mở rộng các tính năng giữa ngón tay cái và thumb2 cũng như chỉ dẫn thumb2 không có đối tác ngón tay cái. Điều này sẽ làm rõ những gì các trình biên dịch phải làm việc giữa ngón tay cái và thumb2. Sau đó bạn có thể đi xa đến mức so sánh thumb + thumb2 với hướng dẫn ARM đầy đủ (ARMv7 AR là nó được gọi là gì?). Và thấy rằng thumb2 gần gũi hơn với ARM, nhưng bạn mất ví dụ điều kiện trên mọi lệnh, vì vậy thực thi điều kiện trong ngón tay cái trở nên so sánh với phân nhánh trên mã, trong ARM bạn đôi khi có thể có if-then-else mà không phân nhánh ..
Hiệu suất luôn tương đối. Có nhiều trường hợp mã 'thumb' chạy tốt hơn' arm'. Chủ yếu là nếu xe buýt bộ nhớ là một cổ chai. Nói chung, 'thumb' không có nhiều thanh ghi, vì vậy mặc dù tập lệnh nhỏ gọn hơn, với một số thuật toán, nó sẽ phải truy cập bộ nhớ thường xuyên hơn để làm tràn các thanh ghi. –
Nếu tôi có một chiếc xe tải giao hàng A và một chiếc xe tải B có kích thước bằng một nửa A. Nếu số lượng đồ được giao trong xe tải A nhưng lớn hơn đối với xe tải B thì sẽ mất gấp đôi xe tải B gấp đôi cùng một công việc. Ngón tay cái không phải là một nửa hiệu quả như ARM, nó giống như 10-15% hướng dẫn nhiều hơn để làm điều tương tự như ARM. –
Xem thêm: [Gcc -mthumb vs -marm] của Stackoverflow (http://stackoverflow.com/questions/11062936/gcc-mthumb-against-marm) và [giấy Arizona] (http: //www.cs.arizona .edu/~ arvind/papers/lctes02.pdf) trên Thumb và ARM biên dịch có hướng dẫn. –