【问题标题】:string and asm x86字符串和 asm x86
【发布时间】:2011-12-27 14:46:14
【问题描述】:

我是 asm 的新手,并且在其中使用字符串。

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

我试过了:

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 用于索引目标...你知道一些关于它的链接吗?

提前致谢! :-)

【问题讨论】:

  • 是什么让你认为“134520852 不是地址”?

标签: string assembly x86 gnu-assembler


【解决方案1】:

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

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

你对%edi%esi 的看法基本上是正确的,尽管你把它们弄错了。 %esisource 之一,%edidestination 之一。

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多