строка и асм x86 - PullRequest
       37

строка и асм x86

0 голосов
/ 12 ноября 2011

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

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

Я пробовал:

movl  $str, %eax

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

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

Я получаю результат в программе на Си так:

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

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

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

1 Ответ

2 голосов
/ 12 ноября 2011

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

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

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

...