
Описывается система команд ядра M0. Интересно провести различия между системой команд M0 и, например, другими ядрами ARM, и различия между M0 и RISC-V. Система M0 несколько урезана по функциям по сравнению с обычным набором команд ARM, например, в ней нет операций сдвига второго операнда в ряде команд. Например, в "полноценном" ARM можно выполнить команду ADD r3, r0, r1, LSL#2, которая выполняет сначала сдвиг r1 на 2 бита влево, затем сложение с r0 и запись результата в r3. В M0 (и в M0+) это придётся делать в две команды, сначала LSL, потом ADD. Но даже M0 поддерживает разные довольно сложные команды, например, REV и REV16, которые меняют порядок байт в слове. В RISC-V таких инструкций нет.
То есть, казалось бы, целью разработки M0 было создание микроконтроллера с минимальной площадью ядра, но при этом в нём есть такие не очень нужные в повседневной жизни команды. Зачем, не очень понятно.