ASM В проекте C ++ ... Как этот маленький код ASM будет в C ++ - PullRequest
4 голосов
/ 08 июня 2011

Парень, я нашел код asm ... который был интегрирован в проект c ++

template <class T>
T returned; 

BYTE *tem = buffer;
__asm
{
    mov eax, tem
    call eax
    mov  returned, eax
}

Так как я не знаю asm, трудно понять, что означает этот код ... Может кто-нибудь преобразоватьэтот код ASM в c ++ целиком и пост здесь :) Ttanks ...

Ответы [ 3 ]

8 голосов
/ 08 июня 2011

Похоже, что он выполняет код, помещенный в буфер, и возвращает содержимое регистра EAX.Вы можете попробовать это:

typedef T (*pfn)();

returned = ((pfn) buffer)();
3 голосов
/ 08 июня 2011
mov eax, tem;

Содержимое tem передается во внутренний регистр процессора eax

call eax

Содержимое eax используется для вызова функции.Будет выполнен код, начинающийся с адреса, который содержит eax.После возврата вызова функции возвращаемое значение будет в регистре eax

mov returned, eax

Возвращаемое значение в eax переносится в переменную returned

Это то, что в принципекод делает.Вы должны взглянуть на call инструкцию, чтобы узнать, как именно она работает.

3 голосов
/ 08 июня 2011

Код ассемблера, по сути, рассматривает tem как указатель функции и вызывает его.Затем он помещает возврат в возвращенное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...