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

برنامج بلاسمبلي

مغلق
بدأه queen1 في 12 أكتوبر 2004 · 3 رد · 721 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أرجوا مساعدتي في ارشادي بعض الأسئلة وهي:

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

حيث أنني قمت بكتابة البرنامج بلغة السي وبداخل البرنامج كتبت التعليمات التالية:

asm{

تعليمات الاسمبلي

------

-----

}

ولكن حصل لي بعض المشاكل مثل إعادة تشغيل الجهاز ؟؟؟

فارجوا منكم إعطائي برنامج مكتوب بالسي++ وفية تعليمات الاسمبلي

والبرنامج يقوم بقراءة حجم ملف وقراءة حجم القرص C:

والبرنامج يستخدم المقاطعة 21h

ولكم جزيل الشكر

#2

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

يجب أن نعلم أنه محرم علينا استعمال بعض المقاطعات مثل 21 وأغلب مقاطعات الدوس مباشرة في النظام 32 بت . وربما قد يكون هذا هو الخطء الذي عندك لذى يجب أن تتأكد أنك تبرمج في فضاء 16بت قبل استعمال المقاطعة التي ذكرت.

فإذا كان هذا فبإمكانك أن تبرمج بالأسمبلر داخل س أو س++ كأنك تبرمج في الأسمبلر الخالص.

وعموما إذا منت تبرمج في الفجوال ستيديو وما فوق فلن تتمكن من ذلك لأن هذا لا يمكنك من صنع برامج من نوع 16 بت.

إلى اللقاء.

#3

شكرا أخي chik على جوابك على سؤالي بالنسبة للبيئة التي أشتغل عليها هي

بيئة ++borland c فما هي برأيك البيئة المناسبة ال ++borland c أم

بيئة فيجول ستيديو 0.6 وارجوا منك يا أستاذ chik مساعدتي في إعطائي ولو برنامج

بسيط يقوم مثلا بقراءة الوقت والتاريخ من الجهاز أو انشاء ملف بحيث أتعرف على البنيه

التي يدمج فيها (السي مع الاسمبلي) ولك جزيل الشكر ورمضان كريم

#4

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

الجواب صعب أن أقول لك إن كان بورلاند أحسن من فيجوال أو العكس بل هذا يبقى حسب تجربة أو اعتياد كل واحد. فغالبا حين نبدأ ببرنامج ما نتعود عليه ويبدو لنا أحسن من الآخر. على العموم أنا أشتغل بالفيجوال ستيديو والميزة التي في البورلاند هي أنه يمكنك من برمجة 16 بايت هذا على الأقل في النسخة 5 التي جربتها منذ وقت وهذا لا يسمح به الفيجوال س++ في نسخته السادسة.

بما أنه ليس لدي البورلاند سأعطيك مثالا بالفيجوال س++ وبما أنه يسمح فقط ب 32 بايت فمقطوعة الأسمبلر هي من 32 بايت أيضا والبرنامج يعطينا تاريخ الكمبيوتر. وهذا هو المثال :

#include <iostream.h>
#include <windows.h>


void main ( ) 
{
	SYSTEMTIME st; //structure for time
	DWORD* dd=(DWORD*) &st; 
	HMODULE hmod=GetModuleHandle("kernel32.dll");
	DWORD* ad=(DWORD*)GetProcAddress(hmod,"GetSystemTime"); //ad will contain address of the proc
	_asm
	{
  mov eax,dd;
  push eax; // push the parameter wich is the SYSTEMTIME struct
  call ad; // call the proc and we will get result in the struct
	}


	cout<<"The Day is : "<<st.wDay<<"\n";
	cout<<"The month is : "<<st.wMonth<<"\n";
	cout<<"The Year : "<<st.wYear<<"\n";
}

أتمنى أن يفيد هذا وإذا كان هناك تساؤلات أتمنى أن يكون في استطاعتي مساعدتك.

إلى اللقاء.

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

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