Assembly 从程序集中的字符串访问字符

Assembly 从程序集中的字符串访问字符,assembly,x86,att,Assembly,X86,Att,因此,我仍在试图找出如何从C输入中访问字符串的第一个字符。我得到的结果是“abcd”字符串的“4194172”,我相信这是整个字符串本身的地址。我希望能够输出字母“a”。下面您可以看到C代码(已给出)和我编写的汇编代码 C代码 汇编代码 您是正确的,返回的值是字符串的地址。要获取字符串的第一个字符,请改为使用 movl 8(%ebp), %edx movzbl (%edx), %eax 嗨,千万不要把代码当作图像。您可以将粘贴代码复制为文本。请参见:,为什么不上传代码图像,以便提问时使用。

因此,我仍在试图找出如何从C输入中访问字符串的第一个字符。我得到的结果是“abcd”字符串的“4194172”,我相信这是整个字符串本身的地址。我希望能够输出字母“a”。下面您可以看到C代码(已给出)和我编写的汇编代码

C代码

汇编代码


您是正确的,返回的值是字符串的地址。要获取字符串的第一个字符,请改为使用

 movl 8(%ebp), %edx
 movzbl (%edx), %eax

嗨,千万不要把代码当作图像。您可以将粘贴代码复制为文本。请参见:,为什么不上传代码图像,以便提问时使用。即使Nic编辑了您的问题以将代码图像内联,您也需要再次编辑,以将代码作为文本而不是图像包含进来。@Rey:如果您将代码作为图像发布,我们只能查看它。如果你把它作为文本发布,在你的问题里面,我们可以复制它,看看会发生什么。不要将代码作为图像,只作为文本发布。这给了我“97”作为输出?这是第一个字符的地址。如何将其转换为“a”97是“a”的ASCII码。您可以将其打印为字符而不是数字。C代码不需要返回字符,它需要计数,因此它可以将其打印为数字。我是否可以先包含%eax,然后包含movzbl(%eax),%eax以获取第二个字符?另外,如何将asci值转换为字符。
.text
.globl _count

_count:
    pushl %ebp
    movl %esp, %ebp
    subl $8, %esp
    movl 12(%ebp), %edx
    movzbl (%edx), %eax
done:
    movl %ebp, %esp
    popl %ebp
    ret
    .end
 movl 8(%ebp), %edx
 movzbl (%edx), %eax