Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static char* addChar(char* string, char c) {
- char* retStr;
- __asm {
- mov ecx, 0
- mov eax, string
- countLen: //считаем длину строки, результат будет в ecx
- mov bl, [eax]
- cmp bl, '\0'
- je allocNewStr
- inc ecx
- inc eax
- jmp countLen
- allocNewStr: //выделяем память под новую строку
- push ecx //сохраняем длину исходной строки
- add ecx, 2 //вычисляем длину результирующей строки +1 char + 1 \0 symbol
- push ecx //записываем ecx, на стек, маллок будет выделит память под это значение
- call malloc //выделяем память, указатель на выделенную память в eax
- add esp, 4 //восстанавливаем значение стека
- pop ecx //восстанавливаем значение длины исходной строки
- mov retStr, eax //retStr = malloc(ecx), ну пишем в нее адрес памяти
- mov edx, string // записываем в edx память по string(будем использовать ниже)
- copyStr:
- mov bl, [edx] //берем первый байт по адресу edx
- mov byte ptr [eax], bl //в адрес по eax, записываем один байт
- inc eax
- inc edx
- loop copyStr // ecx--, и выполняем пока ecx != 0, а ecx у нас равно длине исходной строки
- //ну и дальше допихиваем наш символ, и закрываем строку
- mov bl, c // bl = c - символ, который нам нужно вставить
- mov byte ptr [eax], bl //пихаем его по eax (адрес результурющей строки)
- inc eax //переходим к след символу
- mov byte ptr [eax], '\0' // не забываем про null terminate symbol
- }
- return retStr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement