строка и asm x86

Я новичок в asm и использую строку.

1 / У меня есть строка, и я хочу вернуть адрес первого символа. (Я вызываю функцию asm в C main).

Я пробовал :

movl  $str, %eax

По мне, он возвращает строку.

С movl $(str), %eax он возвращает адрес первого символа строки? Если я хочу вернуть адрес второго символа в строке, я не понимаю, как я могу это сделать в asm.

Я показываю результат в программе C следующим образом:

printf("string : %s, adress : %d\n", function_asm(), function_asm()).

Он возвращает мне «строка: программа, адрес: 134520852». Я думаю, что «134520852» не является адресом, и я кое-что не понимаю.

2 / Я видел, что есть %edi, %esi и функции для строки, но я не могу найти хороший (простой) учебник, использующий это. Я только что понял, что% edi предназначен для источника индекса, а% esi - для назначения индекса ... вы знаете какие-нибудь ссылки на это?

заранее спасибо ! :-)


person lilawood    schedule 12.11.2011    source источник
comment
Что заставляет вас думать, что 134520852 не адрес?   -  person    schedule 12.11.2011


Ответы (1)


Если вы знаете, как получить адрес первого символа строки в eax, адрес второго символа можно получить с помощью простого inc %eax (регистр инкремента eax).

Я не уверен, почему вы думаете, что 134520852 не является адресом вашей строки, особенно, если эта строка действительно "programmation" - это было бы прроф, что возврат от function_asm() был в порядке . Возможно, вам будет удобнее распечатать его как указатель с %p.

И вы в основном правы насчет %edi и %esi, хотя у вас они неправильные. %esi - источник, а %edi - место назначения.

person paxdiablo    schedule 12.11.2011