مازلنا بتعليمات الأسمبلى ، هذا آخر درس بإذن الله فى تعليمات الأسمبلى الأساسيهقبل أن نبدأ بكتابة برامج بالأسمبلى من اليوم القادم ،،، و من ثم نكمل باقى تعليماتالتحكم و الدورات و باقى التعليمات المهمه ....
أتذكر أن آخر تعليماتتناولناها سويا الدرس السابق هى التعليمات المنطقيه ، و نسيت ذكر واحده فقط ،سأذكرها هنا أولا :
NOT هذهالتعليمه مسؤوله عن عكس القيمه التى بداخل المكان الذى يذكر بعدها ، بمعنى ... مممممممممم ، أنظر المثال الأتى :
مثال :
-------
لو أنهيوجد بالمسجل AL قيمه ثنائيه على هذا الشكل 01110010ونريد عكس هذه القيمه لتكونهكذا 10001101 ، نستخدم هذه التعليمه و هو مساويه للمقابل الأول First Complement ،كل بت يتم عكس قيمته .
CODE
MOV AL,01110010B
NOT AL
;AL = 100011010B NOW
--------------------------------------------------------------------------------------------------------------------------
- تستخدمهذه التعليمات بكثره فى دوال التحكم فى وحدات الإدخال و الإخراج Control I/O Divices
- تستخدم مع جميع أنواع المسجلات و الذاكرهأولا : تعليمات الإزاحه : Shift Instructions- معنى الإزاحه هى إزاحة القيم الثنائيه المتتاليه إلى اليمينأو اليسار (>>> || <<<)
- تستخدم فى العمليات الحسابيه مثلالضرب و القسمه (إزاحه لليسار بت واحده تعنى ضرب فى 2 و إزاحه لليمين بت واحد تعنىقسمه على 2)
- هناك أربع تعليمات إزاحه عباره عن مجموعتين (إزاحه منطقيه Logical Shift و إزاحه حسابيه Arithmatic Shift)
- جميع هذه التعليمات تتم من خلال علمالحمل Carry Flag
- وكما ترى بالشكل الأتى ، كيفية عمل هذه التعليمات و الفرقبينهما .
- تلاحظ فى تعليمات الإزاحه الحسابيه إلىاليسار SAL مثل الإزاحه المنطقيه إلى اليسار ، أما الإزاحه الحسابيه إلى اليمينفيتم وضع نفس القيمه فى االبت الأخير كما هى و هذا بسبب عدم تأثر إشارة القيمهالموجوده و لذلك سميت إزاحه حسابيه .
- يمكن إستعمال الإزاحه المنطقيه مع القيمالتى بدون إشاره Unsigned Numbers .
- يمكن إستعمال الإزاحه الحسابيه مع القيمالتى بإشاره Signed Number .
- لا يمكن إستعمال الإزاحه مع مسجلات المقاطع مطلقاوفيما عذا ذلك يمكن إستخدامها.أمثله لتعليمات الإزاحه المختلفه :-
--------------------------------------
CODE
SHR AH,3 ;AX is logically shifted Right 3 places
SHL CX,12 ;CX is logically shifted right 12 places
SHR [1000] , 3 ;The memory location adrresed by 1000 in the data segment is right shifted by 3 places
MOV CL,10
SAR DX,CL ;DX is arithmatically shefted to right by number in CL
;Note that CL Here called the sheft count register and can be used as above
SAL EDX,1 ;EDX is arithmaticaly shifted by 1 place
CODE
SHL AX,1
;AX = AX * 2B
MOV BX,AX
;BX = AX * 2
SHL AX,2
AX = AX * 8
ADD AX , BX
;AX =AX * 10
;AX = AX * 1010B
;
--------------------------------------------------------------------------------------------------------------------------
- أربع تعليمات مقسمين إلى مجموعتين ( دوران خلال علمالحمل Rotate أودوران خارج علم الحملRoate throught carry )
- وكما ترى بالشكلالأتى ، كيفية عمل هذه التعليمات و الفرق بينهما .
- أماالتعليمات الأخرى ROR , RRL تدور البتات من طرف إلى الأخر ومن ثم وضع البت المنقولهإلى علم الحمل كما هو مبين بالشكل.
- أمثله :-
CODE
ROL SI,14 ;SI rotated left by 14 places
RCL BL,6 ;BL rotates left through carry by 6 places
ROL ECX,18 ;ECX rotates left by 18 places
RCR AH,CL ;AH rotates through carry by the number of places in CL
ROR WORD PTR[BP] , 2 ;The word contents of the stack segment memory location addressed by BP rotate right by 2 places
--------------------------------------------------------------------------------------------------------------------------
- هذه التعليمات لها صيغتين وهما BSF (Bit Scan Forward) & BSR (Bit Scan Reverce) 2
- BSF وتقوم بالبحث من اليسار إلى اليمين (من البت 0إلى البت 15 فى AX )
- BSR وتقوم بالبحث من اليمين إلى اليسار (من البت 15 إلىالبت 0 فى AX)
- تأخذ التعليمه مدخلان (Source & Destination) ،
- عندمايجد المعالج 1 فإنه يقوم بتصحيح القيمه التى بعلم الصفر If a 1-bit is encountered , zero flag is set . ومن ثم يوضع رقم هذه البت فى المدخل الأول Destination .مثال :-
CODE
MOV AL,00101000
BSF BL,AL
;Zero Flag is set
;BL contains 3 , the 1-bit position in Al from left
BSR CL,AL
;Zero Flag is set
;CL Contains 4 , the 1-bit position in AL from right