تابعنا ع م التواصل

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



 ضمن دروس 8086 microprocessor شرح نواصل معكم ...
في التدوينات الماضية بعض تاريخ عائلات المعالجات CPU – computer interface ثم تحدثنا عن معالجات 4CISC و معالجات RISC وذكرنا الفرق بين معالجات 4CISC و معالجات RISC ومبدأ المعالجة التواردية 
هذا روابط التدوينا السابقة 
واليوم نأخذ :  كود التعليمات 8088/ 8086
 assembly language,assembly



لكل تعليمة من تعليمات المعالج 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-   SFOF عندما (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

 assembly language,assembly


القفز القصير :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

 assembly language,assembly

ليست هناك تعليقات :

إرسال تعليق

لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر

 

ابحث في المدونة

.

اكثر زيارة

رياضيات ثالث ثانوي اليمن - التفاضل

بسم الله الرحمن الرحيم  اولاً ارحب بكم زوار المدونة اسأل الله ان تكونوا في اتم الصحة والعافية اليوم وبعد ان انقطعت عن النشر لفتره اعود ...

تابعنا على الفيس بوك

تابعنا على جوجل بلس

المتابعون انضم اليهم

نموذج الاتصال

الاسم

بريد إلكتروني *

رسالة *

تابعنا

r

google pagerank checker by smallseotools.com Website Seo score checker