Я написал несколько модулей на ассемблере и использовал постоянные переменные, чтобы определить их размер в FASM.
Как я могу использовать эти переменные в VC ++ после связывания с объектным файлом FASM?
Например, если мой ассемблерный код выглядит так:
start: //function declaration, exported
xor eax, eax
inc eax
retn
end_func:
Размер end_func - start
Как я могу экспортировать размер end_func - start
в VC ++?
Вы можете экспортировать переменную с помощью public
директива на стороне FASM, и импортируйте ее в ваш код C ++ с extern
,
Вот короткий пример:
// --- test.asm ---
format MS COFF
public counter as '_counter'
section '.data' data readable writeable
counter dd 0x7DD
// --- example.cpp ---
#include <iostream>
extern "C" long int counter;
int main() {
std::cout << "Hello " << ++counter << "!" << std::endl;
return 0;
}
// --- Compile, Link and Run ---
> fasm test.asm
> cl /EHs example.cpp test.obj
> example.exe
// --- Output: ---
Hello 2014!
В примере используется MSVC cl.exe
Компилятор непосредственно в командной строке для иллюстративных целей, однако в вашем случае будет просто добавить выходные файлы fasm .obj для связи с вашим кодом в настройках проекта VS link.
Других решений пока нет …