شـبـكــة عـمّـــار
إخبارية - ترفيهية
- تعليمية



جديد الصور
جديد الأخبار
جديد المقالات


جديد الصور

جديد البطاقات

جديد الصوتيات

المتواجدون الآن


تغذيات RSS

2012-08-15 05:57



بسم الله الرحمن الرحيم



الآن وبعد الدرسين السابقين وصلنا إلى قائمة التعليمات التي تحوي 34 تعليمة و سنستعرضها إن شاء الله في درسين:

الدرس الاول يحوي 16 تعليمة هي:
ADD – AND – CALL – CMP – CMPS – IN – IRET – JMP - J[case] – LEA – LDS - LES - LFS – LGS – LSS – LODS
وفي الدرس الثاني توجد 18 تعليمة هي:
MOV – MOVS - MOVZX - MUL – NOT – OR - OUT - PUSH – POP – REP – RET – SCAS – SHL – SHR – STOS – SUB – TEST - XOR

في كل تعليمة:

المجالين "}" و "{" يحددان البارامترات. والتي قد تكون سجّلا أو منطقة ذاكرية أو قيمة فورية (Immediacy)، وهي في الغالب عدد.

اللاحقة "[B أو W أو D]" في نهاية التعليمة تحدد أسلوب معالجة التعليمة.

"B" : تعني هذه اللاحقة أن التعليمة من نوع 8 بت (Byte)، وهذا ما يجعل استعمال السجل AL ضروريا.

"W" : تعني هذه اللاحقة أن التعليمة من نوع 16 بت (Word). استعمال السجل AX ضروري.

"D" : تعني هذه اللاحقة أن التعليمة من نوع 32 بت (DWord) . استعمال السجل EAX ضروري.

بسم الله نبدأ:

1- التعليمة ADD:

ADD {destination},{source} // ADD {الوجهة},{القناع}
تقوم هذه التعليمة بإضافة قيمة المصدر لقيمة الوجهة، وينجم عن هذه العملية تغيير في محتوى الرايات، ويتم تخصيص ناتج الجمع للمعامل الأول.

قد يكون أحد المعاملين سجلا، كما فد يكون المعامل الثاني مرجع ذاكري (متغير أو عنوان ذاكري) أو immediate (رقم مباشر).

add ax, bx // => ax=ax+bx // (reg, reg) كلا المعاملين سجّلا
add ax, 5 // => ax=ax+5 // (reg, imm) المعامل الثني هو عدد مباشر
add ax, var// => ax=ax+var // (reg, mem) المعامل الثني هو مرجع ذاكري add ax, [si] // => ax=ax+[si] // (reg, imm) المعامل الثني هو مرجع ذاكري

2- التعليمة AND:

AND {destination},{mask} // AND {الوجهة},{القناع}
لتبسيط هذه التعليمة، ووفقا جدول الحقيقة الذي سنطّلع عليه لاحقا، فإن الناتج صحيح (=1)، إذا كان كلا المعاملين صحيح، والناتج يكون خاطئا (=0) إذا كان أحد المعاملين خاطئا أو كلاهما.

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



حسب لغات البرمجة المعروفة يمكننا تمثيل ذلك بـ:

Destination := Destination AND Mask ; // بلغة الباسكال
Destination &= Mask ; // بلغة السي
3- التعليمة CALL:

CALL {address}
تطلب الإجراء (procedure) أو الدالة (function) المتواجد في العنوان المحدد. فإذا سبقت التعليمة CALL عدة تعليمات من نوع PUSH، فهذا يعني أنها مجموعة من البارامترات تم تخزينها في المكدس (Stack). وفي هذه الحالة ، فإن الإجراء يبدأ بــ:

"push [e]bp ; mov [e]bp, [e]sp "
ويمكننا أيضا إيجاد قراءة للبارامترات على شكل:
" mov {Register}, [ebp – {Value}] "
وأخيرا لا يجب نسيان التعليمة "RET [{Value}]" في نهاية الإجراء.

4- التعليمة CMP:

CMP {a},{b}
تقوم هذه التعليمة بمقارنة المتغير a مع المتغير b. وبعدها نجد مباشرة قفزا مشروطا نحو فرع ذاكري آخر "jmp أو je أو jne ...، بصفة عامة j[case] {Offset}".

5- التعليمة CMPS:

CMPS [B/D/W]
هذه التعليمة تقارن كل بايت/كلمة/كلمة_مضاعفة من القطاع والفرع الذاكريين DS :ESI مع القطاع والفرع الذاكريين ES :EDI

6- التعليمة IN:

IN {destination},{port}
هذه التعليمة تقرأ قيمة ذات 8 بت على المنفذ {port}، وتخزنه في الوجهة {destination}. أما السجل الوحيد المسموح باستعماله في هذه العملية فهو السجل DX.

7- التعليمة IRET:

IRET {value}
هذه التعليمة تسمح بمغادرة المقاطعة، وتستعمل فقط للبرامج المستقرة في الذاكرة، مثل سائق (driver) الفأرة.

8- التعليمة JMP:

JMP {offset}
هذه التعليمة تمكن من القفز إلى العنوان الذاكري المحدد بالفرع {offset}.

9- التعليمة J[case]:

J[case] {offset}
إذا كانت الحالة [case] صحيحة، فإن التعليمة تنفّذ، وينتقل العمل بذلك إلى العنوان المحدد في الفرع {offset}. الحالة [case] هي شرط متعلق بالرايات (flags)، ويتم تنفيذ الشرط وفق قواعد المنطق المعروفة.

الحالات الممكنة لـ case، بعد أخذ " CMP {a},{b}" كمثال:

غير مؤشرة not signed:

JA : يتم القفز إذا كان أكبر، في مثالنا a > b، إذا كانت الراية (الدليل) CF=ZF=0JAE, JNB, JNC : إذا كان أكبر أو يساوي (a>=b)، إذا كان CF = 0

JB, JC : أصغر (a<b)، إذا كان CF=ZF=1

JBE : أصغر أو يساوي (a<=b)، إذا كان CF><OF و ZF=1.

مؤشرة signed:

JG : أكبر (a>b)، إذا كان SF=ZF=0

JGE : أكبر أو يساوي (a>=b)، إذا كان SF = OF





JL : أصغر (a<b)، إذا كان SF <> OF

JLE : أصغر أو يساوي (a<=b)، إذا كان SF<>OF و ZF=1.

متساوية:

JE, JZ : يساوي (a=b)، إذا كان ZF=1.

JNE, JNZ : يختلف عن (a <> b)، إذا كان ZF=0.

10- التعليمة LEA:

LEA {destination},{source}
يتم هنا كتابة عنوان المصدر {source} في الوجهة {destination}.

هذه التعليمة تكافئ:

MOV {destination},Offset{source}
11- التعليمة LDS:

LDS {destination},{address}
نسخ عنوان {address} من نوع 32 بت في السجّل DS، (الذي هو قطاعه)، وفي {destination} من نوع 16 بت، (التي هي فرعه).

12- التعليمة LES:

LES {destination},{address}
نسخ عنوان {address} من نوع 32 بت في السجّل ES، (الذي هو قطاعه)، وفي {destination} من نوع 16 بت، (التي هي فرعه).

13- التعليمة LFS:

LFS {destination},{address}
نسخ عنوان {address} من نوع 32 بت في السجّل FS، (الذي هو قطاعه)، وفي {destination} من نوع 16 بت، (التي هي فرعه).

14- التعليمة LGS:

LGS {destination},{address}
نسخ عنوان {address} من نوع 32 بت في السجّل GS، (الذي هو قطاعه)، وفي {destination} من نوع 16 بت، (التي هي فرعه).

15- التعليمة LSS:

LSS {destination},{address}
نسخ عنوان {address} من نوع 32 بت في السجّل SS، (الذي هو قطاعه)، وفي {destination} من نوع 16 بت، (التي هي فرعه).

16- التعليمة LODS:

LODS [B/D/W]
نسخ البايت/الكلمة/الكلمة_المضاعفة ES :EDI في السجل AL/AX/EAX.

* التعليمة العكسية لها هي: " STOS [B/D/W]".


تعليقات 0 | إهداء 0 | زيارات 629


خدمات المحتوى
  • مواقع النشر :
  • أضف محتوى في Digg
  • أضف محتوى في del.icio.us
  • أضف محتوى في StumbleUpon
  • أضف محتوى في Google


تقييم
1.00/10 (3 صوت)


Powered by Dimofinf cms Version 3.0.0
Copyright© Dimensions Of Information Inc.