ورود

View Full Version : link kardan



ghorbateeparastooha
چهارشنبه 11 دی 1387, 10:55 صبح
با سلام ، میشه خواهش کنم طریقه لینک کردن برنامه اسمبلی به برنامه های دیگر مثل سی یا پاسکال را برای من توضیح بدید یا کدشا برام بنویسید.کتاب جعفر نژاد قمی را هم خوندم ولی!!!!!!!!!!!!!!!!
:عصبانی++:

vcldeveloper
چهارشنبه 11 دی 1387, 17:12 عصر
لطفا فارسی تایپ کنید. با تشکر

Open-Source
چهارشنبه 11 دی 1387, 17:29 عصر
دوست من اولا که فارسی بنویس (بهتره قوانین رو بخونی)
دوما منظورت رو واضح تر بگو این پیوند دادن یعنی چی؟؟؟؟!!!!!!!!!!

ghorbateeparastooha
چهارشنبه 11 دی 1387, 20:10 عصر
با سلام ، میشه خواهش کنم طریقه لینک کردن برنامه اسمبلی به برنامه های دیگر مثل سی یا پاسکال را برای من توضیح بدید یا کدشا برام بنویسید.کتاب جعفر نژاد قمی را هم خوندم ولی!!!!!!!!!!!!!!!!

Mehdi Asgari
چهارشنبه 11 دی 1387, 20:31 عصر
سوالت کلی بود.
تو کتابایی که دم دستم بود دو تا از کتابام مطلب در این باره داشتن
قسمت 4 فصل 7 کتاب اسمبلی مزیدی جلد اول (http://www.amazon.com/80X86-IBM-Compatible-Computers-Programming/dp/0137584830/ref=sr_1_11?ie=UTF8&s=books&qid=1230744565&sr=1-11) و فصل 7 کتاب Visual C++ .NET Optimization with Assembly Code (http://www.amazon.com/Visual-C-Optimization-Assembly-Code/dp/193176932X)
براساس کتاب دوم عمل کرده و جواب گرفتم (کامپایلر سی مایکروسافت (cl) و اسمبلر مایکروسافت (ml) و لینکر مایکروسافت (link)) (نسخۀ مربوط به ویژوال سی پلاس پلاس 2008)
فکر کنم کتاب اسمبلی سید حسن رضی هم همچین فصلی داره منتها دم دستم نبود.
روال کلی: اسمبل کردن فایل .asm (و دریافت خروجی به صورت .obj)
کامپایل کردن فایل سی و دریافت خروجی به صورت .obj (سویچ /c)
لینک این دو فایل توسط لینکر و ایجاد یک خروجی اجرایی
مدل فایل اسمبلی باید flat و C باشه و تابع مربوطه رو در فایل سی به صورت extern تعریف کنی
مثالی که من انجام دادم نوشتن یک تابع برای جمع دو عدد بود:



.686
.model flat,C
.code

MyAdd PROC
push EBP
mov EBP,ESP

mov EAX, DWORD PTR [EBP+8]
mov EBX, DWORD PTR [EBP+12]
add EAX,EBX

POP EBP
RET

MyAdd ENDP
END




#include <stdio.h>

extern int MyAdd(int,int);

int main()
{
int x,y;
printf("Enter x: ");
scanf("%d",&x);
printf("Enter y: ");
scanf("%d",&y);
printf("%d + %d = %d\n",x,y,MyAdd(x,y));
return 0;
}