Что делают эти строчки кода?

Тема в разделе "WASM.BEGINNERS", создана пользователем MrRockchip, 29 июн 2010.

  1. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    mov [eax], eax
    mov ecx, [ecx]
     
  2. Ino

    Ino New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    5
    Записывают по адресу, лежащему в eax двойное слово из eax
    т.е. [eax] трактуется как указатель.
    То же с ecx.
     
  3. Ino

    Ino New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    5
    т.е. если в eax лежит число 12345678h , то после "mov [eax], eax" в памяти по адресу 12345678h будет лежать значение 12345678h.
     
  4. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    Допустим в памяти организован список:
    head->[next, data]->...->[next, data]->null

    Заносим в регистр ecx адрес первого элемента
    mov ecx, [head]

    Движение по списку будет реализовано так:
    @next:
    jcxz @end
    ...
    mov ecx, [ecx]
    jmp next
    @end:
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сепшен генерят, #GP :lol:
     
  6. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    Спасибо!
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    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
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qqwe
    mov dword ptr cs:[eax],eax --> #GP, по сути разницы то нет какой регистр используется.
    Вобще это вопрос лишённый смысла. Что этот код делает известно лишь автору, хотя врятле.. наверно только компилятору.