سلسلة الراغبين في ملخص لغة اسمبلي للمبتدئين (الدرس السابع)
السلام عليكم
تقسم الأوامر الى 5 مجموعات :-
∆ data transfer instructions
∆ control Flow instructions
∆ arithmetic instructions
∆ logic instructions
∆ shift and rotate instructions
بالنسبة لأنواع الأوامر :-
هناك أوامر لا تأخذ اي معامل (operand) وبنيتها(syntax) :-
instr
وهناك أوامر تأخذ معامل واحد وبنيتها :-
instr arg
وهناك أوامر تأخذ معاملين (sources, destination) :-
instr dest, src
هناك أوامر تأخذ ثلاث معاملات (sources, destination, auxiliary) وبنيتها :-
instr dest , src , aux
@@@@@@@@@@@@@@@@
الان سوف نتعرف على اول نوع وهو ،data transfer instructions :-
تعد من أهم الأوامر واكثرها استعمالا حيث تقوم بنقل المعلومات بين المسجلات (registers) أو الذاكرة (memory) ولا توجد طريقة أخرى لذلك بدونهم .
في البداية هناك الامر mov :-
Mov dest , src
src :- immediate , registers , memory
src يكون إما رقم ثابت او مسجل او عنوان ذاكرة
dest :- register , memory
dest إما مسجل او عنوان ذاكرة
وهناك عدة أمور يجب الإنتباه لها :-
١- على المعاملان (operands) أن يكونا من نفس الحجم مثلا :-
mov al,dl (تقوم بنقل المعلومات من dl الى al )
لاحظ أن كلاهما من نفس الحجم 8bit ولا يمكن نقل مثلا
نقل word الى byte (و العكس صحيح)
٢- CS , EIP , IP
لا يمكن أن يكونوا dest
٣- لا يمكنك نقل عدد ثابت immediate الى segment registers (DS,CS,SS)
مثلا لا يمكنك
mov DS,45
٤- لا يمكنك النقل من memory ل memory .
$$$$$$$$$$$$$
سوف نتعرف على الامر movzx :-
تستطيع بهذا الأمر أن تنقل من قيمة صغيرة إلى كبيرة وسوف يقوم بملئ ما يتبقى بالاصفار مثلا
mov bl , 10010001b
movzx ax , bl (b يعبر عن binary)
src : 10010001
dest : 00000000 10010001(ax 16 bit )
وشرط أن يكون dest مسجل register
$$$$$$$$$$$$$$$
دور أمر movsx :-
هذا الأمر يشبه movzx ولكنه signed اي يهتم بالاشارة حيث أنه ينظر إلى البت الذي في أقصى اليسار MSB
اذا كان واحد ينقل المعلومات وما تبقى يملئ ب ١ مثل :-
mov bl , 10010001
movsx ax , bl
src : 10010001
dest: 11111111 10010001
و ال dest يجب أن يكون مسجل register
$$$$$$$$$$$$$$$$$$
الأمر
load effective address (lea):-
lea dest , src
هذا الأمر يشبه الأمر mov ولكنه يقوم بنقل بنقل عنوان الذاكرة الخاص بالمعلومات (mov ينقل المعلومات نفسها الى dest) الى dest
src :- immediate , register , memory
dest :- register
$$$$$$$$$$$$$$$$$$$$
هذا نوع اخر من أوامر نقل البيانات :-
xchg :-
xchg dest , src
هذا الأمر يقوم بتبديل(swap) المعلومات الموجودة في deat و src
يشبه نقل المعلومات من dest الى مسجل مؤقت (temporary) ومن ثم نقل المعلومات من src الى dest من ثم نقل المعلومات من temporary الى src
src , dest :- register , memory
ملاحظه : واحد منهم يكون memory والآخر يجب أن يكون register (only one operand can be in memory:
the other must be a register.)
سوف نتعرف الى الأمر الأخير في أوامر نقل البيانات وهو :-
cmpxchg :-
cmpxchg arg1 , arg2
هذا الأمر يقوم في البداية بمقارنة arg1 مع accumulator (eax , ax ,al حسب حجم arg1 ) اذا كانوا متساويين ينقل المعلومات من arg2 الى arg1 ويقوم بوضع 1 في ZF (zero flag) (set the zero flag)
واذا لم يكونوا متساويين ينقل المعلومات من accumulator الى arg1 ويضع 0 في
ZF (clear the zero flag )
####################
انتهى #الدرس_السابع لليوم لكم حرية مشاركة المنشور للجميع لكن لا تنسوا ذكر المصدر
وان كان هناك أي أخطاء في المعلومات أو أخطاء في الاملاء (فرحوا جماعة الاملاء
) فانا ساتقبل النقد البناء
اتمنى مشاركة المنشور حتى يستفيد الجميع فزكاة العلم نشره



بارك الله فيك
ReplyDelete