Loner Опубликовано 18 мая, 2014 Поделиться Опубликовано 18 мая, 2014 В общем ..моё долгое отсутствие на форме связано с учёбой...Начал открывать для себя 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 на LinuxASM под NASM на LinuxC Си разобрался вроде..а вот с ASM беда...теорию читал...а примеров нормальных не нашёл.Если кто-то решится помочь..Буду рад если вы укажете,что хранится в каждом из регистров в данный момент времени.Я знаю что код коротенький будет..и для скиллов это много времени не займёт.Вот что у меня есть...не знаю..написал как думал.Вот быдло-код на ASMglobal funcextern funcXextern funcYsection .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,EBXret 8 ;0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения