Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. static char* addChar(char* string, char c) {
  2.     char* retStr;
  3.     __asm {
  4.         mov ecx, 0
  5.         mov eax, string
  6.     countLen: //считаем длину строки, результат будет в ecx
  7.         mov bl, [eax]
  8.         cmp bl, '\0'
  9.         je allocNewStr
  10.         inc ecx
  11.         inc eax
  12.         jmp countLen
  13.     allocNewStr: //выделяем память под новую строку
  14.         push ecx //сохраняем длину исходной строки
  15.         add ecx, 2 //вычисляем длину результирующей строки +1 char + 1 \0 symbol
  16.         push ecx //записываем ecx, на стек, маллок будет выделит память под это значение
  17.         call malloc //выделяем память, указатель на выделенную память в eax
  18.         add esp, 4 //восстанавливаем значение стека
  19.         pop ecx //восстанавливаем значение длины исходной строки
  20.         mov retStr, eax //retStr = malloc(ecx),  ну пишем в нее адрес памяти
  21.         mov edx, string // записываем в edx память по string(будем использовать ниже)
  22.     copyStr:
  23.         mov bl, [edx] //берем первый байт по адресу edx
  24.         mov byte ptr [eax], bl //в адрес по eax, записываем один байт
  25.         inc eax
  26.         inc edx
  27.     loop copyStr // ecx--, и выполняем пока ecx != 0, а ecx у нас равно длине исходной строки
  28.         //ну и дальше допихиваем наш символ, и закрываем строку
  29.         mov bl, c // bl = c - символ, который нам нужно вставить
  30.         mov byte ptr [eax], bl //пихаем его по eax (адрес результурющей строки)
  31.         inc eax //переходим к след символу
  32.         mov byte ptr [eax], '\0' // не забываем про null terminate symbol
  33.     }
  34.     return retStr;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement