¿Por qué avr-as no funciona?

Tengo el siguiente programa, en ensamblaje AVR:

.DEF    WR = R16

.ORG 0

SER    WR
OUT    0x24, WR

Cuando llamo avr-as beeep.s, donde beeep.s contiene el código anterior, aparece un mensaje de error:

beeep.s: Assembler messages:
beeep.s:1: Error: unknown pseudo-op: `.def'
beeep.s:5: Error: constant value required
beeep.s:5: Error: register number above 15 required
beeep.s:6: Error: constant value required

No puedo encontrar el origen de mi error... ¿Qué hice mal?

Parece que está tratando de compilar el código escrito avrasmcon GNU as, que parece tener directivas diferentes (que no son instrucciones de máquina sino "pseudo-ops").
@EugeneSh. Entonces, ¿qué instrucciones debo usar? O, ¿qué ensamblador?
Echa un vistazo aquí . O simplemente use el ensamblador de suministro de Atmel.
@EugeneSh. Pero .devestá en este conjunto de instrucciones, y aparece el mismo mensaje de error cuando lo reemplazo .DEVcon .dev...
Sí, pero el significado y el uso son completamente diferentes.
@EugeneSh. ¿Y qué ensamblador admite la sintaxis que estoy usando?
Este supongo..
@EugeneSh. Pero parece que este ensamblador solo está disponible en Windows, ¿hay un ensamblador equivalente disponible en Linux?
Parece que son solo ventanas. En este caso tendrás que migrarlo a ensamblador GNU.
@EugeneSh. Gracias, puedes publicar tu respuesta, ¡la marcaré como la buena!

Respuestas (2)

Cambiar .DEFcon .EQU:

.EQU    WR, R16

.ORG 0

SER    WR
OUT    0x24, WR

Como se describe en http://www.nongnu.org/avr-libc/user-manual/assembler.html , uno NO debe usar avr-as directamente, sino usar avr-gcc en su lugar.

Por ejemplo: avr-gcc -mmcu=atmega8 -x ensamblador-con-cpp ejemplo.s

Consulte la Nota [2] del programa de ejemplo en la página para ver cómo asignar un nombre simbólico al registro.