الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أربط بين السي++ والأسمبلي؟

مغلق
بدأه CompuM4n في 3 ديسمبر 2003 · 4 رد · 924 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...............

أنا حالياً أدرس السي++ في مادة والأسمبلي في مادة أخرى

وقد وصلنا في الأسمبلي إلى موضوع مهم جداً وهو كيفية الربط بين السي++ والأسمبلي ولكن الشرح لم يكن كافياً.

أرجو منكم المساعدة في هذا الموضوع ولو بشرح مبسط كبداية.

كيف أكتب برماج بالأسمبلي داخل السي++

أعلم أن الأخ chik متخصص في اللغتين أرجو أن تساعدني لو تكرمت.

وشكراً................

#2

السلام عليكم ,,,

أخي العزيز CompuM4n ,, سأعطيك بعض المعلومات عن الربط ,,,

أو بالاصح ليس ربطا ,, وانما كتابة كود assimbly في السي++ ,, ولها كلمة اساسية ,,

asm_

خذ المثال ,,,

() void main 
{

int x =10; int y=4

asm_
{
mov eax , x
mov ebx , y
mov y ,eax
mov x ,ebx
}
cout << x << y
}

لاحظ اننا نكتب تعليمات الاسمبلي بشكل مباشر في البلوك asm_ ,,,

لكن توجد بعض القيود على امتيازات الوصول ,,, فمثلا int 21 لن تعمل على الوندوز NT ,,, وهو أمر يتعلق بمنصة التشغيل ,,

أترك التفصيل لأخي العزيز chik ,,

وبالتوفيق ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

السلام عليكم.......

أشكرك أخي HGB على المساعدة وهذا بالفعل اللي أخذناه لكن الشرح ما كان مفيد

معلوماتي في الأسمبلي مبتدأة وحتى البرامج اللي أكتبها بسيطة جدأ

أعرف أنه لازم أحدد الأسئلة بس الدكتور ما شرح الموضوع بدقة على العموم هذي بعض الأسئلة اللي محيرتني استحملوني بليييييييييييييز:

س: هل السي++ تعطيني الحرية الكاملة إني أكتب كود بالأسمبلي دون مشاكل؟

س: كيف يتعامل الكومبايلر مع كود الأسمبلي؟ وكيف تكون سرعة التنفيذ؟

س: ماهي الحدود المسموح بها في كتابة الكود؟

س: مالفائدة من كتابة كود الأسمبلي في السي++؟ هل هناك لغات ثانية تعطي نفس الميزة؟

س: هل يمكن أن أشاهد خطوات تنفيذ البرنامج مثل الEmulator ؟

آسف على الإطالة لكن أعتقد أنه هذي الأسئلة راح توضحلي الموضوع.

واتمنى ما أكون أزعجتكم أو تعبتكم بكثر الأسئلة ومشكورين..........

#4

السلام عليكم,

كما تفضل الأخ HGB بالدكر فبإمكاننا كتابة الأسمبلر مباشرة في برنامج س++ أو على الأقل أعرف أن كمبايلر فيجوال س++ وكمبايلر بورلاند يقومان بهده المهمة .

هو بالفعل يمكن كتابة أي شيء بالأسمبلر وأضن أن هدا يسهل نوعا ما المأمورية على الكمبايلر لأانه كما نعلم فالأسمبلر هي اللغة الأقرب إلى لغة الآلة التي يفهمها الكمبيوتر. هدا بالطبع في حدود ما يقبله نضام التشغيل.

فمثلا يمكن أن نستعمل int 0x21 في البرنامج وسنلاحض أن الكمبايلر يعترف بها ويأخدها بعين الإعتبار ولكن عندما ننجز البرنامج يعطينا خطء وهدا سببه نضام التشغيل وليس س++ أو الأسمبلر لأن هدان الأخيران أديا مهمتهما. وحتى لو برمجناها بالأسمبلر في النضام المحروس ستعطينا نفس الخطء .

أيضا لا يمكن أن نستعمل أدوات لغة الأسمبلر الثانوية -لا أعرف كيف نسميها - مثل db equ أو كل ما يتعلق ب Pseudo instructions .

يمكن أن نعتبر الآن أن برنامجا مكتوبا بالأسمبلر أو س++ قد يتقاربان في السرعة لأت الكمبايلارت الحديثة تعتمد على الكثير من Optimization إضافة إلى سرعة الكمبيوترات وسعة الداكرة والأقراص الصلبة. وقد نستعمل الأسمبلر داخل س++ إدا كانت هناك حسابات ثقيلة نعطيها للأسمبلر ليخفف العبء شيئا ما.

ويمكن أيضا أن نبرمج بالأسمبلر برنامج من نوع DLL ونستدعيها في برنامجنا ب س++ أو نبرمج Modules بالأسمبلر ونستعملهم في س++.

وهدا مثال سيضهر لنا MessageBox مرة ب س++ ومرة أخرى بالأسمبلر داخل نفس البرنامج .

نفتح مشروع جديد ونضيف هدا الكود وحتى إدا اخترنا مشروع كونسول

#include <windows.h>
void main()
{
	MessageBox(0,"A MESSAGE FROM C++","CAPTION",0);
	HMODULE hand = GetModuleHandle("user32.dll");
	FARPROC fp=GetProcAddress(hand,"MessageBoxA");
	char* mess="A Message From The Assembler";
	char* cap= "Assembler Caption";
	_asm
	{
//  int 0x21;
  push 0;
  push cap;
  push mess;
  push 0;
     call fp;
	}
}

فيما يخص int 21 فهدا الكود ليس له أي معنا هكدا لأنه في الحقيقة يلزمها معطيات أخرى لتكون لها معن ولكن أعطيتها هنا لنتأكد أن الكومبايلر يأخدها بعين الإعتبار هدا بالطبع إدا أزلنا لها العلامتين // .

أتمنى أن أكون داخل الموضوع .

وفي انتضار الإقتراحات والردود أقول لكم إلى اللقاء.

#5

السلام عليكم..........

مشكور أخي HGB

بصراحة كل يوم أستفيد منك شي جديدة

ويبدو إن الله سخرك لي ولأمثالي حتى تساعدنا

لكنك فتحت علي باب جديد في البرمجة لابد أدخله وأتعامل مع كل تفاصيله وأنا أساساً مجرد طالب لكن الله يسهل إن شاء الله.

والشكر موصول لمشرفنا chik على معلوماته القيمة ويا ليت أنه يدرجلنا موضوع جديد

يومياً ترانا طلاب ونحتاج مساعدة.

هذا الموضوع مغلق.

مواضيع مشابهة