Professional Documents
Culture Documents
-17- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
Operand Field حقل المعاملت
يحتوي هذا الحقل علي المعاملت من مسجلت ومتغيرات
وثوابت والتي سيتم تنفيذ المر الحالي عليها ) مثل عملية
الجمع مثل ً ( ويمكن لهذا الحقل أن يحتوي علي قيمتين أو قيمة
واحدة أو ل يحتوي علي أي قيمة علي الطلق وذلك حسب نوع
المر المستخدم والمثلة التالية توضح ذلك
المعاملت المر
ل توجد معاملت NOP
يوجد معامل واحد وهو المسجل CX INC CX
يوجد معاملن وهما المتغير Word1والرقم 2 ADD Word1 , 2
في حالة الحقول ذات المعاملين يكون المعامل الول هو الذي
سيتم تخزين النتيجة فيه ويسمى بالمستودع destination Operand
وهو يكون إما أحد المسجلت أو موقع محدد في الذاكرة
) لحظ أن بعض الوامر ل تقوم بتخزين النتيجة أصل ً ( أما
المعامل الثاني فيحتوي علي المصدر Source Operandوعادة ل
يتم تغيير قيمته بعد تنفيذ المر الحالي.
أما بالنسبة لليعازات فيحتوي المعامل عادة علي معلومات
إضافية عن اليعاز.
-18- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
MOV BX, 0
Program Data البيانات المستخدمة في البرنامج
يقوم البرنامج بالتعامل مع البيانات في صورة أرقام ثنائية وفــي
برامج لغة التجميع يتم التعامل مع الرقام فــي الصــورة الثنائيــة
أو السداسية عشر أو العشرية أو حتى في صورة حروف.
Numbers العداد
b أو• يتم كتابة الرقام الثنائية في صورة 0و 1وتنتهي الحرف
B
للدللة علي أن الرقم ثنائي Binary
• مثل 01010111Bأو 11100011b
• الرقام العشرية يتم كتابتها في الصورة المعتادة وبدون حرف
في النهاية ،كما يمكن أن تنتهي بالحرف Dأو الحرف dدللة
علي أنها عشرية Decimalمثل 1234و 1345dو –.234D
• الرقام السداسية عشر يجب أن تبدأ برقم وتنتهي بالحرف Hأو
الحرف hللدللة علي أنها سداسية عشر Hexadecimalمثل
0abhأو ) .56Hالسبب في استعمال 0في المثال الول
لتوضيح أن المطلوب هو الرقم السداسي عشر abوليس
المتغير المسمى .( ab
الجدول التالي يوضح بعض المثلة
ملحوظات الرقم
عشري 10011
ثنائي 10011b
عشري 6455
رقمي (
خطأ )لم ينتهي بالحرف hأو (H 0ab
Characters الحروف
يتم وضع الحروف والجمل داخل علمات التنصيص مثل ً ‘ ’Aأو ‘
’SUDANويتم داخليا ً تحويل الحروف إلي الرقام المناظرة في
كود الـ ASCIIبواسطة الـ Assemblerوبالتالي تخزينها في الذاكرة
وعلى ذلك ل يوجد فرق بين الحرف ‘ ’Aوالرقم ) 41hوهو
الرقم المناظر للحرف Aفي الجدول( وذلك داخل البرنامج أو
من ناحية التخزين في الذاكرة.
VARIABLES المتغيــرات
-19- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
تلعب المتغيرات في لغـة التجميع نفس الدور الذي تلعبه في
البرامج باللغات ذات المستوى العالي High Level Programming
Languagesمثل لغة الباسكال والسي .وعلى ذلك يجب تحديد
أسماء المتغيرات المستخدمة في البرنامج ونوع كل متغير
حيث سيتم حجز مكان في الذاكرة لكل متغير وبطول يتناسب
مع نوع المتغير وذلك بمجرد تعريف المتغير .ويتم استخدام
الجدول التالي لتعريف المتغيرات في لغة التجميع حيث يشير
كل إيعاز لنوع المتغير المطلوب تعريفه.
المعــــــــــــــنــى اليعـــــاز
) DB (Define Byteلتعريف متغير حرفي يشغل خانة واحدة
في الذاكرة
) DW (Define Wordلتعريف متغير كلمة يشغل خانتين
متتاليتين في الذاكرة
) DD (Define Double Wordلتعريف متغير يشغل أربعة خانات متتالية
في الذاكرة
) DQ (Define Quad Wordلتعريف متغير يشغل ثمان خانات متتالية
في الذاكرة
) DT (Define Ten Bytesلتعريف متغير يشغل عشر خانات متتالية
في الذاكرة
في هذا الجزء سنقوم بالتعامل مع المتغيرات من النوع DBو
.DW
-20- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
يتم تعريف المتغير علي أنه من النوع Wordويتم تخزينه في
خانتين من الذاكرة Two Bytesوذلك باستخدام الصيغة
name DW initial_value
مثل ً التعريف التالي
WRD DW -2
ووضع قيمة ابتدائية يتم فيه تعريف متغير باسم
WRD
) الرقم – ( 2فيه
كما في حالة المتغيرات الحرفية يتم وضع العلمة ؟ في
حالة عدم وجود قيمة ابتدائية للمتغير.
يمكن للمتغير من النوع wordتخزين أرقام تتراوح بين 0و
( 1– 216 ) 65535في حالة الرقام بدون إشارة
) الموجبة فقط (Unsigned Numbers
15
ويمكن تخزين الرقام من – ( 2 - ) 32768وحتى 32767
) ( 1 - 215في حالة الرقام بإشارة
) الموجبة والسالبة (.Signed Numbers
Arrays المصفوفات
في لغة التجميع نتعامل مع المصفوفات علي أنها مجموعة من
الحروف أو الكلمات المتراصة في الذاكرة في عناوين متتالية.
فمثل ً لتعريف مصفوفة تحتوي علي ثلثة أرقام من النوع
الحرفي 3Bytesبقيم ابتدائية 10hو 20hو 30hعلي الترتيب يتم
استخدام التعريف التالي:
B_ARRAY DB 10h, 20h, 30h
السم B_ARRAYيشير إلي العنصر الول في المصفوف( العدد
( 10hوالسم B_ARRAY + 1يشير إلي العنصر الثاني والسم
B_ARRAY + 2يشير إلي العنصر الثالث .فمثل ً إذا تم تخصيص
عنوان الزاحة 0200hللمتغير B_ARRAYيكون شكل الذاكرة كما
يلي:
السم ) الرمز العنوان المحتوي
(Symbol
B_ARRAY 200h0 10h
B_ARRAY + 1 0201h 20h
B_ARRAY + 2 0202h 30h
-21- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
الثالثة في العنوان W_ARRAY + 4وهكذا .فمثل ً لو تم تخزين المصفوف
في الذاكرة بدءا ً من العنوان 300hيكون شكل الذاكرة كما يلي:
-22- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
LF EQU 0Ah
وبالتالي يمكن استخدام الثابت LFبدل ً عن الرقم 0Ahكالتي
MOV AL , LFبدل ً عن استخدام التي .MOV AL,0Ahحيث يقوم الـ
Assemblerبتحويل الثابت LFداخل البرنامج إلي الرقم .0Ah
كذلك يمكننا استخدام المثال التالي
Prompt EQU ’‘Type your Name
Msg DB prompt
وليس تعليمه أو أمر وبالتالي ل EQUعبارة عن إيعاز
لحظ أن
ينتج عنه تعريف متغير ووضعه في الذاكرة.
المستودع
ثابت متغير مسجل مسجل
)موقع في مقطع عام المصدر
الذاكرة(
غير مسموح مسموح مسموح مسجل عام
مسموح
غير مسموح غير مسموح مسجل
مسموح مسموح مقطع
-23- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
غير مسموح غير مسموح مسموح موقع متغير )
مسموح في الذاكرة(
غير مسموح غير مسموح ثابت
مسموح مسموح
-24- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
مثل ً المر
ADD WORD1, AX
WORD1 قيمة المتغير محتويات المسجل AXإلي يقوم بجمع
ويتم تخزين النتيجة في المتغير ) WORD1ل يتم تغيير قيمة
محتويات المسجل AXبعد تنفيذ المر( كذلك المر
SUB AX, DX
ويتم DXمن المسجل AX
حيث يتم طرح محتويات المسجل
تخزين النتيجة في المسجل ) AXلحظ أن محتويات المسجل
DXل تتغير بعد تنفيذ المر(
و ADD الجدول التالي يبين قيود استعمال المرين
SUB
المستودع
موقع في مسجل المصدر
الذاكرة عام
مسموح مسموح مسجل
عام
غير مسموح مسموح موقع في
الذاكرة
مسموح مسموح ثابت
لحظ أنه غير مسموح بالجمع أو الطرح المباشر بين مواقع في
الذاكرة في أمر واحد وبالتالي فإن المر ADD BYTE1, BYTE2غير
مسموح به ولكن يمكن إعادة كتابته على الصورة:
قبل ; MOV AL, BYTE2 حيث يتم قيمة المتغير إلى مسجل
عملية الجمع
ADD BYTE1, AL
BL المر ADD BL,5يقوم بجمع الرقم 5إلى محتويات المسجل
وتخزين النتيجة في المسجل .BL
كملحظة عامه نجد انه يجب أن يكون المتغيرين لهما نفس
الطول بمعني أن المر التالي غير مقبول
MOV AX ,BYTE1
AX وذلك لن طول المتغير BYTEهو خانه واحدة أما المسجل
فان طوله هو خانتين ) .BYTE-2أي أن المتغيرات )المعاملت(
يجب أن تكون من نفس النوع (
-25- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
ويقوم أيضا بتقبل المسجل AH في 41h حيث يتم وضع الرقم
المر
كلمة فإن المصدر يجب أن يكون AX ) ’MOV AX ,’Aمادام
كذلك كلمة (
في المسجـل .AX الرقــم 0041h حيـث سيــتم وضــع
الوامر INC (Increment) , DEC (Decrement) , NEG
قيمه مسجل أو أما المرين INC ,DECيتم فيها زيادة أو نقصان
موقع في الذاكرة بمقدار 1والصيـغة العامة لها هي:
INC Destination ; Destination = Destination +1
DEC Destination ; Destination = Destination - 1
يقـوم بجمع 1إلى محتويات المتغيـر فمـثل المر INC WORD1
WORD1
يـقوم بإنقاص الرقم 1مـن محتويات بيـنما المر DEC WORD2
المتغيـر .WORD2
أخيرا ً نتحدث عن المر (NEG(Negateوالذي يستعمل لتحويــل
إشارة الرقم الموجب إلي رقم سالب والـرقم السالب يـتم
تحويـله إلي رقم موجب وذلك بتحويـــله إلى المكمل لثنين
Complement 2’Sوالصيغة العامة للمر هي:
NEG Destination
حيـث يتـم التعـامل مـع أحد المسجلت أو مـوقع في الذاكرة
مثـــال:
NEG BX ; BX = -BX
NEG BYTE ; BYTE = -BYTE.
-26- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
SUB AX , A AXتحتوي علي A-5
MOV A , AX ضعها في A
أو إلى الوامر
NEG A
ADD A,5
يتم تحويلة إلى الوامر A=B-2*A وأخيرا ً المر
MOV AX,B
SUB AX,A
SUB AX, A
MOV A,AX
الشكل العام للبرنامج-:
في الفصل السابق قمنا بتوضيح عملية تقسيم الذاكرة إلى
مقاطع مختلفة بحيث يحتوى المقطع الول علي البرنامج نفسه
ويسمى مقطع البرنامج CODE SEGMENTومقطع آخر يحتوى
علي البيانات المستخدمة في البرنامج ويسمى مقطع البيانات
DATA SEGMENTومقطع ثالث يحتوي علي المكدس ويسمى
مقطع المكدس STACK SEGMENT
في هذا الجزء سيتم توضيح كيفية توليد هذه المقاطع بواسطة
الـ ASSEMBLERمع توضيح كيفية كتابة وتعريف كل مقطع داخل
البرنامج.
نماذج الذاكرة :MEMORY MODELS
كما ذكرنا فيما مضى انه قد يكون البرنامج المطلوب كتابته
صغير بحيث يمكن أن يسع مقطع واحد فقط لكل من البرنامج
والبيانات والمكدس وقد تحتاج إلي استخدام مقطع منفصل
لكل على حده .يتم استعمال الكلمة MODEL.وذلك بكتابة
السطر التالي:
.MODEL MEMORY_MODEL
ويتم كتابة هذا السطر قبل تعريف أي نقطة ويوجد لدينا اكثر
من نموذج للذاكرة سوف يتم توضيحها في الجدول التالي
ولكن عموما ً إذا لم يكن حجم البيانات كبيرا ً يتم غالبا ً استخدام
النموذج SMALLوهذا هو الحال في اغلب البرامج التي سنتطرق
SMALL لها .ويتم كتابة السطر على الصورة التاليةMODEL.:
الوصف الموديل
MODEL
-27- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
الكود في مقطع واحد والبيانات في مقطع SMALL
واحد
الكود في أكثر من مقطع والبيانات في MEDIUM
مقطع واحد
الكود في مقطع واحد والبيانات في أكثر من COMPACT
مقطع
الكود في أكثر من مقطع والبيانات في أكثر LARGE
من مقطع ولكن غير مسموح بتعريف
مصفوف اكبر من 64k BYTE
الكود في أكثر من مقطع والبيانات في أكثر HUGE
من مقطع ولكن يمكن أن يكون هناك
مصفوف بطول اكبر من 64k BYTE
-28- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
.Code Name
حيث Nameهـــو اسم المقطع.ول داعي لعطاء اسم للمقطع
في حالة النموذج ) Smallلن لدينا مقطع واحد فقط ( حيث
سيقوم برنامج الـ Assemblyبإعطاء رسالة خطأ في هذه الحالة.
داخل مقطع البرنامج يتم وضع الوامر في صورة برامج
صغيــرة )إجراءات ( Procedureوأبسط تعريف لهذه الجراءات
على النحو التالي
Name Proc
الوامر والتعليمات داخل الجراء ;
Name ENDP
فهما إيعازات Endp و حيث Nameهو اسم الجراء ،أما Proc
Pseudo_Ops
الجزء التالي يوضح مقطع برنامج كامل
.CODE
MAIN PROC
الوامر والتعليمات داخل الجراء ;
MAIN ENDP
الجراءات يتـــم كتابتهـــا هـــــنا ;
بقية
والن بعد أن رأينا كل مقاطع البرنامج فان الشكل العام للبرنامج في
حالة النموذج .smallيكون على النحو التالي:
.MODEL SMALL
.STACK 100H
.DATA
هنا يكون تعريف المتغيرات والثوابت ;
.CODE
MAIN PROC
التعليمات والوامر داخل الجراء ;
MAIN ENDP
بقية الجراءات تكتب هنا;
END MAIN
باسم في البرنامج يحوى كلمة نهاية البرنامج ENDمتبوعة آخر سطر
الجراء الرئيسي في البرنامج.
-29- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
SERVICE الشركات المصنعة للجهزة بواسطة روتينات خدمة
ROUTINESيتم توفيرها بواسطة الشركات المصنعة للجهزة.
يوجد نوعان في روتينات الخدمة المستخدمة في التعامل مع
الموانئ يسمى الول ( BIOS (BASIC INPUT /OUTPUT SYSTEM
والثاني باستخدام الـ .DOSروتينات الـ BIOSيتم تخزينها في
ذاكرة القراءة فقط )الـ ( ROMويتعامل مباشرة مع موانئ
الدخال والخراج بينما خدمات الـ DOSتقوم بتنفيذ عمليات أكثر
تعقيدا ً مثل ً طباعة سلسلة حروف وهي تقوم عادة باستخدام الـ
BIOSفي تنفيذ عمليات إدخال/إخراج مباشرة.
يتم نداء الـ BIOSأو الـ DOSلتنفيذ عملية محددة باستخدام نداء
مقاطعة ( INT (INTERRUPTوالنداء على هذه الصورة
INT INTERRUPT_NUMBER
مثل ً INT 16h
حيث يتم تحديد رقم نداء المقاطعة وهو رقم محدد
يقوم بطلب خدمة في الـ BIOSوهى خاصة بقراءة قيمة في
لوحة المفاتيح و INT 21hخاص بنداء خدمة من الـ DOSسيتم
التعرف على مزيد من الخدمات لحقا ً بإذن الله
-30- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
في الجزء التالي ستناول بعض هذه الخدمات
الخدمة رقم :1قراءة حرف من لوحة المفاتيح
المدخلت :وضع الرقم 1في المسجل AH
المسجل ALيحتوي علي كود ال ASCIIللحرف المخرجات:
الذي تم الضغط عليه في لوحة
المفاتيح أو 0في حالة الضغط على مفتاح غير حرفي
NON CHARACHTER KEY
( مثل المفاتيح .( F1-F10
لتنفيذ هذه الخدمة تتم كتابة التي-:
MOV AH, 01
INT 21H
تقوم هذه الخدمة بانتظار المستخدم إلى حين الضغط على
لوحة المفاتيح .عند الضغط على أي مفتاح يتم الحصول على
كود الـ ASCIIللمفتاح من المسجل ALكما يتم عرض الحرف
الذي تم الضغط عليه في لوحة المفاتيح علي الشاشة .ول تقوم
هذه الخدمة بإرسال رسالة إلي المستخدم فهي فقط تنتظر
حتى يتم الضغط على مفتاح .إذا تم ضغط بعض المفاتيح
الخاصة مثل F1-F10فسوف يحتوي المسجل ALعلي القيمة
صفر .التعليمات التي تلي INT 21hتستطيع فحص المسجل ALو
تتخذ الفعل المناسب.
- 2الخدمة رقم :2عرض حرف على الشاشة أو تنفيذ
وظيفة تحكم.
المدخلت :وضع الرقم 02في المسجل .AH
وضع شفرة الـ ASCIIكود للحرف المطلوب عرضه في
المسجل .DL
:الكود الـ ASCIIللحرف الذي تم عرضه يتم وضعه المخرجات
في المسجل .AL
مثال :الوامر التالية تعرض علمة استفهام علي الشاشة
MOV AH , 02H
’?‘ MOV DL ,
INT 21H
-31- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
(
تحرك بمقدار Tab (HT (Tab 9
سطر جديد (LF (Line Feed A
بداية السطر الحالي (CR (Carriage return D
-32- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
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
ولنه لم يتم استخدام المتغيرات فقد حذف قطاع البيانات في هذا
البرنامج
-33- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
-1إنشاء ملف البرامج -:SOURCE FILE
يتم استخدام أي محرر نصوص Editorلكتابة البرنامج ويمكن
استخدام أي محرر ينتج ملف نصي عادى Text Editorمثل EDIT
يتم عادة تخزين الملف بامتداد (ASM (Extentionمثل المثال
السابق نحفظ الملف بالسم .FIRST.ASM
-34- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
من أحد البرامج نداء برامج فرعيه أخرى مكتوب في
ملف آخر.
-35- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
تحتاج الخدمة رقم 9في نداء المقاطعة INT 21hإلي تجهيز
عنوان إزاحة الرسالة في المسجل DXولعمل ذلك يتم تنفيذ
المر (LEA ( Load Effective Address
LEA Destination ,
Source
حيث المستودع هو أحد المسجلت العامة والمصدر هو اسم
المتغير الحرفي )موقع في الذاكرة( .يقوم المر بوضع عنوان
الزاحة للمتغير المصدر في المسجل المستودع .فمثل ً المر
LEA DX, MSG
المسجل .DX لعنوان المتغير msgفييقوم بوضع قيمة الزاحة
ولن هذا البرنامج يحتوي علي مقطع بيانات فإننا نحتاج إلي
تجهيز المسجل DSلكي يشير إلي مقطع البيانات.
-36- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
.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 ’? ,’$
مباشرة وذلك تعريفه بعد الرسالة MSG2عند تعريف المتغير charتم
لن البرنامج سيقوم بإظهار الرسالة 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من الحرف )وذلك لن الفرق بين الحروف الكبيرة
-37- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
والصغيرة في جدول 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
-38- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
ل من المتغيرات التالية ) إذا كان ممكنًا(ط تعريف ك ٍ -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
العبارات الوامر MOV, ADD , SUB ,INC , DEC , NEGلترجمة
-6استخدم
التالية المكتوبة بلغة راقية إلى عبارات بلغة التجميع:
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
-39- SUST
الفصل الثالث :مدخل إلي لغة التجميع
___________________________________________________________
-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
-40- SUST