string和asm x86

时间:2011-11-12 12:33:33

标签: string assembly x86 gas

我是asm的新手,并且使用了字符串。

1 /我有一个字符串,我想要返回第一个字符的地址。 (我在C main中调用asm函数。)

我试过了:

movl  $str, %eax

据我说,它返回字符串。

使用movl $(str), %eax它会返回字符串第一个字符的地址吗? 如果我想在字符串中返回第二个字符的地址,我不明白我是如何在asm中那样做的。

我将结果显示在C程序中:

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

它返回给我“string:programmation,adress:134520852” 我认为“134520852”不是地址,有些东西我不明白。

2 /我已经看到有%edi%esi和字符串函数,但我找不到一个好的(简单)教程。我只是理解%edi用于索引源而%esi用于索引目的地...你知道一些关于它的链接吗?

提前谢谢! : - )

1 个答案:

答案 0 :(得分:2)

如果您知道如何将字符串的第一个字符的地址转换为eax,则可以使用简单的inc %eax(增量eax寄存器)获取第二个字符的地址。

我不确定为什么您认为134520852不是您字符串的地址,尤其是如果该字符串确实是"programmation" - 从function_asm()的回报是好的,这将是prrof。也许你会更乐意用%p打印它作为指针。

你对%edi%esi基本上是正确的,尽管你有错误的方法。 %esi来源%edi目的地