أنت غير مسجل في لايف نت . للتسجيل الرجاء إضغط هنـا


إعلان شركة عيون الشرق ينتهي 1/4/2009 
 عدد الضغطات  : 195 LifeNet English 
 عدد الضغطات  : 184 اعلان شبكة العمدة ينتهي في 1/4/2009 
 عدد الضغطات  : 303 :: مساحة إعلانية ::
موقع سيلينا ينتهي في 1/1/2010 
 عدد الضغطات  : 264 مركز تحميل لايف نت 
 عدد الضغطات  : 583 مسلسل الياس 
 عدد الضغطات  : 532  
 عدد الضغطات  : 162


مواضيع ننصح بقراءتها مسابقة الأبداع الحر للخواطر : الجزء الثاني   <->   ماسنجر الياهو العاشر Yahoo Messenger 10 Final
العودة   لايف نت العودة ღ♥ღ لايف نت التقني ღ♥ღ العودة منتدى لغات البرمجة
القرآن الكريم الترجمة توبيكات للماسنجر إسترجاع كلمة المرور طلب كود تفعيل العضوية تفعيل العضوية
قوانين الموقع محرك بحث ألعاب تسجيل دخول مسينجر مركز التحميل مقياس الحب زخرفة SMS الخطة الاعلانية
أفلام ثيمات XP مسينجر دروس تعليمية تعاريف البرامج دليل المواقع ترددات ديجتال أكواد جافا

منتدى لغات البرمجة تعلم أو استفسر عن اجمل لغات البرمجة

الإهداءات

دروس في لغة الاسمبلي (متجدد)

منتدى لغات البرمجة

رد
   
LinkBack (1) أدوات الموضوع طرق مشاهدة الموضوع
  1 links from elsewhere to this Post. Click to view. مشاركة رقم : 1 (permalink)  
قديم 02-02-2008, 12:47 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



المنتدى : منتدى لغات البرمجة
افتراضي دروس في لغة الاسمبلي (متجدد)

الاسمبلي:

لغة اسمبلي (assembly language) : هي لغة التجميع
-اسمبلر (assembler): هو المترجم (compiler) وهو عبارة عن برنامج يقوم بتحويل البرامج التي تكتب بلغة التجميع الى لغة الماكنة
-اسمبلي (assembly): وهي عملية تحويل برنامج مكتوب بلغة التجميع بمساعدة الاسمبلر الى لغة الماكنة


الموازين
في لغة التجميع نتعامل مع 3 موازين
1-الميزان الثنائي: يتكون من الرموز 0 , 1 فقط ومن هنا الاسم ثنائي بقدر عدد الرموز التي يحق استعمالها
امثلة:
11011100 , 10001000
لكل بت توجد قيمة مثل الميزان العشري خانة الاحاد خانة العشرات خانة المئات وغيرها هنا القيم كما يلي:
البت
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
القيمة
1
2
4
8
16
32
64
128

نرى ان قيمة البت في الميزان العشري تساوي 2 للقوة (مكان البت ناقص 1(
البت الموجودة في جهة اليمين هي البت ذات القيمة الصغرى والبت الموجودة في اقصى اليسار تدعى البت ذات القيمة الكبرى

2-الميزان العشري : يتكون من الرموز 0,1,2,3,4,5,6,7,8,9 اذا هنا نرى ان عدد الرموز هو 10 ومن هنا الاسم
امثلة: 123 ,234, 567
3-ميزان السادس عشر (hexa): يتكون من الرموز 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
امثلة

1A2 , 111, DE1

قيم خانات العدد
الخانة
الاولى
الثانية
الثالثة
القيمة
1
16
256

القانون العام:
قيمة الخانة في الميزان العشري=16 للقوة (مكان الخانة ناقص 1)
امثلة
الميزان الثنائي
الميزان العشري
10001000
136
101
5

جدول يربط بين الموازين
العشري
الثنائي
السادس عشر
0
0000
0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F

اسئلة اكمل الجدول التالي:
الميزان الثنائي
الميزان العشري
10010


122

اكمل الجدول التالي:
الميزان العشري
الميزان السادس عشر
17


12F

كتابة الاعداد في لغة التجميع
1-الثنائي: العدد المسجل في الميزان الثنائي يكتب عن يمينه الرمز B
امثلة 10111B , 110B
2-السادس عشر: العدد المسجل في الميزان السادس عشر يكتب عن يمينه الرمز H
امثلة: 11H , 12AH , 10H
3-العشري: يكتب عن يمينه الرمز D او يترك بدون اضافات
امثلة: 11D , 102 , 100 , 100D



توقيع MaZeN




  مشاركة رقم : 2 (permalink)  
قديم 03-02-2008, 12:34 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



كاتب الموضوع : MaZeN المنتدى : منتدى لغات البرمجة
افتراضي رد: دروس في لغة الاسمبلي (متجدد)

المعالج 8086
لهذا المعالج 16 ناقل بيانات (data bus) بحيث يسمح بقراءة/كتابة كلمة كاملة 16 بت وايضا يمكن قراءة /كتابة نصف كلمة 8 بت

-لهذا المعالج 20 ناقل عناوين (address bus) بحيث يسمح بالتوجه ل- 1 ميغا عناوين. وبما ان لكل خلية عنوان خاص اذا يمكن التوجه الى 1 ميغا خلايا ذاكرة

-يوجد في هذا المعالج 14 مسجلا. كل مسجل بطول 16 بت.
المسجلات
تقسم المسجلات الى مجموعات حسب الوظائف

المجموعة الاولى: المسجلات العامة وتسخدم هذه المسجلات في العمليات الحسابية والمنطقية والتخزين المؤقت للبيانات. تتكون هذه المجموعة من 4 مسجلات. طول كل مسجل 16 بت.

يمكن تقسيم كل مسجل منها الى قسمين بحيث يكون كل جزء بطول 8 بت. يمكن التوجه الى المسجل باكمله او الى جزء من المسجل.

في حالة التوجه الى المسجل بأكمله فان المسجل باكمله يتأثر واذا توجهنا الى جزء واحد منه فهو الذي يتاثر ولكن الجزء الاخر لا يتأثر.

المسجل الاول يدعى ACCUMULATOR ويرمز له في AX . يقسم هذا المسجل الى قسمين AH و AL. كل قسم بطول 8 بت
AL
AH

مثال : نفرض ان AX=2030H
اذا AH=20H و AL=30H
لو عوضنا 50H في المسجل AL نحصل على AX=2050H أي ان التأثير فقط على AL
ولكن لو عوضنا 402H في AX
نحصل على AL=02H و AH=04H
هنا نرى ان التأثير كان على الجزئين لاننا توجهنا الى AX

هذه مسجلا ت المجموعة الاولى:
AX :Accumulator
BX :****
CX: Count
DX : Data
ويقسم كل مسجل الى جزئين كالتالي:
AL
AH
BL
BH
CL
CH
DL
DH

المجموعة الثانية:
هي مجموعة تتكون من خمسة مسجلات وطول كل مسجل 16 بت . لا يمكن تقسيم المسجلات الى اجزاء بل نتعامل مع المسجل باكمله والسبب ان هذه المسجلات تحتوي على عناوين وطول كل عنوان 16 بت
SP
Bp
SI
DI
IP

Sp: Stack pointer يؤشر على اخر معطى تم ادخاله الى ال stack . stack هو عبارة عن منطقة في ذاكرة القراءة والكتابة RAM تستخدم للتخزين المؤقت سوف نتطرق لها في دروس قادمة.

BP: **** pointer يستخدم للتأشير على معطى في داخل ال stack
SI:Source index يحتوي على عنوان معطى في مقطع البيانات
DI: Destination Index يحتوي على عنوان معين في مقطع البيانات
IP: Instruction Pointer يحتوي على عنوان الامر التالي الذي يجب ان ينفذه المعالج بعد انهاء الامر الحالي أي الامر الذي ينفذه حاليا
ملاحظات:
-لا يمكن تقسيم أي من هذه المسجلات
-المقطع هو عبارة عن مكان في الذاكرة طوله الاكبر هو 64 كيلوبايت. يمكن ان يحتوي البرنامج على 4 مقاطع ويمكن اقل حسب الحاجة. المقاطع هي كما يلي:
1_مقطع ال stack segment
2-مقطع البيانات Data segmentيحتوي على المتغيرات والثوابت
3-مقطع البيانات الاضافية extra segment يستخدم لتخزين البيانات الاضافية في حالة اذا لم يكن هنالك مكانا في مقطع البيانات ويمكن ايضا استخدامه حتى ولو كان هنالك اماكن فارغة في مقطع البيانات. سوف نرى ذلك في الدروس المقبلة
4-مقطع الاوامر code segment يحتوي على اوامر البرنامج

المجموعة الثالثة:
مجموعة مسجلات المقاطع وهي تحتوي على عناوين بداية المقاطع وطول كل مسجل 16 بت ولا يمكن تقسيمه أي يجب التعامل معه باكمله.وهي 4 مسجلات (registers)
CS
DS
SS
ES

CS: code segment DS:data segment ES: extra segment SS:stack segment

المجموعة الاخيرة:
تحتوي على مسجل واحد وهو مسجل الرايات flags registers . وهو بطول 16 بت يمكن التوجه لكل بت على حدة . كل بت تعطي معلومة معينة عن اخر عملية قامت بها وحدة الحساب والمنطق في المعالج .

على كل مبرمج ان يفهم هذا المسجل بشكل جيد حتى يستطيع ان يبرمج بشكل جيد. تقسم الرايات الى ثلاثة اقسام:

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

-رايات الوضع: وهي الرايات التي تتأثر وتتغير حسب وضع العمليات التي تقوم بها وحدة الحساب والمنطق في المعالج

-رايات السيطرة: وهي رايات المبرمج يتحكم بوضعها فاذا وضع بداخلها القيمة 1 تبقى هذه القيمة حتى يغيرها المبرمج في البرنامج عن طريق اوامر برمجة خاصة بها

مسجل الرايات في المعالج 8086 يحتوي على 7 رايات غير مستخدمة 6 رايات وضع و 3 رايات سيطرة
CF
X
PF
X
AF
X
ZF
SF
TF
IF
DF
OF
X
X
X
X

كل راية تحتوي على الاشارة X فهي غير مستخدمة

الرمز
اسم الراية
النوع
ملاحظات
CF
Carry flag
وضع
يأخذ 1 اذا اعطت البت الاخيرة عن اليسار 1 الى الخارج او اخذت 1 من الخارج والا يأخذ صفر
PF
Parity flag
وضع
اذا كان عدد ال 1 في اول 8 بتات من النتيجة زوجي تأخذ هذه الراية 1 والا تأخذ صفر
AF
Auxiliary flag
وضع
اذا اعطت البت الرابعة البت الخامسه 1 او اخذت البت الرابعة من البت الخامسة 1 تأخذ هذه الراية 1 والا صفر
ZF
Zero flag
وضع
اذا كانت النتيجة صفر تأخذ هذه الراية 1 والا تأخذ صفر
SF
Sign flag
وضع
اذا كانت النتيجة سالبة تأخذ هذه الراية القيمة1 والا تأخذ القيمة صفر
TF
Trap flag
سيطرة
اذا وضع المبرمج بها القيمة 1 يتم تنفيذ امر واحد فقط من الاوامر وبعدها تأخذ القيمة صفر
IF
Interrupt flag
سيطرة
نضعه 1 للسماح لعمليات interrupt في مدخل interrupt للمعالج
DF
Direction Flag
سيطرة
لتحديد اتجاه الحركة في حالة قراءة النصوص
OF
Overflow flag
وضع
تأخذ 1 اذا كانت النتيجة اكبر من المكان المخصص لحفظها والا تأخذ صفر



  مشاركة رقم : 3 (permalink)  
قديم 06-02-2008, 01:05 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



كاتب الموضوع : MaZeN المنتدى : منتدى لغات البرمجة
افتراضي رد: دروس في لغة الاسمبلي (متجدد)

الموازين
هنالك العديد من الموازين ولكن ما يهمنا هو
1-الميزان الثنائي: رموز هذا الميزان 1 , 0 وبمساعدة هذه الرموز يتم تكوين الاعداد في هذا الميزان
مثلا: هذه اربعة اعداد في الميزان الثنائي
1001
0101
1100110
101010

الاعداد التالية غير صحيحة لان بها رموز لا تنتمي لرموز الميزان
العدد
السبب
102
لان الرمز 2 ليس من رموز الميزان
11013
بسبب الرمز 3 فهذا الرمز لا يتبع لرموز الميزان

2-الميزان العشري : رموز هذا الميزان 0,1,2,3,4,5,6,7,8,9 وكما نلاحظ عددها 10 رموز
امثلة: 201 , 100 , 532 , 1234

الاعداد التالية غير صحيحة لان بها رموز لا تنتمي لرموز الميزان
العدد
السبب
10A2
لان الرمز A ليس من رموز الميزان
11013F
بسبب الرمز F فهذا الرمز لا يتبع لرموز الميزان


3-الميزان السادس عشر: رموز هذا الميزان 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
امثلة:
217 , 2A3 , 5FA1 , FF , 101

الاعداد التالية غير صحيحة لان بها رموز لا تنتمي لرموز الميزان
العدد
السبب
102G
لان الرمز G ليس من رموز الميزان
1101K3
بسبب الرمز K فهذا الرمز لا يتبع لرموز الميزان


التحويل بين الموازين
لتحويل أي عدد في أي ميزان الى الميزان العشري نعمل ما يلي:
1-نحول العدد المراد تحويله الى صورة مجموع القوى
2-نجمع القيم للحصول على القيمة المطلوبة

القانون العام لصورة قانون مجموع القوى
X=an*bn-1+an-1*bn-2+….+a1*b0
الاساس (الميزان)

الخانة n






ملاحظة:أي عدد للقوة صفر = واحد
ما عدا الصفر
لذلك b0=1
مثال: حول العدد 1101)) في الميزان الثنائي الى الميزان العشري
الحل: هنا n=4 b=2
X=1*23+1*22+0*21+1*20
X=1*8+1*4+0*2+1*1
X=8+4+0+1
X=13
اذا
الميزان الثنائي

العشري

(1101)2=(13)10





مثال اخر معطى العدد 1A في الميزان السادس عشر جد قيمة هذا العدد في الميزان العشري.
هنا: b=16 n=2
X=1*161+A*160
X=1*16+10*1
X=16+10
X=26
ملاحظة:
العشري
السادس عشر
10
A
11
B
12
C
13
D
14
E
15
F

مثال اخر
حول العدد 2F الى الميزان العشري
X=2*161+F*160
X=2*16+15*1
X=32+15
X=47
(2F)16=(47)10
التحويل من الميزان 16 الى الميزان 2
كل خانة في ميزان السادس عشر عبارة عن 4 خانات في الميزان الثنائي
لفهم عملية التحويل يجب ان نعرف ما يلي:
لكل خانة يوجد وزن ووزنها هو الاساس للقوة المكان ناقص واحد
أي bn-1
في الجدول التالي قيم الخانات في الميزان الثنائي b=2
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
2
4
8
16
32
64
128

في الجدول التالي قيم الخانات في الميزان العشري b=10
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
10
100
1000
10000
105
106
107

في الجدول التالي قيم الخانات في الميزان السادس عشر b=16
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
16
256
4096
164
165
166
167
الجدول التالي يربط بين الميزان السادس عشر والثنائي
تذكر كل خانة في الميزان السادس عشر عبارة عن 4 خانات في الميزان الثنائي
العشري
ا لميزان الثنائي
السادس عشر

الخانة الاولى
الخانة الثانية
الخانة الثالثة
الخانة الرابعة


1
2
4
8

0
0
0
0
0
0
1
1
0
0
0
1
2
0
1
0
0
2
3
1
1
0
0
3
4
0
0
1
0
4
5
1
0
1
0
5
6
0
1
1
0
6
7
1
1
1
0
7
8
0
0
0
1
8
9
1
0
0
1
9
10
0
1
0
1
A
11
1
1
0
1
B
12
0
0
1
1
C
13
1
0
1
1
D
14
0
1
1
1
E
15
1
1
1
1
F

معطى العدد 12 في الميزان السادس عشر جد قيمته في الميزان الثنائي
1 2


0001

0010





اذا الجواب النهائي هو 00010010
(12)16=(00010010)2
الجدول السابق يصلح للتحويل من السادس عشر الى الميزان الثنائي وبالعكس
مع مراعاة الملاحظة الاولى الا وهي ان كل 4 خانات في الميزان الثنائي عبارة عن خانة في الميزان السادس عشر

امثلة:
معطى العدد 10110011 في الميزان الثنائي جد العدد في الميزان السادس عشر
الحل:
نعمل مجموعة كل مجموعة عبارة عن 4 خانات نبدأ دائما من اليمين
المجموعة الاولى: 0011 وحسب الجدول هي الرقم 3
المجموعة الثانية: 1011 وحسب الجدول هي B
الحل النهائي:
(10110011)2=(B3)16
ملاحظة مهمة: اذا كان عدد الخانات اقل من 4 نضيف اصفار على يسار العدد حتى نكمل المجموعة الى 4 خانات
مثال:
معطى العدد التالي في الثنائي 1010110 جد العدد في السادس عشر
المجموعة الاولى: 0110 وحسب الجدول هذه 6
المجموعة الثانية : 101 وهي تتكون من 3 خانات لذا علينا ان نضيف 0 على يسار المجموعة لنحصل على 4 خانات
المجموعة الجديدة: 0101 وحسب الجدول هي 5
الحل النهائي
1010110)2=(53)16)

التحويل من العشري الى الميزان الثنائي
لفهم الطريقة علينا الاتفاق على الاشياء التالية:
-الخانة الاولى هي الخانة اليمنى وهي ذات القيمة الصغرى وقيمتها 20=1
الخانة التي تليها هي الخانة الثانية وهي تقع على يسارها وهكذا
-عملية التحويل عن طريق القسمة نقسم العدد العشري على 2 والخانة التي عليها الدور تأخذ باقي القسمة ونقسم الناتج الصحيح مرة ثانية على 2 وتأخذ الخانة التالية باقي القسمة نستمر في هذه الطريقة حتى يكون المقسوم اقل من المقسوم عليه فتأخذ الخانة الحالية قيمة المقسوم وينتهي التحويل.
نقوم الان بكتابة الألغوريثم
1.عوض n=1
2.عوض المقسوم عليه b=2
3.عوض العدد العشري في المقسوم x
4.طالما x اكبر او يساوي b نفذ
4.1قسم x على b
4.2ضع الباقي في الخانة n
4.3ضع في x الناتج الصحيح
4.4اضف 1 لرقم الخانة n
5.ضع X في الخانة n

مثال:
معطى العدد 12 عشري حول العدد الى الميزان الثنائي
الحل:
العدد
الناتج الصحيح
الباقي
هل X>=b
العدد الثنائي
رقم الخانة n





1
12


نعم



6
0

0
2
6


نعم



3
0

00
3
3


نعم



1
1

100
4
1


لا






1100


طريقة اخرى نقسم على 2 حتى يكون الناتج صفر
مثال:
معطى العدد العشري 57 حول العدد الى الثنائي
المقسوم
المقسوم عليه
الناتج الصحيح
الباقي
57
2
28
1
28
2
14
0
14
2
7
0
7
2
3
1
3
2
1
1
1
2
0
1


الان نكتب العدد نبدأ من الاسفل
111001
ملاحظة اذا اردنا تحويل عدد عشري الى الميزان السادس عشر نعمل نفس الشيء ولكن بدلا من b=2 يكون b=16
مع مراعاة الجدول السابق
A=10 b=11 C=12 D=13 E=14 F=15
مثال :
حول العدد 254 الى الميزان السادس عشر

المقسوم
المقسوم عليه
الناتج الصحيح
الباقي
254
16
15
14
15
16
0
15

عند تسجيل العدد نتذكر الجدول E=14 F=15
الجواب النهائي
(254)10=(FE)16

طريقة اخرى هي الانتقال من الميزان العشري الى الثنائي وبعدها من الثنائي الى السادس عشر
طريقة اخرى لتحويل العدد من العشري الى الثنائي هي كما يلي:
نحن نعرف ان لكل خانة قيمة حسب قانون bn-1
اذا نظرنا بتمعن نجد ان قيمة الخانة التالية هي دائما قيمة الخانة الحالية مضروبة بالعدد 2
عند تحويل عدد عشري نبدأ بتسجيل القيم حتى الحصول على قيمة خانة تساوي العدد المطلوب او اكبر منه مثال:
حول العدد 104 الى الميزان الثنائي
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
2
4
8
16
32
64
128
نحن هنا بحاجة الى 8 خانات لان 104 اكبر من 64 واصغر من 128
الحل الان كما يلي:
نبدأ من اليسار ونسأل السؤال هل قيمة الخانة اقل او تساوي العدد الذي معنا اذا كان الجواب نعم نضع القيمة 1 تحت الخانة ونطرح من العدد قيمة الخانة وننتقل الى الخانة التي عن يمينها والا نضع 0 تحت الخانة ولا نطرح شيء وننتقل الى الخانة التي عن يمينها وهكذا
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
2
4
8
16
32
64
128








-هل 128 اصغر او تساوي 104 الجواب كلا اذا نضع صفر
-هل 64 اصغر او تساوي 104 الجواب نعم اذا نضع 1 ونطرح 64 يبقى معنا 40
- هل 32 اصغر او تساوي 40 الجواب نعم اذا نضع 1 ونطرح 32 يبقى معنا 8
-هل 16 اصغر او تساوي 8 الجواب الجواب لا اذا نضع صفر
-هل 8 اصغر او تساوي 8 الجواب نعم اذا نضع 1 ونطرح 8 يبقى معنا صفر
-هل 4 اصغر او تساوي 0 الجواب كلا اذا نضع صفر
-هل 2 اصغر او تساوي 0 الجواب كلا اذا نضع صفر
-هل 1 اصغر او تساوي 0 الجواب كلا اذا نضع صفر
الحل النهائي
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الثامنة
1
2
4
8
16
32
64
128
0
0
0
1
0
1
1
0

الحل النهائي
(104)10=(01101000)2
ملاحظة: جميع الطرق التي تم شرحها في هذا الدرس تناسب الاعداد الموجبة فقط

  مشاركة رقم : 4 (permalink)  
قديم 07-02-2008, 12:55 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



كاتب الموضوع : MaZeN المنتدى : منتدى لغات البرمجة
افتراضي رد: دروس في لغة الاسمبلي (متجدد)

الاعداد الموجهة ( السالبة والموجبة )
تقسم الاعداد الى قسمين اعداد موجبة واعداد سالبة والسؤال هو كيف يمكن ان نفرق بين هذه الاعداد.
من المعروف ان العدد في الميزان الثنائي يتكون من بتات . البت الاولى الموجودة في الجهة اليمنى هي البت ذات القيمة الصغرى واما البت الموجودة في الجهة اليسرى فهي بت الاشارة . اذا كانت قيمتها 1 فالعدد سالب واذا كانت قيمتها 0 فالعدد موجب.
اذا لمعرفة نوع العدد يجب تحويله الى الميزان الثنائي. ولكن هنالك طرق اخرى يمكن بمساعدتها معرفة نوع العدد . في البداية نركز على الطريقة الاولى.
مثال: معطى المتغير X من نوع byte . x=7DH هل قيمة المتغير قيمة موجبة ام سالبة؟ الرمز H يدل على الميزان السادس عشر
الحل :
اولا علينا ان نحول العدد الى الميزان الثنائي
7DH=011111012
اذا نظرنا الى البت الاخيرة في الجهة اليسرى نرى ان قيمتها 0 لذلك قيمة المتغير موجبة.
مثال اخر
X=92H
92H=10010010 القيمة سالبة لان البت الاخيرة المسؤلة عن الاشارة قيمتها 1
استنتاج: اكبر قيمة موجبة للمتغير x هي 01111111 وهي تساوي 7FH وهي تساوي 127 عشري

الاعداد السالبة
معطى ان المتغير x= -6 في الميزان العشري سجل العدد في الميزان الثنائي والميزان السادس عشر
الحل:
حسب المعطيات فان المتغير x من نوع byte اذا سوف نستخدم 8 بتات
الخطوة الاولى: نكتب القيمة المطلقة (العدد الموجب) للمتغير في الميزان الثنائي حسب ما تعلمناه في الدروس السابقة:
الاولى
الثانية
الثالثة
الرابعة
الخامسة
السادسة
السابعة
الاشارة
1
2
4
8
16
32
64

0
1
1
0
0
0
0
0

اذا
6)10=(00000110)2)

الخطوة الثانية: نبدأ بكتابة العدد من جهة اليمين كما هو حتى ان نصادف خانة قيمتها واحد فنسجلها ونعكس كل الخانات التي بعدها (أي نسجل بدلا من 1 صفر وبدلا من صفر 1)
(-6)10=111110102=(FA)16

طريقة اخرى هي كما يلي:
-نحول القيمة المطلق للقيمة السالبة في الميزان السادس عشر
610=(06)16 لقد سجلنا 06 لاننا بحاجة الى 8 بتات
-الخطوة الثانية نطرح 06 من الصفر والسبب هو
-6=0-6
اذا:
00
-
06
-----
0 ناقص 6 لا يجوز تأخذ الصفر الاولى 16 من الصفر الثانية 16 ناقص 6 تساوي 10 عشري وهي A في الميزان السادس عشر
الصفر الثانية اعطت الصفر الاولى لهذا السبب هي الان -1 فتأخذ 16 الان 16-1 يبقى معها 15 الان 15-0=15 وهي تساوي F في الميزان السادس عشر
الجواب النهائي
-6=(FA)16=(11111010)2



  مشاركة رقم : 5 (permalink)  
قديم 09-02-2008, 12:26 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



كاتب الموضوع : MaZeN المنتدى : منتدى لغات البرمجة
افتراضي رد: دروس في لغة الاسمبلي (متجدد)

الاوامر1)الامر MOV

الصيغة الاولى: هنالك مجموعة من الاوامر التي بحاجة الى مصدر وهدف. المصدر لا يتغير وانما الهدف الذي يتغير

الامر

الهدف

المصدر

MOV OP1,OP2



الامر mov يعني ضع في op1 نسخة من قيمة op2 بدون التأثير على OP2 . بعد هذه العملية op2 لا يتغير بينما OP1 يتغير

مثال:

معطى AL=20H و BL=50H


MOV AL,BL

MOV BL,60H

نعمل جدول متابعة لمشاهدة التغييرات



BL
AL
الامر

50h
20H


50H
50H
MOV AL,BL

60H
50H
MOV BL,60H




بعد تنفيذ المقطع نحصل على

AL=50H BL=60H



ملاحظات



1) الامر MOV لا يؤثر على الرايات flags أي ان قيم الرايات لا يتغير وانما تحافظ على القيم السابقة



2)يجب ان يكون المصدر من نفس كبر الهدف (بايت، بايت) او (word , word)

مثال:

MOV AX ,CX MOV DL,AL MOV CH,20H

اما هذه الامثلة بعضها غير صحيح

الامر
الوضع
السبب

MOV AL,BX
غير صحيح
لان المصدر اكبر من الهدف

MOV AL,123H
غير صحيح
لا يمكن تخزين عدد من ثلاث منازل في الميزان 16 في مسجل بكبر 8 بتات. يمكن تخزين قيمة بكبر منزلة او منزلتين

MOV BL,120
صحيح
لان 120=78H أي انه يتكون من منزلتين

MOV DX,12345H
غير صحيح
لانه في مسجل بكبر 16 بت يمكن تخزين قيمة بكبر 4 منازل على الاكثر في الميزان السادس عشر




تمارين:

1) اكتب مقطع برنامج يبدل قيم DL , CL فيما بينها. أي ان DL يأخذ قيمة CL وCL يأخذ قيمة DL



الحل: هنا يجب ان نستعين بمسجل مساعد

MOV AL,DL

MOV DL,CL

MOV CL,AL



2)معطى الامر التالي:

MOV DX , 2011H

ما هي القيم الموجودة في كل من DL , DH



11
20










DL

DH















2)الامر ADD

ADD OP1, OP2

Op1=op1+op2

اجمع قيمة المصدر وقيمة الهدف واحفظ النتيجة في الهدف

مثال:

Mov dh,41H

Add dh,3

بعد تنفيذ المقطع المسجل dh يصبح 44H

مثال :

Mov AL , 6

MOV CL , 8

ADD AL , CL

جدول متابعة:

AL
CL
الامر

؟؟
؟؟


06H
؟؟
Mov AL , 6

06H
08H
MOV CL , 8

0EH
08H
ADD AL , CL




ملاحظات:

- ؟؟ : تعني اننا لا نعلم ما بداخله

-علينا تسجيل القيم في الميزان السادس عشر على شكل منزلتين في المسجلات ذات 8 بت وعلى شكل 4 منازل في المسجلات ذات 16 بت.

مثال:

DX=1024H AL=06H

-كل قيمة عددية تبدأ بحرف A , B ,C ,D ,E ,F يجب ان نسجل 0 عن يسارها

مثال:

Mov DL , 0D1H

ADD CX , 0A123H



تمرين : اكتب مقطع برنامج ينفذ ما يلي: CL=2*AL+BL



الحل:

Mov CL,AL

ADD CL ,CL

ADD CL,BL



3) الامر SUB

sub op1 ,op2

op1=op1-op2

اطرح المصدر من الهدف وخزن النتيجة في الهدف

تمرين:

اكتب مقطع برنامج يحسب حاصل الفرق بين DL والمسجل BL ويحفظ النتيجة في BH

الحل:

Mov BH , DL

Sub BH , BL

4)الامر INC

هذا الامر بحاجة الى operand واحد فقط

Inc op1

Op1=op1+1

كبر الهدف بِ 1

5)الامر DEC

هذا الامر بحاجة الى operand واحد فقط

Dec op1

Op1=op1-1

اطرح من OP1 واحد



التعامل مع الذاكرة

يمكن القراءة من الذاكرة او الكتابة الى الذاكرة . عندما نريد التوجه الى الذاكرة للكتابة او القراءة علينا ان نقوم بما يلي:

-ضع في المسجل SI او DI او BX عنوان الخلية المطلوبة

-ضع القيم العددية التي تريد كتابتها في مسجل ملائم من حيث الكبر

-استخدم الامر MOV وضع المسجل الذي يحوي عنوان الخلية بين اقواس مربعة

مثال:

أكتب مقطع برنامج يخزن في الخلية 102H القيمة 30H

الحل:

Mov si,102H

Mov AL, 30H

Mov [SI],AL



في حالة اذا لم كتبنا بدلا من MOV [si],AL الامر MOV si,AL نحصل على خطأ لان المترجم يفهم باننا نريد ان نخزن قيمة AL في المسجل SI ونحن نعلم ان المسجل si 16 بت والمسجل AL 8 بت اذا لا تواجد ملائمة بين المصدر والهدف

بينما MOV [si],AL ضع قيمة AL في الخلية التي عنوانها مخزن في المسجل si

ملاحظة مهمة جدا: لا يجوز ان يكون الهدف خلية في الذاكرة والمصدر ايضا خلية في الذاكرة

مثال: X اسم متغير

الامثلة التالية غير صحيحة

Mov [si],[bx] add [di],X



تمرين : اكتب مقطع برنامج يقرأ فحوى الخلية 440H ويحفظها في المسجل DH

الحل:

Mov DI,440H

Mov DH,[DI]





تمرين: اكتب مقطع برنامج يجمع فحوى الخلية 10H وفحوى الخلية 11H ويخزن النتيجة في الخلية 12H

الحل:

Mov si,10H

Mov ah,[si]

Inc si

Add ah,[si]

Inc si

Mov [si],ah

تمرين مهم جدا:

معطى المقطع التالي:

Mov si,5

Mov ax,1122H

Mov [si],ax

ماذا يعمل هذا المقطع

نحن نعرف ان كبر كل خلية في الذاكرة هو 8 بت اذا يمكن تسجيل قيمة تتكون من منزلتين في الميزان السادس عشر.

ولكن AX عبارة عن 16 بت أي لا يمكن تخزينها كلها في خلية واحدة لهذا السبب

يتم حفظ قيمة AL في الخلية التي يؤشر عليها SI ويحفظ قيمة ah في الخلية التي تليها.

اذا

في الخلية 5 يسجل 22H وفي الخلية 6 تسجل القيمة 11H


  مشاركة رقم : 6 (permalink)  
قديم 10-02-2008, 12:34 PM
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.64 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



كاتب الموضوع : MaZeN المنتدى : منتدى لغات البرمجة
افتراضي رد: دروس في لغة الاسمبلي (متجدد)

المقارنة
في بعض الاحيان نحتاج الى مقارنة بين المصدر والهدف . مثلا افحص ا