Мне нужно вызвать функцию, которая складывает три целых числа из ассемблерного кода; Сами целые числа задаются в сборочной части;
Все выглядит правильно, но функция masm, похоже, не возвращает правильное значение. Оно хранится в eax и должно быть возвращено как значение функции, но при запуске кода C он ничего не печатает, а требуемое значение (в данном случае 15) на самом деле является кодом выхода программы. Итак, есть ли способ распечатать этот результат?
МАСМ-код:
.586
.MODEL FLAT, C
.DATA
a1 DWORD 6
a2 DWORD 5
a3 DWORD 4
.CODE
func_asm PROC C
push a3
push a2
push a1
EXTRN numbers: proc
call numbers
leave
ret
func_asm ENDP
END
C-код:
#include <stdio.h>
extern int __cdecl func_asm();
int numbers(int, int, int);
int main()
{
printf("%d", func_asm());
}
int numbers(int a1, int a2, int a3)
{
return a1 + a2 + a3;
}
push eax
. Вам необходимо настроить EBP в качестве указателя кадра для работыleave
: это компактная версияmov esp,ebp
;pop ebp
. Это была твоя единственная проблема; Делать дополнительный толчок перед отпуском всегда бессмысленно. 14.12.2019