Перейти к содержанию

Помогите написать код на ASM)


Рекомендуемые сообщения

В общем ..моё долгое отсутствие на форме связано с учёбой...

Начал открывать для себя ASM.

Собственно есть код.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double __attribute__((stdcall)) func(int a,int b,int c,int d);
extern __attribute__((fastcall)) int funcX(int a,int b,int c);
extern __attribute__((cdecl)) int funcY(int a,int b,int c,int d);
int main(int argc, char *argv[])
{
if(argc!=5)
{
printf("Неверное количество параметров!!!\n");
return 1;
}
int result = func(atoi(argv[1]),atoi(argv[2]),atoi(argv[3]),atoi(argv[4]));
printf("Result %d\n",result);
return 0;
}
extern __attribute__((fastcall)) int funcX(int a,int b,int c)
{
//printf("%d %d %d",a, ;
return cos(a)+cos( ;
}

extern __attribute__((cdecl)) int funcY(int a,int b,int c,int d)
{
printf("%d %d %d %d",a,b,c,d);
return a+b-c-d;
}

Нужно написать на ASM следующую программу.

При запуске программы 4 переменные типа INT передаются через _stdcall в модуль написанный на асме.

Потом из этого модуля вызываются функции funcX и funcY с передачей соответствующих параметров(через _fastcall

_cdecl соответственно) в модуль написанный на СИ

В модуле происходят математические вычисления..после чего результат передаётся обратно в модуль на ASM..там происходит сложение результатов..А результатом работы программы должна быть сумма результатов 2 функций.

Код С Компилирую под GNU на Linux

ASM под NASM на Linux

C Си разобрался вроде..а вот с ASM беда...теорию читал...а примеров нормальных не нашёл.

Если кто-то решится помочь..Буду рад если вы укажете,что хранится в каждом из регистров в данный момент времени.

Я знаю что код коротенький будет..и для скиллов это много времени не займёт.

Вот что у меня есть...не знаю..написал как думал.

Вот быдло-код на ASM

global func
extern funcX
extern funcY
section .text
func: ;2
push EBP
mov EBP, ESP
mov EAX,[EBP+20]
push EAX
mov EAX,[EBP+16]
push EAX
mov EAX,[EBP+12]
push EAX
mov EAX,[EBP+8]
push EAX

mov ECX,[EBP+20]
mov EDX,[EBP+16]
call funcX
mov EBX,EAX

;call funcX ;4
;add ESP, 4 ;3
;mov ESP, EBP
;pop EBP ;2
;add EAX,EBX
ret 8 ;0

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.