На уровне сборки не существует такого понятия, как «UNIX-совместимый код».Каждый Unix имеет свой собственный интерфейс для выполнения системных вызовов.
Хотя я могу рассказать вам, что делает этот код.Он вызывает инструкцию CPUID, затем помещает результат в часть «xxx» строки output
, затем вызывает:
write(1, output, 42);
exit(0);
Если вы используете GCC, ближайший «переносимый» эквивалент выглядит как-тонапример:
#include <string.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
int cpuid[3];
char result[12];
asm("cpuid"
: "=b" (cpuid[0]), "=d" (cpuid[1]), "=c" (cpuid[2])
: "a" (0L));
memcpy(&result[0], &cpuid[0], 4);
memcpy(&result[4], &cpuid[1], 4);
memcpy(&result[8], &cpuid[2], 4);
printf("The processor Vendor ID is '%s'\n", &result[0]);
return 0;
}
Для других компиляторов C вам необходимо обратиться к руководству, чтобы узнать их встроенный синтаксис asm.
Если вы действительно хотите вызывать это непосредственно в сборке, вы будетенужно выяснить, как ваш конкретный Unix ожидает, что системные вызовы будут работать.