برمجة

شرح وافي عن لغة الأسمبلي

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

تعد لغات البرمجة منخفضة المستوى مثل لغة التجميع جسرًا ضروريًا بين الأجهزة الأساسية للكمبيوتر ولغات البرمجة عالية المستوى – مثل Python أو JavaScript – التي تُكتب بها البرامج الحديثة.

ماھي الأسمبلي :

في قديم الزمان أيام بدايات الكمبیوتر كانت برمجة الكمبیوتر تتم بواسطة لغة الأله
لغة الآله ھي اللغه التي تفھمھا الآله مباشرة ) ML أختصاراً Machine Language دون الحاجة الى تفسیر وھي تخزن بصورة ثنائبة [ تركیبة من الأصفار والوحايد] في الذاكرة على شكل تعلیمات ووسائط تأخذ كل واحد منھا عادة مقدار 8بت=ا بايت ) وكان ھذا النوع من البرمجة صعب جداً عندھا طور المبرمجون أو ل لغة برمجة وھذه اللغه فكرتھا بسیطة جداً حیث أنه بدل أ ن تكتب رموز الآله يتم كتابة كلمات مختصرهثم ببرنامج بسیط يتم تحويل ھذه ( MOV,ADD,CMP ) تدل على نوع العملیه مثال الشفرة الى لغة الآله بأستخدام تخطیط واحد-الى-واحد أ ي أ ن كل سطر أو عبارة في الأسمبلي تحول الى تعلیمة واحدة مقابله في لغة الآله (مثال بدل كتابة يعرف البرنامج الذي يقوم بعملیة التحويل ( mov al, 011000000000101 يتم كتابة 5 علماً بأن ھناك عدة أنواع من الأسمبلر كل نوع يختص ، Assembler بالأسمبلر
بتقنیة معینة وبعائلة معینه من المعالجات IBM-PC ونحن ھنا بصدد تعلم البرمجة بالأسمبلي للمعالجات المبنیة على تقنیة وھي تضم : X 80 ويرمز لھا أختصاراً 86 × والمنتجة من شركة أنتل وھي العائلة 86 / 80486 / 80286 ) ل معالجاتلا 16 بت و ( 80386 / 80186 / 8088/8086 )
( 80886 =بنتنیوم 4 / 80786 =بنتنیوم 3 / 80686 =بنتنیوم 2 / 80586 =بنتنیوم 1 ملعالجاتلا 32 بت وسوف أتطرق في دروس متقدمة الى المعالج أتنیوم 64 بت
المبني بتقنیة جديده كلیاً لمن يرغب بمعرفة مسبقة لھذا المعالج الجديد كذلك سوف أتطرق بأذ ن الله الى الكرو س أسمبلر وھي مجموعة برامج خاصة مصممه للتحويل من لغة أسمبلي لعائلة معالجات معینة الى عائله أخرى .

Assembly Language and Machine Language | Assembly language, Language, Assembly programming

تعريف لغة الأسمبلي

الأسمبلي ھي لغة برمجة تتكون من سلسلة من التعلیمات المتتابعة كل تعلیمة فیھا تحول الى تعلیمة
مقابلة بلغة الآله .

تعريف الأسمبلر

الأسمبلر ھو برنامج يقوم بتحويل التعلیمات المكتوبة بلأسمبلي الى لغة الآله .

لماذا أريد أستخدام الأسمبلي :

بتعلمك لغة الأسمبلي فأنك تكشف النقاب عن الأسرار المختفیه وراء الكمبیوتر وتصبح قادراً على الفھم تماماً كیف يعمل المعالج وكیف يعمل البرنامج وبذلك تزيد خبرتك كمبرمج وبالطبع فأن الأسمبلي أقوى من اللغات العالیة المستوى في التعامل مع العتاد وتعطیك مرونة عالیة وقدرة وصول الى أشیاء لم تكن تستطیع الوصول الیھا من قبل ، كذلك ھناك نوعیات من البرامج لايمكن الا برمجتھا بالأسمبلي مثل الدرايفات(سواقات) الأجھزه ، كذلك فأن الأسمبلي يعطیط برامج سريعة جداً ، وبالطبع فأن بناء برنامج متطور بالأسمبلي أشبه بحفر حفرة بواسطة الملعقه فالبرغم أنك تحفر الا أ ن ك أنت اجی تك قلی لهولكن من المحبذ جداً برمجة بعض الدولا و الأح ز اء من البر امج بالأسمبلي وبقیة البرنامج بواسطة لغة عالیة المستوى مثل السي++.

Assembly Language and Machine Language | Assembly language, Language, Assembly programming

العلاقة بین الأسمبلي واللغات الأخرى :

Low-Level تعتبر كل من لغة الآله و الأسمبلي لغتین منخفضتي المستوى لأنھا تكتب تعلیمه تعلیمه ( بعض الناس يعتبر لغة السي لغة LLL أختصاراً Language منخفضة المستوى ، وھذا الكلام أرجح الى الخطأ منه الى الصوا ب ) بینما تعتبر باقي وفي ھذه اللغات تختفي تقنیة تخطیط HLL أختصاراً High-Level Language اللغات واحد-الى-واحد وتفسر التعلیمة الواحدة الى عدد كبیر من تعیلمات لغة الآله مخطط يوضح العلاقة بین لغة الأسمبلي ولغة الآله ولغة عالیة المستوى ولغة الآله

تطبیقات لغة الأسمبلي :

تتطلب كتابة البرامج بلغة الأسمبلي معرفة بالعتاد وعناية خاصة مع الأھتمام بأد ق وأقل التفاصیل ، في أيام البرمجة القديمة كان المبرمجون يكتبون برامجھم بلغة الأسمبلي لأن ذاكرة الرام وقتھا كانت صغیرة (أقل من 64 كیلوبايت) وھم بحاجة الى برامج أصغر وأسرع خصوصاً أ ن معالجتھم أيضاً كانت بطیئة ، مع تطور الحاسوب وتوسع
سعة ذاكرة الرام وزيادة سرعته أصبحت البرامج أكثر طولاً وتعقیداً ، ھذا التعقید أدى مثل السي والكوبول والبیسك HLL الى أستخدام اللغات البرمجیة عالیة المستوى والباسكال والفورترن ، مرة أخرى تطور الحاسوب فأدى الى أستخدام اللغات العلیا مثل السي++ والجافا والتي مكنت من كتابة برامج قوامھا آلاف OOP الموجھة الھدف الأسطر والتعلیمات المعقده والمتداخله .
من الصعب أ ن تلاقي برامج كبیرة مكتوبة كاملة بلغة الأسمبلي لأن كتابتھا صعب والأھم من ذلك تطويرھا وصیانتھا أصعب بكثیر ، بدل ذلك يقوم المبرمجین ببرمجة مقاطع مبرمجة برمجة مثلى بلغة الأسمبلي لأستخدمھا في تنفیذ أسرع أو الوصول الى العتاد عن طريقھا وباقي البرنامج بواسطة لغة عالیة المستوى . يفض المبرمجین لغة السي++ كلغة قیاسیة للبرمجة بلغة علیا لأن لھا قدرة عالیة وقوية جداً وموجھة الھدف مع القدرة على كتابة مقاطع السي فیھا وھي لغة أقل أنخفاضاً وأكثر مرونة مع أستخدام الأسمبلي كعنصر مھم في الوصول الى العتاد وبرمجة الجزئیات المحتاجة للسرعة . لا يستخدم المبرمجون شفرة الأسمبلي وسط شفرة لغة عالیة المستوى عادة وأنما يستخدمونھا عن طريق واجه على شكل دالة أو كائن وتحتوي ھذه الدالة أو ھذا الكائن على شفرة الأسمبلي المطلوبة ، وقد تستخدم روتیناً فرعیاً أو دالة في لغة عالیة المستوى وأنت لاتعلم بأنك باستدعاء ھذه الدالة أو الروتین الفرعي قد أستدعیت
شفرة مكتوبة بلغة الأسمبلي .

لغة الآله :

لغة الآله كما ذكرنا سابقاً ھي اللغة التي تسطیع الآله أو المعالج التعامل معھا مباشرة كل معالج يحتوي يستطیع تنفیذ تعلیمات المعالج الذي قبله ويملك X ، في العائلة 86 مجموعة تعلیمات موسعة وأ ضافیة لا تستطیع المعالجات التي قبله تنفیذھا وأما المعالج الذي يأتي بعد ھذا المعالج فأنه يدعم التعلیمات الموسعة للمعالج الذي قبله بینما يحتوي ھو أيضاً على تعلیمات جديدة وموسعة ، بأختصار اذا صممت برنامج لمعالح ما فأن المعالجات ماقبل ھذا المعالح لن تستطیع تشغیله بینما المعالج نفسة والمعالجات التي بعده (من نفسالعائلة) تستطیع تشغیل البرنامج .
أبتداء من المعالج 8086 وصولاً X لفد حافظت شركة أنتل على التوافقیة في العائلة 86 80886 ولكن الحفاظ على التوافقیة يفرض قیود على تصمیم المعالج = الى بانتنیوم 4 عند X وأستخدام تقنیات قديمة ، ومؤخراً قرر ت شركة أنتل ايقاف عائلة المعالح 86
مبني على تقنیة ( X بانتنیوم 4 وقامت بأنشاء معالج جديد (غیر متوافق مع العائلة 86 لا 64 بت وھو المعالج اتانیوم الجديد .

مثال على لغة الآله :

التعلیمیة 1011000000000101 ھي تعلیمة بلغة الآله ومعناھا أنقل الرقم 5 الى لا 8 بت الأولى من التعلیمة تشكل mov ah, يقابلھا بلغة الأسمبلي 5 ah المسجل وھي تعني نقل قیمة بطول 8 بت الى OP-code=operation code شفرة التعلیمة لاجزء الثاني منلا 16 تبلا 8بت الأخرى تشكل الرقم 5 ثنائیاً ، AL المسجل

قد تتسائل ما علاقة تمثیل البیانات والعد الثنائي بالأسمبلي ؟ حسناً كما وضحت من قبل فأن الأسمبلي ھي لغة قريبة جداً من لغة الآله وھي لغه منخفضة المستوى تتعامل مع العتاد والمعالح بصورة مباشرة ولكي نحقق فھماً أوسع لھذه اللغه يجب أ ن
نفھم بعض الأشیاء المھمة جداً في بنیة المعالج .

العد الثنائي :

يتم تمثیل الشفرا ت والبیانات في ذاكرة الكمبیوتر كتوالیف من الشحنات الكھربائیة تأخذ أو ‘ 1’ والأخرى TRUE أو صحیح ON قیمتین الأولى وھي وجود الشحنة ويرمز لھا ب أو ‘ 0’ ، ووجود الشحنة يكون عادة FALSE أو خطأ OFF وھي غیاب الشحنه ويركز لھا ب بین 4.5 الى 5.5 فولت ( المعالجات الحديثه بین 2.5 الى 3.5 فولت ) وغیاب الشحنة يكون بین + 0.5 فولت و – 0.5 فولت . وحدا ت الذاكره الأساسیه في الذاكره والوحدا ت التي سنتعامل معھا كثیراً ھي : أسم الوحدة الأحتمالات مايعادلھا أحتمالین 0 و 1 1 بت Bit البت 256 أحتمال 8بت Byte البايت 65536 أحتمال 16 بت= 2بايت Word الكلمة 4,294,967,296 أحتمال 32 بت= 4بايت= 2كلمة DoubleWord=Dword الكلمة المضاعفة 64 بت= 8بايت= 4كلمات= 2كلمة مضاعفة 18,446,744,073,709,551,616 أحتمال Quafword=Qword الكلمة الرابعیة بالطبع ھذه الوحدا ت الأساسیة والصغیره أما مضاعفاتھا فھي :

الوحده الرمز مايعادلھا

1024 بايت KB الكیلوبايت
1024 كیلوبايت MB المیجابايت
1024 میجابايت GB الجیجابايت
1024 جیجابايت TB التیرابايت
1024 تیرابايت PB البیتابايت
1024 بیتابايت EB الأكسابايت
1024 أكسابايت ZB الزيتابايت
1024 يوتابايت YB الیوتابايت
تخزين الأرقام بدو ن أشارة يأخذ النطاق الآتي لكل وحده من الوحدا ت الأساسیة unsigned: بأستخدام طريقة بدو ن الأشارة
المجال
من الى
أسم
الوحدة
البايت 256 0
الكلمة 65536 0
الكلمة 4,294,967,296 0
المضاعفة
الكلمة 18,446,744,073,709,551,616 0
الرباعیة

ASCII الأسكي كود

ملف:ASCII-Table-wide.svg - ويكيبيديا

يتم في الحاسوب وبقیة توحید أستخدام الرموز أستخدام شفرة الآسكي كود (حالیاً وھي تسمح بتعدد اللغات في مستند واحد حیث unicode عيمل على تبني شفرةلا ھي أختصار ل : ASCII يتم تمثیل كل حرف بأستخدام كلمة واحده= 2بايت) كلمة Interchange Information Code For Standard American National ويتم أستخدام ھذا الكود الموحد لتسھیل تناقل البیانات ويمثل كل رمز فیه بعدد ثنائي بطول 1بايت= 8بت= 256 أحتمال .

طريقة كتابة الأرقام في الأسمبلر :

لدلالة على أنه باينري مثال : (b) لكتابة عدد ثنائي يوضع في آخر الرمز أما العدد العشري فلايحتاج الى أضافة وأما العدد لأساس 8 Binary=11010010B Octal=1276O في نھايته O)) أو الرمز Octal=1276Q في نھايته (Q) فیكتب مع المرمز مع hexadecimal=0AB9CDH في نھايته H أما العد  السداسي عشر فیكتب بوضع مراعاة وضع 0 اذا كان العدد يبدأ بحرف كما المثال . يجب أ ن تعرف الفرق بین تخزين الرقم كرقم أو تخزينه كنص فتخزين الرقم 201 مثلاً كرقم سسیأخذ بايت واحد وھو جاھز للقیام بعملیات رياضیة ومنطقیه علیه أما تخزينه ‘ كنص فسیأخذ ثلاثة بايت في البايت الأو ل سیخزن الرقم الخاص بالأسكي كود للرمز ‘ 2 وكما قلت يخزن كرقم يدل على الرمز أما البايت الثاني فسیخزن رقم الآسكي كود للرمز ‘ 0’ أما البايت الثالث فیأخذ القیمه الخاصة بالرمز ‘ 1’ في الآسكي كود أ ي أ ن الرقم خزن بطريقة ” 102 ” ولیس 102 وھذه الطريقة لیست جاھز للجمع أو الطرح ولكنھا ممتاز للطباعه على الشاشه ويمكن تحويل النص الى رقم والعكس .

الأعداد ذي الأشاره:

يتم تخزين الأعداد ذ ي الأشارھ كالتالي : العدد موجب أذا كانت البت الأخیره صفر وقیمة الرقم ھي باقي البتات أ ي لو أخذنا رقماً من بايت واحد فأن البت رقم 7 (الثامنه – الترقیم يبدأ من الصفر ) يجب أ ن تكون صفراً لیكون العدد موجب أما البتات من 0 الى 6 ( السبعه الأولى ) فتشكل قیمة الرقم أما أذا كان العدد سالب فأن البت الأخیرة تساو ي واحد أما قیمة الرقم فتساو ي سالب المكمل الثنائي للعدد أ ي لو أخذنا رقم مخزن في واحد بايت مثال = 11110110 بما أ ن / البت السابعه= 1 فأن الرقم سالب / نأخذ الآن المكمل الثنائي للعدد وھو 00001010 القیمة تساو ي – 00001010 أ ي سالب عشرة .

وبتخزين الرقم بالأشارة يختلف النطاق الذي تأخذ كل وحده :
المجال من الى أسم الوحدة
127+ البايت – 128
32,767+ الكلمة – 32,768
2,147,483,647+ الكلمة – 2,147,483,648
المضاعفة
9,223,372,036,854,775,807+ الكلمة – 9,223,372,036,854,775,808
الرباعیة

تعلیمات وأوامر الأسمبلي :

تتكون التعلیمه الواحدة في الأسمبلي من تمثیل بسیط بالأحرف الأنجلیزيه يقابله بالأرقام تعلیمة لغة آله ، تتكون كل تعلیمة من ممايلي : أولاُ جزء الأمر وھو أمر يدل للجمع) ، الجزء الثاني ھو الوسائط علماً بأن ) ADD على نوع العملیة المطلوبة مثل بعض التعلیمات لايأخذ وسائط والجزء الآخر وسیطة واحدة فقط والبعض الآخر أكثر من
ذلك ، تحدد ھذه الوسائط الشئ الذي سیعمل علیه الأمر ،
يدل على جمع الرقم 5 ADD AX, لوحده عقیم لايدل على شئ لكن الأمر 5 ADD فالأمر ويوضح المثال التالي بعض الأوامر AX مع القیمة الموجودة في المسجل
clc ; وسائط فقط أمر بدو ن
dec ax ; وسیطة واحدة فقط
mov cx,dx ; وسیطتین

لاحظ أ ن أ ي نص في شفرة الأسمبلي يأتي بعد الفاصلة المنقوطة ھو مجرد تعلیق الوسائط ممكن تكون عدة أنواع :
a” / 30 / 1. معلومة فورية (مباشرة) (أ ي ثابته) مثال : 10
AX / : 2. مسجل (سوف يتم شرح المسجلات بالتفصیل في الدروس القادمه ) مثال
EAX / BL
bx] / [100]] / [ 3. موقع ذاكره (يتم تحديده عن طريق العنوا ن) مثال : [ 200
4.متغیر (وھو نفسالسابق لكن بدل أ ن تحفظ أو تحسب العنوا ن يدوياً يقوم الأسمبلر
count / VAR1 / INTVAL / STR ب أ ست بدلا المتغیر برقم يدل علىع نو انه ) مثال : 1

: Debugge مدخل الى الديبغر ھا قد وصلنا الى واحد من أقوى البرامج المبیته في النظام فبواسطة الیبغ تستطیع ثم debug عمل أشیاء عجیبه وغريبه ، حسناً شغل الدوس وعند محث الأوامر أطبع أنتر وستظھر لك علامه ‘-‘ لیل على أستعداد الديبغر على أستقبال أوامرك . الأن دعنا نكتب ھذا البرنامج الصغیر
mov ax, مباشرة الى المسجل أ ي-أكسنقل العدد 2 كمعلومة ; 2
mov bx, المسجل بي-اكسنقل العدد 3 كمعلومة مباشرة الى ; 3
add ax,bx ; أ ي-اكس/ أ ي-اكس=أ ي-أكس+ بي- جمع أ ي-اكي مع بي-اكسمع وضع الجوا ب في
أكس

كیف تقوم بأذخال ھذا الكود :

أ ي أننا سنبدأ نكتب الكود من العنوا ن 100 ثم أضغط أنتر a 1. عند المحث ‘-‘ أدخل 100
بالطبع
2. الآن أدخل كل تعلیمیه ثم أضغط أنتر ومع نھاية التعلیمیة الأخیرة أضغط أنتر مرتین ثم أنتر لترى حالة المسجلات R الأن قم بأدخال الرمز وھي MOV ax, يساو ي صفر وسترى أيضاَ ظھور التعلیمیه 0002 AX لاحظ أ ن المسجل التعلیمیه التي علیھا الدور في التنفیذ ولیسالمعلومة المنفذه ، الآن قم بطباعة الرمز سترى الآن أ ن MOV AX, ثم أنتر لتنفیذ التعلیمیه التي علیھا الدور ھنا ھي 0002 T أصبح يساو ي 2 وھذا مانتوقعه بالضبط وسترى أيضاً التعلیمیع التي علیھا AX المسجل BX ثم أنتر لتنفیذھا لترى أ ن المسجل T أدخل الرمز MOV BX, دور التنفیذ وھي 0003 ADD AX,BX أصبح يساو ي 3 وسترى أيضاً التعلیمیه التي علیھا الدور في التنفیذ وھي أصبحت قیمته مجموع العددين AX لتنفیذھا ولاحظ كیف أ ن المسجل T قم بأدخال الرمز . يساو ي 3 BX 3+2 وھو خمسة بینما بقى المسجل ثم أدخل مرة Q الآن بعدما عرفت كیف تكتب كود بسیط أخرج من الديبغر بالضغط على ثم A حتى تصفر المسجلات مرة أخرى أدخل التعلیمیه 100 Debug أخرى بكتابة الأمر جرب تكتب كود من عندك ومع كل نھاية تعلیمیه أضغط أنتر وفي نھاية التعلیمیه الأخیرة أضغط أنتر مرتین ثم أنتر مباشرة بعد إدخال U ( ملاحظة لترى شفرتك بلغة الآله والأسمبلي أدخل الرمز R ) الكود وقبل إدخال الرمز ثم أنتر لترى المسجلات قبل تنفیذ أ ي عملیة ولترى التعلیمیه التي علیھا R أضغط ثم أنتر لتنفذ التعلیمیه وترى النتائج والتعلیمیه التي بعدھا T الدور في التنفیذ أضغط وھكذا ولاتنسى أذا أرد ت أ ن تدخل كود جديد الخروج والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره

مقالات ذات صلة

اترك تعليقاً

زر الذهاب إلى الأعلى