我是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用于索引目的地...你知道一些关于它的链接吗?
答案 0 :(得分:2)
如果您知道如何将字符串的第一个字符的地址转换为eax
,则可以使用简单的inc %eax
(增量eax寄存器)获取第二个字符的地址。
我不确定为什么您认为134520852
不是您字符串的地址,尤其是如果该字符串确实是"programmation"
- 从function_asm()
的回报是好的,这将是prrof。也许你会更乐意用%p
打印它作为指针。
你对%edi
和%esi
基本上是正确的,尽管你有错误的方法。 %esi
是来源,%edi
是目的地。