Читатель ждет уж рифмы 2
Jun. 6th, 2007 02:47 pmК программистской задаче про доллар.
Вызов puts($foo); компилируется, например, в pushl $$foo - синтаксис GNU ассемблера требует знака доллара перед абсолютными выражениями, и не требует знака подчеркивания перед именами переменных.
Оператор же присваивания $foo[12] = '!'; компилируется в movb $33, $foo+12 с использованием перемещаемого выражения, которое распознается ассемблером как некорректное абсолютное.
Насколько я понимаю (хотя глубоко не копал), возможности заэкранировать символ доллара в имени переменной, чтобы можно было написать перемещаемое выражение, нет. Причину этого я вижу в том, что проект GCC и проект binutils, частью которого является GNU assembler - не связаны друг с другом.
Вызов puts($foo); компилируется, например, в pushl $$foo - синтаксис GNU ассемблера требует знака доллара перед абсолютными выражениями, и не требует знака подчеркивания перед именами переменных.
Оператор же присваивания $foo[12] = '!'; компилируется в movb $33, $foo+12 с использованием перемещаемого выражения, которое распознается ассемблером как некорректное абсолютное.
Насколько я понимаю (хотя глубоко не копал), возможности заэкранировать символ доллара в имени переменной, чтобы можно было написать перемещаемое выражение, нет. Причину этого я вижу в том, что проект GCC и проект binutils, частью которого является GNU assembler - не связаны друг с другом.