0

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

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

我试过了 :

movl  $str, %eax

据我说,它返回字符串。

movl $(str), %eax它返回字符串第一个字符的地址?如果我想返回字符串中第二个字符的地址,我不明白如何在 asm.xml 中做到这一点。

我在 C 程序中显示结果是这样的:

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

它返回给我“字符串:编程,地址:134520852”我认为“134520852”不是地址,有些东西我不明白。

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

提前致谢 !:-)

4

1 回答 1

2

如果您知道如何将字符串的第一个字符的eax地址放入 中,则可以通过简单的inc %eax(递增 eax 寄存器)获得第二个字符的地址。

我不确定为什么你认为134520852不是你的字符串的地址,特别是如果那个字符串确实是"programmation"- 那将是返回function_asm()是可以的。也许您会更乐意将其打印为指针,使用%p.

你基本上是正确的%edi%esi尽管你有错误的方式。%esi之一,%edi目标之一。

于 2011-11-12T12:42:06.123 回答