سوني مبايل SONY MOBILE
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

سوني مبايل SONY MOBILE


 
الرئيسيةأحدث الصورالتسجيلدخول

 

 لغة التجميع و المعالجات الدقيقة

اذهب الى الأسفل 
2 مشترك
انتقل الى الصفحة : الصفحة السابقة  1, 2, 3  الصفحة التالية
كاتب الموضوعرسالة
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:12 am





المستودع

المصدر

مسجل عام
مسجل مقطع
متغير
(موقع في الذاكرة)
ثابت
مسجل عام
مسموح
مسموح
مسموح
غير مسموح
مسجل مقطع
مسموح
غير مسموح
مسموح
غير مسموح
متغير ( موقع في الذاكرة)
مسموح
مسموح
غير مسموح
غير مسموح
ثابت
مسموح
غير مسموح
مسموح
غير مسموح





2- الأمر XCHG (Exchange)

يستخدم الأمرXCHG لاستبدال قيمة مسجلين أو لاستبدال قيمة مسجل مع موقع محدد في الذاكرة (متغير). والصيغة العامة للأمر هي:
XCHG Destination, Source



مثال:

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:15 am



حيث يتم تبادل قيم المسجلين AH, BL (تصبح قيمة AH تساوى قيمةBL وBL تساوى AH).

مثال:

الأمر التالي يقوم باستبدال قيمة المسجل AX مع المتغير WORD1

XCHG AX, WORD1

الجدول التالي يوضح قيود استخدام الأمر XCHG





لاحظ عدم السماح للتعليمتين MOV أو XCHG بالتعامل مع موقعين في الذاكرة في أمر واحد مثل MOV Word1,Word2

ولكن يمكن تفادي هذا القيد باستخدام مسجل وسيط فيصبح الأمر كما يلي:

Mov AX , Word2

Mov Word1 , AX
المستودع


المصدر

مسجل عام

موقع في الذاكرة

مسجل عام

مسموح

مسموح

موقع في الذاكرة

مسموح

غير مسموح


الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:16 am



3 - العمليات الحسابية ADD, SUB, INC, DEC, NEG:

يتم استخدام الأمرين ADD و SUB لجمع أو طرح محتويات مسجلين أو مسجل وموقع في الذاكرة أو موقع في الذاكرة مع مسجل أو مسجل مع موقع في الذاكرة والصيغة العامة للأمرين هي:-
ADD Destination, Source



SUB Destination, Source
مثلاً الأمر


ADD WORD1, AX



يقوم بجمع محتويات المسجل AX إلي قيمة المتغير WORD1 ويتم تخزين النتيجة في المتغير WORD1 (لا يتم تغيير قيمة محتويات المسجل AX بعد تنفيذ الأمر) كذلك الأمر
SUB AX, DX



حيث يتم طرح محتويات المسجل DX من المسجل AX ويتم تخزين النتيجة في المسجل AX (لاحظ أن محتويات المسجل DX لا تتغير بعد تنفيذ الأمر)

الجدول التالي يبين قيود استعمال الأمرين ADD و SUB


المستودع


المصدر

مسجل عام

موقع في الذاكرة

مسجل عام

مسموح

مسموح

موقع في الذاكرة

مسموح

غير مسموح


الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:17 am



ثابت

مسموح

مسموح


لاحظ أنه غير مسموح بالجمع أو الطرح المباشر بين مواقع في الذاكرة في أمر واحد وبالتالي فإن الأمر ADD BYTE1, BYTE2 غير مسموح به ولكن يمكن إعادة كتابته على الصورة:
MOV AL, BYTE2 ; حيث يتم قيمة المتغير إلى مسجل قبل عملية الجمع


ADD BYTE1, AL



الأمر ADD BL,5 يقوم بجمع الرقم 5 إلى محتويات المسجل BL وتخزين النتيجة في المسجل BL.

كملاحظة عامه نجد انه يجب أن يكون المتغيرين لهما نفس الطول بمعني أن الأمر التالي غير مقبول
MOV AX ,BYTE1



وذلك لأن طول المتغير BYTE هو خانه واحدة أما المسجل AX فان طوله هو خانتين 2-BYTE. (أي أن المتغيرات (المعاملات) يجب أن تكون من نفس النوع )



بيــنما نجــد الـ ASEMBLER يستـقبل الأمر

MOV AH, ‘A’ ( مادام AH بايت فإن المصدر يجب أن يكون كذلك بايت )

حيث يتم وضع الرقم 41h في المسجلAH ويقوم أيضا بتقبل الأمر

MOV AX ,’A’ ( مادام AX كلمة فإن المصدر يجب أن يكون كذلك كلمة )

حيـث سيــتم وضــع الرقــم0041h في المسجـل AX.

الأوامر INC (Increment) , DEC (Decrement) , NEG

أما الأمرين INC ,DEC يتم فيها زيادة أو نقصان قيمه مسجل أو موقع في الذاكرة بمقدار 1 والصيـغة العامة لها هي:

INC Destination ; Destination = Destination +1

DEC Destination ; Destination = Destination - 1

فمـثلا الأمرINC WORD1 يقـوم بجمع 1 إلى محتويات المتغيـرWORD1

بيـنما الأمرDEC WORD2 يـقوم بإنقاص الرقم 1 مـن محتويات المتغيـرWORD2.

أخيراً نتحدث عن الأمرNEG(Negate) والذي يستعمل لتحويــل إشارة الرقم الموجب إلي رقم سالب والـرقم السالب يـتم تحويـله إلي رقم موجب وذلك بتحويـــله إلى المكمل لاثنين Complement 2’S والصيغة العامة للأمر هي:

NEG Destination

حيـث يتـم التعـامل مـع أحد المسجلات أو مـوقع في الذاكرة

مثـــال:

NEG BX ; BX = -BX

NEG BYTE ; BYTE = -BYTE
.
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:18 am


[b][u]تحويل العبارات إلي صورة برامج التجميع:-


لكي يتم التعامل مع الأوامر السابقة سنقوم في هذا الجزء بتحويل بعض العمليات من لغات البرمجة العليا High Level Programming Languages إلي تعليمات بلغة التجميع.

إذا افترضنا أن المتغيرين A و B عبارة عن متغيرين من النوع WORD.

لتحويل العبارة B=A

لأنه لا يمكن نقل محتويات لمتغير في الذاكرة إلي متغير آخر في الذاكرة مباشرةً يلزم تحويل العبارة إلي نقل قيمة المتغير إلي مسجل ثم نقل قيمة المسجل إلي الرقم المطلوب

انقل محتويات A الي المسجل AX قبل نقلها الى B MOV AX , A

MOV B , AX

أما الأمر A= 5 - A يتم تحويلة إلى الأوامر



ضع 5 في AX MOV AX , 5


AX تحتوي علي 5-A SUB AX , A


ضعها في A MOV A , AX




أو إلى الأوامر
NEG A



ADD A,5

وأخيراً الأمر A=B-2*A يتم تحويلة إلى الأوامر
MOV AX,B



SUB AX,A

SUB AX, A

MOV A,AX
[b]الشكل العام للبرنامج:-




في الفصل السابق قمنا بتوضيح عملية تقسيم الذاكرة إلى مقاطع مختلفة بحيث يحتوى المقطع الأول علي البرنامج نفسه ويسمى مقطع البرنامج CODE SEGMENT ومقطع آخر يحتوى علي البيانات المستخدمة في البرنامج ويسمى مقطع البيانات DATA SEGMENT ومقطع ثالث يحتوي علي المكدس ويسمى مقطع المكدس STACK SEGMENT

في هذا الجزء سيتم توضيح كيفية توليد هذه المقاطع بواسطة الـ ASSEMBLER مع توضيح كيفية كتابة وتعريف كل مقطع داخل البرنامج.

نماذج الذاكرة MEMORY MODELS:

كما ذكرنا فيما مضى انه قد يكون البرنامج المطلوب كتابته صغير بحيث يمكن أن يسع مقطع واحد فقط لكل من البرنامج والبيانات والمكدس وقد تحتاج إلي استخدام مقطع منفصل لكل على حده. يتم استعمال الكلمة.MODEL وذلك بكتابة السطر التالي:

.MODEL MEMORY_MODEL

ويتم كتابة هذا السطر قبل تعريف أي نقطة ويوجد لدينا اكثر من نموذج للذاكرة سوف يتم توضيحها في الجدول التالي ولكن عموماً إذا لم يكن حجم البيانات كبيراً يتم غالباً استخدام النموذج SMALL وهذا هو الحال في اغلب البرامج التي سنتطرق لها. ويتم كتابة السطر على الصورة التالية:.MODEL SMALL[/b]

[/b]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:20 am



الجدول التالي يوضح أسماء موديلات الذاكرة المختلفة وتوضيح خصائص كل منها




الموديل MODEL
الوصف
SMALL

الكود في مقطع واحد والبيانات في مقطع واحد
MEDIUM

الكود في أكثر من مقطع والبيانات في مقطع واحد
COMPACT

الكود في مقطع واحد والبيانات في أكثر من مقطع
LARGE

الكود في أكثر من مقطع والبيانات في أكثر من مقطع ولكن غير مسموح بتعريف مصفوف اكبر من 64k BYTE
HUGE

الكود في أكثر من مقطع والبيانات في أكثر من مقطع ولكن يمكن أن يكون هناك مصفوف بطول اكبر من 64k BYTE




مقطع البيانات DATA SEGMENT:

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

لتعريف مقطع البيانات يتم استخدام التعريف.DATA وبعد ذلك يتم تعريف المتغيرات والثوابت مباشرة والمثال التالي يوضح ذلك

.DATA

WORD1 DW 2

WORD2 DW 5

MSG DB ‘THIS IS A MESSAGE’

MASK EQU 10011001B

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:21 am



مقطع المكدس Stack Segment:

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

ويتم تعريف مقطع المكدس باستخدام التعريف:.Stack Size

حيث size يمثل عدداً اختيارياً هو حجم المكدس بالوحدات bytes. والمثال التالي يقوم بتعريف المكدس بحجم 100h

.Stack 100h

إذا لم يتم تعريف الحجم يتم افتراض الحجم 1KB بواسطة الـ Assembler.

مقطـــــع البرنامج Code Segment:

يحتوى هذا المقطع على الأوامر والتعليمات المستخدمة داخل البرنامج ويتم تعريفه على النحو التالي:

.Code Name

حيث Name هـــو اسم المقطع.ولا داعي لإعطاء اسم للمقطع في حالة النموذج Small (لان لدينا مقطع واحد فقط ) حيث سيقوم برنامج الـ Assembly بإعطاء رسالة خطأ في هذه الحالة.

داخل مقطع البرنامج يتم وضع الأوامر في صورة برامج صغيــرة (إجراءات ) Procedure وأبسط تعريف لهذه الإجراءات على النحو التالي

Name Proc

; الأوامر والتعليمات داخل الإجراء

Name ENDP

حيث Name هو اسم الإجراء، أما Proc و Endp فهما إيعازات Pseudo_Ops

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:22 am


[b]الجزء التالي يوضح مقطع برنامج كامل


.CODE

MAIN PROC

; الأوامر والتعليمات داخل الإجراء

MAIN ENDP

; بقية الإجراءات يتـــم كتابتهـــا هـــــنا

والآن بعد أن رأينا كل مقاطع البرنامج فان الشكل العام للبرنامج في حالة النموذج small. يكون على النحو التالي:

.MODEL SMALL

.STACK 100H

.DATA

; هنا يكون تعريف المتغيرات والثوابت

.CODE

MAIN PROC

; التعليمات والأوامر داخل الإجراء

MAINENDP

;بقية الإجراءات تكتب هنا

END MAIN

آخر سطر في البرنامج يحوى كلمة نهاية البرنامج ENDمتبوعة باسم الإجراء الرئيسي في البرنامج.



تعليمات الإدخال والإخراج INPUT &OUTPUT INSTRUCTIONS

يتعامل المعالج الدقيق مع الأجهزة الخارجية باستخدام موانئ الإدخال والإخراج وذلك باستخدام الأوامر IN للقراءة وفى ميناء إدخال والأوامر OUT للكتابة في ميناء إخراج. ويتم استخدام هذه الأوامر في بعض الأحيان بالذات إذا كان المطلوب هو سرعة التعامل مع الجهاز الخارجي وعادة لا يتم استخدام هذه الأوامر في البرامج التطبيقية لسببين الأول أن عناوين الموانئ قد تختلف من جهاز لآخر مما يتطلب تعديل البرنامج في كل مرة, والثاني انه من الأسهل التعامل مع الأجهزة الخارجية بواسطة الشركات المصنعة للأجهزة بواسطة روتينات خدمة SERVICE ROUTINES يتم توفيرها بواسطة الشركات المصنعة للأجهزة.يوجد نوعان في روتينات الخدمة المستخدمة في التعامل مع الموانئ يسمى الأول BIOS (BASIC INPUT /OUTPUT SYSTEM ) والثاني باستخدام الـ DOS. روتينات الـ BIOS يتم تخزينها في ذاكرة القراءة فقط (الـ ROM ) ويتعامل مباشرة مع موانئ


[/b]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:24 am



الإدخال والإخراج بينما خدمات الـ DOS تقوم بتنفيذ عمليات أكثر تعقيداً مثلاً طباعة سلسلة حروف وهي تقوم عادة باستخدام الـ BIOS في تنفيذ عمليات إدخال/إخراج مباشرة.

يتم نداء الـ BIOS أو الـ DOS لتنفيذ عملية محددة باستخدام نداء مقاطعة INT (INTERRUPT ) والنداء على هذه الصورة

INT INTERRUPT_NUMBER

حيث يتم تحديد رقم نداء المقاطعة وهو رقم محدد مثلاً INT 16h يقوم بطلب خدمة في الـ BIOS وهى خاصة بقراءة قيمة في لوحة المفاتيح و INT 21h خاص بنداء خدمة من الـ DOS سيتم التعرف على مزيد من الخدمات لاحقاً بإذن الله



نداء المقاطع رقم 21H ( INT 21H )

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



الجدول التالي يوضح ثلاثة فقط من الخدمات التي يخدمها النظام

رقم الخدمة


الوصف ( الروتين )
1

قراءة قيمة واحدة من لوحة المفاتيح
2

كتابة حرف واحد في الشاشة
9

كتابة مجموعة من الحروف في الشاشة




في الجزء التالي ستناول بعض هذه الخدمات

الخدمة رقم 1: قراءة حرف من لوحة المفاتيح

المدخلات: وضع الرقم 1 في المسجلAH

المخرجات: المسجل AL يحتوي علي كود ال ASCII للحرف الذي تم الضغط عليه في لوحة

المفاتيح أو 0 في حالة الضغط على مفتاح غير حرفي NON CHARACHTER KEY

) مثلا المفاتيح F1-F10 ).

لتنفيذ هذه الخدمة تتم كتابة الآتي:-
MOV AH, 01



INT 21H

تقوم هذه الخدمة بانتظار المستخدم إلى حين الضغط على لوحة المفاتيح. عند الضغط على أي مفتاح يتم الحصول على كود الـ ASCII للمفتاح من المسجل AL كما يتم عرض الحرف الذي تم الضغط عليه في لوحة المفاتيح علي الشاشة. ولا تقوم هذه الخدمة بإرسال رسالة إلي المستخدم فهي فقط تنتظر حتى يتم الضغط على مفتاح. إذا تم ضغط بعض المفاتيح الخاصة مثل F1-F10 فسوف يحتوي المسجل AL
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:24 am



علي القيمة صفر. التعليمات التي تلي INT 21h تستطيع فحص المسجل AL و تتخذ الفعل المناسب.

2 - الخدمة رقم 2: عرض حرف على الشاشة أو تنفيذ وظيفة تحكم.

المدخلات : وضع الرقم 02 في المسجل AH.

وضع شفرة الـ ASCII كود للحرف المطلوب عرضه في المسجل DL.

المخرجات : الكود الـ ASCII للحرف الذي تم عرضه يتم وضعه في المسجل AL.

مثال: الأوامر التالية تعرض علامة استفهام علي الشاشة

MOV AH , 02H

MOV DL , ‘?’

INT 21H



بعد طباعة الحرف على الشاشة يتحرك المؤشر إلي الموضع التالي ( إذا كان الوضع الحالي هو نهاية السطر يتحرك المؤشر إلي بداية السطر الجديد).

يتم استخدام هذه الخدمة لطباعة حرف التحكم Control Character أيضاً والجدول التالي يوضح بعض حروف التحكم)


الكود ASCII
الــرمـــز
الوظيـفة
7
BEL (Beep)

إصدار صوت
8
BS (Back space)

مسافة للخلف Back Space ) )
9
HT (Tab)

تحرك بمقدار Tab
A
LF (Line Feed)

سطر جديد
D
CR (Carriage return)

بداية السطر الحالي


بعد التنفيذ يحصل المسجل AL علي شفرة ASCII لحرف التحكم

البرنامج الأول:

برنامجنا الأول سيقوم بقراءة حرف من لوحة المفاتيح ثم طباعة الحرف الذي تم إدخاله في بداية السطر التالي ثم إنهاء البرنامج.

يتكون البرنامج من الأجزاء التالية:

1- إظهار علامة الاستفهام "؟" على الشاشة

MOV AH,2

MOV DL,’?’

INT 21h

2- قراءة حرف من لوحة المفاتيح

MOV AH,1

INT 21h

3- حفظ الحرف الذي تم إدخاله في مسجل آخر BL مثلاً و ذلك لأننا سنستخدم المسجل DL في تحريك المؤشر إلي بداية السطر الجديد وسيؤدي ذلك لتغيير محتويات المسجل AL ( لاحظ أن الخدمة 2 تقوم باستقبال الحرف المطلوب طباعته في المسجل DL وتقوم بإعادة الحرف المطبوع في المسجل AL مما يجعلنا نفقد القيمة المسجلة فيه) وبالتالي يجب تخزين محتوياته في مسجل آخر مثل BL

MOV BL , AL

4- لتحريك المسجل إلي بداية السطر الجديد يجب طباعة حرف التحكم

Carriage Return و Line Feed ويتم ذلك كالآتي

MOV AH,2

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:26 am



MOV DL,0dh ; Carriage Return

INT 21h

MOV DL,0ah ; Line Feed

INT 21h

5- طباعة الحرف الذي تم إدخاله (لاحظ انه تم تخزينه في المسجل BL في الخطوة (3)

MOV DL , BL

INT 21h

6- إنهاء البرنامج و العودة الى نظام التشغيل ويتم ذلك بوضع الرقم 4Ch في المسجل AH

واستدعاء نداء المقاطعة رقم 21h.

MOV AH,4CH

INT 21h





و على ذلك يصبح البرنامج على الصورة التالية:

TITLE FIRST: ECHO PROGRAM

.MODEL SMALL

.STACK 100H

.CODE

MAIN PROC

;اظهار علامة التعجب

MOV AH,2 ; طباعة حرف

MOV DL,’?’ ; الحرف المطلوب طباعته

INT 21H

;قراءة حرف من لوحة المفاتيح

MOV AH,01 ; قراءة حرف

INT 21H

MOV BL,AL ; تخزين الحرف

; الذهاب إلى سطر جديد

MOV AH,02

MOV DL,0DH ; carriage return

INT 21H

MOV DL,0AH ; line feed

INT 21H

; طباعة الحرف الذي تم إدخاله

MOV DL,BL ; ; إحضار الحرف من المسجل

INT 21H

; DOS العودة إلى نظام التشغيل

MOV AH,4CH

INT 21H

MAIN ENDP

END MAIN

لاحظ أنه عندما يتوقف البرنامج فإنه يحول التحكم للـ DOS بتنفيذ INT 21h الوظيفة 4Ch

ولأنه لم يتم استخدام المتغيرات فقد حذف قطاع البيانات في هذا البرنامج



الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:27 am



إنشاء وتشغيل البرنامج:-

في هذا الجزء سنوضح طريقة إنشاء و تجهيز البرنامج للتشغيل حيث يتضمن ذلك الخطوات التالية:-

1- استخدام أي برنامج Text Editor لكتابة البرنامج الموضح في المثال السابق. (ملف برنامج المصدر)

2- استخدام الـ ASSEMBLER لتوليد الملف المسمى OBJECT FILE.

3- استخدام برنامج الربط LINKER لربط ملفات الـ OBJECTلتوليد ملف التشغيل

EXECUTABLE FILE.

4- تشغيل البرنامج.

فيما يلي توضيح بالتفصيل كل خطوة من الخطوات السابقة:-



1- إنشاء ملف البرامجSOURCE FILE:-

يتم استخدام أي محرر نصوص Editor لكتابة البرنامج ويمكن استخدام أي محرر ينتج ملف نصي عادى Text Editor مثل EDIT يتم عادة تخزين الملف بامتداد ASM (Extention) مثلا المثال السابق نحفظ الملف بالاسم FIRST.ASM.



2- تجميع البرنامجASSEMBLE THE PROGRAM:-

ويتم هذا عن طريق معالجة البرنامج بواسطة أحد الـ Assembler مثلMASM(Microsoft Macro Assembler) أو TASM(Turbo Assembler) و التي تقوم بتحويل الملف الأصلي الذي يحتوى على البرنامج المكتوبة بلغة التجميع إلى ملف اقرب إلى لغة الآلة يسمى(OBJECT FILE). وأثناء هذه العملية يتم التعامل مع الملف والتأكد من عدم وجود أي خطأ في كتابة البرنامج حيث يتم الرجوع إلي الخطوة (1) وتحديد الأخطاء و تصحيحها حتى نحصل على رسالة بعدم وجود أخطاء في البرنامج.

واستخدام البرنامج TASM أوMASM يتم على النحو التالي:

TASM FILENAME;

MASM FILENAME; أو

في هذا الجزء سنستخدم برنامج TASM والجزء التالي يوضح هذه العملية:-

>TASM FIRST;

TURBO ASSEMBLER VERSION 3.1 COPYRGHT(C)1988,1992BRLAND INTERNATIONAL

ASSEMBLING FILE: FIRST.SAM

ERROR MESSAGE: NONE

WARNING MESSAGE:NONE

PASSES: 1

السطر الأول يوضح نوع الـASSEMBLER والسطر الثاني يوضح اسم الملف يليه سطرين بالأخطاء التي توجد في البرنامج.

لاحظ أنه إذا كان هناك أي خطأ في البرنامج الأصلي يتم إظهار رسالة تحوي رقم السطر ونبذة سريعة عن الخطأ حيث يجب فتح الملف الأصلي first.asm وتصحيح الخطأ ثم العودة مرة أخرى وإعادة هذه الخطوة حتى نحصل على الملف first.obj.



الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:28 am



-ربط البرنامج Linking the program

الملف الذي تم إنشاؤه في الخطوة السابقة هو ملف بلغة الآلة Machine Language ولكنه غير قابل للتنفيذ لأنه لا يحتوي على الشكل المناسب للبرامج القابلة للتنفيذ وذلك للأسباب التالية:

أ- عدم تعريف مكان تحميل الملف في الذاكرة وبالتالي فإن عمليه العنونة داخل البرنامج لا يمكن تنفيذها.

ب- بعض الأسماء والعناوين داخل البرنامج تكون غير معرفة بالذات في حالة ربط أكثر من برنامج حيث يتم من أحد البرامج نداء برامج فرعيه أخرى مكتوب في ملف آخر.



برنامج الربط Link Program يقوم بإجراء عملية الربط بين الـ Object Files المختلفة وتحديد العناوين داخل البرنامج ويقوم بعد ذلك بإنتاج ملف قابل للتنفيذ. EXE (Executable File) على النحو التالي:

> TLINK First;

Turbo Link Version 2.0 Copyright (c) 1987 Borland International.



4 – تنفيذ البرنامج Run The Program

لتشغيل البرنامج يتم فقط كتابة اسمه من محث الـDOS

C:\ASM > first

?t

t

C:\ASM >

يقوم البرنامج بطباعة الحرف "؟" والانتظار إلي حين الضغط علي مفتاح من لوحة المفاتيح. يقوم البرنامج بالذهاب إلي بداية السطر الجديد وطباعة الحرف الذي تم الضغط عليه ثم الانتهاء والعودة إلي نظام التشغيل.



إظهار رسالة علي الشاشة Display String

في البرنامج السابق تم استخدام الوظيفة رقم 1 من نداء المقاطعة رقم 21h وهي تستخدم لاستقبال حرف من لوحة المفاتيح وكذلك الوظيفة رقم 2 وهي لطباعة حرف علي الشاشة.

في هذا المثال ولإظهار رسالة كاملة علي الشاشة يتم استخدام الخدمة رقم 9
خدمة رقم 9 : إظهار رسالة علي الشاشة



المدخلات : عنوان الإزاحة Offset لبداية الرسالة يتم وضعه في المسجل DX

( يجب أن تنتهي الرسالة بالحرف "$" )

الحرف "$" في نهاية الرسالة لا تتم طباعته علي الشاشة. وإذا احتوت الرسالة علي أي حرف تحكم Control Character فإنه يتم تنفيذه أثناء الطباعة.

لتوضيح هذه العملية سنقوم بكتابة برنامج يقوم بإظهار الرسالة ‘Hello!’ في الشاشة. يتم تعريف هذه الرسالة في مقطع البيانات بالطرقة التالية

msg db ‘HELLO!$’

الأمر LEA

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:29 am


تحتاج الخدمة رقم 9 في نداء المقاطعة INT 21h إلي تجهيز عنوان إزاحة الرسالة في المسجل DX ولعمل ذلك يتم تنفيذ الأمر LEA ( Load Effective Address)
LEA Destination , Source

حيث المستودع هو أحد المسجلات العامة والمصدر هو اسم المتغير الحرفي (موقع في الذاكرة). يقوم الأمر بوضع عنوان الإزاحة للمتغير المصدر في المسجل المستودع. فمثلاً الأمر
LEA DX, MSG




يقوم بوضع قيمة الإزاحة لعنوان المتغير msg في المسجل DX.

ولأن هذا البرنامج يحتوي علي مقطع بيانات فإننا نحتاج إلي تجهيز المسجل DS لكي يشير إلي مقطع البيانات.



بادئة مقطع البرنامج PSP (Program Segment Prefix)

عندما يتم تحميل البرنامج في الذاكرة يقوم نظام التشغيل بتخصيص 256 خانة للبرنامج وهي تسمي PSP. يحتوي الـ PSP علي معلومات عن البرنامج وعلي ذلك يستطيع البرنامج التعامل مع هذه المعلومات. يقوم نظام التشغيل DOS بوضع عنوان المقطع الخاص به في كل من المسجلين DS و ES قبل تنفيذ البرنامج ونتيجة لذلك فإن مسجل مقطع البيانات DS لا يحتوي علي عنوان مقطع البيانات الخاص بالبرنامج ولعلاج هذه المشكلة فإن أي برنامج يحتوي علي مقطع بيانات يجب أن يبدأ بتجهيز مسجل مقطع البيانات ليشير إلي مقطع البيانات الخاص بالبرنامج علي النحو التالي
MOV AX, @DATA



MOV DS, AX

حيث @DATA هو عنوان مقطع البيانات الخاص بالبرنامج والمعرف بـ.DATA حيث يقوم الـ ASSEMBLER بتحويل الاسم @DATA إلي رقم يمثل عنوان المقطع ولأننا لا نستطيع تخزين النتيجة في المسجل DS مباشرة فقد استعنا بمسجل عام AX كمسجل وسيط يتم وضع القيمة فيه أولاً وبعد ذلك يتم نقلها إلي المسجل DS.

بعد ذلك يمكن طباعة الرسالة ‘HELLO!’ وذلك عن طريق وضع عنوانها في المسجل DX واستخدام الخدمة رقم 9 في نداء المقاطعة رقم 21h. البرنامج التالي يوضح هذه العملية بالتفصيل


TITLE SECOND: DISPLAY STRING

.MODEL SMALL

.STACK 100H

.DATA

MSG DB 'HELLO!$'

.CODE

MAIN PROC

; initialize DS

MOV AX,@DATA

MOV DS,AX

;display message

LEA DX,MSG ; احصل علي الرسالة

[/size]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:33 am



MOV AH,09H ; وظيفة عرض السلسلة

INT 21H

;return to DOS

MOV AH,4CH

INT 21H ; الخروج الي نظام التشغيل

MAIN ENDP

END MAIN

برنامج تحويل حالة الحروف A Case Conversion Program:

في هذا المثال سنقوم بسؤال المستخدم ليقوم بإدخال حرف صغير lower-case letter يقوم البرنامج بإظهار رسالة تطبع الحرف الذي تم إدخاله بعد تحويله إلى صورة حرف كبير upper-case letter مثلاً

Enter A Lower Case Letter: a

In Upper Case It Is: A

سيتم في هذا البرنامج استخدام الإيعاز EQU لتعريف كل من CR,LF

CR EQU 0DH

LF EQU 0AH

بينما يتم تعريف الرسائل على النحو التالي

MSG1 DB ‘Enter A Lower Case Letter:$’

MSG2 DB CR,LF,’ In Upper Case It Is: ‘

Char DB ? ,’$’

عند تعريف المتغير char تم تعريفه بعد الرسالة MSG2 مباشرة وذلك لأن البرنامج سيقوم بإظهار الرسالة msg2 متبوعة مباشرة بالحرف char (وهو الحرف الذي تم إدخاله بعد تحويله إلى Upper -case ويتم ذلك بطريقة طرح الرقم 20h من الحرف الذي تم إدخاله)

تم تعريف حروف التحكم CR,LF قبل الرسالة msg2 بهدف جعل الرسالة تبدأ من بداية السطر الجديد.

ولأن الرسالة msg2 لا تنتهي بعلامة نهاية الرسالة ‘$’ فإنه سيتم الاستمرار في الطباعة وطباعة الحرف char في الشاشة ( لاحظ أن العلامة ‘$’ توجد في نهاية المتغير char مباشرة ).

يبدأ البرنامج بإظهار الرسالة msg1 ثم قراءة الحرف من لوحة المفاتيح

LEA DX ,msg1

MOV AH ,9

INT 21h

MOV AH ,1

INT 21h

بعد ذلك يتم تحويل الحرف إلى حرف كبير upper-case وذلك بطرح العدد 20h من الحرف (وذلك لأن الفرق بين الحروف الكبيرة والصغيرة في جدول ASCII هو العدد20h حيث تبدأ الحروف الكبيرة ابتداءً من 41h بينما تبدأ الحروف الصغيرة ابتداءً من61h ) ويتم تخزين النتيجة في المتغير char

SUB AL,20h ; حوله الي حرف كبير

MOV char ,AL ; ثم خزِنهُ في المتغير

بعد ذلك يقوم البرنامج بإظهار الرسالة الثانية msg2 وتطبع متبوعة بالمتغير char كما ذكرنا سابقاً. وفيما يلي نص البرنامج:

TITLE THIRD: CASE CONVERSION PROGRAM

.MODEL SMALL

.STACK 100H

.DATA

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:34 am



CR EQU 0DH

LF EQU 0AH

MSG1 DB 'ENTER A LOWER CASE LETTER: $'

MSG2 DB CR,LF,'IN UPPER CASE IT IS:'

CHAR DB ?,'$'

.CODE

MAIN PROC

; initialize DS

MOV AX,@DATA

MOV DS,AX

;print user prompt

LEA DX,MSG1

MOV AH,09H

INT 21H

;input character and convert to lower case

MOV AH,01H

INT 21H

SUB AL,20H

MOV CHAR,AL

;display on the next line

LEA DX,MSG2

MOV AH,09H

INT 21H

;return to DOS

MOV AH,4CH

INT 21H

MAIN ENDP

END MAIN

تمـــــاريـــــن:-

1- اذكر أي من الأسماء التالية صحيحاً وأيها خطأ في لغة التجميع الخاصة بـ IBM PC ولماذا...؟

1- two_words

2- ?1

3- tow words

4- t=

2- أي من الأرقام التالية صحيح وأيها خطأ. وإذا كانت صحيحة اذكر نوع الرقم ثنائي عشري أو سداسي عشري.

1- 246 2- 246h 3- 1001 4- 1.101

5- 2EAH 6- FFEH 7-1011B

3- أعطِ تعريف كلٍ من المتغيرات التالية ( إذا كان ممكناً)

أ-متغير كلمة word اسمه A وبه قيمة ابتدائية 52.

ب-متغير كلمة word اسمه word1 ولا توجد به قيمة ابتدائية.

جـ-متغير حرف Byte اسمه B وبه قيمة ابتدائية 52.

د-متغير حرف Byte اسمه C ولا توجد به قيمة ابتدائية.

هـ-متغير كلمة word اسمه word2 به قيمة ابتدائية 65536.

و-مصفوفة كلمات اسمها Array1 وضع فيها قيمة ابتدائية

ز-ثابت اسمه Bell يساوي 7.

حـ- ثابت رسالة اسمه msg يساوي ‘This Is A Message $’

4-افترض أن البيانات التالية مخزنة في الذاكرة ابتداءً من الإزاحة 0000h
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالخميس فبراير 21, 2008 2:35 am



A DB 7

B DW 1ABCH

C DB ‘HELLO’

أ-أعطِ عنوان الإزاحة للمتغيرات A,B,C.

ب- وضح محتويات البايت عند الإزاحة 0002h.

جـ- وضح محتويات البايت عند الإزاحة 0004h.

د- وضح عنوان الإزاحة للحرف ‘O’ في كلمة ‘HELLO’.

5- وضح إذا كانت العبارات التالية صحيحة أو خطأ حيث B1,B2 عبارة عن متغيرات حرفية Byte وw1,w2 عبارة متغيرات كلمات words.

1-MOV Ds,Ax 2-MOV Ds,1000h

3- MOV CS,ES 4-MOV w1,DS

5-XCHG w1,w2 6-SUB 5,B1

7-ADD B1,B2 8-ADD AL,256

9-MOV w1,B1

6-استخدم الأوامرMOV, ADD , SUB ,INC , DEC , NEG لترجمة العبارات التالية المكتوبة بلغة راقية إلى عبارات بلغة التجميع:

1- A=B - A

2- A= -(A+1)

3- C= A + B

4- B= 3* B + 7

5- A= B - A- 1

7- اكتب عبارات (وليس برنامج كامل) لتقوم بالآتي:

1-قراءة حرف ثم طباعته في الموضع التالي في الشاشة في نفس السطر.

2- قراءة حرف كبير Upper case letter ثم طباعته في الموضع التالي بنفس السطر في الشاشة وذلك في صورة حرف صغير Lower case letter.

برامج للكتابة:

8- اكتب برنامج يقوم بالآتي:

1- طباعة العلامة ‘?’.

2- يقوم بقراءة رقمين عشريين مجموعهما أقل من العدد 10

3-يقوم البرنامج بحساب مجموع العددين وطباعة النتيجة في السطر التالي.

مثال للتنفيذ

? 35

The sum of 3 and 5 is 8

9- اكتب برنامج يقوم بطلب كتابة ثلاثة حروف. يقوم البرنامج بقراءة الحروف الثلاثة وطباعتها كل حرف في سطر منفصل.مثال للتنفيذ

Enter Three Letters: ABC

A

B

C

10-اكتب برنامج يقوم بقراءة أحد الحروف في النظام السداسي عشر ( A-F ) يقوم البرنامج بطباعة الرقم المناظر في النظام العشري في السطر التالي. مثال للتنفيذ

Enter A Hexadecimal Digit: C

In Decimal It Is: 12

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 4:57 pm


الفصل الرابع
مسجل البيارق






أحد أهم مميزات الحاسب هي القدرة علي اتخاذ القرارات ويتم ذلك عن طريق تحديد حالة المعالج الدقيق بعد تنفيذ عملية محددة. في المعالج 8086 يتم تمثيل حالة المعالج بعد تنفيذ آخر عملية في 9 خانات ثنائية تسمي البيارق Flags ويتم اتخاذ القرارات المختلفة حسب قيمة هذه البيارق.

يتم تخزين البيارق في مسجل يسمي مسجل البيارق Flag Register ويمكن تقسيم البيارق إلي نوعين وهما بيارق التحكم Control Flags وبيارق الحالة Status Flags. وتقوم بيارق التحكم لتشغيل أو تعطيل عمليات محددة أثناء تنفيذ البرنامج بينما تقوم بيارق الحالة بعكس حالة المعالج بعد تنفيذ أمر محدد كأن يتم إظهار أن النتيجة تساوي صفر وذلك عن طريق رفع بيرق الصفر كما سنري في الجزء التالي.
[b]



مسجل البيارق



يحتوي هذا المسجل علي البيارق المختلفة كما هو موضح بالشكل حيث يتم تمثيل بيارق الحالة في الخانات 0 و 2 و 4 و 6 و 7 و 11 بينما تشغل بيارق التحكم الخانات 8 و 9 و 10 وتبقي بقية الخانات بدوت استخدام ( ليس من الضروري معرفة موقع البيرق من المسجل في أغلب الحالات حيث توجد أوامر للتخاطب مع كل بيرق علي حدة )، سنتناول في الجزء التالي بيارق الحالة






Cf


Pf


Af


Zf

Sf

Tf

If

Df

Of




[/b]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:00 pm



شكل يوضح مسجل البيارق

بيارق الحالة Status Flags

تقوم هذه البيارق بإظهار حالة المعالج بعد تنفيذ آخر أمر فمثلاً عند تنفيذ الأمر SUB Ax,Bx فإن بيرق الصفر يتأثر وتصبح قيمته تساوي 1 إذا كانت النتيجة تساوي صفر. الجدول التالي يوضح البيارق المختلفة











بيارق الحالة Status Flags

الرمز
الاسم
Name
الخانة
CF


بيرق المحمول

Carry Flag

0
PF

بيرق خانة التطابق

Parity Flag

2
AF

بيرق المحمول المساعد

Auxiliary Carry Flag

4


الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:02 pm


ZF
بيرق الصفر


Zero Flag

6
SF

بيرق الإشارة

Sign Flag

7
OF

بيرق الفيضان

Overflow Flag

11

بيارق التحكم Control Flags
TF

بيرق التنفيذ خطوة بخطوة

Trap Flag

8
IF

بيرق المقطعات

Interrupt Flag

9
DF

بيرق الاتجاه

Direction Flag

10




بيرق المحمول Carry Flag (CF)

يحتوي هذا البيرق علي القيمة ‘1’ (يتم رفع البيرق ) إذا وجد محمول من أو إلي الخانة ذات الوزن الأكبر Most Significant Bit (MSB) ويتم ذلك في حالات الجمع والطرح المختلفة. خلاف ذلك تكون قيمة البيرق تساوي صفر.

يتأثر البيرق أيضاً في حالة عمليات الإزاحة Shift والدوران Rotate والتي سنتحدث عنها فيما بعد.

بيرق التطابق Parity Flag (PF)

يحتوي هذا البيرق علي القيمة ‘1’ إذا كان الحرف الأصغر من النتيجة Low Byte يحتوي علي عدد زوجي من الخانات التي تحتوي علي الرقم ‘1’. ويساوي صفر إذا كان عدد الخانات التي تحتوي علي الرقم ‘1’ فردي. فمثلاً إذا كانت نتيجة آخر عملية هو الرقم FFFEh فإن الحرف الأصغر يحتوي علي العدد FEH ( 1110 1111 ) وبالتالي فإن عدد الخانات التي تحتوي علي الرقم ‘1’ هو 7 خانات ( عدد فردي) وعلي هذا فإن قيمة البيرق تساوي ‘0’ ( PF = 0 )

بيرق المحمول المساعد Auxiliary Carry Flag (AF)

يحتوي هذا البيرق علي القيمة ‘1’ إذا كان هناك محمول من أو إلي الخانة الرابعة bit-3 ويتم استخدام هذا البيرق في حالة الكود Binary Coded Decimal (BCD).

بيرق الصفر Zero Flag (ZF)

يحتوي هذا البيرق علي القيمة ‘1’ (ZF=1) إذا كانت النتيجة تساوي صفر

بيرق الإشارة Sign Flag (SF)

يحتوي هذا البيرق علي القيمة ‘1’ إذا كانت الخانة ذات الوزن الأكبر MSB تساوي ‘1’ حيث يعني هذا أن النتيجة سالبة. ( أي أن SF = 1 إذا كانتMSB =1 و SF= 0 إذا كانت MSB= 0)

بيرق الفيضان Overflow Flag (OF)

يحتوي هذا البيرق علي القيمة ‘1’ (OF=1) إذا حدث فائض في حالة الأرقام ذات الإشارة Signed Numbers وإلا فإنه سيحتوي علي صفر. وسنناقش هذا الموضوع بالتفصيل في الأجزاء المتبقية من هذا الفصل.

الفيضان Overflowكما نعلم فإن إمكانية تخزين الأرقام في الحاسوب محدودة وذلك حسب المكان الذي سيتم فيه تخزين الرقم ( مثلاً أكبر رقم يمكن تمثيله وتخزينه في خانة واحدة One Byte هو الرقم 255 ) وعلي ذلك إذا أردنا إجراء عملية حسابية وزاد الناتج عن
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:04 pm



هذه القيمة فإن المكان لن يسمح بتخزين النتيجة وفي هذه الحالة يكون قد حدث فيضان.
أمثلة علي الفيضان



يختلف الفيضان عند التحدث عن الأرقام الموجبة فقط ( الأرقام بدون إشارة ) Unsigned Numbers عنه في الأرقام بإشارة Signed Numbers. وعند إجراء عملية مثل الجمع هنالك أربع احتمالات للنتيجة:

1 - لا يوجد فيضان

2 - فيضان بإشارة فقط

3 - فيضان بدون إشارة فقط

4 - فيضان بإشارة وبدون إشارة

وكمثال للفيضان بدون إشارة وليس بإشارة افترض أن المسجل AX يحتوي علي الرقم FFFFh وأن المسجل BX يحتوي علي الرقم 1 وقمنا بتنفيذ الأمر ADD AX, BX ستكون النتيجة علي النحو التالي :

1111 1111 1111 1111

+ 0000 0000 0000 0001

= 1 0000 0000 0000 0000

وبالتالي يكو لدينا أحد احتمالين

1- إذا فسرنا هذه الأرقام علي أنها أرقام بدون إشارة فإن النتيجة الصحيحة هي الرقم 65536 أي الرقم السداسي عشر 10000h ولكن هذه النتيجة لا يمكن تخزينها في المسجل ( أكبر من أكبر رقم يمكن تخزينه 65535 ) حيث سيتم فقد الرقم 1 وتخزين الرقم 0000h في المسجل AX وبالتالي فإن النتيجة التي تم تسجيلها هي نتيجة خاطئة.

2- أما إذا فسرنا هذه الأرقام علي أنها أرقام بإشارة فإن الرقم الأول FFFFh هوالرقم –1 وعند جمع الرقم 1 إليه فإن النتيجة هي الرقم 0 وعلي هذا فإن النتيجة التي تم تخزينها ( الرقم 0) صحيحة وعلي هذا لم يحدث فيضان بإشارة.



مثال آخر لفيضان بإشارة وليس بدون إشارة، افترض أن كل من المسجلين AX و BX يحتويان علي العدد 7FFFh وتم تنفيذ الأمر ADD AX,BX تكون النتيجة علي النحو التالي:

0111 1111 1111 1111

+ 0111 1111 1111 1111

1111 1111 1111 1110 = FFFEh



وفي هذه الحالة التفسير للرقم 7FFFh في حالة الأرقام بإشارة أو بدون إشارة هو تفسير واحد حيث أن الخانة ذات الوزن الأكبر تساوي 0 ( MSB = 0 ) وهو الرقم 32767 (7FFFh) وعلي ذلك فإن نتيجة حاصل الجمع يجب أن تكون واحدة في الحالتين وهي الرقم 65534 وهذه النتيجة لا يمكن تخزينها في حالة الأرقام بإشارة حيث أن تفسير هذه النتيجة في حالة الأرقام بإشارة هو الرقم السالب ( -2 )

وعلي ذلك فلدينا في هذا المثال فيضان بإشارة ولا يوجد فيضان بدون إشارة


كيف يقوم المعالج بتوضيح حدوث الفيضان ؟



يقوم المعالج برفع بيرق الفيضان OF=1 إذا حدث فيضان بإشارة ورفع بيرق المحمول إذا حدث فيضان بدون إشارة CF=1

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:05 pm



وتصبح وظيفة البرنامج التأكد من حدوث أي من أنواع الفيضانات التي ذكرناها واتخاذ الإجراءات المناسبة. وإذا تم تجاهل هذه البيارق وحدث فيضان فقد تكون النتيجة غير صحيحة.

وعلي هذا فإن المعالج لا يفرق بين الأرقام بإشارة أو بدون إشارة فهو فقط يقوم برفع البيارق لبيان حدوث أي من الفيضان بإشارة أو بدون إشارة. فإذا كنا في البرنامج نتعامل مع الأرقام علي أنها بدون إشارة فإننا نهتم ببيرق المحمول فقط CF ونتجاهل بيرق الفيضان OF. أما إذا كنا نتعامل مع الأرقام بإشارة فإن بيرق الفيضان OF هو الذي يهمنا.
كيف يقوم المعالج بتحديد حدوث الفيضان ؟



كثير من الأوامر تؤدي إلي حدوث فيضان وسنناقش هنا أوامر الجمع والطرح للتبسيط





الفيضان بدون إشارة Unsigned overflow

في حالة الجمع يحدث فيضان بدون إشارة إذا كان هناك محمول من الخانة ذات الوزن الأكبر MSB حيث يعني هذا أن النتيجة أكبر من أن يتم تخزينها في المسجل المستودع ( أي أن النتيجة أكبر من أكبر رقم يمكن تخزينه وهو الرقم FFFFh في حالة أن يكون المستودع به 16 خانة ثنائية أو FFh في حالة أن يكون المستودع به 8 خانات ثنائية ).

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

الفيضان بإشارة Signed Overflow

في حالة جمع أرقام بنفس الإشارة يحدث الفيضان في حالة أن تكون إشارة حاصل الجمع مختلفة عن إشارة الرقمين. كما نجد أنه في حالة طرح رقمين بإشارة مختلفة فإن العملية تشابه عملية الجمع لرقمين بإشارة واحدة حيث أن
A – ( - B ) = A + B , -A – ( +B ) = -A -B



ويحدث الفيضان بإشارة إذا اختلفت إشارة النتيجة عن الإشارة المتوقعة كما في حالة عملية الجمع

أما في حالة جمع رقمين بإشارتين مختلفتين فإن حدوث الفيضان مستحيل حيث أن العملية A+-(B) هي عبارة عن A-B وحيث أن الأرقام A و B أرقام صغيرة أمكن تمثيلها فإن الفرق بينهما هو أيضاً رقم صغير يمكن تمثيله . وبالمثل فإن عملية الطرح لرقمين بإشارتين مختلفتين لن تعطي أي فيضان.

وعموماً فإن المعالج يقوم برفع بيرق الفيضان كالآتي : إذا كان المحمول إلي الخانة ذات الوزن الأكبر MSB والمحمول من الخانة ذات الوزن الأكبر مختلفان ( ويعني هذا أنه يوجد محمول إليها ولا يوجد محمول منها أو لا يوجد محمول إليها ولكن يوجد محمول منها ). في هذه الحالة يتم رفع بيرق الفيضان ( أنظر الأمثلة لاحقاً ).



كيف تؤثر العمليات علي البيارق:

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:06 pm



عندما يقوم المعالج بتنفيذ أي أمر يتم رفع البيارق المناسبة لتوضيح النتيجة . وعموماً هناك أوامر لا تؤثر في كل البيارق وإنما تؤثر في بعضها فقط إذ قد تترك كل البيارق دون تأثير . وعموماً فإن عملية تفرع البرنامج باستخدام أوامر التفرع JUMP INSTRUCTIONS تعتمد عملياً علي قيم البيارق المختلفة كما سنري فيما بعد .

في هذا الجزء سنوضح تأثير البيارق في حالة تنفيذ بعض الأوامر التي ناقشناها وتعاملنا معها في الفصل السابق :

الأمر

البيارق المتأثرة
MOV / XCHG


لا تتأثر أي من البيارق
ADD / SUB

تتأثر كل البيارق
INC / DEC

تتأثر كل البيارق عدا بيرق المحمول (CF)
NEG

تتأثر البيارق ( CF=1 إلا إذا كانت النتيجة تساوي 0 ، 0F=1 إذا كان المعامل هو الرقم 800H في حالة WORD أو 80h في حالة المعامل Byte )


لتوضيح تأثر البيارق بتنفيذ العمليات سنقوم بعمل بعض الأمثلة في كل مثال سنوضح الأمر ومحتوي المعاملات operands وحساب وتوقع قيم البيارق المختلفة 0f,sf,zf,pf,cf (سنتجاهل بيرق المحمول المساعد AF لأنه في الحالة ذات الأرقام من النوع BCD فقط ).

مثال 1:

نفذ الأمر ADD AX,BX حيث يحتوي المسجل AX علي الرقم FFFFhوالمسجل BX علي

الرقم FFFFh

الحل :

FFFFh

+FFFFh

1FFFEh

يتم تخزين الرقم 1111 1111 1111 1110 (0FFFEh) في المسجل AX وعلي هذا تكون البيارق علي النحو التالي:

بيرق الإشارة SF : يساوي 1 لأن قيمة الخانة ذات الوزن الأعلى MSB تساوي 1 .

بيرق خانة التطابق PF : يساوي 0 لأن لدينا عدد 7 خانات (عدد فردي) تحتوي علي 1 في النصف الأدنى LOW BYTE في النتيجة .

بيرق الصفر ZF : يساوي 0 لأن النتيجة لا تساوي صفر .

بيرق المحمول CF : يساوي 1 لأن هناك محمول في الخانة ذات الوزن الأكبر MSB في عملية

الجمع .

بيرق الفيضان OF : يساوي صفر لأن إشارة النتيجة هي نفس إشارة الأرقام التي تم جمعها

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:07 pm



( المحمول إلي الخانة MSB لا يختلف عن المحمول من الخانة MSB ).

مثال 2 :

نفذ الأمر ADD AL,BL حيث يحتوي AL علي الرقم 80h و BL علي الرقم 80h



الحل :

80h

+80h

100h

يحتوي المسجل AL علي الرقم 00h

بيرق الإشارة SF : SF=0 لأن الخانة MSB تحتوي علي 0

بيرق خانة التطابق PF: PF=1 لأنه لدينا عدد 0 خانة تحتوي علي الرقم 1 ويعتبر الصفر عدد زوجي

بيرق الصفر ZF : ZF=1 لأن النتيجة تساوي 0

بيرق المحمول CF : CF=1 لأن هناك محمول إلى الخانة ذات الوزن الأكبر MSB

بيرق الفيضان OF : OF=1 لأن الأرقام المجموعة سالبة بينما النتيجة موجبة ( المحمول إلي الخانة

MSB لا يساوي المحمول منها ).

مثال 3:

نفذ الأمر SUB AX,BX إذا كان المسجل AX يحتوي علي الرقم 8000h والمسجل

BX يحتوي علي الرقم 0001h

الحل :

8000h

-0001h

7FFFh = 0111 1111 1111 1111

بيرق الإشارة SF : SF=0 لأن خانة MSB=0 (آخر خانة في MSB)

بيرق خانة التطابق PF: PF=1 لأن الخانة الصغري من النتيجة بها 8 خانات (عدد زوجي) بها "1"

بيرق الصفر ZF : ZF=0 لأن النتيجة لاتساوي 0

بيرق المحمول CF : CF=0 لأننا قمنا بطرح عدد صغير بدون إشارة من عدد أكبر منه

بيرق الفيضان OF : OF=1 في حالة الأرقام بإشارة فإننا نطرح رقم موجب من رقم سالب . وهي

مثل عملية جمع رقمين سالبين. ولأن النتيجة أصبحت موجبة (إشارة النتيجة خطأ) .

مثال 4:

نفذ الأمر INC AL حيث AL يحتوي علي الرقم FFh

الحل :

FFh

1h +

100h

يتم تخزين الرقم 100h في المسجل AL .بعد تنفيذ هذه العملية نجد أن



الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
zakagadir
Admin
zakagadir


عدد المساهمات : 3267
تاريخ التسجيل : 17/11/2007

لغة التجميع و المعالجات الدقيقة - صفحة 2 Empty
مُساهمةموضوع: رد: لغة التجميع و المعالجات الدقيقة   لغة التجميع و المعالجات الدقيقة - صفحة 2 Emptyالجمعة فبراير 22, 2008 5:08 pm



[b]بيرق الإشارة
SF : SF=0 لأن MSB=0

بيرق خانة التطابق PF: PF=1 لوجود 8 خانات تحتوي علي “1” في البايت الأدنى من النتيجة

بيرق الصفر ZF : ZF=1 لأن النتيجة تساوي صفر

بيرق المحمول CF : لا يتأثر بالأمر INC بالرغم من حدوث فائض.

بيرق الفيضان OF : OF=0 وذلك لأننا نجمع رقم سالب إلي رقم موجب ( المحمول إلي

الخانة MSB يساوي المحمول منها ).



مثال 5:

نفذ الأمر MOV AX,-5

يتم وضع الرقم –5 (FFFBh) في المسجل AX ولا تتأثر أي من البيارق بالأمر MOV .

مثال 6:

نفذ الأمر NEG AX حيث يحتوي المسجل AX علي الرقم 8000h

8000h = 1000 0000 0000 0000
[size=12]COMPLEMENT = 1000 0000 0000 0000




0000 0000 0000 1000

بيرق الإشارة SF : SF=1

بيرق خانة التطابق PF: PF=1

بيرق الصفر ZF : ZF=0

بيرق المحمول CF : CF=1 لأنه في حالة تغيير الإشارة فإن CF =1 دائماً إلا إذا كان الرقم

يساوي صفر .

بيرق الفيضان OF : OF=1 لأننا عند تنفيذ الأمر NEG نتوقع تغيير إشارته وفي هذه الحالة لم

تتغير الإشارة .

برنامج DEBUG :

يمكن باستخدام برنامج DEBUG متابعة تنفيذ البرنامج خطوة_خطوة وإظهار النتيجة وتأثر المسجلات بعد كل خطوة كما يمكن كتابة برنامج بلغة التجميع حيث يقوم بتحويله إلي لغة الآلة مباشرة وتخزينها في الذاكرة

ولاستعمال برنامج الـ DEBUG نقوم بكتابة برنامج بلغة التجميع وتجهيزه حتى نحصل علي الملف القابل للتنفيذ EXCUTABLE FILE بعد ذلك يمكننا تحميل البرنامج بواسطة الأمر

C:\DOS\DEBUG TEST.EXE



يقوم البرنامج بالرد بالإشارة "-" دليل علي أنه في حالة انتظار لأحد الأوامر وهنا توضيح لبعض الأوامر الهامة :-

1. الأمر R وهو يوضح محتويات المسجلات . ولوضع قيمة محددة في أحد المسجلات يتم كتابة الأمر R متبوعاً بإسم المسجل (مثلاُ R IP).

2. الأمر T (TRACE) وهو يؤدي إلي تنفيذ الخطوة الحالية فقط من البرنامج .

3. الأمر G ( GO ) يؤدي إلي تنفيذ البرنامج .

4. الأمر Q(QUIT) يؤدي إلي الخروج من البرنامج .

5. الأمرA ASSEMBLE يتيح فرصة كتابة برنامج .

الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://sonymobile.ahlamontada.net
 
لغة التجميع و المعالجات الدقيقة
الرجوع الى أعلى الصفحة 
صفحة 2 من اصل 3انتقل الى الصفحة : الصفحة السابقة  1, 2, 3  الصفحة التالية
 مواضيع مماثلة
-
» المعالجات الدقيقة

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
سوني مبايل SONY MOBILE :: المساعدة والاقتراحات :: GSM PROGRAMMING-
انتقل الى: