LINUX.ORG.RU

gas, 'mov %r0, $1'


0

1

Почему gas, который для at&t синтаксиса, принимает 'mov %r0, $1'? Но не наоборот!

$ grep intel_syntax *.asm
$
$ as --version
GNU as 2.16.91 20051213

Пробовал изменить поведение директивами:
Error: unknown pseudo-op: `.att_syntax'
...
Error: unknown pseudo-op: `.intel_syntax'



Последнее исправление: panzerito (всего исправлений: 3)

ты бы весь код запостил. Но вообще файлы с асмовым кодом в at&t синтаксисе имеют расширения .s и .S

anonymous
()
Ответ на: комментарий от anonymous

.s, .S - кажется это для gcc

$ cat hello-gas.asm
.data

msg:
.ascii «Hello, ARM!\n»
len = . - msg

.text

.globl _start
_start:
/* syscall write(int fd, const void *buf, size_t count) */
mov %r0, $1 /* fd -> stdout */
ldr %r1, =msg /* buf -> msg */
ldr %r2, =len /* count -> len(msg) */
mov %r7, $4 /* write is syscall #4 */
swi $0 /* invoke syscall */

/* syscall exit(int status) */
mov %r0, $0 /* status -> 0 */
mov %r7, $1 /* exit is syscall #1 */
swi $0 /* invoke syscall */

$ as hello-gas.asm
$

panzerito
() автор топика
Ответ на: комментарий от panzerito

нет, gcc их напрямую в as передаёт. Разница лишь в том, что .S пропускаются через сишный препроцессор.

и ещё, может лучше написать mov $msg, %r0 вместо ldr?

anonymous
()
Ответ на: комментарий от panzerito

похоже это специфика arm. Для x86 'mov %ebx, $1' вызывает 'Error: suffix or operands invalid for `mov". Непонятно зачем было так делать

panzerito
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.