Bonjour,

JE voudrais comprendre ce code écrit en c assembleur :

/* Context switching */

#define BACKUP_CTX(sp) \
asm ("mov r1, %0" : "=r"((sp)[0])); \

#define RESTORE_CTX(sp) \
asm ("mov %0, r1" :: "r"((sp)[0])); \
Je sais le principe, c'est de sauvegarder le SP : (stack pointer) et le restaurer.
il s'agit d'une opération move;
mais je voudrais comprendre le "%0" et le "=r" et le (sp)[0]

Et lorsqu'on écrit asm(). est ce que c'est le cas pour tout type de microcôntrolleur?

merci.