|
مازلنا بتعليمات الأسمبلى ، هذا آخر درس بإذن الله فى تعليمات
الأسمبلى الأساسيه
قبل أن نبدأ بكتابة برامج بالأسمبلى من اليوم القادم ،،، و من ثم نكمل
باقى تعليمات
التحكم و الدورات و باقى التعليمات المهمه
....
أتذكر أن آخر
تعليمات
تناولناها سويا الدرس السابق هى التعليمات المنطقيه ، و نسيت ذكر
واحده فقط ،
سأذكرها هنا أولا
:
NOT
هذه
التعليمه
مسؤوله عن عكس القيمه التى بداخل المكان الذى يذكر بعدها ، بمعنى ...
مممممممممم ، أنظر
المثال الأتى :
مثال :
-------
لو أنه
يوجد بالمسجل
AL قيمه
ثنائيه على هذا الشكل 01110010
ونريد عكس
هذه القيمه لتكون
هكذا 10001101 ، نستخدم هذه التعليمه و هو مساويه للمقابل الأول First Complement
،
كل بت يتم
عكس قيمته .
|
CODE |
|
MOV AL,01110010B
NOT AL
;AL = 100011010B NOW
|
--------------------------------------------------------------------------------------------------------------------------
نأتى
لتعليمات
الإزاحه و الدوران
Shift And Rotate Instructions
-
هذه التعليمات تتعامل
مع التشكيل الثنائى المنطقى كما تتعامل
التعليمات المنطقيه السابقه مع القيم المختلفه Logic Bit Instructions
- تستخدم
هذه التعليمات
بكثره فى دوال التحكم فى وحدات الإدخال و الإخراج Control I/O Divices
- تستخدم مع
جميع أنواع المسجلات و الذاكره
أولا :
تعليمات الإزاحه : Shift Instructions
-
معنى الإزاحه هى
إزاحة القيم الثنائيه المتتاليه إلى اليمين
أو اليسار
(>>> || <<<)
- تستخدم فى
العمليات الحسابيه مثل
الضرب و القسمه (إزاحه لليسار بت واحده تعنى ضرب فى 2 و إزاحه لليمين
بت واحد تعنى
قسمه على 2)
- هناك أربع
تعليمات إزاحه عباره عن مجموعتين (إزاحه منطقيه
Logical Shift
و إزاحه حسابيه Arithmatic Shift)
- جميع هذه
التعليمات تتم من خلال علم
الحمل
Carry Flag
- وكما ترى
بالشكل الأتى ، كيفية عمل هذه التعليمات و الفرق
بينهما
.

-
تلاحظ أن الإزاحه
المنطقيه
إلى اليسار SHL
تتم الإزاحه و يتم وضع من اليمين صفر ، وفى الإزاحه المنطقيه إلى
اليمين
SHR يتم وضع صفر من اليسار
.
- تلاحظ فى
تعليمات الإزاحه الحسابيه إلى
اليسار
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
|
مثال
لإستخدام
عملية الإزاحه إلى اليسار فى ضرب القيمه الموجوده داخل المسجل AX
فى القيمه 1010
وهى مساويه
ل10 فى النظام العشرى
.
|
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 Instructions
-
تقوم هذه التعليمات
بعمل إزاحه من طرف المسجل أو المكان
بالذاكره إلى الطرف الأخر.
- أربع
تعليمات مقسمين إلى مجموعتين ( دوران خلال علم
الحمل
Rotate أو
دوران خارج
علم الحملRoate
throught carry )
- وكما ترى
بالشكل
الأتى ، كيفية عمل هذه التعليمات و الفرق بينهما .

-
يتضح من الشكل المبين
سابقا أن تعليمات الدوران من خلال علم
الحمل
RCL , RCR تدور البتات من طرف إلى علم الحمل إلى الطرف الأخر .
- أما
التعليمات
الأخرى 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
|
--------------------------------------------------------------------------------------------------------------------------
تعليمات
البحث عن
البت 1 : Bit
Scan Instructions
-
وظيفة هذه التعليمات
هى البحث عن بت واحد داخل مسجل ما أو
مكان بالذاكره
.
- هذه
التعليمات لها صيغتين وهما
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
|
|