Не помню кто тут хвалил
режим .altmacro у ГНУ-того асма.
Действительно есть приятные вещи, но вот эта возможность ограничивать текстовую строку кгловыми скобками < и > — только мешает :-(
Т.е.
Код
; второй аргумент просто как затычка, облегчающая понимание происходящего.
.macro foo arg1, arg2
ldi r16, \arg1
ldi r17, \arg2
.endm
ldi r16, 1<<3
foo 1<<3
.altmacro
foo 1<<3; это строка 35
Код
real@realnb:~/o/avr/asm/macros$ make
======== Beginning of project dummy processing
==== Compiling ./src/dummy/main.S
avr-gcc (GCC) 4.7.1
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
./src/dummy/main.S: Assembler messages:
./src/dummy/main.S:35: Error: bad expression
./src/dummy/main.S:35: Error: garbage at end of line
и вот такая фигня в листинге
Код
32 ???? 00E0 ldi r16, 1<<3
33 foo 1<<3
33 ???? 00E0 > ldi r16,1<<3
33 ???? 10E0 > ldi r17,
34 .altmacro
35 foo 1<<3
35 ???? 00E0 > ldi r16,1
35 ???? 10E0 > ldi r17,<3
**** Error:bad expression
**** Error:garbage at end of line
Если foo сделать с одинм аргументом (как в начале поиска и было), то ошибка
Код
./src/dummy/main.S: Assembler messages:
./src/dummy/main.S:35: Error: too many positional arguments
Никакие скобки не помогают, по первому символу < «видит» начало строки и разделяет на два аргумента и от скобок только лишние сообщения об ошибках.
Никаких там волшебных слов нету для этого? В документации не нашел, но мало ли...
Других слов для сдвигов в духе SHL тоже нет :-(