从Assembly中的字符串访问字符

时间:2018-10-14 00:46:08

标签: assembly x86 att

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

C代码

extern int count(char *string, char c); 
int main(void)
{
    char s[100];
    char c;
    printf("Enter a string of characters:\n");
    scanf("%s", s);
    printf("Enter a character to count:\n");
    scanf("%c", &c);
    printf("\nThe number of %c's in the string %s is %d\n", c, s, 
    count(s,c));
    return 0;
}

组装代码

.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

1 个答案:

答案 0 :(得分:0)

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

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