2012-01-12 31 views
8

Lần đầu tiên tôi đi qua hướng dẫn ARM được thiết lập vào những năm 80 và đã không sử dụng nó kể từ đó. Trong tò mò, tôi đã nhìn vào các máy tính bảng và các thiết bị ARM khác và lưu ý rằng các CPU được sản xuất bởi các nhà sản xuất khác nhau.Các nhà sản xuất ARM khác nhau có cung cấp các bộ hướng dẫn khác nhau không?

Tôi đã thực hiện tìm kiếm nhanh nhưng tôi không thể tìm thấy câu lệnh dứt khoát cho dù các chip ARM khác nhau có các bộ lệnh khác nhau hay không.

Tôi cho rằng trong chính chúng giống nhau.

+1

Có lẽ chính xác hơn khi nói các nhà cung cấp chip đã cấp phép lõi ARM. Vì hầu hết các công ty sản xuất chip đều không sản xuất chip, họ thuê ai đó để chế tạo chip, cũng như họ không chế tạo bộ xử lý ARM, họ mua mã từ ARM và thêm nó vào thiết kế chip của họ. –

Trả lời

6

goto http://infocenter.arm.com dọc theo bên trái bên dưới nội dung tìm kiến ​​trúc ARM. Và theo hướng dẫn tham khảo đó. từng là ARM ARM (Cẩm nang tham khảo kiến ​​trúc ARM) nhưng gia đình đã phát triển đến mức họ phải phá vỡ nó, tốt, gia đình.

ARM ARM sẽ hiển thị cho bạn các tập lệnh. Những gì tôi nghĩ rằng họ gọi ARMv5 là ARM ARM cũ. Bạn sẽ tìm thấy các hướng dẫn ARM (32bit) và hướng dẫn ngón tay cái (16 bit). Đối với mỗi lệnh họ liệt kê kiến ​​trúc nào hỗ trợ nó, vì vậy bạn có thể thấy một lệnh ARMv5 không được ARMv4 hỗ trợ (ARMv4 a.k.a ARM7, giống như lõi ARM7TDMI phổ biến). Các hướng dẫn ngón tay cái được hỗ trợ bởi ARMv4T và mới hơn, v.v.

Vì vậy, bộ hướng dẫn lõi 32 bit có thể được sử dụng với các hướng dẫn mới được thêm vào theo thời gian và lỗi/hạn chế được cố định (ldr r0, [ r0] ví dụ), vv

Đơn vị dấu chấm động có một hoặc hai đại tu, hầu hết lõi không có fpu và lõi có fpu không có nghĩa là nhà cung cấp chip đã đưa nó vào chip. fpa là cũ hơn, vfp là mới hơn và bây giờ là thứ neon. Nếu bạn chú ý, tất cả đều rơi vào danh mục hướng dẫn xử lý chung. Nhưng bạn không cần phải biết/sử dụng phiên bản coprocessor họ có bí danh cho tất cả mọi thứ.

Có/là điều này java/jazelle, cùng một câu chuyện một số lõi có thể có nó như là một lựa chọn không có nghĩa là các nhà cung cấp bao gồm nó.

Ít nhất hai bộ mở rộng thumb2 cho bộ chỉ dẫn ngón tay cái. Trước khi mở rộng thumb2, các lệnh thumb đều là 16 bit và có một ánh xạ một đến một lệnh ARM, có nghĩa là bạn chỉ cần một lõi ARM, bộ giải mã dịch từ lệnh nhỏ hơn sang lệnh ARM và nạp dữ liệu đó vào lõi. Tất cả các hướng dẫn là 16 bit trừ nhánh, và nếu bạn nhìn vào mẫu đó, bạn có thể dễ dàng giải mã đó là hai lệnh riêng biệt 16 bit. Tôi có một btw giả lập nếu bạn muốn chơi chỉ với ngón tay cái hướng dẫn http://github.com/dwelch67/thumbulator. Vì vậy, họ quyết định chế tạo bộ vi điều khiển nhỏ hơn, thay vì mọi người chỉ sử dụng ARM7TDMI và tiêu thụ kích cỡ chip và sức mạnh, các bộ xử lý có khả năng thumb2 chỉ có ngón tay cái, chúng không hỗ trợ các lệnh ARM 32 bit, không có lõi ARM được dịch sang, vv cốt lõi mới. ARMv6-M hay Cortex-m0 và Cortex-m1 dùng bộ chỉ dẫn ngón tay cái và thêm một vài hướng dẫn 32 bit để đóng khoảng cách hiệu suất với ARM (ngón tay cái nhỏ hơn có, nhưng hơi chậm hơn ARM nếu bạn biên dịch cùng một mã thành cả hai, chỉ mất 10-20% hướng dẫn từ các thử nghiệm của tôi để sử dụng ngón tay cái). Trong lý thuyết thumb-2 (ARMv7-M) tốt hơn ARM khi nào và ở đâu bạn có thể so sánh chúng. Vì lý do nào đó, Cortex-m3 xuất hiện đầu tiên là ARMv7-M và có một loạt các lệnh thumb2 32 bit được thêm vào bộ chỉ dẫn ngón tay cái. Gần đây tôi đã tính và ARMv6-M được thêm vào như 20, ARMv7-M có 140-150 hướng dẫn được thêm vào bộ chỉ dẫn ngón tay cái cơ bản. thumb2 về cơ bản là độ dài từ biến. Và một lần nữa chỉ chạy trên chuỗi cortex-m.Nhìn vào nó nó gần giống như họ xây dựng lại các lệnh ARM đặt lại dưới ngón tay cái tên. không hoàn toàn nhưng bạn lấy lại rất nhiều cánh tay như hướng dẫn, ba thanh ghi thay vì hai, có thể đạt tới thanh ghi cao hơn và sử dụng ngay lập tức, v.v. Điều này gây ra là mong muốn viết asm biên dịch cho cả ARM và thumb/thumb2. Vì vậy, họ đã đưa ra một cú pháp hợp nhất. bạn có thể viết một lệnh như

add r0,r1 

Nếu lắp ráp cho ngón tay cái, đó là sự hướng dẫn, nếu lắp ráp cho cánh tay họ sẽ chuyển nó sang

add r0,r0,r1 

cho bạn, thay vì bất kỳ lỗi cú pháp. Bạn phải xác định rằng bạn đang sử dụng cú pháp hợp nhất, ít nhất là với bộ lắp ráp gut binutils (gas).

Một bộ tài liệu quan trọng không kém là Tài liệu tham khảo kỹ thuật, cũng tại infocenter.arm.com. Mỗi lõi có một trm, thực sự mỗi vòng của mỗi lõi có một TRM. Ngoài ra các mục chi phí thêm như cache L2 có TRM riêng của họ, cho mỗi rev. Điều quan trọng là phải tìm ra lõi mà nhà cung cấp chip đã mua/sử dụng và nếu có thể sửa đổi (rev 2.0 r2p0, rev 1.0 r1p0, vv) vì có sự khác biệt về lập trình cũng như sai lệch giữa chúng (không tin tưởng Linux là một tham chiếu! , nó là một mớ hỗn độn lớn, mỗi khi tôi nhìn một công ty khác đã hoàn toàn hiểu lầm và misapplied lõi/errata sự khác biệt, nó si một chút của một thảm họa tại thời điểm này). Đôi khi TRM bao gồm thông tin hướng dẫn, hoặc vẽ một bức tranh rõ ràng hơn về những gì mà lõi hỗ trợ và không hỗ trợ. ARM ARM là chung chung họ bao gồm cả gia đình hoặc một số gia đình của lõi, nơi TRM là rất cụ thể cho một lõi. Một ví dụ gây nhầm lẫn giữa ARM ARM và TRM là nhìn ARM ARM, bạn có thể có ấn tượng rằng bạn có thể sử dụng BE-32 hoặc BE-8 chế độ lớn nhất, thực tế là bạn có một hoặc ARMv6 khác và mới hơn là BE-8, thời gian, quen với nó. ARMv5 và ARMv4 là BE-32 hoặc trước ARMv6 được gọi là endian lớn. Tôi rất khuyên bạn KHÔNG nên sử dụng lớn endian trên một cánh tay mặc dù những gì bạn nghĩ rằng bạn có thể đạt được từ nó. đi với chế độ bản địa và bạn sẽ tiết kiệm cho mình một tấn công việc và thất bại. Tôi đề cập đến nó từ kinh nghiệm cá nhân cố gắng tìm ra lý do tại sao các bit được mô tả trong ARM ARM chỉ không hoạt động trong lõi tôi đã sử dụng.

Một lõi 64 bit ở đâu đó trong giai đoạn phát triển, tôi sẽ không ngạc nhiên nếu nó được thực hiện và chỉ tìm kiếm ai đó để kéo kích hoạt và sử dụng nó. Trên thực tế, tài liệu ARMv8 có sẵn, tải xuống ngay bây giờ.

Trả lời ngắn infocenter.arm.com trong Kiến trúc ARM, bạn tìm thấy tất cả các tài liệu mô tả các tập lệnh khác nhau cũng như các cải tiến/bổ sung theo thời gian cho các tập lệnh đó.

+0

Hướng dẫn ngón tay cái "tất cả ngón tay cái" là di động nhất khi chúng hoạt động từ ARMv4T thông qua ít nhất ARMv7. Tôi chưa nhìn vào ARMv8 64 bit. –

2

Có một vài biến thể phổ biến của tập hợp hướng dẫn, UAL, Thumb và Thumb2 là phổ biến nhất. Một số lõi ARM có chứa phần cứng chuyên dụng (chẳng hạn như DSP) cũng mở rộng ngôn ngữ.

2

Nop. không có sự khác biệt (về tập lệnh) giữa nhà sản xuất. Tất cả đều tôn trọng đặc tả ARM.

Một số tiện ích mở rộng là tùy chọn. Đây là trường hợp của NEON.

Nhưng, theo như tôi biết, chỉ Tegra 2 không bao gồm phần mở rộng này. Đây là lý do tại sao, tegra 2 là một bộ xử lý rất xấu để giải mã video (ví dụ).

Các vấn đề liên quan