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

مقدمة إلى لغة التجميع

مغلق
بدأه Xacker في 1 سبتمبر 2005 · 16 رد · 11,062 مشاهدة · في المواضيع المميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مقدمة

ما هي لغة التجميع؟

تصمم وحدة المعالجة المركزية CPU لتنفيذ مجموعة صغيرة من التعليمات التي تدعى بتعليمات "لغة الآلة" machine language وكل تعليمة في هذه اللغة تحدد العملية الواجب اجراؤها على بعض المعاملات operands فمثلا، تتم احدى العمليات النموذجية لجمع معاملين، حيث تشفر العمليات كسلسلة من البتات التي يمكن تفسيرها من قبل وحدة المعالجة المركزية CPU.

تخزّن المعاملات بشكل طبيعي في الذاكرة ويحدد العنوان الذي يخزن عنده المعامل ضمن تعليمة الآلة. فمثلاً, تمثل السلسلة 0000010100001010 تعليمة نموذجية بلغة الآلة, وفيها نجد ان البتات (الخانات) الثمانية الأكثر اهمية most significant bits تمثل شفرة العملية operation code بينما يمثل العنوان بالبتات الثمانية الاقل اهمية. على هذا الاساس فان كل التعليمات هي عبارة عن تسلسل من البتات التي يمكن فهمها وتفسيرها وتنفيذها بواسطة جملة من الدارات الموجودة في وحدة المعالجة CPU.

ان هذا التسلسل من البتات يعتبر صعب الفهم من قبلنا كبشر ولذلك يتم ترميز تعليمات لغة الآلة باستخدام مجموعة مختصرات mnemonics لتمثيل شفرات العمليات ومجموعة رموز symbols لتمثيل عناوين الذاكرة بالاضافة الى المسجلات في الوحدة CPU. تكتب تعليمة الآلة السابقة مثلا بواسطة المختصرات كما يلي:

mnemonic  dest, src      ; comments goes here

وتسمى هذه التعليمة بتعليمة لغة التجميع.

ان كل تعليمة بلغة التجميع هي تمثيل مقابل لتعليمة بلغة الآلة بمعنى ان كل تعليمة في لغة التجميع ستترجم الى تعليمة محددة في لغة الالة وبالتالي فاي تعليمة تستطيع الوحدة CPU تنفيذها ستكون مكتوبة وفق تعليمة مقابلة لها بلغة التجميع.

تعتمد لغة التجميع حسب طبيعتها الخاصة على الالة المستخدمة بمعنى ان برنامج لغة التجميع المكتوب من اجل حواسيب IBM يمكن تنفيذه فقط على حواسيب متوافقة مع IBM ولا يمكن تنفيذه على حواسيب Apple.

يترجم برنامج لغة التجميع الى برنامج لغة الالة بواسطة برنامج اخر يدعى المجمع assembler وصتمم المجمعات معا برمجيا لتلائم معظم الحواسيب الشائعة مثل حواسيب IBM والحواسيب المتوافقة معها والتي تزودنا بها شركات شهيرة مثل Microsoft و Borland.

لغة التجميع واللغة عالية المستوى:

ان اللغات عالية المستوى مثل Pascal, C هي لغات مستقلة عن الالة فالشفرة المصدرية المكتوبة بلغة C مثلا يمكن تنفيذها على اي حاسوب يتوفر فيه مترجم C وبما ان لغة C مستلقة عن الالة فان تفاصيل البنية الحاسوبية الخاصة تكون مخفية عن مبرمج لغة C لانها غير مرتبطة بهذه البنية. لذلك فان برامج C لا تستطيع مباشرة ان تعالج محتويات مسجلات الوحدة CPU لمعالج محدد.

لقد صممت برامج اللغة عالية المستوى ايضا لتكون مختصرة وقابلة للقراءة فتعليمة مثل c = a+b سوف تترجم بواسطة المترجم الى عدة تعليمات من لغة الالة. لذلك فان برامج اي لغة عالية المستوى هي مجموعة من التعليمات اقل بكثير اذا ما قابلناها ببرامج لغة التجميع.

تعتبر البرامج المكتوبة بلغات عالية المستوى اقل فعالية عند تحويلها الى لغة الالة بالمقارنة مع البرامج المكتوبة بلغة التجميع، لان اللغات عالية المستوى هي لغات مستقلة عن الالة ومصممة بالدرجة الاولى لمساعدة المبرمجين على الفهم بدلا من تحسين فعالية الالة. فمثلا البرنامج المكتوب بلغة C++ لاظهار رسالة "Hello World!" سيحتاج عند تحويله الى شفرة الالة الى حوالي 8000 بايت بينما اذا كتب بلغة التجميع فانه سيحتاج الى حوالي 600 بايت تقريبا. على هذا الاساس تعتبر برامج لغة التجميع اكثر فعالية من برامج اي لغة عالية المستوى. بمعنى ان برامج لغة التجميع المكتوبة للعديد من التطبيقات تتطلب حجما اقل وتنفذ بسرعة اكبر بالمقارنة مع البرامج عالية المستوى لنفس التطبيق. لكن كتابة برنامج بلغة التجميع يحتاج الى خبرة عالية وجهد بشري كبير وهذا ناتج عن حقيقة ان مبرمج لغة التجميع يجب ان يكون لديه تصور وفهم عميق لوحدة المعالجة CPU التي ييد استخدامها.

تتميز برامج لغة التجميع بطولها والصعوبة الزائدة في اكتشاف الاخطاء وتصحيحها بدلا من تطويرها, كما انه من الصعب ايضا ادخال ميزات جديدة على برامج موجودة بلغة التجميع بمعنى ان هناك صعوبة واضحة في تطوير برامج لغة التجميع والمحافظة عليها او الاحتفاظ بها.

لماذا نحتاج الى لغة التجميع؟

يوجد نوعان من البرامج المكتوبة للتنفيذ على الحواسيب هما: برامج التطبيقات application programs وبرامج النظام system programs.

تكتب برامج التطبيقات بصورة طبيعية بلغة عالية المستوى لتحقيق مهام مثل لوائح الجرد والتحكم ومعالجة المتحولات والطلبات التجارية وغيرها. لكن بالمقابل فان برامج النظام هي برامج عامة جدا مهمتها تبسيط استخدام الحاسوب ومن هذه البرامج نذكر المترجمات compilers والمحررات editors وانظمة التشغيل operating systems.

تستطيع انظمة من بين هذه البرامج ادارة موارد النظام واذا كان المطلوب وصل اجهزة خارجية الى الحاسوب والتحكم بها فسوف نحتاج الى البرمجة عند مستوى وحدة المعالجة لان برامج اللغا عالية المستوى مستقلة عن الالة machine independent ولا تستطيع العمل عند هذا المستوى وبالتالي سنحتاج الى استخدام لغة التجميع لكتابة برامج للتحكم باجهزة الدخل / الخرج. توجد حالات اخرى ايضا تحدث فيها شروط استثنائية اثناء الحساب مثل الحصول على نتيجة كبيرة جدا او صغيرة جدا يصعب تخزينها في مسجل ال CPU وفي مثل هذه الحالات يتخذ فعل تصحيحي للتغلب على المشكلة فقط باستخدام برنامج لغة التجميع ولذلك تعتبر لغة التجميع اساسية لكتابة البرامج التي تعالج المشاكل البارزة عند مستوى بنية وحدة المعالجة CPU.

متى نستخدم لغة التجميع؟

تمت الاشارة في المقطع السابق الى ان برامج لغة التجميع تستخدم للتحكم بالاجهزة الموصولة مع ال CPU ولمعالجة الشروط الاستثنائية التي تحدث عند مستوى مسجلات الوحدة CPU. وتستخدم لغة التجميع ايضا الى جانب هذه الحالات عند اعتبار الفعالية بانها الحالة الافضل فعلى سبيل المثال ينبغي اعطاء امر للتحكم بطائرة ضمن وقت محدد بعج انجاز بعض الحسابات وفي مثل هذه الحالة يجب تنفيذ برنامج التحكم خلال فترة قصيرة قابلة للتنبؤ ومحددة مسبقا ولذلك يكتب البرنامج عادة بلغة التجميع.

تستخدم لغة التجميع لانه الى جانب الفعالية ان يتم الحصول على تخمين جيد للزمن اللازم بواسطة برنامج لغة التجميع (حيث ان لكل تعليمة او –مختصر- في لغة التجميع زمن خاص بالتنفيذ حسب عدد الدورات وسيتم شرح هذه النقطة لاحقا).

اما الحالة الثالثة التي تعتبر فيها لغة التجميع هامة فهي عندما يكون التطبيق ملموس الكلفة وهناك عدد كبير من الانظمة التي تحتوي بداخلها على برنامج هذا التطبيق المخفي، مثل نظام التحكم والمراقبة المعتمد على معالج صغري للحركة الالية automobiles, او المتحكم المستخدم في آلات الغسيل وغيرها, وكلها تنتمي الى هذا الصنف. في مثل هذه الحالات تكتب البرامج بشفرة التجميع للتاكيد على ان برنامج شفرة الالة المترجم سوف لن يحجز اكثر من سعة الذاكرة الصغيرة ROM الموجودة في النظام.

الاجزاء الرئيسية للغة التجميع:

تتالف تعليمة لغة التجميع في شكلها الابسط من شفرة لغة التشغيل الممثلة بمختصر mnemonics متبوع بلائحة من المعاملات operands حيث ان المعنى من كلمة المختصر هو المساعدة على التذكر حيث انه من السهل تذكر المختصر mov بدلا من الشفرة الثنائية 10110000 التي هي شفرة الالة لهذا المختصر. كمثال على تعليمة بلغة التجميع:

mnemonic  dest, src      ; comments goes here

تستخدم الفاصلة المنقوطة هنا لفصل تعليمات لغة التجميع عن التعليقات comments المدرجة اذ ينصح دوما باستخدام التعليقات مع كل تعليمة في لغة التجميع لشرح الوظيفة التي تؤديها تلك التعليمة وهذا العمل هام بصورة خاصة في لغة التجميع باعتبار ان التعليمات موجزة ومختصرة.

نجد من المثال السابق ان تعليمة لغة التجميع تتالف من المختصر ومن المعاملات كما ذكرنا سابقا. يحدد المختصر التعليمة المراد تنفيذها مثل add, mov, jx, mul الخ, بينما تتالف المعاملات من قسمين:

dest وهو اختصار ل destination اي الوجهة وهو المكان الذي سيتم توجيه القسم الثاني اليه.

src وهو اختصار ل source اي المصدر حيث يتم نقل المعطيات في لغة التجميع بترتيب عكسي من ال source ->destination.

الان ناتي للتوسع, حيث يتالف المعامل من عدة انواع.. فهو اما ان يكون:

- قيمة ثابتة تعرف بالمعامل الفوري immediate value مثل القيمة 10 مثلا.

متحول variable مثل sum يمثل اسما رمزيا لموقع في الذاكرة حيث تخزن قيمة هذا المتحول.

- اسم name لاحد مسجلات الوحدة مثل ax

- عنوان مطلق absolute address لموقع ذاكرة مثل [04Bh0h] – لاحظ ان القيمة العددية تكون ممثلة بالنظام الست عشري.

يتالف برنامج لغة التجميع من جزأين رئيسيين الاول يقدم التوجيهات directives للمجمع لتعيين مكان في الذاكرة من اجل المتحولات المراد استخدامها والقيم المراد تخزينها والفراغ المراد تحديده للمكدس stack الخ.

بينما يشكل الجزء الثاني التعليمات القابلة للتنفيذ executable instructions في برنامج لغة التجميع.

فيما يلي جزء صغير من برنامج بلغة التجميع (16 بت) الذي يقوم بطباعة محرف في نافذة ال DOS:

.data  ; beginning of data  segment
x  db	0             ; define 1 byte x. set x = 0
.code  ; beginning of code segment
main proc                                              ; beginning of main procedure
                add	x, 4                         ; add 4 to x (hex addition)
                mov	dl, x                        ; move results to DL register
                mov	ah, 2                       ; DOS service, write char to output
                int	21h                         ; call interrupt
                mov	ah, 4Ch                  ; DOS service, end & return to DOS
                int	21h                         ; call interrupt
main endp                                             ; end of procedure

الى هنا ناتي الى ختام هذا المقال حول لغة التجميع.

ساقوم بمتابعة هذه المواضيع ان وجدت تفاعلا من الاعضاء والا فانها ستنتظر الى وقت قريب

مراجعة للمقاطعات المستخدمة في هذا المقال:

INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
	AH = 02h
	DL = character to write

Return: AL = last character output (despite the official docs which state
  nothing is returned) (at least DOS 2.1-7.0)

مقدمة إلى لغة التجميع.zip

تم تعديل هذه المشاركة بواسطة Xacker في 1 سبتمبر 2005 في 04:55

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#2

شكرا اخي خاكر لدي شعور اني قرات هذه المقالة قبل هذا

يبدو اني ساترك قسم الدلفي لاصبح تلميذا عندكم

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#3

الله يعطيك العافيه استآذ Xacker

بارك الله فيك ووفقك لما تحب وترضاه على ماتنفع اخوانك به من مواضيع وحلقات ودورات بارك الله فيك :)

بالحقيقه كلمه حق :)

مبدع ورائع وكريم هنا وهناك ( منتدى الابداع الاسلامي :) )

والله يعطيك الصحه والعافيه .

اخوك .

#4

مشرفنا الغالي شكرا على المعلوومات وبانتظار المزيد :)

3424.gif
#5

شكرا جزيلا اخ XACKER وتحياتي لك

على فكرة المقارنة بالسرعة والفعالية بتلفت الانتباه

يعني من8000 بايت ل600 بايت :rolleyes:

#6

romanof: هنا

والعفو من الجميع

بالمناسبة اخي allko: الرقم تقريبي اذا بتحب بشفلك الرقم الاكيد :)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7
Xacker كتب:
romanof: هنا

والعفو من الجميع

بالمناسبة اخي allko: الرقم تقريبي اذا بتحب بشفلك الرقم الاكيد :)

والله بكون ممنون

واذا في مصدر بلاقي فيه حقائق من هالنوع يا ريت B)

لانو هادي المعلومات بتشجعنا على التعلم

#8

اخي XACER في عندي قليل من الاسئلة...

اقتباس
تعتمد لغة التجميع حسب طبيعتها الخاصة على الالة المستخدمة بمعنى ان برنامج لغة التجميع المكتوب من اجل حواسيب IBM يمكن تنفيذه فقط على حواسيب متوافقة مع IBM ولا يمكن تنفيذه على حواسيب Apple.

ما هو المقصود بحاسوب IBM (او APPLE) ؟

هل المقصود نظام هيكلي معين من الهاردوير يعمل بطريقة محددة ؟

ام المقصود الحواسيب التي تنتجها شركة IBM فقط؟ (لا اعتقد ذلك)

اليس من المفروض ان لغة التجميع تختلف باختلاف نوع المعالجات؟ اذن المفروض نقول حاسوب Intel وحاسوب AMD

ام شيء اخر؟

ارجو التوضيح...

السؤال الثاني

اقتباس
حيث ان لكل تعليمة او –مختصر- في لغة التجميع زمن خاص بالتنفيذ حسب عدد الدورات

تقصد الـ Machine Cycles

هل من الممكن ان توضح لي هذه النقطة ولو باختصار

سلام

تم تعديل هذه المشاركة بواسطة allko في 1 سبتمبر 2005 في 18:31

#9

بالنسبة لتحديد حجم الفرق فهالشي ما بده مصادر.. اكتب برنامجين وشوف الفرق (هاد اللي انا بتبعه)

اما بالنسبة للفرق بين انظمة المعالجة (بين الحواسيب) فهالشي كنت رح اتطرقله بموضوع اوسع لكن ساحاول ان اجيبك بشئ من التفصيل عندما اعود الى البيت (رايح ودع رفيقي مسافر على مصر)

يالله بالاذن

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

Thx X Hacker ;)

For This Great Efforts!!

You Know!! After I searched for infos about you!!

I Discovered tht u're a fan for Kevin Mitnick "X Hacker" (That Appears in Ur E-mail Add)

And So Do I, I'm also a fan for him.

And I wanna u to see this funny pic 4 him:

http://www.mccullagh.org/db9/10d-9/kevin-mitnick.jpg

& another point!! what's ur origin?? r u from Palestine??

Regards,

DA217

#11

first of all, I'm "Xacker", not "X Hacker", a combination of both!

and yea, after spending 5 years in jail without a trail I would call my self a VB programmer.. not an Xacker!!

no I'm not from palestine, read more on my ID panel (hint: country)

and you are welcome :)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

nice ppl,but dont think that he'll lose smth big after " im not a hacker , im a security professional"

#13

السلام عليكم ورحمة الله وبركاتة

نشكرك على هذا المجهود ونرجوا من الله ان ينفعنا بما علمنا

#14

الله يبارك فيك ,, والله اني التمس مشاركاتك اخي Xacher , ارجو المتابعة :)

7asbi.gif
#15

اتمنى ان تستمر اخي العزيز بل واتمنى تثبيت الموضوع

لاننا كممتدئين نحتاج الى مثل هذه السلسة واكيد سيكون هناك مبتدئين مثلي

وللفائده وللتنظم للموقع اتمنى تثبيت الموضوع ليوكون مرجع للممتدئين مثلي

واتمنى الاستمرار اخي العزيز

وشكرا للجميع

#16

اختي/اخي انا مستمر في السلسلة ولكنها مواضيع ليست في نفس الصفحة او الموضوع! راجعوا الارشيف المثبت يا جماعة!

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#17

مشكور اخي العزيز والحبيب Junkie على هذا الموضوع والمعلومات القيمة والرائعة

1- بخصوص تعلم هذه اللغة ( التجميع ) هل يمكن ان ان نكتب البرامج على حسب المعالج بمعنى انني قرأت عن برمجة المعالجات ان لكل معالج سيت او مجموعة من الاوامر التي تتلائم مع تركيبة هذا المعالج ...وان كل معالج حديث تكون الاوامر ( او بعضها ) جديد كنوع من الاضافة ...

ام انها عامة لكل انواع المعالجات ..

2- هل من الضروري ان نتعلم مكونات المعالج والتركيبة الداخلية له ...

3-هل يمكن القول ان لغة التجميع تستعمل للتحكم بالالات والاجهزة كما في الماكروكنترول ومكائن cnc كماكنة الخراطة والتفريز ..ام هي عامة

4- هل تعتبر برامج هذه اللغة هي برامج تعريف العتاد ( الهارد وير )

5- اين يخزن البرنامج المكتوب بهذه اللغة خاصة حضرتكم قلتم ان هناك البرنامج المصدر والبرنامج الهدف ..

6-تبسيط اكثر لما ذكرتم :

حيث ذكرت يا اخي العزيز ان كل تعليمة تترجم الى لغة الالة ليتم تنفيذها من قبل المعالج

فهذا المترجم او المفسر باي لغة كتب او صمم ام هو وهل هذا المترجم هو مكون مادي ام برمجي سيما انك قلت ان المترجمات وانظمة التشغيل تكتب بهذه اللغة ...

7-لغة الالة كيف تعمل ذكرتم ان الايعازات ما هي الا عبارة عن سلسلة اصفار وواحدات تنفذ بواسطة الدارات الالكترونية

8- اين وباي برنامج يتم كتابة برامج التجميع ..وكذلك لغة الالة

=======

والله هذه معلومات تدور في ذهني منذ اكثر من 7 اعوام كيف افهم الية عمل لغة الالة ولغة التجميع

اللهم لك الحمد كما ينبغي لجلالك وعظيم سلطانك

39383456in9.jpg

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

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