فکر می کنم با کلمهی رزرو شدهی asm بود به این ترتیب:
}asm
.
.
{
که در این بلاک کد های اسمبلی رو مینوشتیم. البته به روش تابع هم قابل پیاده سازی بود:
extern void a_func (void);
void main (void)
{
a_func ();
}
و حالا تعریف تابع a-func در اسمبلی:
NAME A_FUNC
?PR?a_func?A_FUNC SEGMENT CODE
EXTRN CODE (c_func)
PUBLIC a_func
RSEG ?PR?a_func?A_FUNC
a_func:
USING 0
LCALL c_func
RET
END
جالبه بدونید کتابخانه ها و توبابع رزرو شدهی C با اسمبلی پیاده سازی میشن. برای نمونه تابع های add و print رو ببینید:
//add.c
int add(int i,int j)
{
int p = i + j;
return p;
}
//add.s
.globl add
add:
pushl %ebp
movl %esp, %ebp
subl $4, %esp //create space for integer p
movl 8(%ebp),%edx //8(%ebp) refers to i
addl 12(%ebp), %edx //12(%ebp) refers to j
movl %edx, -4(%ebp) //-4(%ebp) refers to p
movl -4(%ebp), %eax //store return value in eax
leave //i.e. to movl %ebp, %esp; popl %ebp ret
---------------------------------------------
//print.c
print(int i)
{
printf("%d\n",i);
}
//main.s
.globl main
main:
movl $123, %eax
pushl %eax
call print
addl $4, %esp
ret
از این سینتکس می تونید برای میکس کردن C و اسمبلی استفاده کنید. و با کمی تغییر اونو به ++C تعمیم بدید.
موفق باشید.
سلام.
فاراب جان ممنونم
#include <stdio.h>
main()
{
printf("hello Ajax ! \n");
getch();
return 0;
}
وقتی که برنامه بالا رو با gcc کامپایل می کنم .پیغام زیر رو چاپ میکنه .
/tmp/ccmnjIOi.o: In function `main':
hello.c:(.text+0x1e): undefined reference to `getch'
collect2: ld returned 1 exit status
ایا از دستور getch()درست استفاده ه نکردم یا اینکه باید فابل هدری رو include کنم یا کامپیالر من مشکل داره ...??
ولی با دستور getchar() مشکلی ندارم.
تفاوت getch , getchar چیه ؟
سلام.
فاراب جان ممنونم
#include <stdio.h>
main()
{
printf("hello Ajax ! \n");
getch();
return 0;
}
وقتی که برنامه بالا رو با gcc کامپایل می کنم .پیغام زیر رو چاپ میکنه .در لینوکس میتوانید از curses.h استفاده کنید
/tmp/ccmnjIOi.o: In function `main':
hello.c:(.text+0x1e): undefined reference to `getch'
collect2: ld returned 1 exit status
ایا از دستور getch()درست استفاده ه نکردم یا اینکه باید فابل هدری رو include کنم یا کامپیالر من مشکل داره ...??
ولی با دستور getchar() مشکلی ندارم.
تفاوت getch , getchar چیه ؟
تابع getch در فایل هدر conio.h قرار دارد که مخصوص ویندوز است شما باید آنرا حذف کنید