assembly embedded x86 arm

assembly - Diferencias entre el conjunto ARM y el conjunto x86



embedded (2)

Ahora voy a aprender ARM Assembly, para desarrollar para mi Windows Mobile 5 iPAQ, pero tengo algunas preguntas:

  • ¿Cuáles son las principales diferencias entre el conjunto ARM y el ensamblaje x86?
    • ¿Hay alguna diferencia en las interrupciones (nuevos tipos)?
      • ¿Cuáles son ellos y cuál es el significado de ellos?
    • ¿El mejor ensamblador para compilar y dónde obtenerlo?
  • ¿Dónde puedo encontrar algunos buenos recursos?

Principales diferencias

  • ARM es una arquitectura de estilo RISC: las instrucciones tienen un tamaño regular (32 bits para ARM estándar y 16 bits para modo Thumb, aunque Thumb tiene algunas instrucciones que mastican 2 "slots" de instrucciones)

  • hasta al menos ARM arquitectura v5 (no estoy seguro de lo que v6 hace), el modelo de interrupción en ARM es muy diferente que en Intel - en lugar de empujar registros en la pila, el ARM cambia a un conjunto diferente de registros que ''sombra ''el conjunto normal. El modo del procesador determina qué archivo de registro es visible (y no todos los registros están necesariamente sombreados). es un arreglo bastante complejo. Arquitecturas ARM más nuevas (v7 de todos modos) tienen un modelo de interrupción que está más cerca de Intel, donde los registros se envían a la pila cuando ocurre una interrupción.

La instrucción de brazo tiene algunas características interesantes que no están en Intel:

  • las instrucciones tienen indicadores condicionales incorporados, por lo que cada instrucción puede ejecutarse como NOP si los indicadores de condición especificados no coinciden con el estado actual del indicador de estado (esto puede usarse para evitar todos los saltos en torno a una o dos instrucciones que usted ve a menudo Montaje de Intel).
  • el ARM tiene una lógica cambiante que puede integrarse como parte de la instrucción. Por lo tanto, cuando usa un registro como un operando fuente, puede cambiarlo como una parte intrínseca de la instrucción. Esto ayuda a indexar matrices, a veces con aritmética.

Por otro lado, el ARM no puede hacer mucho con la memoria directamente, excepto cargar y almacenar en ella. El ensamblaje de Intel puede realizar más operaciones directamente en la memoria.

Tenga en cuenta que la versión de la arquitectura ARM no se corresponde directamente con las versiones reales del procesador ARM; por ejemplo, si recuerdo bien, el ARM7 es un procesador de arquitectura v5. Personalmente, encuentro esto mucho más confuso de lo que debería ser.

Las referencias de ARM Architecture se pueden descargar libremente desde http://www.arm.com . También sugiero que obtenga copias de las guías de Hitex para varios microcontroladores ARM para un buen punto de partida.

Ha habido varias preguntas sobre con respecto a los indicadores para comenzar con ARM. Revisarlos te dará muchos buenos lugares para comenzar:


También debe tener en cuenta que ARM licencia su IP en lugar de producir chips. Un licenciatario puede configurar su microprocesador central ARM de varias maneras. Lo más importante es que su pregunta es que el núcleo ARM define solo dos interrupciones IRQ y FIRQ, en la mayoría de los casos hay un controlador de interrupción específico del proveedor, por lo que necesita saber exactamente de quién es el microprocesador utilizado en su dispositivo si necesita saber cómo hacerlo. manejar interrupciones. Los modelos iPAQ han utilizado diversos procesadores Intel StongARM y XScale. Si desea desarrollar a ese nivel, debe descargar el manual de referencia del usuario para la parte específica.

Dicho todo esto, el sistema operativo proporciona los servicios de interrupción y los controladores de dispositivo, por lo que probablemente no tenga que preocuparse por esos detalles de bajo nivel. De hecho, cuestionaría la elección del ensamblador como su lenguaje de desarrollo. Hay pocas razones para elegir ensamblador en C o C ++, en ARM (el compilador casi seguramente lo superará en términos de rendimiento del código). Además, en Windows Mobile, el lenguaje de nivel de aplicación más productivo probablemente sea C #.