Необходимо преобразовать это выполнение кода сборки Unix в эквивалент Windows - PullRequest
1 голос
/ 26 августа 2010

Я совершенно новичок в сборке; В настоящее время я пытаюсь преобразовать выполнение упомянутого ассемблера в эквивалент Windows, но не получаю ни единой подсказки. Будем весьма благодарны за любую помощь в переносе указанного кода в блоке asm в эквивалент Windows.

void cpuid(uint32_t idx,
                  uint32_t *eax,
                  uint32_t *ebx,
                  uint32_t *ecx,
                  uint32_t *edx)
{

 asm volatile (
        "test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"
        : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
        : "0" (idx), "1" (pv_context) );

}

Ответы [ 5 ]

5 голосов
/ 26 августа 2010

Варианты языка ассемблера относятся к семейству / модели ЦП, а не к операционной системе.Кроме того, это выглядит как специальная кодировка asm, поддерживаемая конкретным компилятором ... так что вы можете использовать тот же компилятор (если он переносимый) и / или порт для обозначения конкретного целевого компилятора.Никто не сможет вам помочь, если вы не объясните, на какой компилятор (ы) вы можете нацеливаться.

4 голосов
/ 26 августа 2010

Если вы используете компилятор Visual C ++, вы можете просто использовать встроенную функцию __cpuid (). См. здесь для описания и здесь для полного образца.

0 голосов
/ 26 августа 2010

Проверьте статью Microsoft KB888282 на эту тему.Windows уже сделает это за вас, вам не нужно делать это самостоятельно.

0 голосов
/ 26 августа 2010

Вам нужен чип, который может работать на вашем ассемблере. Каждый чип имеет свою собственную ISA, архитектуру набора команд (язык ассемблера). Обычно компилятор конвертирует языки программирования в ассемблер, такой как x86 (Intel и ISA amd), и оттуда процессор заботится об этом.

Я понятия не имею, что вы пытаетесь делать с C ++ и языком ассемблера вместе. Но если вы надеетесь, что компилятор C ++ преобразует эти языки ассемблера в язык сборки x86, чтобы он мог работать на вашем компьютере, то нет. Что вы можете сделать, так это получить какой-то эмулятор, эмулирующий код, вроде языка ассемблера LC3 (введение в вычислительные системы Патта Пателя).

Что вы можете сделать, так это найти эквивалентные инструкции x86 (я полагаю, коды операций) и сопоставить их с вашими инструкциями ASM. Оттуда вы можете создать программное обеспечение, которое анализирует ассемблерные коды и конвертирует его в x86, чтобы вы могли запустить его на x86.

0 голосов
/ 26 августа 2010

Вы можете попытаться установить точку останова в функции (используя отладчик вашей платформы) и скопировать сгенерированный машинный код.Возможно, что тот же самый машинный код может быть использован в Windows, или, по крайней мере, это даст вам преимущество.

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