Записывают по адресу, лежащему в eax двойное слово из eax т.е. [eax] трактуется как указатель. То же с ecx.
т.е. если в eax лежит число 12345678h , то после "mov [eax], eax" в памяти по адресу 12345678h будет лежать значение 12345678h.
Допустим в памяти организован список: head->[next, data]->...->[next, data]->null Заносим в регистр ecx адрес первого элемента mov ecx, [head] Движение по списку будет реализовано так: @next: jcxz @end ... mov ecx, [ecx] jmp next @end:
Clerk ну почему. оч часто последний элемент цепочки маркируется ссылкой на себя. struct chain; struct chain { struct chain* next; // остальные поля }; struct chain chain_root = { &chain_root, /* остальные инициализаторы */ }; struct chain* new_chain_link(){ struct chain* lnk; for(lnk = &chain_root; lnk != lnk->next; lnk = lnk->next); lnk->next = (lnk = (lnk->next = malloc(sizeof(struct chain)))); // чем не лисп? return lnk; } те и определить концовку можно и при сбое в алгосе прога не вылетит. да, в точке lnk->next = lnk; и будет скомпилено mov [eax],eax
qqwe mov dword ptr cs:[eax],eax --> #GP, по сути разницы то нет какой регистр используется. Вобще это вопрос лишённый смысла. Что этот код делает известно лишь автору, хотя врятле.. наверно только компилятору.