много тхн за помощь
Я хочу собрать некоторую простую функцию, такую как
struct float3
{
float x;
float y;
float z;
};
inline float dot(float3* a, float3* b)
{
return (*a).x * (*b).x + (*a).y * (*b).y + (*a).z * (*b).z;
}
или еще проще для начала
int add(int a, int b)
{
return a + b;
}
Мне нужно написать его в сборке x86 и создать файл .obj для ссылки
это и звони из c кода
1) ассемблер должен быть бесплатным и бесплатным в использовании
2) он должен собрать x86 для win32
3) должен быть в состоянии произвести более старый двоичный файл omf obj (возможно, я могу пропустить, потому что
возможно я мог бы преобразовать coff в omf с помощью некоторого инструмента objnonv, возможно, agner fog)
4) должен поддерживать новые наборы инструкций - по крайней мере, sse, но лучше и avx
Также мне нужен пример, как написать такую функцию, под ней и как
собрать его в obj
много тнкс,
пихта
[править]
Я нашел частичное решение - в носу я могу собрать
segment _TEXT public align = 1 class = CODE use32
global asm_main
asm_main:
enter 0,0
pusha
;---------------------------
;
;
;----------------------------
popa
mov eax, 2324 ; return back to C
leave
ret
в C я могу использовать его
extern "C" int __cdecl asm_main(void);
int ret_status = asm_main(); //gets 2324 as i want
но у меня появляется следующая ошибка, когда я пытаюсь добавить раздел данных перед остальными
segment _DATA public align = 4 class = DATA use32
txt1 db "xxxxxxxxxxxxx", 0
txt2 db "yyyyyyyyyyyyy", 0
у меня ошибка из моего старого компилятора borland c ++ 5.5.1
Fatal: 'myasm.obj': Additional segments need to be defined in a .def file
Кто-нибудь знает, что я могу сделать?