@Dutymy

Как перевести inline assembler в файл?

Здравствуйте, я нашел такую функцию
void mycpuid(int CPUInfo[4], int InfoType)
{
	__asm
	{
		mov    esi, CPUInfo
		mov    eax, InfoType
		xor ecx, ecx
		cpuid
		mov    dword ptr[esi + 0], eax
		mov    dword ptr[esi + 4], ebx
		mov    dword ptr[esi + 8], ecx
		mov    dword ptr[esi + 12], edx
	}
}

Но при потытке вивести ее в файл в виде
#include <iostream>

extern "C"
{
	void getCpuID(int CPUInfo[4], int InfoType);
}



int main()
{
	int CPUInfo[4];
	int InfoType = 0;
	getCpuID(CPUInfo, InfoType);
	std::cout << CPUInfo[0] << "\n";
	std::cout << CPUInfo[1] << "\n";
	std::cout << CPUInfo[2] << "\n";
	std::cout << CPUInfo[3] << "\n";
}

.386
.model tiny, C

.code
    getCpuID PROC PUBLIC
        push    ebp
        mov     ebp, esp
        mov    esi, CPUInfo
	mov    eax, InfoType
	xor ecx, ecx
	cpuid
	mov    dword ptr[esi + 0], eax
	mov    dword ptr[esi + 4], ebx
	mov    dword ptr[esi + 8], ecx
	mov    dword ptr[esi + 12], edx
        pop     ebp
        ret
    getCpuID ENDP
end

компилятор ругается что
mov    esi, CPUInfo 
mov    eax, InfoType
undefined
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
компилятор ругается что
mov esi, CPUInfo
mov eax, InfoType
undefined

Ну правильно ругается. Это же не глобальные имена и их же нет в ассемблерном исходнике?
Можно поправить определение функции getCpuID вот так: getCpuID PROC PUBLIC, CPUInfo, InfoType.
И стоит прочитать вот это чтобы представлять, как параметры передаются в функции и что ещё нужно делать, чтобы всё работало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы