Pregunta

¿Cómo puedo hacer "verdadera" esta declaración?

CMP             R0, #0

Lo que quiero hacer es, por ejemplo, hacer

CMP R0,R0 or CMP #0, #0

00 28 es el código de operación.¡Intento hacer 28 28 sin resultados! Otra pregunta ¿Qué tipo de instrucciones es BNE.W?¿cuál es la W final? ¿Cómo puedo modificar eso en un BE?El código de operación es 40 F0 65 85

NOTA: ¡Todos los códigos de operación están en modo miniatura!

* EDITAR ¿Existe un compilador armv7 para Mac?

¿Fue útil?

Solución

Puede simplemente ensamblar CMP R0, R0 o CMP #0, #0 y extraer el código de operación necesario de esas instrucciones de esa manera.


Otra forma es consultar un manual de referencia de ARM y crear manualmente el código de operación. Este es un manual de ARMv5 que encontré rápidamente y bajo 7.1.22 tiene CMP <Rn>, <Rm> con detalles de la construcción del código de operación para comparar dos registros. Los detalles parecen ser los mismos que en un manual de ARMv7 que también encontré justo antes de publicar.

Tiene los bits 15-6 que son 0 1 0 0 0 0 1 0 1 0, luego los bits 5-3 son el número del primer registro (el número 0 representado por 3 bits para R0) y los bits 2-0 son el segundo registro (también R0). Entonces su código de operación ahora sería:

0 1 0 0 0 0 1 0 1 0 (CMP) 000 (R0) 000 (R0)

100001010000000 en hexadecimal es 4280, por lo tanto, en orden little-endian, los dos bytes que necesita son 80 42.

Como puede ver, sería mucho más rápido dejar que un ensamblador lo solucione por usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top