我几天前开始学习汇编语言,然后开始重新编写所有简单的libc函数,例如strlen、strchr或memset。直到我尝试重新编写memset时,我才遇到问题。
这是C函数的原型:
void *memset(void *s, int c, size_t n);
这是我的汇编代码:
[BITS 32]
global my_memset
my_memset:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov edx, [ebp+12]
mov ecx, [ebp+16]
myloop:
mov [eax], edx
add eax, 1
loop myloop
endfunc:
mov eax, [ebp+8]
leave
ret
这是我用于测试的主要内容
#include <stdio.h>
void *my_memset(void *s, int c, size_t n);
void main(void)
{
char test[] = "thisisatest";
printf("%s\n", test);
my_memset(test, 'b', 5);
printf("%s\n", test);
}
我对使用寄存器有些迷糊,如果我犯了什么大错误,请告诉我。
[编辑] 主要问题已经解决(没有更多的段错误或错误)。但我还有一个最后的 -小- 问题。我收到的字符串是'bbbbb',而应该是'bbbbbsatest'
谢谢,Ephismen。