AA
‫أسمبيلي‬‫للمبتدئين‬
‫العامري‬ ‫طالب‬ ‫مشتاق‬ :‫المبرمج‬ ‫أعداد‬
‫للمبتدئٌن‬ ً‫األسٌمبل‬ ‫لغة‬
MUSHTAQ_TALIB58@YAHOO.COM
1/1/2009
209
‫مقدمة‬ً‫ف‬‫لغة‬ً‫األسمبل‬
‫هذه‬‫اللغة‬‫مزودة‬‫لوصف‬‫كل‬‫من‬‫العملٌات‬‫األساسٌة‬ً‫الت‬‫ٌمكن‬‫إنجازها‬‫بواسطة‬
‫المعالج‬،‫المصغر‬‫كتب‬ُ‫ت‬‫تعلٌمات‬‫هذه‬‫اللغة‬‫باستعمال‬‫الرموز‬‫الهجائٌة‬‫أو‬‫ما‬‫ُدعى‬ٌ
ALPHANUMERIC‫ا‬‫ل‬‫بد‬‫من‬‫األصفار‬‫و‬‫الواحدات‬ً‫ف‬‫شٌفرة‬‫اآللة‬‫للمعالج‬.‫إن‬
‫الصٌغة‬‫العامة‬‫لكتابة‬‫األمر‬(‫التعلٌمة‬)ً‫ف‬‫لغة‬ً‫األسمبل‬ً‫ه‬:
‫لفتة‬:‫تعلٌمة‬;‫تعلٌق‬
‫عادة‬‫فإن‬‫التعلٌقات‬‫أو‬‫المالحظات‬ً‫الت‬‫تصف‬‫األوامر‬‫توضع‬‫على‬‫الطرف‬‫األٌمن‬.
‫و‬‫هذا‬‫النوع‬‫من‬‫التوثٌق‬‫بٌن‬‫التعلٌمة‬‫و‬‫التعلٌق‬‫ٌجعل‬‫من‬‫السهل‬‫على‬‫المبرمج‬‫كتابة‬
‫و‬‫قراءة‬‫و‬‫تصحٌح‬‫الشٌفر‬‫ة‬.‫و‬‫نقصد‬‫بكلمة‬‫الشٌفرة‬‫أن‬‫البرنامج‬‫مكتوب‬‫بلغة‬‫اآللة‬
‫للمعالج‬‫و‬‫الذي‬‫ُعرف‬ٌ‫بشٌفرة‬‫الهدف‬object code‫أما‬‫البرنامج‬‫المكتوب‬‫بلغة‬
ً‫األسمبل‬‫فٌدعى‬‫بشٌفرة‬‫المصدر‬source code.‫هذا‬‫و‬‫إن‬‫كل‬‫تعلٌمة‬ً‫ف‬‫برنامج‬
‫المصدر‬‫تطابق‬‫ا‬‫ا‬‫أمر‬‫ا‬‫ا‬‫واحد‬ً‫ف‬‫لغة‬ً‫األسمبل‬‫حٌث‬‫أن‬‫األمر‬‫ٌجب‬‫أن‬‫د‬ِّ‫د‬‫ٌح‬‫أي‬‫عملٌة‬
‫سٌتم‬‫تنفٌذها‬‫و‬‫ما‬ً‫ه‬‫متحولت‬‫المعطٌات‬ً‫الت‬‫عالج‬ُ‫ت‬‫س‬.‫لهذا‬‫السبب‬‫قسم‬ُ‫ت‬‫التعلٌمة‬
‫إلى‬‫قسمٌن‬‫منفصلٌن‬:‫رمز‬‫التعلٌمة‬opcode = operation code‫و‬‫المتحولت‬
operands.‫رمز‬‫العملٌة‬‫هو‬‫جزء‬‫من‬‫التعلٌمة‬‫و‬‫الذي‬‫ٌحدد‬‫العملٌة‬ً‫الت‬‫نفذ‬ُ‫ت‬‫س‬
‫ا‬‫ال‬‫فمث‬‫نذكر‬‫بعض‬‫العملٌات‬‫النموذجٌة‬‫كالجمع‬‫و‬‫الطرح‬‫و‬‫النقل‬.
ً‫ف‬‫لغة‬ً‫األسمبل‬‫تستخدم‬‫الكلمات‬‫المختزلة‬mnemonic‫من‬‫أجل‬‫التعلٌمات‬‫ا‬‫ال‬‫فمث‬
‫بالنسبة‬‫للمعالج‬0806‫فالكلمات‬‫المختزلة‬ً‫ف‬‫لغة‬ً‫األسمبل‬‫لعملٌات‬‫الجمع‬‫و‬‫الطرح‬
‫و‬‫النقل‬ً‫ه‬‫على‬‫الترتٌب‬ADD‫و‬SUB‫و‬MOV.‫أما‬‫المتحولت‬‫فتحدد‬‫ال‬‫معطٌات‬
ً‫الت‬‫عالج‬ُ‫ت‬‫س‬‫من‬‫ِبل‬‫ق‬‫المعالج‬‫بواسطة‬‫رمز‬‫العملٌة‬‫للتعلٌمة‬‫ا‬‫ال‬‫فمث‬ً‫ف‬‫التعلٌمة‬ً‫الت‬
‫تضٌف‬‫محتوٌات‬‫مسجل‬‫القاعدة‬‫إلى‬‫محتوٌات‬‫المراكم‬‫فإن‬BX‫و‬AXً‫ه‬
‫المتحولت‬‫و‬‫كتب‬ُ‫ت‬‫التعلٌمة‬‫على‬‫الشكل‬ً‫التال‬ADD AX,BXً‫فف‬‫هذا‬‫المثال‬‫ضاف‬ُ‫ت‬
‫محتوٌات‬BX‫إلى‬AX‫و‬‫ٌوضع‬‫ناتج‬‫ال‬‫جمع‬ً‫ف‬AX‫و‬‫لذلك‬‫بر‬َ‫ت‬‫ُع‬ٌBX‫متحول‬
‫المصدر‬‫و‬AX‫متحول‬‫الهدف‬.
‫طاقم‬‫تعلٌمات‬‫المعالج‬0806
‫ُزود‬ٌ‫المعالج‬0806‫بمجموعة‬‫تعلٌمات‬‫مإلفة‬‫من‬111‫تعلٌمة‬‫أساسٌة‬‫و‬‫كذلك‬‫إن‬
‫المجال‬‫الواسع‬‫للمتحولت‬‫و‬‫أنظمة‬‫العنونة‬‫المسموحة‬‫لالستعمال‬‫مع‬‫هذه‬‫التعلٌمات‬
‫ٌوسع‬‫مجموعة‬‫التعلٌمات‬‫إ‬‫لى‬‫تعلٌمات‬،‫أكثر‬‫ا‬‫ال‬‫فمث‬‫تعلٌمة‬Mov‫األساسٌة‬‫تمتد‬‫إلى‬
80‫تعلٌمة‬‫مختلفة‬‫و‬‫قابلة‬‫للتنفٌذ‬‫على‬‫مستوى‬‫لغة‬‫اآللة‬.
‫ا‬‫ل‬‫أو‬-‫تعلٌمات‬‫نقل‬‫المعطٌات‬
‫ٌملك‬‫المعالج‬‫مجموعة‬‫تعلٌمات‬‫وظٌفتها‬‫نقل‬‫المعطٌات‬‫و‬‫ذلك‬‫إما‬‫بٌن‬‫مسجالت‬
‫المعالج‬‫الداخلٌة‬‫أو‬‫بٌن‬‫مسجل‬ً‫داخل‬‫و‬‫حجرة‬‫تخزٌن‬ً‫ف‬‫الذاكرة‬‫و‬ً‫ه‬:
1)‫تعلٌمة‬Mov
‫تستخدم‬‫هذه‬‫التعلٌمة‬‫لنقل‬‫باٌت‬‫أو‬‫كلمة‬‫معطٌات‬‫من‬‫متحول‬‫المصدر‬‫إلى‬‫متحول‬
‫الهدف‬‫و‬‫لها‬‫الشكل‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬S → DMOV D,S‫نقل‬MOV
‫إن‬S,D‫لهذه‬‫التعلٌمة‬‫ٌمكن‬‫أن‬‫تكون‬‫مسجالت‬‫داخل‬‫ٌة‬‫أو‬‫حجرات‬‫تخزٌن‬ً‫ف‬‫الذاكرة‬
‫و‬‫ٌبٌن‬‫الجدول‬ً‫التال‬‫مختلف‬‫أنواع‬‫متحولت‬‫المصدر‬‫و‬‫الهدف‬‫مع‬‫مثال‬‫لكل‬‫منها‬:
‫الحالت‬‫المستثناة‬‫من‬‫تعلٌمة‬MOV
1-‫ل‬‫تستطٌع‬‫تعلٌمة‬MOV‫أن‬‫تنقل‬‫المعطٌات‬‫بشكل‬‫مباشر‬‫بٌن‬ً‫حجرت‬‫ذاكرة‬‫لذلك‬
‫ل‬‫نرى‬ً‫ف‬‫الجدول‬‫المجاور‬‫الحالة‬‫التالٌة‬:Mem → Mem‫و‬‫لحل‬‫هذه‬‫المشكلة‬
‫فإن‬‫المعطٌات‬‫المرغوب‬‫بنقلها‬‫ٌجب‬‫نقلها‬‫ا‬‫ل‬‫أو‬ً‫ف‬‫مسجل‬ً‫داخل‬‫بواسطة‬‫تعلٌمة‬
MOV،‫و‬‫من‬‫ثم‬‫تنقل‬‫محتوٌات‬‫هذا‬‫المسجل‬‫إلى‬‫حجرة‬‫جدٌدة‬ً‫ف‬‫الذاكرة‬‫بواسطة‬
‫تعلٌمة‬MOV‫أخرى‬.
8-‫ل‬‫ٌمكن‬‫وضع‬‫قٌمة‬‫فورٌة‬ً‫ف‬‫مسجل‬‫مقطع‬‫مباشرة‬.‫أي‬‫أن‬‫التعلٌمة‬‫التالٌة‬‫غٌر‬
‫م‬‫سموح‬‫بها‬MOV DS,1000‫و‬‫لحل‬‫هذا‬‫المشكلة‬‫نستخدم‬‫التعلٌمتٌن‬‫التالٌتٌن‬:
MOV AX,1000
MOV DS,AX
3-‫ل‬‫ٌمكن‬‫نقل‬‫محتوٌات‬‫أحد‬‫مسجالت‬‫المقاطع‬‫إلى‬‫مسـجل‬‫مقطع‬‫آخر‬،‫مباشرة‬‫أي‬
‫أن‬‫التعلٌمة‬‫التالٌة‬‫غٌر‬‫مسموح‬‫بها‬MOV DS,ES‫و‬‫لحل‬‫هذه‬‫المشكلة‬‫نقوم‬‫بـ‬
MOV AX,ES
MOV DS,AX
‫مثال‬‫عام‬:MOV AL,[SI]‫هذه‬‫التعلٌمة‬ً‫تعن‬‫نقل‬‫محتوٌات‬‫حجرة‬‫الذاكرة‬‫المشار‬
‫إلٌها‬‫بواسطة‬‫المسجل‬SI‫إلى‬‫المسجل‬AL‫و‬‫إن‬‫نظام‬‫العنونة‬ً‫ف‬‫هذه‬‫التعلٌمة‬‫هو‬
‫عنونة‬‫غٌر‬‫مباشرة‬‫بالمسجل‬‫و‬‫متحول‬‫المصدر‬‫عنوانه‬ً‫الفٌزٌائ‬‫هو‬PA = DS x
10h + SI‫أما‬‫متحول‬‫الهدف‬‫فهو‬AL.
8(‫تعلٌمة‬‫التبدٌل‬XCHG
‫ستخدم‬ُ‫ت‬‫هذه‬‫التعلٌمة‬‫لستبدال‬‫متحول‬‫المصدر‬‫بمتحول‬‫الهدف‬‫و‬‫لستبدال‬‫متحول‬
‫الهدف‬‫بمتحول‬‫المصدر‬.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬S → D
D → SXCHG D,S‫تبدٌل‬XCHG
‫و‬‫ٌبٌن‬‫الجدول‬ً‫التال‬‫مختلف‬‫أنواع‬‫متحولت‬‫المصدر‬‫و‬‫ال‬‫هدف‬‫لتعلٌمة‬XCHG.
‫مثال‬:
XCHG AX,BX
ً‫ف‬‫هذا‬‫المثال‬‫ٌتم‬‫التبدٌل‬‫بٌن‬‫محتوٌات‬AX‫و‬BX.
XCHG [SUM],BX
‫ٌتم‬‫التبدٌل‬‫بٌن‬‫محتوى‬‫الحجرة‬SUMً‫ف‬‫الذاكرة‬‫و‬‫بٌن‬‫المسجل‬BX.
3)‫تعلٌمة‬XLAT
‫تتعامل‬‫هذه‬‫التعلٌمة‬‫مع‬AL‫فقط‬،‫إن‬‫تعامل‬‫هذه‬‫التعلٌمة‬‫ٌتم‬‫مع‬‫الجداول‬‫المخزنة‬
ً‫ف‬‫الذاكرة‬‫فلو‬‫وضعنا‬ً‫ف‬BX‫إزاحة‬‫بداٌة‬‫الجدول‬‫نسبة‬‫إلى‬‫مقطع‬‫المعطٌات‬DS‫و‬
‫وضعنا‬ً‫ف‬AL‫إزاحة‬‫العنصر‬‫نسبه‬‫إلى‬‫بداٌة‬،‫الجدول‬‫عندها‬‫تقوم‬‫تعلٌمة‬XLAT
‫بجمع‬‫محتوٌات‬‫المسجل‬AL‫مع‬‫محتوٌات‬‫المسجل‬BX‫و‬‫تعتبر‬‫الناتج‬‫إزاحة‬‫بالنسبة‬
‫إلى‬‫مقطع‬،‫المعطٌات‬‫ثم‬‫تقوم‬‫بوضع‬‫قٌمة‬‫الحج‬‫رة‬‫المعطى‬‫إزاحتها‬ً‫ف‬AL.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬(DS x 10h ) + *AL+BX+ → ALXLAT‫جدول‬‫المصدر‬
‫ترجمة‬XLAT
‫مثال‬:
‫بفرض‬‫أنه‬‫لدٌنا‬‫جدول‬ً‫ف‬‫الذاكرة‬‫ٌحتوي‬‫على‬‫مربعات‬‫األعداد‬‫من‬1‫إلى‬9‫أي‬‫أنه‬
ً‫ف‬‫أول‬‫حجرة‬‫من‬‫الجدول‬‫ٌوضع‬‫مربع‬‫العدد‬1‫و‬ً‫ف‬‫الحجرة‬‫الثانٌة‬‫ٌوضع‬‫مربع‬
‫العدد‬8(‫أي‬4)،‫و‬‫هكذا‬…‫ومن‬‫هذا‬‫نرى‬‫أن‬‫الجدول‬‫طوله‬‫تسع‬‫باٌتات‬‫إزاحة‬
‫بداٌته‬‫عن‬‫بداٌة‬‫مقطع‬‫الـ‬DSً‫ه‬188.
‫عندما‬‫ٌطلب‬‫منا‬‫الحصول‬‫على‬‫مربع‬‫أحد‬‫هذه‬‫األعداد‬‫و‬‫لٌكن‬‫العدد‬4‫أي‬‫أن‬
‫المطلوب‬‫هو‬‫أن‬‫تصبح‬‫قٌمة‬AL = 16‫لذلك‬‫نقوم‬‫بما‬ً‫ٌل‬:
1)‫نضع‬AL = 3‫و‬BX = 100.
8)ً‫نعط‬‫التعلٌمة‬XLAT.
‫و‬‫بعد‬‫تنفٌذها‬‫ٌصبح‬AL = 16‫و‬‫هو‬‫المطلوب‬.
4)‫التعلٌمات‬LEA, LES, LDS
‫تستعمل‬‫هذه‬‫التعلٌمات‬‫من‬‫أجل‬‫عملٌة‬‫نقل‬‫المعطٌات‬‫لتحمٌل‬‫مسجل‬‫مقطع‬‫أو‬‫مسجل‬
‫أغراض‬‫عامة‬‫بعنوان‬‫بشكل‬‫مباشر‬‫من‬‫الذاكرة‬.‫التعلٌمة‬LEA‫و‬‫ظٌفتها‬ً‫ه‬‫تحمٌل‬
‫مسجل‬‫بعنوان‬‫فعال‬‫أما‬LDSً‫فه‬‫لتحمٌل‬‫مسجل‬‫ما‬‫و‬‫مسجل‬‫مقطع‬‫المعطٌات‬DS
‫و‬‫تعلٌمة‬LES‫وظٌفتها‬‫تحمٌل‬‫مسجل‬‫ما‬‫و‬‫مسجل‬‫مقطع‬‫المعطٌات‬ً‫اإلضاف‬ES.
‫وهذه‬‫التعلٌمات‬‫موصوفة‬‫كما‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬ٌ‫وجد‬Mem16 → reg16LEA reg16,mem16‫تحمٌل‬
‫عنوان‬‫فعال‬LEA
‫ل‬‫ٌوجد‬Mem32 → reg16
Mem32+2 → DSLDS reg16,mem32‫تحمٌل‬‫مسجل‬‫و‬‫المسجل‬DS
LDS
‫ل‬‫ٌوجد‬Mem32 → reg16
Mem32+2 → ESLES reg16,mem32‫تحمٌل‬‫مسجل‬‫و‬‫المسجل‬ES
LES
‫أمثلة‬:
LEA SI,[100] => SI = 1000
LDS SI,[200] => SI = 553F
DS = 1000
LES DI,[300] => DI = 4030
ES = 3000
‫ا‬‫ا‬ٌ‫ثان‬-‫التعلٌمات‬‫الرٌاضٌة‬
‫و‬ً‫ه‬‫تشمل‬‫تعلٌمات‬‫من‬‫أجل‬‫عملٌات‬،‫الجمع‬،‫الطرح‬‫الضرب‬‫و‬‫القسمة‬.
1)‫تعلٌمات‬‫الجمع‬
‫و‬ً‫ه‬‫موصوفة‬‫بالجدول‬ً‫التال‬:
‫األ‬‫عالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬S + D → D
Carry → CFADD D,S‫جمع‬ADD
‫أعالم‬‫الحالة‬S + D + CF → D
Carry → CFADC D,S‫جمع‬‫مع‬‫أخذ‬‫النزٌاح‬‫بعٌن‬‫العتبار‬ADC
‫أعالم‬‫الحالة‬D+1 → DINC D‫الزٌادة‬‫بمقدار‬‫واحد‬INC
AF,CF‫سٌتم‬‫شرحها‬‫ا‬‫ا‬‫لحق‬AAA‫تصحٌح‬‫ناتج‬‫جمع‬‫عددٌن‬‫بشٌفرة‬
ً‫اآلسك‬AAA
‫كل‬‫أعالم‬‫الحالة‬‫ماعدا‬OF‫سٌتم‬‫شرحها‬‫ا‬‫ا‬‫لحق‬DAA‫تصحٌح‬‫ناتج‬‫جمع‬‫عددٌن‬
‫بشٌفرة‬BCDDAA
ً‫تعلٌمت‬ADD‫و‬ADC
‫إن‬‫المتحولت‬‫المسموحة‬ً‫ف‬‫تعلٌمات‬‫الجمع‬ADD, ADC‫مبٌنة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫و‬‫بالنسبة‬‫للمتحولت‬‫المسموحة‬ً‫ف‬‫تعلٌمة‬INCً‫فه‬:
‫مثال‬:‫بفرض‬AX = 4F3Dh‫و‬BX = FD81h‫و‬CF = 1‫فما‬ً‫ه‬‫نتٌجة‬‫تنفٌذ‬
‫التعلٌمة‬ADC AX,BX‫؟‬‫ا‬‫ا‬‫مبٌن‬‫حالة‬‫أعالم‬‫الحالة‬‫بعد‬‫تنفٌذ‬‫عملٌة‬‫الجمع‬‫هذه‬.
‫الحل‬:‫سنكتب‬‫الشٌفرة‬‫الثنائٌة‬‫للمتحولت‬‫من‬‫أجل‬‫توضٌح‬‫حالة‬‫األعالم‬
11111111
AX = 0100 1111 0011 1101 b
BX = 1111 1101 1000 0001 b
CF = 0001 b+
8188118818111111b
‫و‬‫اآلن‬‫أعالم‬‫الحالة‬ً‫ه‬:
PF = 0‫ألن‬‫عدد‬‫الواحدات‬‫فردي‬ً‫ف‬‫الباٌت‬‫األول‬‫من‬‫ناتج‬‫الجمع‬
AF = 0‫ألنه‬‫ل‬‫ٌوجد‬‫انزٌاح‬‫من‬‫الخانة‬3‫إلى‬‫الخانة‬4ً‫ف‬‫الباٌت‬‫األول‬‫من‬‫ناتج‬
‫الجمع‬(‫حٌث‬‫ٌتم‬‫ترقٌم‬‫الخانات‬‫ا‬‫ا‬‫بدء‬‫من‬‫الصفر‬)
SF = 0‫و‬ً‫ه‬‫آخر‬‫خانة‬‫من‬‫نتٌجة‬‫الجمع‬(‫الناتج‬‫موجب‬)
CF = 1‫بسبب‬‫وجود‬‫انزٌاح‬ً‫خارج‬
OF = 0‫ألنه‬‫ٌوجد‬‫إنزٌاح‬ً‫داخل‬‫و‬‫إنزٌاح‬ً‫خارج‬
‫مالحظة‬:‫النزٌاح‬ً‫الداخل‬‫هو‬‫الداخل‬‫إلى‬‫الخان‬‫ة‬‫ذات‬‫األهمٌة‬‫العظمى‬MSB
‫مالحظة‬:OF = 1‫إذا‬‫وجد‬‫انزٌاح‬ً‫داخل‬‫فقط‬‫أو‬‫وجد‬‫انزٌاح‬ً‫خارج‬‫فقط‬
‫تعلٌمة‬‫التصحٌح‬DAA
‫تستخدم‬‫هذه‬‫التعلٌمة‬‫إلنجاز‬‫عملٌة‬‫تصحٌح‬‫لناتج‬‫جمع‬‫عددٌن‬‫بشٌفرة‬BCD(‫هذا‬‫و‬
‫ٌجب‬‫أن‬‫ٌكون‬‫ناتج‬‫الجمع‬‫ا‬‫ا‬‫حتم‬ً‫ف‬AL‫أي‬ً‫ف‬‫النصف‬ً‫السفل‬‫من‬‫المراكم‬AX)‫و‬
‫الجدول‬ً‫التال‬‫ٌبٌن‬‫الحالت‬‫الممكنة‬‫لجمع‬‫عددٌن‬‫بشٌفرة‬BCD:
‫المنطقة‬‫األولى‬‫أرقامها‬‫من‬8‫إلى‬9‫و‬‫فٌها‬‫تكون‬‫نتٌجة‬‫الجمع‬‫صحٌحة‬‫و‬‫ل‬‫تحتوي‬
‫على‬‫انزٌاح‬‫و‬‫لٌست‬‫بحاجة‬‫إلى‬‫تصحٌح‬‫ا‬‫ال‬‫مث‬1+8=9‫و‬ً‫ه‬‫أرقام‬‫واقعة‬‫ضمن‬
‫نطاق‬‫المنطقة‬‫األولى‬.
‫المنطقة‬‫الثانٌة‬‫أرقامها‬‫من‬18‫إلى‬15‫و‬‫فٌها‬‫تكون‬‫نتٌجة‬‫الجمع‬‫غٌر‬‫صحٌحة‬‫و‬
‫بحاجة‬‫إلى‬‫تصحٌح‬‫بإضافة‬‫العدد‬6‫فنحصل‬‫على‬‫رقم‬‫و‬‫حمل‬‫إلى‬‫العدد‬ً‫الثان‬‫ا‬‫ال‬‫فمث‬
9+5=E‫فبإضافة‬6‫إلى‬‫العدد‬E‫ٌكون‬‫الناتج‬6+E=14‫و‬‫بذلك‬‫تكون‬‫النتٌجة‬
‫صحٌحة‬.
‫المنطقة‬‫الثالثة‬‫أرقامها‬‫من‬16‫و‬‫حتى‬10‫و‬‫فٌها‬‫تكون‬‫نتٌجة‬‫الجمع‬‫غٌر‬‫ص‬‫حٌحة‬
‫و‬‫بحاجة‬‫إلى‬‫تصحٌح‬‫و‬‫هنا‬‫تتكون‬‫النتٌجة‬‫من‬‫حاصل‬‫جمع‬‫مع‬‫انزٌاح‬.
‫بما‬‫أن‬‫ناتج‬‫الجمع‬‫موجود‬ً‫ف‬AL‫حٌث‬‫نمثل‬AL = Bit7 … Bit0
‫إن‬‫قاعدة‬‫التصحٌح‬ً‫ف‬‫هذه‬‫التعلٌمة‬ً‫ه‬:
1)if Bit3 Bit2 Bit1 Bit0 of AL > 9 or AF = 1
then AL = AL + 6 , AF = 1
8)if AL > 9Fh or CF = 1
then AL = AL + 60h , CF =1
‫مثال‬:‫بفرض‬‫أن‬AL = 28 BCD‫و‬BL = 68 BCD
‫ما‬‫هو‬‫ناتج‬‫تنفٌذ‬‫ما‬ً‫ٌل‬:
ADD AL,BL
DAA
‫الحل‬:‫إن‬‫نتٌجة‬‫تنفٌذ‬‫هاتٌن‬‫التعلٌمتٌن‬ً‫ه‬
80BCD = 0010 1000 b
60BCD = 0110 1000 b+
18818888→AL
CF = 0 0110+
18818118>=AL = 96 BCD
AF = 1
‫تعلٌمة‬AAA
‫تستخدم‬‫هذه‬‫التعلٌمة‬‫لتصحٌح‬‫ناتج‬‫جمع‬‫عددٌن‬‫بشٌفرة‬ً‫آسك‬(‫و‬‫هنا‬‫ا‬‫ا‬‫أٌض‬‫ٌجب‬‫أن‬
‫ٌكون‬‫ناتج‬‫الجمع‬ً‫ف‬‫المسجل‬AL)‫و‬‫قاعدة‬‫التصحٌح‬ً‫ف‬‫هذه‬‫التعلٌمة‬ً‫ه‬:
if Bit3 Bit2 Bit1 Bit0 of AL > 9 or AF =1
then AL = AL + 06
AL = AL and 0Fh
AH = AH + 1
AF = 1
CF = 1
Else AL = AL and 0Fh
AH = 00
‫مثال‬:‫بفرض‬‫أن‬AL =32h = 2 ASCII‫و‬BL = 34h = 4 ASCII‫ما‬‫هو‬‫ناتج‬
‫تنفٌذ‬‫التعلٌمتٌن‬‫التالٌتٌن‬:
ADD AL,BL
AAA
‫الحل‬:‫إن‬‫ناتج‬‫تنفٌذ‬‫هاتٌن‬‫التعلٌمتٌن‬‫هو‬ً‫كالتال‬:
AL = 0011 0010
BL = 0011 0100+
81188118→AL = 66h
AL = 06h , AH = 00
‫و‬‫هنا‬AF = 0‫بسبب‬‫عدم‬‫وجود‬‫انزٌاح‬‫من‬‫الخانة‬3‫إلى‬‫الخانة‬4(‫حٌث‬‫ٌبدأ‬
‫الترقٌم‬‫ا‬‫ا‬‫اعتبار‬‫من‬‫الصفر‬)
8)‫تعلٌمات‬‫الطرح‬
‫هناك‬‫مجموعة‬‫واسعة‬‫من‬‫تعلٌمات‬‫الطرح‬‫كما‬‫هو‬‫واضح‬‫من‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬D - S → D
burrow → CFSUB D,S‫طرح‬SUB
‫أعالم‬‫الحالة‬D - S - CF → D
Carry → CFSBB D,S‫الطرح‬‫مع‬‫الستعارة‬SBB
‫أعالم‬‫الحالة‬D-1 → DDEC D‫اإلنقاص‬‫بمقدار‬‫واحد‬DEC
‫أعالم‬‫الحالة‬8–D → D
1→CFNEG D‫المتمم‬ً‫الثنائ‬NEG
‫كل‬‫أعالم‬‫الحالة‬‫عدا‬OF‫سٌتم‬‫شرحها‬‫ا‬‫ا‬‫لحق‬DAS‫تصحٌح‬‫ناتج‬‫طرح‬
‫عددٌن‬‫بشٌفرة‬BCDDAS
AF, CF‫سٌتم‬‫شرحها‬‫ا‬‫ا‬‫لحق‬AAS‫تصحٌح‬‫ناتج‬‫جمع‬‫عددٌن‬‫بشٌفرة‬
ً‫اآلسك‬AAS
‫مالحظة‬:‫إن‬‫المتحولت‬‫المستخدمة‬‫من‬‫أجل‬ً‫تعلٌمت‬‫الطرح‬SUB, SBBً‫ه‬‫نفسها‬
‫المتحولت‬‫المسموحة‬‫من‬‫أجل‬ً‫تعلٌمت‬‫الجمع‬ADD,ADC‫أما‬‫بالنسبة‬‫إلى‬
‫المتحولت‬‫المستخدمة‬‫من‬‫أجل‬‫تعلٌمة‬DECً‫فه‬‫نفسها‬‫المتحولت‬‫المسموحة‬‫من‬
‫أجل‬‫تعلٌمة‬INC‫و‬‫بالنسبة‬‫لتعلٌمة‬NEG‫فالمتحولت‬‫المسموحة‬ً‫ه‬Reg,
Reg16, Mem, Mem16.
‫مثال‬:‫بفرض‬‫أن‬SI = 0018h‫و‬DS = 2F00h‫و‬‫العنوان‬ً‫الفٌزٌائ‬‫المتولد‬‫عنهما‬
‫هو‬8F018h‫و‬‫بفرض‬‫كانت‬‫محتوٌات‬‫الحجرة‬ً‫الت‬‫ٌشٌر‬‫إلٌها‬‫العنوان‬ً‫الفٌزٌائ‬
[8F018] = 0400h،‫ما‬‫هو‬‫ناتج‬‫تنفٌذ‬‫الت‬‫علٌمة‬SUB [SI],03F8h.
‫الحل‬:
‫تقوم‬‫هذه‬‫التعلٌمة‬‫بطرح‬‫محتوٌات‬‫متحول‬‫المصدر‬(‫متحول‬‫فوري‬‫هنا‬)‫من‬
‫محتوٌات‬‫متحول‬‫الهدف‬(‫محتوٌات‬‫حجرة‬‫ذاكرة‬‫هنا‬)‫حٌث‬‫أن‬‫تعلٌمة‬‫الطرح‬‫تتم‬
‫بإٌجاد‬‫المتمم‬ً‫الثنائ‬‫لمتحول‬‫المصدر‬‫و‬‫من‬‫ثم‬‫جمعه‬‫مع‬‫متحول‬‫الهدف‬.
Destination = 0400h = 0000 0100 0000 0000 b
Source = 03F8h = 1111 1100 0000 1000 b+
18888888888881888b
‫تذكرة‬‫بالمتمم‬ً‫الثنائ‬(‫و‬‫الذي‬‫ٌشار‬‫إلٌه‬‫بوضع‬‫خطٌن‬‫فوق‬‫العدد‬‫الذي‬‫نرٌد‬‫إٌجاد‬
‫المتمم‬ً‫الثنائ‬‫له‬: )
‫إذا‬‫أردت‬‫الحصول‬‫على‬‫المتمم‬ً‫الثنائ‬‫للعدد‬83F8h‫فاعمل‬‫ما‬ً‫ٌل‬:
1)‫تحوٌل‬‫هذا‬‫العدد‬‫إلى‬‫النظام‬ً‫الثنائ‬‫فٌصبح‬8888881111111888
8)‫أقلب‬‫األصفار‬‫واحدات‬‫و‬‫الواحدات‬‫ا‬‫ا‬‫أصفار‬‫فٌنتج‬111111888888
8111
3)‫أضف‬‫واحد‬‫إلى‬‫الرقم‬‫الناتج‬‫فتحصل‬‫على‬‫المتمم‬ً‫الثنائ‬–83F8h =
1111 1100 0000 1000
‫لحظ‬‫أن‬:PF = 0‫ألن‬‫عدد‬‫الواحدات‬‫فردي‬‫ف‬ً‫الباٌت‬‫األول‬‫من‬‫الناتج‬.
AF =1‫ألنه‬‫ل‬‫ٌوجد‬‫معنا‬‫حمل‬(‫انزٌاح‬)‫عند‬‫النتقال‬‫من‬‫الخانة‬‫الثالثة‬‫إلى‬
‫الخانة‬‫الرابعة‬(‫عكس‬‫حالة‬‫الجمع‬.)
ZF = 0‫ألن‬‫النتٌجة‬‫لٌست‬‫صفرٌة‬.
SF = 0‫و‬ً‫ه‬‫قٌمة‬‫آخر‬‫خانة‬‫من‬‫الناتج‬MSB.
CF = 0‫ألن‬‫هناك‬‫انزٌاح‬ً‫خارج‬(‫عكس‬‫حالة‬‫الجمع‬.)
OF = 0‫لحصول‬‫انزٌاح‬ً‫داخل‬‫و‬‫انزٌاح‬ً‫خارج‬‫بآن‬‫واحد‬.
‫تعلٌمة‬DAS
‫تستخدم‬‫هذه‬‫التعلٌمة‬‫لتصحٌح‬‫ناتج‬‫طرح‬‫عددٌن‬‫بشٌفرة‬BCD‫حٌث‬‫ٌكمن‬‫ناتج‬
‫طرح‬‫هذٌن‬‫العددٌن‬ً‫ف‬‫المسجل‬AL‫و‬‫قاعدة‬‫التصحٌح‬ً‫ه‬:
1)if Bit3 Bit2 Bit1 Bit0 of AL > 9 or AF = 1
then AL = AL – 06 , AF = 1
8)if AL > 9Fh or CF=1
then AL = AL – 60h , CF = 1
‫مثال‬:‫بفرض‬‫أن‬AL = 86 BCD‫و‬AH = 07 BCD،‫بٌن‬‫نتٌجة‬‫التعلٌمتٌن‬
‫التالٌتٌن‬:
SUB AL,AH
DAS
‫الحل‬:
AL = 1000 0110 b
AH = 1111 1001 b+
181111111b => AL = 7Fh
‫و‬‫اآلن‬:
AF = 1‫بسبب‬‫عدم‬‫وجود‬‫انزٌاح‬‫من‬‫الخانة‬‫الثالثة‬‫إلى‬‫الخانة‬‫الرابعة‬.
CF = 0‫لوجود‬‫انزٌاح‬ً‫خارج‬
‫و‬‫بتطبٌق‬‫الشرط‬1‫من‬‫قاعدة‬‫التصحٌح‬‫نجد‬‫أن‬AL = 79h , AF = 1
‫تعلٌمة‬AAS
‫تستخدم‬‫هذه‬‫التعلٌمة‬‫لتصحٌح‬‫ناتج‬‫طرح‬‫عددٌن‬‫بالشٌفرة‬ASCII‫حٌث‬‫ٌكمن‬‫ناتج‬
‫الطرح‬ً‫ف‬AL،‫و‬‫قاعدة‬‫التصحٌح‬ً‫ه‬:
if Bit3 Bit2 Bit1 Bit0 of AL > 9 or AF = 1
then AL = AL – 06h , AL = AL and 0Fh
AH = AH – 01 , AF = 1 , CF = 1
Else AL = AL and 0Fh , AH = 00
‫مثال‬:
‫بفرض‬‫أن‬AL = 38h = 8 ASCII‫و‬BL = 35h = 5 ASCII،‫ما‬‫هو‬‫ناتج‬‫تنفٌذ‬
‫التعلٌمتٌن‬‫التالٌتٌن‬:
SUB AL,BL
AAS
‫الحل‬:
AL = 0011 1000 b
BL = 1100 1011 b+
188888811b => AL = 03h
AF = 0‫بسبب‬‫وجود‬‫انزٌاح‬‫من‬‫الخانة‬‫الثالثة‬‫إلى‬‫الخانة‬‫الرابعة‬
CF = 0‫بسبب‬‫وجود‬‫انزٌاح‬ً‫خارج‬
‫و‬‫بعد‬‫ت‬‫طبٌق‬‫قاعدة‬‫التصحٌح‬‫نجد‬AL = 03h , AH = 00
3)‫تعلٌمات‬‫الضرب‬‫و‬‫القسمة‬
‫ٌتم‬‫تطبٌق‬‫هذه‬‫التعلٌمات‬‫على‬‫األعداد‬‫الثنائٌة‬‫أو‬‫بالشٌفرة‬BCD‫أي‬ً‫ف‬‫معالجة‬
‫األعداد‬‫ذات‬‫اإلشارة‬‫و‬‫األعداد‬‫بدون‬‫إشارة‬.‫و‬‫هذه‬‫التعلٌمات‬‫مبٌنة‬ً‫ف‬‫الجدول‬
ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬ٌ‫الص‬‫غة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬AL.S8 → AX
AX.S16 → DX,AXMUL S‫ضرب‬‫بدن‬‫إشارة‬MUL
‫أعالم‬‫الحالة‬
Q*AX/S8+ → AL
R*AX/S8+ → AH
Q*(DX,AX)/S16+ → AX
R*(DX,AX)/S16+ → DXDIV S‫تقسٌم‬‫بدون‬‫إشارة‬DIV
‫ببساطة‬:‫النقطة‬‫تعنى‬‫عملٌة‬‫الضرب‬،‫العادٌة‬‫و‬‫الرمز‬S8ً‫ٌعن‬‫م‬‫تحول‬‫مصدر‬
‫عبارة‬‫عن‬‫باٌت‬‫أما‬‫الرمز‬Rً‫فٌعن‬ً‫باق‬‫القسمة‬‫و‬‫الرمز‬Q‫ما‬‫هو‬‫إل‬‫حاصل‬
‫قسمة‬.
‫مالحظة‬:‫إذا‬‫كانت‬‫قٌمة‬Qً‫ف‬‫الحالة‬‫األولى‬(‫حالة‬‫باٌت‬)‫مساوٌة‬‫لـ‬FF‫أو‬‫كانت‬
‫قٌمة‬Qً‫ف‬‫الحالة‬‫الثانٌة‬(‫حالة‬‫كلمة‬)‫مساوٌة‬‫إلى‬FFFFh‫فتحدث‬‫مقاطعة‬‫من‬
‫النوع‬،‫صفر‬‫و‬‫عرف‬ُ‫ت‬‫هذه‬‫ا‬‫لمقاطعة‬‫بخطؤ‬‫التقسٌم‬.
‫مالحظة‬:‫بالنسبة‬‫لتعلٌمات‬‫الضرب‬‫و‬‫التقسٌم‬‫لألعداد‬‫ذات‬‫اإلشارة‬ً‫فه‬‫مشابهة‬
‫ا‬‫ا‬‫تمام‬‫للتعلٌمات‬‫السابقة‬‫و‬‫عرف‬ُ‫ت‬‫كما‬ً‫ٌل‬:
IMULً‫ه‬‫تعلٌمة‬‫الضرب‬‫مع‬‫أخذ‬‫اإلشارة‬‫بعٌن‬‫العتبار‬.
IDIVً‫ه‬‫تعلٌمة‬‫التقسٌم‬‫مع‬‫أخذ‬‫اإلشارة‬‫بعٌن‬‫العتبار‬.
‫و‬‫تكون‬‫إشارة‬‫الن‬‫اتج‬ً‫ف‬‫كلتا‬‫التعلٌمتٌن‬‫آخر‬‫خانة‬‫منه‬‫أي‬‫خانة‬‫الـ‬MSB.
‫و‬‫باإلضافة‬‫إلى‬‫ذلك‬‫هناك‬‫التعلٌمات‬‫التالٌة‬(‫تابع‬‫لجدول‬‫الضرب‬‫و‬‫القسمة‬:)
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬Q*AL/10d+ → AH
R*AL/10d+ → AL
AAM‫تصحٌح‬‫الناتج‬ً‫ف‬AL‫من‬‫ضرب‬‫عد‬‫دٌن‬BCD‫أو‬‫عددٌن‬‫ثنائٌٌن‬
AAM
SF, ZF, PFAH.10d + AL → AL
88→AHAAD‫تصحٌح‬AX‫من‬‫أجل‬‫القسمة‬‫حٌث‬AX‫لٌس‬‫ناتج‬‫القسمة‬‫و‬
‫إنما‬‫هو‬‫متحول‬‫الهدف‬ً‫ف‬‫عملٌة‬‫القسمة‬.‫لذلك‬‫نطبق‬‫هذه‬‫التعلٌمة‬‫قبل‬‫تعلٌمة‬‫القسمة‬
‫على‬‫عكس‬ً‫باق‬‫تعلٌمات‬‫التصحٌح‬AAD
‫ل‬‫ٌوجد‬MSB of AL→
All bits of AHCBW‫تحوٌل‬‫باٌت‬‫إلى‬‫كلمة‬CBW
‫ل‬‫ٌوجد‬MSB of AX→
All bits of DXCBW‫تحوٌل‬‫كلمة‬‫إلى‬‫كلمة‬‫مضاعفة‬CWD
‫إن‬‫المتحولت‬‫المسموحة‬ً‫ف‬‫تعلٌمات‬‫الضرب‬‫و‬‫القسمة‬ً‫ه‬‫بالنسبة‬‫للمصدر‬S:
Mem16, Mem8, Reg16, Reg8‫و‬‫بالنسبة‬‫إلى‬‫للهدف‬D‫فالمتحول‬‫الوحٌد‬
‫المسموح‬‫هو‬‫المراكم‬‫ا‬‫ا‬‫دوم‬.
‫مالحظة‬:‫إن‬‫تعلٌمات‬‫القسمة‬‫ٌمكن‬‫استخدامها‬‫لتقسٌم‬‫المقسوم‬‫بـ‬0‫بتات‬ً‫ف‬AL‫على‬
‫مقسوم‬‫علٌه‬‫بـ‬0‫بتات‬‫ا‬‫ا‬‫أٌض‬.‫و‬‫إلنجاز‬‫هذا‬‫ٌجب‬‫ا‬‫ل‬‫أو‬‫تمدٌد‬‫إشارة‬‫المقسوم‬‫لملء‬
‫المسجل‬AX‫و‬‫هذا‬ً‫ٌعن‬‫ملء‬AH‫بؤصفار‬‫إذا‬‫كان‬‫العدد‬‫ا‬‫ا‬‫موجب‬‫أو‬‫بواحدات‬‫إذا‬‫كان‬
‫العدد‬‫ا‬‫ا‬‫سالب‬(‫أي‬‫حسب‬‫خانة‬‫اإلشارة‬)‫و‬‫تتم‬‫هذه‬‫العملٌة‬‫بواسطة‬‫التعلٌمة‬CBW.
‫و‬‫بشكل‬‫مشابه‬‫فإن‬‫تعلٌمات‬‫التقسٌم‬38‫بت‬‫على‬16‫بت‬‫ٌمكن‬‫استخدامها‬‫لتقسٌم‬
‫مقسوم‬‫ذي‬16‫بت‬ً‫ف‬AX‫على‬‫مقسوم‬‫علٌه‬‫ذي‬16‫بت‬‫و‬‫ذلك‬‫بتحوٌل‬‫الكلمة‬‫إلى‬
‫كلمة‬‫مضاعفة‬‫و‬‫ٌتم‬‫هذا‬‫بواسطة‬‫التعلٌمة‬CWD.
‫كما‬‫ذكر‬‫نا‬‫ا‬‫ا‬‫سابق‬‫فإن‬‫األعداد‬‫غٌر‬‫المجمعة‬‫ٌتم‬‫حفظها‬ً‫كالتال‬:
‫القسم‬‫العلوي‬‫من‬‫الباٌت‬‫الذي‬‫ٌحتوي‬‫على‬‫العدد‬‫غٌر‬‫المجمع‬‫ٌجب‬‫أن‬‫تكون‬‫قٌمته‬
‫مساوٌة‬‫إلى‬‫الصفر‬.
‫إن‬‫التعلٌمة‬AAM‫تستخدم‬‫لتصحٌح‬‫ناتج‬‫ضرب‬‫عددٌن‬‫غٌر‬‫مجمعٌن‬‫ألنه‬‫عند‬
‫ضرب‬‫عددٌن‬‫غٌر‬‫مجمعٌن‬‫نحصل‬‫على‬‫نتٌجة‬‫مجمعة‬‫و‬‫الن‬‫تٌجة‬‫ٌجب‬‫أن‬‫تكون‬
‫غٌر‬،‫مجمعة‬‫لذلك‬‫نصححها‬‫بواسطة‬‫التعلٌمة‬AAM.
‫مثال‬:‫بفرض‬‫أن‬BL = 09‫و‬AL = 07‫فما‬ً‫ه‬‫نتٌجة‬‫تنفٌذ‬‫التعلٌمات‬‫التالٌة‬:
MUL BL
AAM
‫الحل‬:
AX = 00 07
BX = 00 09
MUL 00 3F AX
AAM 06 03 AX
‫قاعدة‬‫التصحٌح‬ً‫ف‬‫تعلٌمة‬AADً‫ه‬:
‫إن‬‫التقسٌم‬‫بالنسبة‬‫إلى‬‫األعداد‬‫غٌر‬‫المجمعة‬‫ٌإدي‬‫إلى‬‫الحصول‬‫على‬‫نتائج‬‫خاطئة‬
‫و‬‫لذلك‬‫ٌجب‬‫تجمٌع‬‫األعداد‬‫قبل‬‫قسمتها‬.‫و‬‫بفرض‬‫أن‬AX = 0604h(‫و‬ً‫ه‬‫أعداد‬
‫غٌر‬‫مجمعة‬)‫فنتٌجة‬‫تطبٌق‬‫تعلٌمة‬‫التصحٌح‬AAD(‫و‬ً‫الت‬‫ٌتم‬‫تطبٌقها‬‫قبل‬‫عملٌة‬
‫التقسٌم‬)ً‫ه‬:
AL = 06 x 10d + 04h = 64d = 40h
AH = 00h
‫ا‬‫ا‬‫ثالث‬-‫التعلٌمات‬‫المنطقٌة‬
‫تنجز‬‫عملٌاتها‬‫المنطقٌة‬‫خانة‬‫بخانة‬‫على‬‫متحولتها‬.‫و‬‫الجدول‬ً‫التال‬‫ٌبٌن‬‫التعلٌمات‬
‫المنطقٌة‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬S.D → DAND D,SANDً‫المنطق‬AND
‫أعالم‬‫الحالة‬S + D → DOR D,SORً‫المنطق‬OR
‫أعالم‬‫الحالة‬
S + D → DXOR D,SXORً‫المنطق‬XOR
‫ل‬‫ٌوجد‬
D → DNOT DNOTً‫المنطق‬NOT
‫إن‬‫المتحولت‬‫المسموحة‬‫من‬‫أجل‬‫تعلٌمة‬XOR, OR, AND‫مبٌنة‬ً‫ف‬‫الجدول‬‫ا‬‫ا‬‫جانب‬:
‫ا‬‫ا‬‫رابع‬-‫تعلٌمات‬‫اإلزاحة‬
‫هناك‬‫نوعان‬‫من‬‫تعلٌمات‬‫اإلزاحة‬‫هما‬‫اإلزاحة‬ٌ‫المنطق‬‫ة‬‫و‬‫اإلزاحة‬‫الرٌاضٌة‬‫كما‬
‫هو‬‫واضح‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CFSAL/SHL D,count‫إزاحة‬‫رٌاضٌة‬/‫إزاحة‬‫منطقٌة‬‫و‬
‫كالهما‬‫نحو‬‫الٌسار‬SAL/SHL
‫العملٌة‬‫هنا‬ً‫ه‬‫إزاحة‬‫محتوٌات‬D‫نحو‬‫الٌسار‬‫باتجاه‬CF‫ا‬‫ا‬‫عدد‬‫من‬‫الخانات‬‫مسا‬‫ا‬‫ا‬ٌ‫و‬
‫لقٌمة‬count‫و‬‫ملء‬‫جمٌع‬‫الخانات‬‫الٌمنى‬‫المفرغة‬‫بؤصفار‬.
‫و‬‫بالنسبة‬‫لتؤثٌر‬‫هذه‬‫التعلٌمة‬‫على‬‫علم‬OF:‫إذا‬‫تبدلت‬‫خانة‬‫اإلشارة‬‫نتٌجة‬‫اإلزاحة‬
‫فإن‬OF = 1.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CF
SHR D,count‫إزاحة‬‫منطقٌة‬‫نحو‬‫الٌمٌن‬SHR
‫ال‬‫عملٌة‬‫هنا‬ً‫ه‬‫إزاحة‬‫محتوٌات‬D‫نحو‬‫الٌمٌن‬‫باتجاه‬CF‫ا‬‫ا‬‫عدد‬‫من‬‫الخانات‬‫ا‬‫ا‬ٌ‫مساو‬
‫لقٌمة‬count‫و‬‫ملء‬‫جمٌع‬‫الخانات‬‫الٌسرى‬‫المفرغة‬‫بؤصفار‬.
‫و‬‫بالنسبة‬‫لتؤثٌر‬‫هذه‬‫التعلٌمة‬‫على‬‫العلم‬OF:‫إذا‬‫تبدلت‬‫خانة‬‫اإلشارة‬‫نتٌجة‬‫اإلزاحة‬
‫فإن‬OF = 1
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫ا‬‫لمعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬
SAR D,count‫إزاحة‬‫رٌاضٌة‬‫نحو‬‫الٌمٌن‬SAR
‫العملٌة‬‫هنا‬ً‫ه‬‫إزاحة‬‫محتوٌات‬D‫نحو‬‫الٌمٌن‬‫باتجاه‬CF‫ا‬‫ا‬‫عدد‬‫من‬‫المرات‬‫ا‬‫ا‬ٌ‫مساو‬
‫لقٌمة‬count‫و‬‫ملء‬‫الخانات‬‫جمٌع‬‫الخانات‬‫الٌسرى‬‫بقٌمة‬‫الخانة‬MSB(‫خانة‬
‫اإلشارة‬‫أو‬‫آخر‬‫خانة‬.)
‫مالحظة‬:‫بال‬‫نسبة‬‫للتعلٌمتٌن‬SHL, SAL:‫إذا‬‫طبقنا‬‫هاتٌن‬‫التعلٌمتٌن‬‫من‬‫أجل‬‫اإلزاحة‬
‫بعدد‬‫من‬‫الخانات‬count = N‫فهذا‬ً‫ٌعن‬‫ضرب‬‫متحول‬‫الهدف‬‫بـ‬‫و‬‫الذي‬‫هو‬
‫مضاعفات‬‫العدد‬8.
‫مالحظة‬:‫إن‬‫التعلٌمة‬SHRً‫تعن‬‫تقسٌم‬‫متحول‬‫الهدف‬‫على‬‫العدد‬‫تحت‬‫كون‬LSB
= 0‫كل‬‫مرة‬‫و‬ً‫ف‬‫حـالة‬LSB = 1‫ف‬‫عندها‬‫ٌكون‬‫لدٌنا‬ً‫باق‬‫موضوع‬ً‫ف‬‫العلم‬CF.
‫مثال‬:‫اكتب‬‫ا‬‫ا‬‫برنامج‬‫ٌقوم‬‫بحساب‬‫العالقة‬‫الرٌاضٌة‬‫التالٌة‬‫ا‬‫ا‬‫مستخدم‬‫تعلٌمات‬‫اإلزاحة‬
‫و‬‫التعلٌمات‬‫الرٌاضٌة‬:
3(.AX) + 7.(BX) → DX
MOV SI,AX ; copy AX into SI
SAL SI,1 ; 2 AX
ADD SI,AX ; 3 AX
MOV DX,BX ; copy BX into DX
MOV CL,03H ; load shift count
SAL DX,CL ; 8 BX
SUB DX,BX ; 7 BX
ADD DX,SI ; result
‫إن‬‫المتحولت‬‫المسموحة‬‫بالنسبة‬‫لتعلٌمات‬‫اإلزاحة‬ً‫ه‬:
‫أي‬‫عندما‬Count‫ل‬‫ٌساوي‬‫الواحد‬‫فعندئذ‬‫ٌجب‬‫تحمٌل‬‫قٌمة‬countً‫ف‬‫المسجل‬
CL‫ثم‬‫كتابة‬‫تعلٌمات‬‫اإلزاحة‬‫أي‬:‫عندما‬count‫ٌساوي‬‫الواحد‬‫فٌمكن‬‫أن‬‫نكتب‬:
SAL AX,1
‫و‬‫عندما‬=<‫ٌجب‬‫أن‬‫نكتب‬:
MOV CL,count
SAL AX,CL
‫هذا‬‫و‬‫إن‬‫قٌمة‬count‫محددة‬‫بالمجال‬[1،FF]‫و‬‫األقواس‬‫المحٌطٌة‬‫لٌس‬‫لها‬‫عالقة‬
‫بمفهو‬‫م‬‫اإلزاحة‬‫ا‬‫ا‬‫طبع‬.
‫ا‬‫ا‬‫خامس‬-‫تعلٌمات‬‫التدوٌر‬
‫و‬ً‫ه‬‫مبٌنة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CFROL D,count‫تدوٌر‬‫نحو‬‫الٌمٌن‬ROL
‫العملٌة‬‫هنا‬ً‫ه‬‫تدوٌر‬‫محتوٌات‬D‫نحو‬‫الٌسار‬‫ا‬‫ا‬‫عدد‬‫من‬‫المرات‬‫ا‬‫ا‬ٌ‫مساو‬‫لقٌمة‬
count.‫و‬‫كل‬‫خانة‬‫زاح‬ُ‫ت‬‫خارج‬‫الـ‬MSB‫توضع‬ً‫ف‬‫الخانة‬LSB‫و‬ً‫ف‬CF.
‫و‬‫بالنسبة‬‫لتؤثٌر‬‫هذه‬‫التعلٌمة‬‫على‬‫العلم‬OF‫فهو‬‫نفس‬‫المناقشة‬ً‫ف‬‫التعلٌمات‬‫السابقة‬.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CFROR D,count‫تدوٌر‬‫نحو‬‫الٌسار‬ROR
‫العملٌة‬‫هنا‬ً‫ه‬‫تدوٌر‬‫محتوٌات‬D‫نحو‬‫الٌمٌن‬‫ا‬‫ا‬‫عدد‬‫من‬‫المرات‬‫ا‬‫ا‬ٌ‫مساو‬‫لقٌمة‬
count.‫و‬‫كل‬‫خانة‬‫زاح‬ُ‫ت‬‫خارج‬‫الـ‬LSB‫توضع‬ً‫ف‬‫الخانة‬MSB‫و‬ً‫ف‬CF.
‫و‬‫بالنسبة‬‫لـ‬OF‫فهو‬‫نفس‬‫المناقشة‬ً‫ف‬‫التعلٌمات‬‫السابقة‬.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CF
RCL D,count‫تدوٌر‬‫نحو‬‫الٌسار‬‫عب‬‫ر‬‫الـ‬CFRCL
‫العملٌة‬‫هنا‬‫مشابهة‬‫لتعلٌمة‬ROL‫ما‬‫عدا‬‫أن‬‫المحتوى‬ً‫األصل‬‫لـ‬CF‫ٌوضع‬ً‫ف‬
‫الخانة‬LSB‫أما‬‫الخانة‬‫المزاحة‬‫خارج‬‫الـ‬MSB‫فتوضع‬ً‫ف‬CF.
‫و‬‫بالنسبة‬‫لـ‬OF‫نفس‬‫المناقشة‬‫السابقة‬.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
OF,CF
RCR D,count‫تدو‬‫ٌر‬‫نحو‬‫الٌمٌن‬‫عبر‬‫الـ‬CFRCR
‫العملٌة‬‫هنا‬‫مشابهة‬‫لتعلٌمة‬ROR‫ما‬‫عدا‬‫أن‬‫المحتوى‬ً‫األصل‬‫لـ‬CF‫ٌوضع‬ً‫ف‬
‫الخانة‬MSB‫أما‬‫الخانة‬‫المزاحة‬‫خارج‬‫الـ‬LSB‫فتوضع‬ً‫ف‬CF.
‫و‬‫بالنسبة‬‫لـ‬OF‫نفس‬‫المناقشة‬‫السابقة‬.
‫ا‬‫ا‬‫سادس‬-‫تعلٌمات‬‫مسجالت‬‫األعالم‬
‫و‬ً‫ه‬‫مبٌنة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬Flags → AH
‫النصف‬‫األول‬‫من‬‫مسجل‬‫األعالم‬‫ٌوضع‬ً‫ف‬AHLAHF‫تحمٌل‬AH‫من‬‫مسجل‬
‫األعالم‬LAHF
‫أعالم‬‫الحالة‬‫عدا‬OFAH → Flags
‫ٌوضع‬AHً‫ف‬‫النصف‬‫األول‬‫من‬‫مسجل‬‫األعالم‬SAHF‫تخزٌن‬‫قٌمة‬AHً‫ف‬
‫مسجل‬‫األعالم‬SAHF
CF8→CFCLC‫تنظٌف‬‫الـ‬CFCLC
CF1→CFSTC‫توضٌع‬‫الـ‬CFSTC
CF
CF → CFCMC‫متمم‬‫أحادي‬‫لـ‬CFCMC
IF8→IFCLI‫تنظٌف‬IFCLI
IF1→IFSTI‫توضٌع‬‫الـ‬IFSTI
‫ا‬‫ا‬‫سابع‬-‫تعلٌمات‬‫المقارنة‬
‫تسمح‬‫تعلٌمة‬‫المقارنة‬CMP‫بمقارنة‬‫عددٌن‬‫بـ‬0‫بت‬‫أو‬16‫بت‬‫و‬ً‫ه‬‫مشروحة‬
‫بال‬‫جدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬D – S
‫تتؤثر‬‫األعالم‬CMP D,S‫مقارنة‬‫عددٌن‬CMP
‫تجري‬‫عملٌة‬‫الطرح‬‫ا‬‫ا‬ٌ‫ضمن‬‫دون‬‫تخزٌن‬‫نتٌجتها‬ً‫ف‬‫متحول‬‫الهدف‬D(‫أي‬‫تبقى‬
‫ا‬‫ال‬‫ك‬‫من‬‫محتوٌات‬‫المصدر‬S‫و‬‫محتوٌات‬‫الهدف‬D‫على‬‫حالها‬)‫و‬‫تستعمل‬‫هذه‬
‫التعلٌمة‬‫لجعل‬‫أعالم‬‫الحالة‬‫تؤخذ‬‫قٌمة‬‫واحد‬ً‫منطق‬‫أو‬‫صفر‬ً‫منطق‬.‫إن‬‫المتحولت‬
‫المسموحة‬‫لهذه‬‫التعلٌمة‬‫مبٌنة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫ا‬‫ا‬‫ثامن‬-‫تعلٌمات‬‫القفز‬
‫الغاٌة‬‫من‬‫تعلٌمة‬‫القفز‬ً‫ه‬‫تعدٌل‬‫طرٌق‬‫تنفٌذ‬‫التعلٌمات‬ً‫ف‬‫البرنامج‬.‫و‬‫هناك‬‫نوعان‬
‫من‬‫تعلٌمات‬،‫القفز‬ً‫وه‬:‫القفز‬‫المشروط‬‫و‬‫القفز‬‫غٌر‬‫المشروط‬.ً‫ف‬‫القفز‬‫غٌر‬
‫المشروط‬‫ل‬‫ٌوجد‬‫أي‬‫شروط‬‫من‬‫أجل‬‫حدوث‬‫القفز‬‫أما‬ً‫ف‬‫القفز‬‫المشروط‬‫فإن‬
‫الحالت‬‫الشرطٌة‬‫الموجودة‬ً‫ف‬‫لحظة‬‫تنفٌذ‬‫تعلٌمة‬‫القفز‬‫تتخذ‬‫القرار‬‫فٌما‬‫إذا‬‫سٌحدث‬
‫القفز‬‫أم‬،‫ل‬ً‫فف‬‫حال‬‫تحقق‬‫الحالت‬‫الشرطٌة‬‫فإنه‬‫ٌتم‬،‫القفز‬‫و‬‫إل‬‫ُتابع‬ٌ‫التنفٌذ‬
‫بالتعلٌمة‬ً‫الت‬ً‫تل‬‫تعلٌمة‬‫القفز‬ً‫ف‬‫البرنامج‬.
1)‫تعلٌمة‬‫القفز‬‫غٌر‬‫المشروط‬
‫و‬ً‫ه‬‫مشروحة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬‫القفز‬‫إلى‬‫العنوان‬‫المحدد‬‫بواسطة‬‫المتحول‬operandJMP
operand‫قفز‬‫غٌر‬‫مش‬‫روط‬JMP
‫هناك‬‫نوعان‬‫أساسٌان‬‫من‬‫القفز‬‫غٌر‬‫المشروط‬‫األول‬‫ٌدعى‬‫بالقفز‬‫ضمن‬‫المقطع‬
،ً‫الجزئ‬‫و‬ً‫الثان‬‫هو‬‫القفز‬‫بٌن‬‫المقاطع‬‫الجزئٌة‬‫أي‬‫نا‬ُ‫ن‬ِ‫ك‬َ‫م‬ٌُ‫من‬‫القفز‬‫من‬‫أحد‬‫مقاطع‬
‫الشٌفرة‬‫إلى‬‫مقطع‬‫آخر‬‫و‬‫إن‬‫تحقٌق‬‫هذا‬‫النوع‬‫من‬‫القفز‬‫ٌتطلب‬‫منا‬‫تعدٌل‬‫محتوٌات‬
‫كل‬‫من‬‫مقطع‬‫ال‬CS‫و‬‫مسجل‬‫مإشر‬‫التعلٌمة‬IP،‫أما‬‫القفز‬‫ضمن‬‫المقطع‬ً‫الجزئ‬
‫فإنه‬‫ٌتطلب‬‫منا‬‫تعدٌل‬‫قٌمة‬‫ال‬IP‫فقط‬.
‫إن‬‫المتحولت‬‫المسموحة‬‫لتعلٌمة‬‫القفز‬‫غٌر‬‫المشروط‬ً‫ه‬:
‫القفز‬‫ضمن‬‫المقطع‬ً‫الجزئ‬
‫أ‬)‫إن‬‫متحولت‬‫الالفتة‬‫القصٌرة‬‫و‬‫الالفتة‬‫القرٌبة‬‫تحدد‬‫القفز‬ً‫النسب‬‫لعنوان‬‫تعلٌمة‬
‫القفز‬‫نفسها‬‫فم‬ُ‫ال‬‫ث‬ً‫ف‬‫تعلٌمة‬‫القفز‬‫بالالفتة‬‫القصٌرة‬‫ٌتم‬‫تشفٌر‬‫العدد‬‫ذي‬0‫بت‬
‫كمتحول‬‫فوري‬‫لتحدٌد‬‫اإلزاحة‬(Disp)‫ذات‬‫اإلشارة‬ً‫الت‬‫تشٌر‬‫إلى‬‫التعلٌمة‬‫التالٌة‬
ً‫الت‬‫سٌتم‬‫تنفٌذها‬‫من‬‫حجرة‬‫تعلٌمة‬،‫القفز‬‫و‬‫عندما‬‫تنفذ‬‫تعلٌمة‬‫القفز‬‫ٌعاد‬‫شحن‬‫ال‬IP
‫بقٌمة‬‫جدٌدة‬‫موضحة‬‫كما‬ً‫ٌل‬:
‫قٌمة‬IP‫ال‬‫جدٌدة‬(] =‫قٌمة‬IP+‫طول‬‫شٌفرة‬‫تعلٌمة‬‫القفز‬+ )‫مقدار‬‫اإلزاحة‬‫ذات‬
‫اإلشارة‬‫بعد‬‫تمدٌدها‬‫بجعل‬‫متحول‬0‫بتات‬‫بالشكل‬16‫بت‬[
‫إن‬‫القٌمة‬‫الجدٌدة‬‫لـ‬IP‫مع‬‫قٌمة‬CS‫الحالٌة‬ً‫تعط‬‫العنوان‬ً‫الفٌزٌائ‬‫للتعلٌمة‬‫التالٌة‬
ً‫الت‬‫ستجلب‬‫و‬‫تنفذ‬.
‫مثال‬:
‫لٌكن‬‫لدٌنا‬
IP = 0112h
JMP disp ; disp = 0F2h
‫إن‬‫عنوان‬‫تعلٌمة‬‫القفز‬(‫موجود‬‫تحت‬‫العنوان‬‫المخزن‬ً‫ف‬IP)،‫إذن‬‫سٌتم‬‫القفز‬
‫إلى‬‫التعلٌمة‬‫ذات‬‫العنوان‬ً‫التال‬:
address‫العنوان‬ً‫المنطق‬=IP + 2 + disp(‫بعد‬‫تمدٌد‬‫إشارتها‬= )8118+
8+FFF2 = 0106h(‫أهملنا‬‫خانة‬‫الحمل‬)
‫بما‬‫أن‬‫العنوان‬‫الناتج‬‫أصغر‬‫من‬‫عنوان‬‫تعلٌمة‬‫القفز‬‫فهذا‬ً‫ٌعن‬‫أننا‬‫نقفز‬‫إلى‬‫تعلٌمة‬
‫تسبق‬‫تعلٌمة‬‫القفز‬‫أي‬‫القفز‬‫نحو‬‫الــوراء‬8186<8118.
‫مثال‬‫آخر‬:
IP = 0112h
JMP 04
Address = 0112 + 2 + 0004 = 0118h
‫نالحظ‬‫أن‬8110>8118‫فهذا‬ً‫ٌعن‬‫أن‬‫القفز‬‫نحو‬‫األمام‬.
‫و‬‫للحصول‬‫على‬‫العنوان‬‫الفٌزٌائ‬ً‫ٌجب‬‫إضافة‬‫مقدار‬‫ال‬CS‫لقٌمة‬address.
‫مالحظة‬:‫بما‬‫أن‬‫متحول‬‫الالفتة‬‫القصٌرة‬‫ذو‬0‫بتات‬‫فهو‬‫ٌسمح‬‫بالقفز‬ً‫ف‬‫المجال‬‫من‬
186-‫إلى‬189+‫و‬‫سبب‬‫ذلك‬‫أنه‬‫إذا‬‫أضفنا‬‫طول‬‫شٌفرة‬‫تعلٌمة‬‫القفز‬‫و‬‫هو‬8‫باٌت‬
‫إلى‬‫المجال‬ً‫التال‬‫من‬180-‫إلى‬181+‫سنحصل‬‫على‬‫المجال‬‫السابق‬.‫أما‬‫متحو‬‫ل‬
‫الالفتة‬‫القرٌبة‬‫فهو‬‫متحول‬‫فوري‬‫ذو‬16‫بت‬‫و‬‫لذلك‬‫ٌسمح‬‫بالقفز‬‫ضمن‬‫مجال‬
‫ٌساوي‬38KB‫نحو‬‫الخلف‬‫أو‬‫نحو‬‫األمام‬‫من‬‫عنوان‬‫تعلٌمة‬‫القفز‬.
‫مثال‬:
JMP label
‫هذا‬ً‫ٌعن‬‫القفز‬‫إلى‬‫نقطة‬ً‫ف‬‫البرنامج‬‫مقابلة‬‫للمتحول‬label‫حٌث‬‫تتم‬‫إضافة‬‫هذا‬
‫المتحول‬(‫اإلزاحة‬16‫بت‬)‫إلى‬‫قٌمة‬‫ال‬IP‫و‬‫القٌمة‬‫الجدٌدة‬‫لـ‬IP‫و‬‫القٌمة‬‫الحالٌة‬
ً‫ف‬CSً‫تعط‬‫العنوان‬ً‫الفٌزٌائ‬‫للتعلٌمة‬ً‫الت‬‫ستنفذ‬.
‫ب‬)‫ٌمكن‬‫تحدٌد‬‫القفز‬‫إلى‬‫عنوان‬‫بشكل‬‫غٌر‬‫مباشر‬‫بواسطة‬‫محتوٌات‬‫حجرة‬‫ذاكرة‬
‫أو‬‫محتوٌات‬‫مسجل‬‫أي‬‫باستخدام‬‫متحول‬‫مإشر‬‫ذاكري‬16‫بت‬‫أو‬‫متحول‬‫مإشر‬
ً‫مسجل‬16‫بت‬‫و‬‫هنا‬‫ا‬‫ا‬‫أٌض‬ٌ‫تم‬‫القفز‬‫ضمن‬‫مجال‬.
‫مثال‬:
JMP BX
ً‫ف‬‫هذه‬‫التعلٌمة‬‫ُستعمل‬ٌ‫مضمون‬‫المسجل‬BX‫من‬‫أجل‬‫اإلزاحة‬‫و‬‫هذا‬ً‫ٌعن‬‫أن‬‫قٌمة‬
BX‫ٌتم‬‫تحمٌلها‬ً‫ف‬IP‫ثم‬‫ٌحسب‬‫العنوان‬ً‫الفٌزٌائ‬‫للتعلٌمة‬ً‫الت‬‫سٌتم‬‫القفز‬‫إلٌها‬
‫باستعمال‬‫المحتوٌات‬‫الحالٌة‬‫لـ‬CS‫و‬‫القٌمة‬‫الجدٌدة‬‫لـ‬IP.
‫بفرض‬‫أن‬:
BX = 0200h
CS = 0100h
PA = ( CS x 10h ) + BX = 01000 + 0200 = 01200h
‫مالحظة‬:‫ٌمكن‬‫استخدام‬‫مختلف‬‫أنواع‬‫أنظمة‬‫العنونة‬‫لتحدٌد‬‫المتحول‬‫المستعمل‬
‫كمإشر‬‫ذاكري‬‫ا‬‫ال‬‫فمث‬JMP [SI]ً‫فف‬‫هذه‬‫التعلٌمة‬‫تستعمل‬‫محتوٌات‬SI‫كعنوان‬
‫حجرة‬‫الذاكرة‬ً‫الت‬‫تحتوي‬‫على‬‫العنوان‬،‫الفعال‬‫هذ‬‫ا‬‫العنوان‬‫ٌتم‬‫تحمٌله‬ً‫ف‬IP‫و‬
‫الذي‬‫ُستعمل‬ٌ‫مع‬‫محتوٌات‬CS‫الحالٌة‬‫لحساب‬‫العنوان‬ً‫الفٌزٌائ‬‫للتعلٌمة‬ً‫الت‬‫سٌتم‬
‫القفز‬‫إلٌها‬‫و‬‫عادة‬ً‫ف‬‫هذه‬‫الحالة‬‫تستخدم‬‫المسجالت‬‫التالٌة‬:DI, SI, BX.
‫القفز‬‫بٌن‬‫المقاطع‬‫الجزئٌة‬‫أو‬‫القفز‬‫خارج‬‫المقطع‬‫الجزئٌة‬
‫أ‬)‫ِل‬‫م‬‫ستع‬َ‫ت‬‫الالفتة‬‫الب‬‫عٌدة‬‫ا‬‫ل‬‫متحو‬‫ا‬‫ا‬ٌ‫فور‬‫ذا‬38‫بت‬‫لتحدٌد‬‫القفز‬‫إلى‬‫عنوان‬‫ما‬.‫حٌث‬
‫ٌتم‬‫تحمٌل‬‫الـ‬16‫بت‬‫األولى‬‫من‬‫هذا‬‫المتحول‬ً‫ف‬IP‫و‬‫تكون‬ً‫ه‬‫العنوان‬‫الفعال‬
‫نسبة‬‫لمحتوٌات‬‫المسجل‬CS‫أما‬‫الـ‬16‫بت‬‫الثانٌة‬‫فٌتم‬‫تحمٌلها‬ً‫ف‬‫المسجل‬CS‫و‬
ً‫الت‬‫تحدد‬‫مقطع‬‫الشٌفرة‬‫الجدٌد‬.
‫مثال‬:
JMP farlabel
‫حٌث‬farlabel‫هو‬‫متحول‬‫بـ‬38‫بت‬(‫الكلمة‬‫األول‬‫تشحن‬ً‫ف‬IP‫و‬‫الكلمة‬‫الثانٌة‬
‫تشحن‬ً‫ف‬‫الـ‬CS.)
‫ب‬)‫إن‬‫الطرٌقة‬‫غٌر‬‫المباشرة‬‫لتحدٌد‬‫العنوان‬‫الفعال‬‫و‬‫عنوان‬‫مقطع‬‫الشٌفرة‬‫من‬
‫أجل‬‫القفز‬‫بٌن‬‫المقاطع‬‫الجزئٌة‬ً‫ه‬‫باستعمال‬‫متحول‬‫مإشر‬‫ذاكري‬‫بـ‬38‫بت‬.‫و‬
ً‫ف‬‫هذه‬‫الحالة‬‫فإن‬‫أ‬‫ربع‬‫باٌتات‬‫من‬‫الذاكرة‬‫متتابعة‬‫ا‬‫ا‬‫اعتبار‬‫من‬‫العنوان‬‫المحدد‬
‫تحتوي‬‫على‬‫العنوان‬‫الفعال‬‫و‬‫عنوان‬‫مقطع‬‫الشٌفرة‬‫الجدٌد‬‫على‬‫الترتٌب‬.‫و‬‫هنا‬
‫ا‬‫ا‬‫أٌض‬‫ٌمكن‬‫استخدام‬‫أي‬‫نوع‬‫من‬‫أنواع‬‫أنظمة‬‫العنونة‬،‫المختلفة‬‫مثال‬:
JMP farseg [DI]ً‫فف‬‫هذه‬‫التعلٌمة‬‫ستعمل‬ُ‫ت‬‫محتوٌات‬DS, DI‫لحساب‬‫عنوان‬
‫حجرة‬‫الذاكرة‬ً‫الت‬‫تتضمن‬‫الكلمة‬‫األولى‬‫للمإشر‬‫الذي‬‫ف‬ِّ‫ُعر‬ٌ‫الحجرة‬ً‫الت‬‫سٌتم‬
‫القفز‬،‫إلٌها‬‫فإذا‬‫كان‬:
DI = 0200h‫إن‬‫العنوان‬ً‫الفٌزٌائ‬‫للمإشر‬‫هو‬:
DS = 0100h PA = DS x 10h + DI = 01000 + 0200 =
01200h
‫و‬‫لتكن‬‫محتوٌات‬‫هذه‬‫الح‬‫جرة‬‫و‬‫الحجرات‬ً‫الت‬‫تلٌها‬‫كما‬‫هو‬‫واضح‬ً‫ف‬‫الشكل‬
ً‫التال‬:
‫قٌمة‬IP‫الجدٌدة‬ً‫ه‬IP = 3010hContentAddress ( h)
‫قٌمة‬CS‫الجدٌدة‬ً‫ه‬CS = 0400h1881888
‫إذن‬‫العنوان‬ً‫الفٌزٌائ‬‫للتعلٌمة‬ً‫الت‬‫سٌتم‬‫القفز‬‫إلٌها‬‫هو‬:3881881
PA = CS x 10h + IP = 07010h8881888
8481883
8)‫تعلٌمة‬‫القفز‬‫المشروط‬
‫و‬ً‫ه‬‫مشروحة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬‫إذا‬‫تحقق‬‫الشرط‬cc‫فإنه‬‫ٌتم‬‫القفز‬‫إلى‬‫العنوان‬‫المحدد‬‫بواسطة‬
‫المتحول‬‫و‬‫إل‬‫فٌتم‬‫تنفٌذ‬‫التعلٌمة‬‫التالٌة‬‫لتعلٌمة‬‫القفز‬Jcc‫متحول‬‫قفز‬
‫مشروط‬Jcc
‫هناك‬10‫من‬‫تعلٌمات‬‫القفز‬‫المشروط‬‫و‬ً‫ه‬‫مشروحة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫المعنى‬‫الكلمة‬‫المختزلة‬
‫القفز‬‫إذا‬‫كان‬CF = 1JC
‫القفز‬‫إذا‬‫كان‬CF = 0JNC
‫القفز‬‫إذا‬‫كان‬OF = 1JO
‫القفز‬‫إذا‬‫كان‬OF = 0JNO
‫القفز‬‫إذا‬‫كان‬SF = 1JS
‫القفز‬‫إذا‬‫كان‬SF = 0JNS
‫القفز‬‫إذا‬‫كان‬CX = 0000JCXZ
‫القفز‬ً‫ف‬‫حالة‬‫التساوي‬/‫أو‬‫إذا‬‫كان‬‫الناتج‬‫ٌساوي‬‫الصفر‬JE/JZ
‫القفز‬‫إذا‬‫كان‬‫أكبر‬‫أو‬‫ٌساوي‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫أصغر‬JGE/JNL
‫القفز‬‫إذا‬‫كان‬‫فوق‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫تحت‬‫أو‬‫ٌساوي‬JA/JNBE
‫القفز‬‫إذا‬‫كان‬‫فوق‬‫أو‬‫ٌساوي‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫تحت‬JAE/JNB
‫القفز‬‫إذا‬‫كان‬‫تحت‬/‫ال‬‫قفز‬‫إذا‬‫لم‬‫ٌكن‬‫فوق‬‫أو‬‫ٌساوي‬JB/JNAE
‫القفز‬‫إذا‬‫كان‬‫تحت‬‫أو‬‫ٌساوي‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫فوق‬JBE/JNA
‫القفز‬‫إذا‬‫كان‬‫أكبر‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫أصغر‬‫أو‬‫ٌساوي‬JG/JNLE
‫القفز‬‫إذا‬‫كان‬‫أصغر‬‫أو‬‫ٌساوي‬/‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫أكبر‬JLE/JNG
‫القفز‬‫إذا‬‫لم‬‫ٌكن‬‫ٌساوي‬/‫القفز‬‫إذا‬‫كان‬‫الناتج‬‫ٌساو‬‫ي‬‫قٌمة‬‫غٌر‬‫صفرٌة‬JNE/JNZ
‫القفز‬‫إذا‬‫كانت‬‫خانة‬Parity‫غٌر‬‫موجودة‬/‫القفز‬‫إذا‬‫كان‬PF = 0JNB/JBO
‫القفز‬ً‫ف‬‫حالة‬‫وجود‬‫خانة‬Parity/‫القفز‬‫إذا‬‫كان‬PF = 1JP/JPE
‫مالحظة‬:
‫للتمٌٌز‬‫بٌن‬‫مقارنة‬‫األعداد‬‫ذات‬‫اإلشارة‬‫و‬‫األعداد‬‫بدون‬‫إشارة‬‫فإن‬‫هناك‬‫اسمٌن‬
‫مختلفٌن‬‫ٌبدو‬‫أنهما‬‫نفس‬‫الشًء‬ً‫ف‬‫تعلٌمات‬‫القفز‬‫و‬‫هما‬‫فوق‬(A)‫و‬‫تحت‬(B)
‫من‬‫أجل‬‫مقارنة‬‫األعداد‬‫بدون‬،‫إشارة‬‫و‬‫أصغر‬(L)‫و‬‫أكبر‬(G)‫من‬‫أجل‬‫مقارنة‬
‫األعداد‬‫ذات‬‫اإلشارة‬.‫ا‬‫ال‬‫فمث‬‫العدد‬ABCDh‫هو‬‫فوق‬‫العدد‬1834h‫إذا‬‫اعتبرناهما‬
‫عددٌن‬‫بدون‬‫إشارة‬.‫أما‬‫إذا‬‫اعتبرناهما‬‫بإشارة‬‫فإن‬ABCDh‫هو‬‫عدد‬‫سالب‬‫و‬
1834h‫هو‬‫عدد‬‫موجب‬‫و‬‫لذلك‬ABCDh‫هو‬‫أصغر‬‫من‬1834h.
‫البرامج‬‫الفرعٌة‬SUBROUTINES
ً‫ه‬‫إجراءات‬‫مكتوبة‬‫بشكل‬‫مستقل‬‫عن‬‫البرنامج‬ً‫الرئٌس‬.‫متى‬‫وجب‬‫على‬‫البرنامج‬
ً‫الرئٌس‬‫أن‬‫ٌنجز‬‫الوظٌفة‬‫المحددة‬‫بواسطة‬‫البرنامج‬ً‫الفرع‬‫فإنه‬ً‫ٌستدع‬‫البرنامج‬
ً‫الفرع‬‫إلى‬‫العمل‬‫و‬‫من‬‫أجل‬‫هذا‬‫ٌجب‬‫أن‬‫ٌتحول‬‫التحكم‬‫من‬‫البرنامج‬ً‫الرئٌس‬‫إلى‬
‫نقطة‬‫البداٌة‬ً‫ف‬‫البرنامج‬،ً‫الفرع‬‫حٌث‬‫ٌستمر‬‫تنفٌذ‬‫البرنامج‬،ً‫الفرع‬‫و‬‫عند‬
‫اكتمال‬‫التنفٌذ‬‫ٌعود‬‫التحكم‬‫إلى‬‫البرنامج‬ً‫الرئٌس‬‫بالتعلٌمة‬‫التالٌة‬‫لتعلٌمة‬‫مناداة‬
‫البرنامج‬ً‫الفرع‬:
‫مالحظة‬:
‫إن‬‫الفرق‬‫بٌن‬‫العمل‬‫ل‬‫مناداة‬‫البرنامج‬ً‫الفرع‬‫و‬‫القفز‬‫هو‬‫أن‬‫مناداة‬‫البرنامج‬ً‫الفرع‬
‫ل‬‫تنتج‬‫ا‬‫ا‬‫قفز‬‫فقط‬‫إلى‬‫العنوان‬‫المناسب‬ً‫ف‬‫ذاكرة‬‫تخزٌن‬‫البرنامج‬‫و‬‫لكنها‬‫ا‬‫ا‬‫أٌض‬‫تملك‬
‫تقنٌة‬‫من‬‫أجل‬‫حفظ‬‫المعلومات‬‫مثل‬IP‫و‬CSً‫الت‬‫تكون‬‫مطلوبة‬‫للعودة‬‫إلى‬‫البرنامج‬
ً‫الرئٌس‬.
‫تعلٌمات‬‫المناداة‬‫و‬‫العودة‬
‫ا‬‫ال‬‫ك‬‫هاتٌن‬‫التعلٌمتٌن‬‫ا‬‫ا‬‫مع‬‫زودان‬ُ‫ت‬‫تقنٌة‬‫من‬‫أجل‬‫استدعاء‬‫البرنامج‬ً‫الفرع‬‫إلى‬‫العمل‬
‫و‬‫إعادة‬‫التحكم‬‫إلى‬‫البرنامج‬ً‫األساس‬‫لمتابعة‬‫تنفٌذه‬.‫إن‬‫تعلٌمة‬‫المناداة‬‫مشروحة‬ً‫ف‬
‫الجدول‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬‫ُتابع‬ٌ‫التنفٌذ‬ً‫ف‬‫البرنامج‬ً‫الفرع‬‫من‬‫العنوان‬‫المحدد‬‫بواسطة‬‫المتحول‬
operand‫الموجود‬ً‫ف‬‫تعلٌمة‬‫المناداة‬.‫و‬‫المعلومات‬‫المطلوبة‬‫من‬‫أجل‬‫العودة‬‫مثل‬
IP‫و‬CS‫حفظ‬ُ‫ت‬ً‫ف‬‫المكدس‬CALL operand‫مناداة‬‫برنامج‬ً‫فرع‬CALL
‫هناك‬5‫أنواع‬‫للمتحولت‬‫المسموح‬‫باستخدامها‬‫مع‬‫تعلٌمة‬‫المناداة‬‫و‬ً‫ه‬:
‫إن‬‫المتحولت‬‫الثالثة‬‫األولى‬‫مخصصة‬‫للمناداة‬‫ضمن‬‫المقطع‬ً‫الجزئ‬‫للبرنامج‬
ً‫الفرع‬(‫أي‬‫البرنامج‬ً‫الرئٌس‬‫و‬‫البرنامج‬ً‫الفرع‬‫ٌقعان‬ً‫ف‬‫نفس‬‫مقطع‬‫الشٌفرة‬)
‫حٌث‬‫أن‬‫تنفٌذ‬‫تعلٌمة‬‫المناداة‬‫ٌسبب‬‫حفظ‬‫محتوٌات‬IPً‫ف‬‫المكدس‬‫ألنه‬‫سوف‬‫ٌتم‬
‫تعدٌل‬‫قٌمة‬IP‫ا‬‫ا‬ٌ‫آل‬‫لتتالئم‬‫مع‬‫البرنامج‬ً‫الفرع‬.‫و‬‫ع‬‫ندئذ‬‫ٌنقص‬‫مإشر‬‫المكدس‬
‫بمقدار‬8،‫إن‬‫القٌمة‬‫المحفوظة‬ً‫ف‬IP‫ضمن‬‫المكدس‬ً‫ه‬‫عنوان‬‫التعلٌمة‬ً‫الت‬ً‫تل‬
‫تعلٌمة‬‫المناداة‬.
‫بعد‬‫وضع‬‫قٌمة‬IPً‫ف‬‫المكدس‬(‫أي‬‫حفظ‬‫العنوان‬‫الذي‬‫سنعود‬‫إلٌه‬‫بعد‬‫تنفٌذ‬
‫البرنامج‬ً‫الفرع‬)‫ٌتم‬‫شحن‬IP‫بعنوان‬‫و‬‫بقٌمة‬‫جدٌدة‬‫ذات‬16‫بت‬‫هذه‬‫القٌمة‬ٌ‫تش‬‫ر‬
‫إلى‬‫عنوان‬‫التعلٌمة‬‫األولى‬‫من‬‫تعلٌمات‬‫البرنامج‬ً‫الفرع‬‫المخزنة‬ً‫ف‬،‫الذاكرة‬‫و‬
‫ٌمكن‬‫ذكر‬‫تعلٌمة‬‫المناداة‬‫ضمن‬‫المقطع‬ً‫الجزئ‬‫على‬‫الشكل‬ً‫التال‬‫كؤمثلة‬‫على‬
‫متحوات‬‫الجدول‬‫السابق‬‫و‬‫على‬‫الترتٌب‬:
CALL near_proc
CALL [SI]
CALL BX
‫أما‬‫النوع‬‫اآلخر‬‫لتعلٌمة‬‫المناداة‬(‫المن‬‫اداة‬‫خارج‬‫المقطع‬ً‫الجزئ‬)‫فهو‬‫ٌسمح‬
‫للبرنامج‬ً‫الفرع‬‫بؤن‬‫ٌكمن‬ً‫ف‬‫مقطع‬‫شٌفرة‬،‫آخر‬‫و‬ً‫ف‬‫هذه‬‫الحالة‬‫تستخدم‬
‫المتحولت‬‫التالٌة‬Far_pro،Memptr32‫كما‬‫هو‬‫واضح‬ً‫ف‬‫الجدول‬‫السابق‬.
‫تحدد‬‫هذه‬‫المتحولت‬‫ا‬‫ال‬‫ك‬‫من‬‫العنوان‬‫الجدٌد‬‫لـ‬IP‫و‬‫عنوان‬‫المقطع‬‫الجدٌد‬‫لـ‬CS.
ً‫ف‬‫كلتا‬‫ا‬‫لحالتٌن‬‫فإن‬‫تنفٌذ‬‫تعلٌمة‬‫المناداة‬‫ٌسبب‬‫حفظ‬‫محتوٌات‬‫المسجالت‬CS‫ثم‬IP
ً‫ف‬‫المكدس‬‫و‬‫من‬‫ثم‬‫تحمٌل‬‫القٌم‬‫الجدٌدة‬‫المحددة‬‫بالمتحول‬operandً‫ف‬IP‫و‬CS
.‫إن‬‫القٌم‬‫المختزنة‬‫لـ‬CS‫و‬IPً‫ف‬‫المكدس‬‫تسمح‬‫بالعودة‬‫إلى‬‫البرنامج‬ً‫الرئٌس‬‫من‬
‫مقطع‬‫شٌفرة‬‫آخر‬.‫إن‬‫المتحول‬Far_proc‫ٌمثل‬‫ا‬‫ل‬‫متحو‬‫ا‬‫ا‬ٌ‫فور‬‫بـ‬38‫بت‬‫و‬‫الذي‬
‫ٌكون‬‫ا‬‫ا‬‫مخزن‬ً‫ف‬‫الباٌتات‬‫األربعة‬ً‫الت‬ً‫تل‬‫رمز‬‫التعلٌمة‬(opcode)‫لتعلٌمة‬
‫المناداة‬ً‫ف‬‫ذاكرة‬‫البرنامج‬.
‫مثال‬:
CALL 01234321‫حٌث‬‫أن‬‫هاتان‬‫الكلمتان‬‫ٌتم‬‫تحمٌلهما‬‫مباشرة‬‫من‬‫ذاكرة‬‫تخزٌن‬
‫البرنامج‬ً‫ف‬IP‫و‬CS‫حٌث‬CS‫هو‬‫مقطع‬‫الشٌف‬‫رة‬‫للبرنامج‬ً‫الفرع‬.‫إن‬‫عنوان‬
‫التعلٌمة‬‫األولى‬ً‫ف‬‫البرنامج‬ً‫الفرع‬‫ٌكون‬‫ا‬‫ا‬‫محدد‬‫بالكلمة‬‫األولى‬‫بعد‬‫تعلٌمة‬CALL
‫أي‬‫ٌخزن‬‫ضمن‬IP.‫أما‬‫بالنسبة‬‫لمتحول‬‫المإشر‬‫من‬‫نوع‬‫ذاكري‬‫بـ‬38‫بت‬‫فإن‬
‫المإشر‬‫للبرنامج‬ً‫الفرع‬‫ٌكون‬‫ا‬‫ا‬‫مخزن‬‫كؤربعة‬‫باٌتات‬ً‫ف‬‫ذاكرة‬،‫المعطٌات‬‫و‬
‫الحجرة‬‫األ‬‫ولى‬‫للمإشر‬‫ٌمكن‬‫تحدٌدها‬‫بشكل‬‫مباشر‬‫بواسطة‬‫أحد‬‫المسجالت‬(‫المثال‬
‫هنا‬‫هو‬‫نفس‬‫مثال‬‫القفز‬JMP farseg [DI]‫السابق‬.)
‫إن‬‫كل‬‫برنامج‬ً‫فرع‬‫ٌجب‬‫أن‬ً‫ٌنته‬‫بتنفٌذ‬‫التعلٌمة‬ً‫الت‬‫تعٌد‬‫التحكم‬‫إلى‬‫البرنامج‬
ً‫الرئٌس‬‫و‬‫هذه‬‫التعلٌمة‬ً‫ه‬‫تعلٌمة‬‫العودة‬RET‫و‬ً‫ه‬‫مشروحة‬‫بالجدول‬‫الت‬ً‫ال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
RET/RET operand‫العودة‬‫إلى‬‫البرنامج‬ًِ‫ُستدع‬‫م‬‫ال‬RET
‫العودة‬‫إلى‬‫البرنامج‬ً‫المستدع‬‫عن‬‫طرٌق‬‫إعادة‬‫تخزٌن‬‫قٌم‬IP‫فقط‬
‫أو‬IP‫و‬CS‫ا‬‫ا‬‫مع‬(‫حسب‬‫نوع‬‫تعلٌمة‬‫المناداة‬‫أي‬‫ضمن‬‫المقطع‬ً‫الجزئ‬‫أو‬‫خ‬‫ارجه‬)
‫من‬‫أجل‬‫المتحول‬Far_pro.‫و‬‫إذا‬‫كان‬‫المتحول‬(operand)‫ا‬‫ا‬‫موجود‬ً‫ف‬‫تعلٌمة‬
‫العودة‬RET‫فٌجب‬‫إضافته‬‫إلى‬‫محتوٌات‬SP.‫هذا‬‫و‬‫إن‬‫المتحول‬‫إذا‬‫وجد‬ً‫ف‬
‫تعلٌمة‬‫العودة‬‫فهو‬‫عبارة‬‫عن‬‫متحول‬‫إزاحة‬‫بـ‬16‫بت‬.
‫ا‬‫ا‬‫تاسع‬-‫تعلٌمات‬‫الدفع‬‫و‬‫السحب‬
‫إن‬‫التعلٌمة‬‫المستخدمة‬‫لحفظ‬‫البا‬‫رامترات‬ً‫ف‬‫المكدس‬ً‫ه‬‫تعلٌمة‬‫الدفع‬PUSH‫و‬
‫التعلٌمة‬‫المستخدمة‬‫لسترجاعها‬ً‫ه‬‫تعلٌمة‬POP.‫بعد‬‫سٌاق‬‫التحوٌل‬‫إلى‬‫البرنامج‬
ً‫الفرع‬‫نجد‬‫أنه‬‫من‬‫الضروري‬‫عادة‬‫حفظ‬‫محتوٌات‬‫المسجالت‬‫الرئٌسٌة‬‫أو‬‫بعض‬
‫بارامترات‬‫البرنامج‬ً‫الرئٌس‬‫هذه‬‫القٌم‬‫ٌتم‬‫حفظها‬‫بواسطة‬‫دفعها‬‫إلى‬‫المكدس‬.‫و‬
‫بهذه‬‫الطرٌقة‬‫ٌتم‬‫حفظ‬‫المحتوٌات‬‫سلٌمة‬ً‫ف‬‫مقطع‬‫المكدس‬‫للذاكرة‬‫أثناء‬‫تنفٌذ‬
‫البرنامج‬،ً‫الفرع‬‫و‬‫قبل‬‫العودة‬‫إلى‬‫البرنامج‬ً‫الرئٌس‬‫فإن‬‫المسجالت‬‫المحفوظة‬‫و‬
‫بارامترات‬‫البرنامج‬ً‫الرئٌس‬‫ُعاد‬ٌ‫تخزٌنها‬‫بواسطة‬‫سحب‬‫القٌم‬‫المحفوظة‬‫من‬
‫المكدس‬.‫لذلك‬‫فإن‬‫البنٌة‬‫النموذجٌة‬‫لل‬‫برنامج‬ً‫الفرع‬‫تكون‬ً‫كالتال‬:
PUSH xx
PUSH yy‫لحفظ‬‫المسجالت‬‫و‬‫البارامترات‬ً‫ف‬‫المكدس‬
PUSH zz
-----------‫جسم‬‫البرنامج‬ً‫الفرع‬
POP zz
‫نالحظ‬‫أنه‬‫ٌتم‬‫السترجاع‬‫هنا‬‫بشكل‬POP yy‫لسترجاع‬‫المسجالت‬‫و‬
‫البارامترات‬‫من‬‫المكدس‬
ً‫عكس‬‫و‬‫ذلك‬‫ألن‬‫مبدأ‬‫عمل‬‫المكدس‬
POP xx
‫هو‬LIFORET‫للعودة‬‫إلى‬‫البرنامج‬ً‫المستدع‬
‫مالحظة‬:‫ٌتعامل‬‫المكدس‬‫مع‬‫كلمات‬‫و‬‫لٌس‬‫مع‬‫باٌتات‬.
‫تعلٌمات‬PUSH, POP
‫و‬ً‫ه‬‫مشروحة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬S → ((SP))PUSH S‫دفع‬‫كلمة‬‫إلى‬‫المكدس‬PUSH
‫ل‬‫ٌوجد‬((SP)) → DPOP D‫سحب‬‫كلمة‬‫من‬‫المكدس‬POP
،‫المكدس‬‫مسجل‬‫مقطع‬‫المكدس‬SS‫،مإشر‬‫المكدس‬SP
‫أثناء‬‫عملٌات‬‫المقاطعة‬‫ومناداة‬‫البرنامج‬ً‫الفرع‬‫ٌتم‬‫دفع‬‫محتوٌات‬‫المسجالت‬
‫الداخلٌة‬‫ٌّنة‬‫ع‬‫الم‬‫بالمعالج‬‫إلى‬‫قسم‬‫من‬‫الذاكرة‬‫ٌدعى‬‫بالمكدس‬‫حٌث‬‫تبقى‬‫هذه‬
‫المحتوٌات‬‫هناك‬‫بشكل‬‫مإقت‬.‫و‬‫عند‬‫إكمال‬‫روتٌن‬‫خدمة‬‫المقاطعة‬‫أو‬‫البرنامج‬
ً‫الفرع‬‫ٌتم‬‫سحب‬‫هذه‬‫القٌم‬‫من‬‫المكدس‬‫وتوضع‬ً‫ف‬‫نفس‬‫المسجل‬ً‫الداخل‬‫حٌث‬
‫كان‬‫ٌحتوها‬‫ا‬‫ال‬‫أص‬.‫ا‬‫ال‬‫فمث‬‫عندما‬‫تحدث‬‫المقاطعة‬‫فإن‬‫المعالج‬‫و‬‫بشكل‬ً‫أوتوماتٌك‬
‫ٌدفع‬‫بمسجل‬،‫األعالم‬‫القٌمة‬‫الحالٌة‬ً‫ف‬CS،‫و‬‫القٌمة‬‫الحالٌة‬ً‫ف‬IP‫إلى‬‫ال‬‫مكدس‬.
‫ٌمكن‬‫الحصول‬‫على‬‫مقطع‬‫مكدس‬‫جدٌد‬‫ببساطة‬‫بعنونة‬SS‫ا‬‫ا‬ٌ‫برمج‬‫من‬‫جدٌد‬.‫و‬‫إن‬
‫مإشر‬‫المكدس‬SP‫ٌحتوي‬‫على‬‫العنوان‬‫الفعال‬‫نسبة‬‫للقٌمة‬ً‫ف‬SS.‫و‬‫العنوان‬
‫المشتق‬‫من‬‫محتوٌات‬SS‫و‬SP‫هو‬‫العنوان‬ً‫الفٌزٌائ‬‫لحجرة‬‫التخزٌن‬‫األخٌرة‬ً‫ف‬
‫المكدس‬(‫قمة‬‫المكدس‬)ً‫الت‬‫تم‬‫دفع‬‫المع‬‫طٌات‬‫إلٌها‬.‫إن‬‫القٌمة‬ً‫ف‬‫مإشر‬‫المكدس‬
‫تبدأ‬‫بـ‬FFFFh‫عند‬‫بدء‬‫تشغٌل‬‫المعالج‬.‫و‬‫إن‬‫جمع‬‫هذه‬‫القٌمة‬‫مع‬‫القٌمة‬‫الحالٌة‬
‫الموجودة‬ً‫ف‬SSً‫ٌعط‬‫الحجرة‬‫ذات‬‫العنوان‬‫العلوي‬ً‫ف‬‫المكدس‬(‫قاعدة‬‫المكدس‬.)
‫بما‬‫أن‬‫المعطٌات‬‫المنقولة‬‫من‬‫و‬‫إلى‬‫المكدس‬‫عادة‬ً‫ه‬‫كلمات‬‫فإننا‬‫نتصور‬‫المكد‬‫س‬
‫على‬‫شكل‬‫حجرات‬‫ذات‬8،‫باٌت‬‫كما‬‫أنه‬‫من‬‫الضروري‬‫أن‬‫تكون‬‫جمٌع‬‫حجرات‬
‫المكدس‬ً‫ف‬‫حدود‬‫الكلمات‬‫الزوجٌة‬‫و‬‫ذلك‬‫إلنقاص‬‫عدد‬‫دورات‬‫الذاكرة‬‫المطلوبة‬
‫لدفع‬‫أو‬‫سحب‬‫المعطٌات‬‫من‬‫المكدس‬.‫ٌقوم‬‫المعالج‬‫بدفع‬‫المعطٌات‬‫و‬‫العناوٌن‬‫إلى‬
‫المكدس‬‫كلمة‬ً‫ف‬‫كل‬،‫مرة‬‫و‬ً‫ف‬‫كل‬‫مرة‬‫ٌتم‬‫دفع‬ٌ‫ق‬‫مة‬‫مسجل‬‫ما‬‫إلى‬‫قمة‬‫المكدس‬
‫فإن‬‫القٌمة‬ً‫ف‬‫مإشر‬‫المكدس‬‫ا‬‫ل‬‫أو‬‫تنقص‬‫بمقدار‬8‫و‬‫من‬‫ثم‬‫كتب‬ُ‫ت‬‫محتوٌات‬‫ذلك‬
‫المسجل‬ً‫ف‬‫ذاكرة‬‫المكدس‬.‫بهذه‬‫الطرٌقة‬‫فإن‬‫المكدس‬‫ٌنمو‬‫نحو‬‫األسفل‬ً‫ف‬‫الذاكرة‬
‫ا‬‫ا‬‫انطالق‬‫من‬‫قاعدة‬‫المكدس‬ً‫الت‬‫تطابق‬‫العنوان‬ً‫الفٌزٌائ‬‫المشتق‬‫من‬SS‫و‬‫القٌمة‬
FFFFh‫إ‬‫لى‬‫نهاٌة‬(‫قمة‬)‫المكدس‬‫و‬ً‫الت‬‫تطابق‬‫العنوان‬ً‫الفٌزٌائ‬‫المشتق‬‫مت‬SS‫و‬
‫العنوان‬‫الفعال‬8888h‫و‬‫عندما‬‫تسحب‬‫القٌمة‬‫من‬‫قمة‬‫المكدس‬‫فإن‬‫العكس‬‫لهذا‬
‫التسلسل‬‫ٌحدث‬.‫إن‬‫العنوان‬ً‫الفٌزٌائ‬‫المعرف‬‫بواسطة‬SS‫و‬SP‫ا‬‫ا‬‫دائم‬‫ٌشٌر‬‫إلى‬
‫حجرة‬‫القٌمة‬‫األخٌرة‬‫المدفوعة‬‫إلى‬‫المكدس‬‫حٌث‬‫أ‬‫ن‬‫محتوٌاتها‬‫تسحب‬‫ا‬‫ل‬‫أو‬‫من‬
‫المكدس‬‫إلى‬‫المسجل‬ً‫المعن‬‫ضمن‬‫المعالج‬‫ثم‬‫ٌزداد‬SP‫بمقدار‬8.‫إن‬‫قمة‬‫المكدس‬
‫الجدٌدة‬‫تطابق‬‫القٌمة‬‫السابقة‬‫المدفوعة‬‫إلى‬‫المكدس‬.
‫مثال‬:‫تبٌن‬‫األشكال‬‫الثالثة‬‫التالٌة‬‫حالت‬‫المكدس‬:
‫نالحظ‬‫أن‬‫مسجل‬‫مقطع‬‫المكدس‬‫ٌحوي‬‫على‬8185h‫و‬‫كما‬‫أشرنا‬‫ا‬‫ا‬‫سابق‬‫فإن‬‫قاعدة‬
‫المكدس‬‫تكمن‬ً‫ف‬‫العنوان‬ً‫الفٌزٌائ‬‫المشتق‬‫من‬SS‫مع‬‫العنوان‬‫الفعال‬FFFFh‫و‬
‫هذا‬ً‫ٌعط‬‫عنوان‬‫قاعدة‬‫المكدس‬BOS:
A (bos) = 0105h + FFFF = 1104Fh
‫باإلضافة‬‫إلى‬‫ذلك‬‫فإن‬‫مإشر‬‫المكدس‬‫الذي‬‫ٌمثل‬‫العنوان‬‫الفعال‬‫من‬‫قاعدة‬‫المكدس‬
‫إلى‬‫قمته‬‫ٌساوي‬8880h‫لذلك‬‫فالقمة‬‫الحالٌة‬‫للمكدس‬ً‫ه‬ً‫ف‬‫العنوان‬ً‫الفٌزٌائ‬:
A (tos) = 01050 + 0008 = 01058h
‫إن‬‫العناوٌن‬‫ذات‬‫القٌم‬‫األع‬‫لى‬‫من‬‫قمة‬‫المكدس‬81850h‫تحتوي‬‫على‬‫معطٌات‬
‫حقٌقٌة‬‫للمكدس‬‫بٌنما‬‫المعطٌات‬‫ذات‬‫العناوٌن‬‫األدنى‬‫من‬‫قمة‬‫المكدس‬‫لٌست‬‫معطٌات‬
‫حقٌقٌة‬‫للمكدس‬(‫بالتعرٌف‬:‫المكدس‬‫هو‬‫القٌم‬‫المحصورة‬‫بٌن‬‫القاعدة‬‫و‬‫القمة‬. )
‫نالحظ‬‫أن‬‫القٌمة‬‫األخٌرة‬‫المدفوعة‬‫إلى‬‫المكدس‬ً‫ف‬‫الشكل‬‫األول‬‫من‬‫ال‬‫شكل‬‫السابق‬
ً‫ه‬BBAAh.‫و‬‫ٌبٌن‬‫الشكل‬ً‫الثان‬‫ما‬‫الذي‬‫ٌحدث‬‫عند‬‫تنفٌذ‬‫تعلٌمة‬PUSH AX.
‫هنا‬‫نجد‬‫أن‬‫محتوٌات‬AXً‫ه‬1834h‫و‬‫أن‬‫تنفٌذ‬‫تعلٌمة‬PUSH‫ٌسبب‬‫إنقاص‬
‫محتوٌات‬SP‫بمقدار‬8‫و‬‫لكنها‬‫ل‬‫تإثر‬‫على‬‫محتوٌات‬‫مسجل‬‫مقطع‬‫المكدس‬SS
‫لذلك‬‫فإن‬‫الحجرة‬‫التالٌة‬ً‫الت‬‫ٌتم‬‫الوصول‬‫إلٌها‬ً‫ف‬‫المكدس‬‫تقابل‬‫العنوان‬81856h
.‫إلى‬‫هذه‬‫الحجرة‬‫ٌتم‬‫دفع‬‫القٌمة‬‫المخزنة‬ً‫ف‬AX‫إلى‬‫المكدس‬.‫نالحظ‬‫أن‬‫الباٌت‬
‫العلوي‬‫من‬‫المسجل‬AX(‫و‬‫الذي‬‫قٌمته‬‫تساوي‬18h)‫ٌكمن‬‫اآلن‬ً‫ف‬‫الباٌت‬ً‫السفل‬
‫للكلمة‬ً‫ف‬‫المكدس‬‫و‬‫كذلك‬‫فالباٌت‬ً‫السفل‬‫من‬‫المسجل‬AX(‫و‬‫الذي‬‫قٌمته‬‫تسا‬‫وي‬
34h)‫ٌكمن‬‫اآلن‬ً‫ف‬‫الباٌت‬‫العلوي‬‫للكلمة‬ً‫ف‬‫المكدس‬.
‫ٌبٌن‬‫الشكل‬‫الثالث‬‫ما‬‫الذي‬‫ٌحدث‬‫عندما‬‫سحب‬ُ‫ت‬‫المعطٌات‬‫من‬‫المكدس‬‫إلى‬‫المسجل‬
‫الذي‬‫ت‬َ‫ع‬‫ف‬ُ‫د‬‫المعطٌات‬‫منه‬‫إلى‬‫المكدس‬‫و‬‫ذلك‬‫بعد‬‫تنفٌذ‬‫التعلٌمة‬POP AX‫ثم‬POP
BX‫على‬‫الترتٌب‬.‫نفس‬‫المناقشة‬‫بالنسبة‬‫إلى‬‫دفع‬‫قٌمة‬ٌ‫فور‬‫ة‬‫إلى‬‫المكدس‬.
‫ا‬‫ا‬‫عاشر‬-‫تعلٌمات‬‫الحلقات‬
‫هناك‬‫ثالث‬‫تعلٌمات‬‫مصممة‬‫بشكل‬‫خاص‬‫لتحقٌق‬‫عملٌة‬‫الحلقة‬.‫و‬‫هذه‬‫التعلٌمات‬
‫ٌمكن‬‫استعمالها‬‫ا‬‫ل‬‫بد‬‫من‬‫تعلٌمات‬‫القفز‬ً‫الشرط‬.‫و‬ً‫ه‬‫مبٌنة‬ً‫ف‬‫الجدول‬ً‫التال‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
LOOP short_label‫حلقة‬LOOP
‫إنقاص‬CX‫بمقدار‬‫واحد‬‫دون‬‫التؤثٌر‬‫على‬‫األعالم‬‫ثم‬‫القفز‬‫إلى‬
‫الحجرة‬‫فة‬‫المعر‬‫بواسطة‬‫الالفتة‬‫القصٌرة‬‫إذا‬‫كان‬CX‫ل‬‫ٌساوي‬‫الصفر‬‫و‬‫إل‬‫ٌتم‬
‫تنفٌذ‬‫التعلٌمة‬‫التالٌة‬‫لتعلٌمة‬‫الحلقة‬.‫و‬‫هنا‬‫ٌكون‬IP = IP + disp‫حٌث‬disp‫أخذناها‬
‫بعد‬‫تمد‬‫ٌد‬‫إشارتها‬(‫أي‬‫جعلها‬‫بـ‬16‫بت‬.)
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
LOOPE/
LOOPZ‫حلقة‬‫طالما‬‫ٌساوي‬/‫أو‬‫طالما‬‫صفر‬LOOPE/ LOOPZ
‫إنقاص‬CX‫بمقدار‬‫واحد‬‫دون‬‫التؤثٌر‬‫على‬‫األعالم‬‫ثم‬‫القفز‬‫إلى‬
‫الحجرة‬‫فة‬‫المعر‬‫بواسطة‬‫الالفت‬‫ة‬‫القصٌرة‬‫إذا‬‫كان‬CX‫ل‬‫ٌساوي‬‫الصفر‬‫و‬ZF
‫ٌساوي‬‫الصفر‬‫و‬‫إل‬‫ٌتم‬‫تنفٌذ‬‫التعلٌمة‬‫التالٌة‬‫لتعلٌمة‬‫الحلقة‬.
‫و‬‫هنا‬‫جسم‬‫الحلقة‬‫فقط‬‫هو‬‫الذي‬‫ٌإثر‬‫على‬‫األعالم‬.
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
LOOPNE/
LOOPNZ‫حلقة‬‫طالما‬‫ل‬‫ٌساوي‬/‫أو‬‫طال‬‫ما‬‫لٌس‬‫ا‬‫ا‬‫صفر‬LOOPNE/ LOOPNZ
‫إنقاص‬CX‫بمقدار‬‫واحد‬‫ثم‬‫القفز‬‫إلى‬‫الحجرة‬‫المحددة‬‫بواسطة‬‫الالفتة‬
‫القصٌرة‬‫إذا‬‫كان‬CX‫ل‬‫ٌساوي‬‫الصفر‬‫و‬ZF‫ٌساوي‬‫الصفر‬‫و‬‫إل‬‫ٌتم‬‫تنفٌذ‬‫التعلٌمة‬
‫التالٌة‬‫لتعلٌمة‬‫الحلقة‬.
‫و‬‫هنا‬‫ا‬‫ا‬‫أٌض‬‫جسم‬‫الحلقة‬‫فقط‬‫هو‬‫الذي‬‫ٌإثر‬‫على‬‫األعالم‬.
‫م‬‫ثال‬:
‫نرٌد‬‫البحث‬‫عن‬‫عنصر‬‫ضمن‬‫متجهة‬‫من‬‫العناصر‬(‫مصفوفة‬‫أحادٌة‬‫البعد‬)‫ا‬‫ال‬‫مث‬:
0,9,4,5,1‫و‬‫العنصر‬‫المراد‬‫إٌجاده‬‫هو‬4.‫هنا‬CX = 5‫و‬‫هو‬‫عدد‬‫العناصر‬.‫و‬
‫ٌكون‬‫جسم‬‫الحلقة‬ً‫كالتال‬:
MOV CX, 5
Nxt:---------------
---------------
---------------
LOOPNE Nxt
11-‫تعلٌمات‬‫السلسلة‬
‫نقصد‬‫بكلمة‬‫السلسلة‬‫أن‬‫باٌتات‬‫أو‬‫كلمات‬‫معطٌات‬‫تكمن‬ً‫ف‬‫حجرات‬‫متعاقبة‬
‫للذاكرة‬.‫إن‬‫تعلٌمات‬‫السلسلة‬‫تسمح‬‫للمبرمج‬‫بتنفٌذ‬‫عملٌات‬‫مثل‬‫نقل‬‫المعطٌات‬‫من‬
‫بلوك‬‫ذاكرة‬‫إلى‬‫بلوك‬‫آخر‬ً‫ف‬،‫الذاكرة‬‫مسح‬‫أو‬‫كنس‬SCAN‫سلسلة‬‫من‬‫عناصر‬
‫المعطٌات‬‫المخزنة‬ً‫ف‬‫الذاكرة‬‫و‬‫ا‬‫لبحث‬‫عن‬‫قٌمة‬،‫معٌنة‬‫مقارنة‬‫عناصر‬‫سلسلتٌن‬
‫لتحدٌد‬‫فٌما‬‫إذا‬‫كانا‬‫متطابقتٌن‬‫أو‬‫مختلفتٌن‬.
‫و‬‫تعلٌمات‬‫السلسلة‬‫األساسٌة‬ً‫ه‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬MOVS operand‫نقل‬‫عنصر‬‫من‬‫سلسلة‬MOVS
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫الم‬‫عنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬‫نفس‬‫العملٌة‬‫السابقة‬‫و‬‫مقدار‬‫التزاٌد‬‫هو‬1MOVSB‫نقل‬‫عنصر‬
‫باٌت‬‫من‬‫سلسلة‬MOVSB
‫ل‬‫ٌوجد‬‫نفس‬‫العملٌة‬‫السابقة‬‫و‬‫مقدار‬‫التزاٌد‬‫هو‬8MOVSW‫نقل‬‫عنصر‬
‫كلمة‬‫من‬‫السلسلة‬MOVSW
‫أعالم‬‫الحالة‬CMPS operand‫مقارنة‬‫عنصر‬‫سلسلة‬CMPS
‫ا‬‫ألعالم‬‫ا‬‫لمتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫أعالم‬‫الحالة‬SCAS operand‫مسح‬‫عنصر‬‫سلسلة‬SCAS(B or W)
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
LODS operand‫تحمٌل‬‫عنصر‬‫سلسلة‬LODS (B or W)
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعن‬‫ى‬‫الكلمة‬‫المختزلة‬
‫ل‬‫ٌوجد‬
STOS operand‫تخزٌن‬‫عنصر‬‫سلسلة‬STOS(B or W)
12-‫تعلٌمات‬‫تكرار‬‫السلسلة‬
ً‫ف‬‫معظم‬‫التطبٌقات‬‫ٌجب‬‫تكرار‬‫العملٌات‬‫األساسٌة‬‫للسلسلة‬‫من‬‫أجل‬‫معالجة‬‫جمٌع‬
‫عناصرها‬.‫و‬‫ٌتم‬‫إنجاز‬‫هذا‬‫العمل‬‫بواسطة‬‫إدخال‬‫تعلٌمات‬‫التكرار‬‫قبل‬‫التعلٌمة‬
‫األساسٌة‬‫للسلسلة‬ً‫الت‬‫سوف‬‫كرر‬ُ‫ت‬.‫هذا‬‫و‬‫إن‬‫أنواع‬‫تعلٌمات‬‫التكرار‬‫مبٌنة‬ً‫ف‬
‫الجدول‬ً‫التال‬:
‫الستخدام‬‫المعنى‬‫الكلمة‬‫المختزلة‬
MOVS, STOS‫التكرار‬‫طالما‬‫لم‬‫نصل‬‫إلى‬‫نهاٌة‬‫السلسلة‬‫أي‬
CX ≠ 0REP
CMPS, SCAS‫التكرار‬‫طالما‬‫لم‬‫نصل‬‫إلى‬‫نهاٌة‬‫السلسلة‬‫و‬‫السلسلتان‬
‫متساوٌتان‬‫أي‬ZF=1, CX≠0REPE/REPZ
CMPS, SCAS‫التكرار‬‫طالما‬‫لم‬‫نصل‬‫إلى‬‫نهاٌة‬‫السلسلة‬‫و‬‫السلسلتان‬‫غٌر‬
‫متساوٌتان‬‫أي‬ZF=0, CX≠0REPNE/REPNZ
‫مثال‬:
‫بفرض‬‫أن‬:
SI = 0100hDS = 0200h
DI = 0110hES = 0400h
‫فإن‬‫نتٌجة‬‫تنفٌذ‬‫التعلٌمتٌن‬‫التالٌتٌن‬:
MOV CX,20h
REP MOVSB
ً‫ه‬‫أن‬ٌ‫التعل‬‫مة‬‫األولى‬‫تقوم‬‫بتحمٌل‬‫المسجل‬CX‫بالقٌمة‬88h = 32d‫أما‬‫التعلٌمة‬
‫الثانٌة‬‫فتنقل‬38‫باٌت‬‫من‬‫حجرات‬‫ذاكرة‬‫المصدر‬‫المحددة‬‫بواسطة‬DS‫و‬SI‫إلى‬
‫بلوك‬‫حجرات‬‫ذاكرة‬‫الهدف‬‫المحددة‬‫بواسطة‬ES‫و‬DI.
13-‫تعلٌمتا‬‫مسح‬‫و‬‫توضٌع‬‫علم‬‫التجاه‬
‫ذكرنا‬‫أنه‬‫ٌتم‬‫زٌادة‬‫أو‬‫إنقاص‬‫قٌم‬SI‫و‬DI‫بشكل‬ً‫أوتوماتٌك‬‫أثناء‬‫تنفٌذ‬‫تعلٌمات‬
‫السلسلة‬‫و‬‫أنه‬‫ٌتم‬‫تقرٌر‬‫الزٌادة‬‫أو‬‫اإلنقاص‬‫ا‬‫ا‬‫اعتماد‬‫على‬‫قٌمة‬‫علم‬‫التجاه‬DF‫حٌث‬
‫عندما‬DF = 0‫تحدث‬‫الزٌادة‬‫األوتوماتٌكٌة‬‫و‬‫العكس‬‫بالعكس‬.‫و‬‫ٌتم‬‫التحكم‬‫بعلم‬
‫التجاه‬‫بواسطة‬‫التعلٌمتٌن‬‫التالٌتٌن‬:
‫األعالم‬‫المتؤثرة‬‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
DF8→DFCLD‫تنظٌف‬DFCLD
DF1→DFSTD‫توضٌع‬DESTD
14-‫تعلٌمتا‬IN‫و‬OUT
‫العملٌة‬‫الصٌغة‬‫المعنى‬‫الكلمة‬‫المختزلة‬
(port) → AccIN Acc,port‫تعلٌمة‬‫دخل‬‫مباشرة‬IN
((DX)) → AccIN Acc,DX‫تعلٌمة‬‫دخل‬‫غٌر‬‫مباشرة‬IN
Acc → (port)OUT port,Acc‫تعلٌمة‬‫خرج‬‫مباشرة‬OUT
Acc → ((DX))OUT DX,Acc‫تعلٌمة‬‫خرج‬‫غٌر‬‫مباشرة‬OUT
‫حٌث‬ً‫ف‬‫التعلٌمة‬‫المباشرة‬‫ٌكون‬‫طول‬‫الـ‬port‫ا‬‫ا‬‫باٌت‬‫ا‬‫ا‬‫واحد‬‫و‬ً‫ف‬‫التعلٌمة‬‫غٌر‬
‫المباشرة‬‫ٌكون‬DX‫ا‬‫ا‬ٌ‫محتو‬‫على‬‫عنوان‬‫نافذة‬.
‫مثال‬:
‫بفرض‬‫أن‬ً‫نافذت‬‫دخل‬‫بحجم‬‫باٌت‬ً‫ف‬‫العناوٌن‬AAh, A9h‫ع‬‫لى‬‫الترتٌب‬‫قرأ‬ُ‫ت‬َ‫س‬‫و‬
‫من‬‫ثم‬‫سٌتم‬‫إخراج‬‫محتوٌاتها‬‫إلى‬‫نافذة‬‫خرج‬‫بحجم‬‫كلمة‬ً‫ف‬‫العنوان‬B000h
‫المطلوب‬‫كتابة‬‫التعلٌمات‬‫الالزمة‬‫إلنجاز‬‫هذا‬‫العمل‬.
‫الحل‬:
IN AL,[0AAh]
MOV AH,AL
IN AL,[0A9h]
MOV DX,0B000h
OUT DX,AX
‫أسمبيلي‬‫للمبتدئين‬
‫العامري‬ ‫طالب‬ ‫مشتاق‬ :‫المبرمج‬ ‫أعداد‬
‫للمبتدئٌن‬ ً‫األسٌمبل‬ ‫لغة‬
MUSHTAQ_TALIB58@YAHOO.COM
1/1/2009

أسمبيلي للمبتدئين Assembly