2015-04-16 1 views
-1

Я создаю функцию со следующей подписью:Произвольное количество параметров в Assembler (x86, ATT)

int function_test (char *something, ...); 

Давайте предположим, что на * что-то есть что-то, что позволит мне знать, сколько параметров было (так же, как printf делает с «%»).

Так что я сохранить текущий номер параметра в %ebx как кратное 4, начиная с 8, так что я могу получить 8(%ebp), 12(%ebp) и т.д.

Как мне сделать, чтобы получить содержимое этого параметра? Когда я пытаюсь:

movl %ebx(%ebp),variable 

Я получаю сообщение об ошибке (junk %ebp after register).

Как я могу получить содержимое этого параметра? И каков будет синтаксис для увеличения его значения?

+1

Вы должны использовать «режимы адресации x86» и, в частности, синтаксис AT & T. Я думаю, вы можете что-то сделать с помощью '(% ebx,% ebp)', но, вероятно, не напрямую к 'переменной' (должен быть другой регистр). – lurker

ответ

1

movl (%ebp, %ebx), %eax. Обратите внимание, что вы не можете иметь две ссылки на память, поэтому, если вы хотите, чтобы в variable вам нужно было сделать это в два этапа. Для увеличения, очевидно, используйте inc не mov.

+0

Спасибо, теперь это работает! И верный о ссылках на память, что я закончил выяснять (трудный путь ...;) – francisaugusto