Tengo curiosidad por saber, ¿hay alguna diferencia entre las instrucciones de ensamblaje de los MCU ARM de dos corporaciones diferentes? Por ejemplo entre un Cortex-M3/4 de NXP y TI o ST u otras corporaciones.
Algunos de mis amigos me dicen que no tienen ninguna diferencia. ¿Es eso correcto?
Creo que lo correcto es decir que para una arquitectura determinada, como la arquitectura ARMv7-M del núcleo Cortex-M3, el conjunto de instrucciones es el mismo para todos los procesadores. Sin embargo, el comportamiento de algunas instrucciones puede variar debido a la funcionalidad definida por la implementación (es decir, opcional) en el procesador. Las instrucciones que intentan acceder a capacidades opcionales que no están implementadas en un procesador en particular pueden causar excepciones.
Para encontrar las funciones que pueden definirse mediante la implementación, busque el Manual de referencia de la arquitectura ARM apropiado para IMPLEMENTACIÓN, en todas las mayúsculas.
Los procesadores dentro de la misma familia (por ejemplo, Cortex M3) deben tener las mismas instrucciones, pero las diferentes familias tienen instrucciones diferentes. El ARM original usaba un conjunto de instrucciones de 32 bits, luego apareció una versión que podía cambiar entre el modo "ARM" y el modo "Thumb", y este último implementaba un conjunto más pequeño de instrucciones de 16 bits. Un trabajo que requiere la mitad de las instrucciones Thumb que las instrucciones ARM requerirá aproximadamente la mitad de tiempo para ejecutarse en el modo Thumb que en el modo ARM, pero cabe en 3/4 del espacio.
Muchos procesadores más nuevos no tienen ningún modo de 32 bits, pero algunos pueden combinar dos palabras de instrucción consecutivas de tal manera que produzcan la mayoría de las instrucciones del conjunto de instrucciones ARM de 32 bits, y algunas más. Tenga en cuenta que algunas instrucciones ARM de 32 bits no están implementadas. El efecto neto es que no hay un procesador que pueda realizar todas las instrucciones ARM; diferentes familias ARM tienen diferentes conjuntos de instrucciones disponibles.
Hay una serie de variaciones diferentes en el conjunto de instrucciones ARM (consulte http://en.wikipedia.org/wiki/ARM_architecture para obtener más detalles), y las partes de diferentes proveedores pueden admitir diferentes subconjuntos.
Solo como ejemplo, no hay instrucción de división de enteros en ARMv6; es opcional en algunas versiones de ARMv7, obligatorio en otras; y presente en ARMv8.
Además, un proveedor que fabrica su propia CPU con licencia ARM puede, en principio, agregar o eliminar cualquier instrucción que desee.
Ignacio Vázquez-Abrams
joe hass
Roh
Ignacio Vázquez-Abrams
yippie
JYelton