عرض مشاركة واحدة
قديم 18-04-2010, 10:57 AM   #8
administrator
 
الصورة الرمزية جمال الزرقاء
 
تاريخ التسجيل: Dec 2005
رقم العضوية: 1927
الدولة: بداخل الالكترونيات
العمر: 39
المشاركات: 2,917
بمعدل: 0.63 (مشاركة/اليوم)



افتراضي

 

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
تحتاج الخدمة رقم 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 ; احصل علي الرسالة
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
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
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








التوقيع
جمال الزرقاء غير متواجد حالياً  
رد مع اقتباس