La mejor manera de comparar el valor en el registro con AVR de ensamblaje constante

Soy nuevo en montaje y AVR. ¿Cuál es la mejor manera de comparar dos valores como en C:

#define SOME_VAL 55
int current_counter = 0;
...
...
if(current_counter==SOME_VAL) {

}

En ensamblador tengo el siguiente código:

.EQU SOME_VAL = 55

.def current_counter = r19

¿Cuál es la mejor manera de comparar el valor actual con una constante definida?

¿Alguna razón en particular por la que no solo usas C? avr-gcc es bastante bueno. Además, una respuesta fácil a "¿cómo hago esto de C en ensamblador?" es escribirlo en C, compilarlo y ver lo que se generó.
^^Esto, escribir cualquier asamblea sin razón es bastante tonto en 2015.
Tomé un curso de microprocesadores y programación de ensamblaje el año pasado. El consejo de mi profesor fue: "Al programar en ensamblador, ¡no lo hagas!"
@ Gregd'Eon, tuvimos un dicho similar en la clase que TAed: "La primera regla de programación en ensamblador es: no programe en ensamblador".

Respuestas (1)

La instrucción que necesita tiene el mnemotécnico CPI (comparar con inmediato).

Esto establecerá o borrará una bandera dependiendo del resultado.

Luego puede ramificar después de verificar la bandera.

Echa un vistazo al siguiente ejemplo. Es del resumen de instrucciones AVR de [8 bits] ( http://www.atmel.com/images/doc0856.pdf ).

El siguiente ejemplo es de la página 24:

Ejemplo:

cpi r20,5 ; Compare r20 to the value 5
brbc 1,noteq ; Branch if Zero Flag cleared
...
noteq:nop ; Branch destination (do nothing)

Hay otras instrucciones que harán comparaciones ligeramente diferentes (como comparar dos registros, en lugar de comparar un registro con un literal).