Я запустил ASM несколько дней назад и начал перекодировать все простые функции, которые предлагает нам libc, например strlen, strchr или memset. У меня не было никаких проблем, пока я не попытался перекодировать memset.
Вот прототип функции C:
void *memset(void *s, int c, size_t n);
Вот мой код ASM:
[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»
Спасибо, Еписмен.