السلام عليكم و رحمه الله و بركاته
أبحث عن طريقة لكتابة كود assembly فى c++.net أو c#.net بحيث استفيد من الأوامر الجديدة التى تدعم sse, sse2, mmx
السلام عليكم و رحمه الله و بركاته
أبحث عن طريقة لكتابة كود assembly فى c++.net أو c#.net بحيث استفيد من الأوامر الجديدة التى تدعم sse, sse2, mmx

رحم الله امرىء أهدى لى عيوبى
سبحان الله و بحمده سبحان الله العظيم
لا يمكن كتابة كود بلغة الاسمبلي داخل ال Managed code، لذلك لا يمكن إستخدام ال سي شارب
أعتقد يمكن ذلك من خلال سي++ لكن عليك ان تكتب برنامجك ك unmanaged code يعني Native Exe
لا تحزن:
إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.
لا تحزن:
فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.
أرجو أخى أن ترفق لى مثال به كود لc++.net و موجود به كود assembly حتى أفهم أكثر
و جزاك الله عنى خير الجزاء

رحم الله امرىء أهدى لى عيوبى
سبحان الله و بحمده سبحان الله العظيم
صراحة ليس لي أي خبرة في هذا الموضوع
لكن هذين المقالين ممكن ان يعطوك فكرة جيدة كبداية
لا تحزن:
إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.
لا تحزن:
فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.
السلام عليكم
كنت قد رأيت الموضوع منذ فترة و وجدت بعدها الحل لكن عندما عدت لم أعثر على الموضوع لسبب أو لآخر!!! :wacko:
على كل حال الحل بسيط و يكمن في استخدام block هو asm__
هاك مثال على استخدامه قمت بتجربته على VC++.NET2003Enterprise و VC++.NET2005Express BETA2:
اقتباس#include "stdafx.h" #include <iostream> using namespace std; int main() { int n, m, Result; // How to perform an addition on two integers // Result = n + m __asm { MOV n, 202 // Store 202 in n MOV m, 125 // Store 125 in m MOV EAX, n // Put the value of n in 32-bit register EAX MOV EBX, m // Put the value of m in 32-bit register EBX ADD EAX, EBX // Add the contents of EBX to the contents of EAX // and store the result in register EAX MOV Result, EAX // Retrieve the contents of EAX and put it in Result } cout << "n = " << n << endl; cout << "m = " << m << endl; cout << "Result: " << Result << "\n\n"; return 0; }
لاحظ أنني قمت بإضافة السطر الأول
"include "stdafx.h#
حتى لا تضطر لإلغاء الـPrecompiled Headers في حال أردت تجربة المثال كما هو (لكن asm__ نفسه لا يحتاج الـ Precompiled Headers)، كذلك في بعض الأحيان عند استخدامه في Managed (CLR) Projects في VC++.NET2005 قد تحصل على warnning بخصوص asm__ كونه يتم عمل native compilation له، طبعا لا تهتم فأنت تعرف ذلك مقدما :) ، لاحظ أيضا أنه لنفس السبب لا يمكن كتابة Assembly داخل كود #C لأن الأخيرة تضمن الـ Type Safety لها من خلال كونها 100% Managed (أو 100% CLR Compliant) حتى بالنسبة للـ Pointers في الـ unsafe blocks of code.
أتمنى ألا يكون الرد متأخرا جدا (و أرجو من أي من المشرفين نقله إلى قسم C++.NET كونه أنسب له نوعا).
أخبرني بما يتم معك بإذن الله.
السلام عليكم,
تم تعديل هذه المشاركة بواسطة Mohamed Ahmed Meligy في 6 مايو 2005 في 19:45
,Regards
Mohamed Ahmed Meligy
Senior Software Engineer
SilverKey Tech - Egypt Branch
Computer Engineering Student
High Institute of Engineering, Culture and Science City
E-mail: Eng.Meligy@Gmail.com
Weblog: http://GeeksWithBlogs.NET/Mohamed
Mobile: +20 10 603 3013
ألف شكر أخى محمد نسمان على هذين الموضوعين سأقراهم بعناية
بالنسبة للأخ Mohamed Ahmed Meligy
المشكلة فى البرنامج بتاعك انه لا يستعمل XMM registers و هى الخاصة بتقنية الSSE و لكن EAX مثلاً موجودة اعتباراً من 80386 و يمكن استخدامها من خلال VC++ 6 العادى
و لكنى اريد برنامج اخر بعد اذنك يستخدم هذه التقنية التى ظهرت عام 2001 و على ما اظن ان الطريقة ستكون مشابهة جداً و لكنها ستستخدم الأوامر الجديدة مثل MOVAPS , ADDPS , ADDSS و هكذا ...
أرجو أخى أن تساعدنى و مشكور مقدما على هذه الخدمة

رحم الله امرىء أهدى لى عيوبى
سبحان الله و بحمده سبحان الله العظيم
أخى bashmohandes
ال MMX هى 64 bit registers
و لكن XMM هى 128 bit registers

رحم الله امرىء أهدى لى عيوبى
سبحان الله و بحمده سبحان الله العظيم
هذا الموضوع مغلق.