Сделать копирование памяти - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть код
newmem:
mov cl,[eax]
add eax,01
test cl, cl
jne "psbfile.dll"+413F
Надо перемести блок который тут обрабатывается по адресу [newmem+32+x] - где x число проходов на c++ я сделал бы это так(мои объяснения корявы так что может вам поможет пример на другом языке):
char *eax;
char *newmem;
char cl;
int counter = 0;
do
{
cl = eax[counter]
counter++;
} while(cl != 0)
newmem = new char[counter];
for (int i = 0; i < counter; i++)
{
newmem[i] = eax[i];
}

Решение задачи: «Сделать копирование памяти»

textual
Листинг программы
char * oldM;
char * newM;
int main()
{   
    while (*newM++ = *oldM++);
}

Объяснение кода листинга программы

  1. Объявлены две переменные типа char*: oldM и newM.
  2. oldM указывает на начальный адрес памяти, которую необходимо скопировать.
  3. newM указывает на адрес памяти, куда будет скопирована информация.
  4. В функции main() происходит цикл while, который выполняется до тех пор, пока не будет выполнено условие (newM++ = oldM++).
  5. Внутри цикла while происходит инкремент указателей oldM и newM на 1 байт каждый.
  6. Значение oldM[0] копируется в newM[0], затем oldM[1] копируется в newM[1] и так далее до тех пор, пока не будет выполнено условие (newM++ = oldM++).
  7. Копирование происходит до тех пор, пока не будет достигнут конец строки (или другого типа данных), после чего выполнение цикла прекращается.
  8. Результатом работы программы является скопированная память, начиная с адреса oldM и заканчивая адресом newM.

Оцени полезность:

13   голосов , оценка 3.846 из 5