ضمن دروس 8086 microprocessor شرح نواصل معكم ...
في التدوينات الماضية بعض تاريخ عائلات المعالجات CPU – computer interface ثم تحدثنا عن معالجات 4CISC و معالجات RISC وذكرنا الفرق بين معالجات 4CISC و معالجات RISC ومبدأ المعالجة التواردية
هذا روابط التدوينا السابقة
الدرس الثاني معالجات 4CISC و معالجات RISC - computer interface
الدرس الثالث المعالجات التواردية pipelining
الدرس الخامس المتحكمات الصغرية Microcontroller
الدرس السابع البنية الداخلية للمعالج 8088/ 8086
الدرس الثامن السجلات الداخلية للمعالج 8088/ 8086
الدرس التاسع تنظيم ذاكرة المعالج 8086
الدرس العاشر انماط العنونة addressing modes
الدرس الحادي غشر البرمجة بلغة التجميع assembly language
الدرس الثاني عشر موجِّهات او ايعازات لغة التجميع Assembler Directives
واليوم نأخذ : كود التعليمات 8088/ 8086
لكل تعليمة من تعليمات المعالج 8088/ 8086
كود ثنائي مختلف يسمى كود الآلة
Machine
Code ، تُفك وحدة التنفيذ وُتحلل كود التعليمات ومن ثم تُنفذها واحدة تلو الأخرى.
عند كتابتك برنامج بلغة التجمع فإنك لا تهتم مبدئيًا بكود التعليمات، ومع ذلك فإن معرفتك بهذه
الاكواد يجعلك تختار التعليمات في برنامجك على نحو أفضل، لأن طول كود التعليمات يمتد
من بايت إلى 6 بايتات، وبالتالي فإن زمن التنفيذ يختلف أيضًا من تعليمة إلى أخرى.
مجموعة تعليمات المعالج 8088/ 8086
سوف نشرح فيما يلي مجموعة تعليمات المعالج
8088/ 8086 ضمن مجموعات لها الخاصية
نفسها.
تعليمات تبادل المعطيات
تضم مجموعة تعليمات المعالج
8088/ 8086 العديد من التعليمات التي تسمح بتبادل بايت أو كلمة بين موقع ذاكرة وسجل.
سنشرح في هذه الفقرة التعليمات التالية:
MOV, XCHG,
XLAT, LDS, LEA, LES
تعليمة MOV
تنسخ تعليمة MOV بايتًا أو كلمة من معامل المصدر إلى معامل الوجهة، ولا تؤثر هذه التعليمة على حالة سجل الراية.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
(S)→(D)
|
MOV D,S
|
لا يمكننا استخدام تعليمة
MOV في حالة:
1-
نسخ معطيات من ذاكرة إلى ذاكرة.
2-
إسناد قيمة فورية لسجل مقتطع.
3-
نسخ محتوى سجل مقتطع إلى سجل مقتطع.
4-
نسخ معطيات إلى مؤشر التعليمة IP
مثال:
MOV
AX, 0B800h ; set AX = B800h (VGA memory).
MOV
DS, AX ; copy value of
AX to DS.
MOV CL,
'A' ; CL = 41h
(ASCII code).
MOV CH,
01011111b ; CL = color attribute.
MOV BX,
15Eh ; BX = position on
screen.
MOV [BX],
CX ; [0B800h:015Eh] =
CX.
ملاحظة
(يمكن فقط باستخدام تعليمات سلاسل المحارف نسخ معطيات من ذاكرة إلى ذاكرة)
تعليمة XCHG
تبادل هذه التعليمة بين محتوى معامل المصدر ومعامل الوجهة، يجب أن يكون طول كل من
المعاملين متساويين.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
(D)↔(S)
|
XCHG D,S
|
مثال:
MOV AL, 5
MOV
AH, 2
XCHG AL, AH ; AL = 2, AH = 5
XCHG
AL, AH ; AL = 5, AH = 2
التعليمة XLAT
بفرض أن لدينا جدول في الذاكرة من 256
بايت وأن BX يؤشر إلى البايت الأول من الجدول، فإن التعليمة XLAT تستخدم السجل
AL كدليل INDEX موجب في الجدول وتستبدل محتوى AL بالبايت الذي إزاحته في الجدول تساوي AL أي تنسخ الموقع
DS:[BX
+ unsigned AL] في AL
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
DS:[BX + unsigned AL]→(AL)
|
XLAT
|
مثال: يُوجد البرنامج التالي كود ASCII للرقم 2
الموجود في AL :
dat DB 30h, 31h, 32h, 33h, 34h, 35h, 36h, 37h,
38h, 39h
LEA BX, dat
MOV AL, 2
XLAT ; AL =
32h
التعليمة LEA
تُحَمل سجل الوجهة ( 16
–بت)
بالعنوان الفعال EA (حقل الانزياح في العنوان المنطقي)
لمعامل المصدر الذي يجب أن يكون ذاكرة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
EA→(Reg16)
|
LEA Reg16, EA
|
مثال:
MOV BX, 35h
MOV DI, 12h
LEA SI, [BX+DI] ; SI = 35h + 12h = 47h
التعليمة LDS
تًحمَّل
التعليمة LDS الكلمة الأولى من معامل المصدر، الذي هو عبارة عن كلمة مضاعفة في الذاكرة، في سجل الوجهة المحدد بالتعليمة. وُتحمل الكلمة الثانية من معامل المصدر في السجل
DS
.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
(Mem32)→(Reg16)
(Mem32+2)→(DS)
|
LDS Reg16, MEM32
|
مثال: بعد تنفيذ التعليمات التالية، يجري تحميل AX بالكلمة 1234
h و
DS بالكلمة
.5678h
m DW 1234h
DW 5678h
LDS AX, m
التعليمة LES
تُحَمل التعليمة LES الكلمة الأولى من معامل المصدر، الذي هو كلمة مضاعفة في الذاكرة، إلى سجل الوجهة المحدد بالتعليمة، كما يجري تحميل الكلمة الثانية من معامل المصدر في السجل
ES
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
لا احد
|
(Mem32)→(Reg16)
(Mem32+2)→(ES)
|
LES Reg16, MEM32
|
مثال: بعد تنفيذ التعليمات التالية، يجري تحميل AX بالكلمة 1234 h و ES بالكلمة
.5678h
m DW 1234h
DW 5678h
LES AX, m
التعليمات الحسابية
يمكن تنفيذ العمليات الحسابية على أربع مصاغات من الأعداد: اثناني بلا إشارة، اثناني مع إشارة، عشري مرزوم بلا إشارة unsigned packed decimal أو عشري غير مرزوم بلا
إشارة unsigned
unpacked decimal سنشرح فقط العمليات على الأعداد بالمصاغة الاثنانية لأننا غالبًا ما نستخدم المصاغات العشرية المرزومة وغير المرزومة لأغراض التحكم.
تعليمات الجمع ADC ،ADD و INC :
تجمع التعليمة ADD معامل الوجهة مع معامل المصدر، وتضع الناتج في معامل الوجهة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
الكل
|
(S) + (D) → (D)
Carry →(CF)
|
ADD D, S
|
مثال: في التعليمات التالية يجري أولا وضع 5 في AL ثم يجري جمع
AL مع -3 ووضع الناتج،2، في AL.
MOV AL,
5 ; AL=5
ADD AL,
-3 ; AL=2
تجمع التعليمة ADC معامل الوجهة مع معامل المصدر مع الحامل
CF ، وتضع الناتج في معامل الوجهة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
الكل
|
(S) + (D) + (CF) →
(D)
Carry →(CF)
|
ADC D, S
|
مثال: في التعليمات التالية يجري أولاً وضع 1 فيCF ثم 5 في AL وأخيرًا يجري جمع
CF معAL مع 1 ووضع الناتج، 7، في AL .
STC ;
set CF=1
MOV AL,
5 ; AL=5
ADC AL,
1 ; AL=7
تُضيف التعليمة INC واحدًا إلى معامل الوجهة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
CY
الكل ماعدا
|
(D) + 1 → (D)
|
INC D
|
مثال
في التعليمات التالية يجري أولا وضع 4في AL
ثم زيادة AL
بمقدار 1
MOV AL,
4
INC AL ;
AL=5
تعليمات الطرح DEC ،SBB ،SUB و NEG
تطرح التعليمة SUB معامل المصدر من معامل الوجهة وتضع الناتج في معامل الوجهة
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
الكل
|
(D) - (S) → (D)
Borrow →(CF(
|
SUB D, S
|
مثال: في التعليمات التالية يجري أولا وضع 5 في AL ثم يجري طرح القيمة 1 من AL ووضع الناتج، 4 في AL.
MOV AL,
5
SUB AL,
1 ; AL=4
تطرح التعليمة SBB مع استعارة CF معامل المصدر من معامل الوجهة وتضع الناتج في معامل الوجهة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
الكل
|
(D) - (S) – (CF) →
(D)
|
SBB D, S
|
مثال: في التعليمات التالية يجري أولا وضع 1 في CF ثم 5 في AL وأخيرًا يجري طرح
CF و 3 من AL ووضع الناتج 1
في
AL .
STC ;
set CF = 1
MOV AL,
5
SBB AL,
3 ; AL = 5 - 3 - 1 = 1
تُنقص التعليمة DEC واحدًا من معامل الوجهة.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
CY
الكل ماعدا
|
(D) - 1 → (D)
|
DEC D
|
مثال: في التعليمات التالية يجري أولا وضع 255 في AL ثم إنقاص محتوى AL بمقدار 1.
MOV AL,
255 ; AL = 0FFh (255 or -1)
DEC AL ;
AL = 0FEh (254 or -2)
تطرح التعليمة NEG معامل الوجهة من الصفر وتضع النتيجة في معامل الوجهة؛ أي تُعكس
هذه التعليمة إشارة العدد.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
الكل
|
المتمم
الثاني
|
NEG D
|
مثال: في التعليمات التالية يجري أو ً لا وضع 5 في AL ثُم
تُعكس إشارة محتوى AL فيصبح محتوى AL مساويًا 5- او
.0FBh
MOV AL,
5 ; AL = 05h
NEG AL ;
AL = 0FBh (-5)
تعليمتا الضرب MUL و IMUL :
تضرب التعليمة MUL بلا إشارة، والتعليمة IMUL مع إشارة، معامل المصدر مع المراكم. إذا كان طول المصدر 1 بايت فإنه يُضرب ب AL ويوضع ناتج الضرب ( 2
بايت) في AX وإذا كان طول المصدر 2
بايت
فيُضرب مع AX ويوضع الناتج )كلمة مضاعفة، 4بايت)
في DX وAX .
الناتج
|
معامل
الضرب
|
المضروب
|
ضرب
MUL
او IMUL
|
AX
|
سجل أو ذاكرة
|
AL
|
Byte ×
Byte
|
DX: AX
|
سجل أو ذاكرة
|
AX
|
Word ×
Word
|
مثال: في التعليمات التالية يجري وضع القيمة العشرية 200 في AL ،و 4 في BL ثم يُضرب AL مع BL يوضع ناتج الضرب 800 في AX
MOV AL,
200 ; AL = 0C8h
MOV BL,
4
MUL BL ;
AX = 0320h (800)
تعليمتا القسمة IDIV و DIV
تُقسم التعليمة DIV بلا إشارة، والتعليمة IDIV مع إشارة AX على معامل المصدر
إذا كان طول معامل المصدر 1
بايت فإنه يجري وضع ناتج القسمة في AL وباقي القسمة في AH وإذا كان طول معامل المصدر 2
بايت، فُتقسم الكلمة المضاعفة المشكلة من DX و AX [DX:AX] على معامل المصدر، ويوضع ناتج عملية القسمة في AX وباقي القسمة في DX.
الناتج
|
المقسوم
علية
|
القاسم
|
قسمة DIVاو IDIV
|
AL:AH
|
سجل أو ذاكرة
|
AX
|
Word / Byte
|
AX: DX
|
سجل أو ذاكرة
|
DX:AX
|
DWord / Word
|
مثال: في التعليمات التالية يجري وضع القيمة العشرية -203 في AXو 4 في BL ثم يقسمAX على BL يوضع ناتج القسمة
-50 في AL ، وباقي القسمة -3 في AH
MOV AX,
-203 ; AX = 0FF35h
MOV BL,
4
IDIV BL
; AL = -50 (0CEh), AH = -3 (0FDh)
التعليمات CWD و CBW
تُحول التعليمة CBW المعطيات بطول بايت لتصبح ممثلة على 2 بايت، وذلك بتوسيع extend بت الإشارة لمحتوى السجل
AL عبر السجل AX.
مثال:
في التعليمات التالية يجري وضع القيمة
-5 11111011
)) في AL و 0 في AX ، ثم يجري
وضع إشارة القيمة-5 في AX وبما أن إشارة -5هي 1، فيجري وضع FFh في
AX
MOV AX,
0 ; AH = 0, AL = 0
MOV AL,
-5 ; AX = 000FBh (251)
CBW ; AX
= 0FFFBh (-5)
تُحول التعليمة CWD كلمة معطيات إلى كلمة مضاعفة، وذلك بتوسيع بت الإشارة لمحتوى السجل AX عبر السجل DX .
مثال: في التعليمات التالية يجري وضع القيمة 0 في DX و (FFFBh) – 5 في AX ثم يُوضع إشارة القيمة -5 في DX وبما أن إشارة -5هي 1، فيجري وضع FFFFh في
DX
MOV DX,
0 ; DX = 0
MOV AX,
0 ; AX = 0
MOV AX,
-5 ; DX AX = 0000h:FFFBh
CWD ; DX
AX = FFFFh:FFFBh
تعليمة المقارنة CMP
تطرح التعليمة CMP معامل المصدر (S)
من معامل الوجهة (D)
دون أن تغيّر هذه التعليمة محتوى المعاملين.
الراية التي لا تتأثر
|
العملية
|
التعليمة
|
CF,
AF, OF, PF, SF, ZF
|
تتغير قيم الرايات بحسب نتيجة (D)
– (S)
|
CMP D, S
|
لا تخزن هذه التعليمة ناتج الطرح، وإنما فقط ُتعدل قيم بعض الرايات تبعًا لناتج الطرح:
-
إذا كانت معاملات العملية CMP
بلا إشارة فإن:
1-
ZF=1 عندما (D) == (S)
2-
CF=1 عندما (D)
< (S)
-
إذا كانت المعاملات مع إشارة فإن:
1-
ZF=1
عندما (D) == (S)
2-
SF=OF عندما (S) < (D)
3-
SF≠OF عندما
(D) < (S)
مثال: يجري في التعليمات التالية وضع القيمة 5 في AL وفي BL ،ومن ثم يقارن محتوى BL مع AL ، وبما أنهما متساويين فتصبح
ZF تساوي 1 .
MOV AL,
5
MOV BL,
5
CMP AL,
BL ; AL = 5, ZF = 1 (so equal!)
تعليمات القفز
تقرأ وحدة التواجه التعليمات على نحو متتالٍ من مقتطع البرنامج المحدد بالسجلCS تزيد
وحدة التواجه السجل IP بعد قراءة كل تعليمة ليصبح مشيرًا إلى التعليمة التالية.
تحتوي مجموعة تعليمات المعالج
8086 /8088 على العديد من التعليمات التي
تمكننا من تغييرتتابع تنفيذ التعليمات الموجودة في ذاكرة البرنامج، نهتم هنا من بين هذه التعليمات بتعليمات
القفز.
تحتوي تعليمات المعالج8086/8088 على مجموعتين من تعليمات القفز:
مشروطة وغير مشروطة.
تعليمة القفز JMP غير شرطية
Unconditional JMP
تُستخدم
التعليمة JMP لِجَبر المعالج على جلب التعليمة التالية من المكان المحدد في التعليمة
نفسها.
ويمكن أن نميز بين ست أنواع من تعليمات القفز، وجميعها لها الشكل:
JMP TARGET
القفز القصير :Short
JMP
JMP Disp ; (8 bit)
وهو قفز مباشر نسبي، ُتستخدم عندما يكون القفز إلى تعليمة تقع ضمن مقتطع التعليمات الحالي،
ولا تبعد أكثر من +127
أو -128
بايت عن البايت الأولى من التعليمة التي تلي تعليمة JMP يجري حساب عنوان التعليمة الجديدة بجمع قيمة الإزاحة، المضمنة في التعليمة، إلى
IP
مثال: بفرض أن ذاكرة البرنامج تحوي التعليمات التالية:
000D ADD AL,[BX]
000F INC BX
0010 DEC CX
0011 JMP FA
0013 ….
فسوف
تُجبر التعليمة JMP FA المعالج على تنفيذ التعليمات ابتداءً من الموقع:
0013
h + FAh(-6) = 0Dh عوضًا عن الموقع
0013 h ، وبالتالي سوف ينفذ المعالج تاليًا التعليمة .ADD AL,[BX]
القفز القريب :Near
JMP
JMP Disp ; (16 bits)+ 32767
بخلاف تعليمة القفز القصير، يمكننا في القفز القريب القفز إلى موقع يبعد على الأكثر أو
- 32768 بايت عن البايت الأولى من التعليمة التي تلي تعليمة JMP .
عند كتابتك للبرنامج بلغة التجميع يمكنك أن تضع لصاقة Lable قبل التعليمة المراد القفز إليها، ولتكن هذه اللصاقة
START ، فيحسب المجمع الإزاحة بين البايت الأولى من التعليمة التي تلي
JMP و START آليًا.
عندها يمكنك أن تكتب التعليمة JMP START للقفز إلى الموقع START يمكننا إعادة كتاب التعليمات في المثال السابق على النحو التالي:
ATART:
ADD AL,[BX]
INC BX
DEC CX
JMP
START
….
قفز مباشر بين المقتطعات Direct Intersegment JMP
JMP Addr ; (32 bits)
تحتوي التعليمة على العنوان المنطقي للموقع الجديد 4-بايت؛ تحتوي البايت الأولى والثانية من Addr قيمة الانزياح بينما تحتوي البايت الثالثة والرابعة العنوان القاعدي للمقتطع.
في هذه التعليمة يجري تحميل IP بقيمة الانزياح وCS بالعنوان القاعدي للمقتطع الجديد. تستخدم هذه
التعليمة عندما تكون عملية القفز إلى تعليمة لا تقع ضمن مقتطع التعليمات الحالي، ويسمى هذا
القفز بالبعيد FAR
قفز غير مباشر ضمن مقتطع التعليمات نفسه Indirect Intrasegment
JMP
يحتاج هذا النوع من القفز إلى معامل ذاكرة بطول 16 -بت، حيث يجري تحميل
IP بقيمة
الانزياح المخزن في الموقع المحدد بالتعليمة.
مثال:
WordVar
DW TargetAddress
.
.
.
JMP word
ptr WordVar
تقفز هذه التعليمة إلى الانزياح الموجود في المتحول WordVar وليس إلى الموقع الذي يحوي العبارة WordVar .
يمكنك أن تستخدم أيًا من أنماط عنونة الذاكرة للوصول إلى قيمة الانزياح المخزنة في الذاكرة. فمثلا تنسخ التعليمة
JMP
Disp[BX] الكلمة من الموقع
DISP+BX في IP
.
قفز غير مباشر بالسجل Register Indirect JMP
يجري، في هذه الحالة، شحن IP بقيمة أحد سجلات المعالج العامة. على سبيل المثال، تقفز التعليمة JMP AX إلى الموقع المحدد بمحتوى السجل AX .
قفز غير مباشر بين المقتطعات Indirect Intersegment
JMP
وهي أيضًا تعليمة قفز بعيدة FAR JMP تتضمن هذه التعليمة معامل ذاكرة يحوي على مؤشر؛ يحوي المؤشر على العنوان المنطقي لعنوان التعليمة المراد القفز إليها. ينسخ المعالج المؤشر المخزن في الموقع المحدد بالتعليمة إلى .CS:IP
كل الشكر لكم ولكن كنا نطمع فى نسخ الموضوع لاستذكاره وقت الحاجة .
ردحذفشكرا
العفو ياغالي تستطيع تثبيت التطبيق ويبقى معاك الموضوع حتى ولو كنت غير متصل بالانترنت ستجد التطبيق في جوجل بلاي ...تحياتنا
حذفممكن احد يساعدني ب اعداد بحث اي موضوع يخص معالجات
ردحذف