Navigation

تعليمات المعالج 8088/ 8086 - لغة التجميع

لكل تعليمة من تعليمات المعالج 8088/ 8086 كود ثنائي مختلف يسمى كود الآلةMachine Code ، تُفك وحدة التنفيذ وُتحلل كود التعليمات ومن ثم تُنفذها واحدة تلوالأخرى. عند كتابتك برنامج بلغة التجمع فإنك لا تهتم مبدئيًا بكود التعليمات، ومع ذلك فإنمعرفتك بهذه الاكواد يجعلك تختار التعليمات في برنامجك على نحو أفضل، لأن طول كود التعليمات يمتد

 assembly language,assembly


ضمن دروس 8086 microprocessor شرح نواصل معكم ...

في التدوينات الماضية بعض تاريخ عائلات المعالجات CPU – computer interface ثم تحدثنا عن معالجات 4CISC و معالجات RISC وذكرنا الفرق بين معالجات 4CISC و معالجات RISC ومبدأ المعالجة التواردية
هذا روابط التدوينا السابقة


واليوم نأخذ : كود التعليمات 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


مشاركة

أضف تعليق:

0 comments: