مدونة علم البرمجة والحاسوب
من حقك ان تتعلم اكثر

دورة الاسمبلي : الدرس السابع

 

مازلنا بتعليمات الأسمبلى ، هذا آخر درس بإذن الله فى تعليمات الأسمبلى الأساسيهقبل أن نبدأ بكتابة برامج بالأسمبلى من اليوم القادم ،،، و من ثم نكمل باقى تعليماتالتحكم و الدورات و باقى التعليمات المهمه ....

أتذكر أن آخر تعليماتتناولناها سويا الدرس السابق هى التعليمات المنطقيه ، و نسيت ذكر واحده فقط ،سأذكرها هنا أولا :

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
Read On

دورة الاسمبلي : الدرس السادس

 
 
 
السلام عليكماليوم السادس فى الأسمبلى،،سنكمل بإذن الله ما بدأناه فى اليوم السابق من سرد تعليمات الأسمبلى،ولق إستعرضنا فى اليوم السابق(الخامس) التعليمات الحسابيه مثل ADD,SUB,MUL,DIV

اليوم ، نبدأ بتعليمات عامه منها ما يستخدم بكثره ولقدحاولت قدر الإمكان أن أبتعد عن التعليمات التى لا تستخدم إطلاقا إلى فى حالات نادرهيمكن أن نتحدث عنها آن حدوثها ، المهم ... خذ نفس عميق ... ركز .... و Let's Go

MOV
-------
التعليمه تستخدمفى المساواة بدلا من "=" أو لتحميل مكان ما بالذاكره( سواء مسجلات أو عناوين ذاكرهرام ) بقيم أو بمحتويات ذاكره أخرى و من هنا نستنتج أن هذه التعليمه تحتاج إلى 2مدخل Argument المصدر و الجهه Source and destination . ويذكر أن هذه التعليمه أشهرتعليمات الأسمبلى و أكثرها إستخداما ،،أمثله :-

CODE

MOV AX,2345H ; AX = 2345H
MOV AL,34 ;AL = 34 Decimal
MOV [2312] , BX ;Memory location 2312 IN current data segment = BX Contents
MOV [SI] , 30 ;Memory location in SI Contents = 30 Decimal
.
.
.

لاحظ :-
---------

-
لا يمكن نقل محتويات ذاكره رام إلى محتويات ذاكره رامبنفس التعليمه ، أو أى تعليمه أخرى .... وذلك لأن البروسسور لا يستطيع القيامبالتعامل مع الذاكره أكثر من مره واحده لكل تعليمه أسمبلى (المقابله لها بلغةالأله) >>>



CODE

MOV [1000],[2000] ;Error



-
لا يمكن النقلبين مكانين مختلفى الحجم ، بمعنى أنه لا يمككنا أن ننقل ما بداخل مسجل بعرض 16 بتإلى مسجل آخر بعرض 32 بت أوالعكس .



CODE

MOV AX,AL ;Error
MOV AL,AX ;Error



-
عند النقل من مكان فىالذاكره إلى مسجل فإن البيانات التى تنتقل حقيقاً هى بيانات إبتدأءا من هذا العنوانو بعرض المسجل ، وخذ فى إعتبارك ان الذاكره مقسمه BYTES بمعنى أنك أردت تحميل AX وهو بعرض 32 بت بمحتويات الذاكره عند 1000 فإنه يبدأ بتحميل 4 بايت من عند هذاالعنوان .



CODE

MOV CX,[0110] ;CX = 4 BYTES Contents starts from address 0110 at current data segment



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NOP
-------
هذه التعليمه تعبر عن إضاعة الوقتو هى إختصار ل No Operation و هى تضيع و قت تعليمه قياسيه بحيث أنك إذا أردت عملإنتظار Delay فإن هذه التعليمه قياسيه و تستخدم و طبعا تستخدم فى دوره بحيث أنكمثلا لو اردت إنتظار ثانيه فإنك تكررها 100000 مره على الأقل ( لم احسبها و هىتتوقف على سرعة المعالج لديك ) .

أمثله :-

CODE

NOP ;Instruction tells the processor too do nothing this instruction cycle time
;and used to waste a small time according to cpu clocking speed



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HLT
-------
وتستخدم فى إنهاء عمل البروسسور ولست اقصد الجهاز نفسه ، يعنى إحتمال يهنج و إحتمال لا يفعل أى شىء ، يعنى هىإستخدامها كان زمان فى الإصدارات القديمه من اللغه ، أما فى الوقت الحالى ، فإنهتوجد تعليمات أخرى تخبر المعالج بإيقاف البرنامج أو إنهاءه وما شابه ...

أمثله:-

CODE

HLT ;No commant



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INC
------
تستخدم فى عمل زياده للمعطى بمقدار 1 ، وهى تقابل عملية جمع واح + القيمه الى بداخل المعطى و من ثم تخزين القيمهالجديده .

أمثله :-

CODE

INC AX ;AX = AX + 1 === ADD AX,1
INC [BX] ;[BX] = [BX] + 1 === ADD [BX] , 1
INC CX ;CX = CX + 1



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DEC
-------
وهى عكس سابقتها و تستخدم فىإنقاص المعطى Operand بواحد . و هى تقابل التعليمه SUB .....,1 و بالطبع فإن المكانالخالى يتم وضع ال Operand

أمثله :-

CODE

DEC [SI] ;[SI] = [SI] -1
DEC AX ;AX = AX - 1 === SUB AX,1
DEX CX



-
عند إستخدام هذهالتعليمه مع مسجل أو مكان بالذاكره يحتوى على 0 فإنها تدخل فى النطاق السالب بعده ويتم تغيير علم الإشاره SIGN Flag فى مسجل الأعلام.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NEG
--------
وهى تستخدم فى تغيير غشارةالمعطى Operand ، وهى إختصار للكلمه الإنجلييزيه Negiate بمعنى جعل القيمه سالبه وطبعا تعمل مع جميه القيم السالبه لتجعلها موجبه و الموجبه التى تحلها إلى سالبهأمثله :-

CODE

MOV AX,100 ;AX = 100
NEG AX ;AX = FF00 = -100
NEG AX ;AX = 100 Again



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
سننتقلالأن إلى تعليمات الأسمبلى المنطقيه Logic Instructions

AND
-------
وهى تقوم بعملية "و" المنطقيه AND Gate بين 2 Operrand ومن ثم تخزن القيمه فى ألأول كالعاده ،،،أمثله :-

CODE

MOV AX,10 ;AX = 10
MOV BX,5 ;BX = 5
AND AX,BX ;AX = 0 Because that 10 (1010) and 5(0101) = 0000 :-)

تستخدم هذهالتعليمه فى عمليه تسمى Masking ،

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OR
-----
وهذه التعليمه كما أستنتجت فهىتعبلر عن العمليه المنطقيه "أو" OR Gate و لها نفس شروط ال AND ،أمثله :-

CODE

OR AX,CX
OR [1020],CL
OR AX,0000



------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XOR
-------
هذه التعليمه تستخدم فى العمليهالمنطقيه XOR ، كما سنرى فىالأمثله :-



CODE

MOV AX,1000 ;AX = 1000
XOR AX , 2000 ;AX = 1080
XOR AX,2000 ;AX = 1000

لاحظ أنهذهالتعليمه تستخدم فى التشفير الأحادى Single Encyreption لأنه كما لاحظنا فى المثالالسابق ، فإننا عملنا تشفير للقيمه بداخل المسجل AX فإستخدمنا المفتاح (القميهالأخرى التى تستخدم فى فك التشفير أو إرجاع القيمه الأصليه ثانيا) و هى 2000ومن ثم عند القيام بنفس العمليه مع نفس القيمه فإنه يتم إرجاع القيمه الأصليه
"
لقد صممت برنامج بسيك بالأسمبلى يقوم بتشفير نصوص مدخله من قبل المستخدم و منثم يعيد فكها ثانيا بإستخدام مفتاح ثابت بداخل البرنامج و لرؤية البرنامج و السورسكود الخاص به ، يمكنك الإطلاع على الدرس التاسع فى موقعى http://ezzuz.tk " !!!!!!!!

-
لا حظ أيضاأنالتعليمات المنطقيه Logic Instructions تستخدم فى عمليات البت Bit Operation وكمانعلم أن البت هى اصغر وحدة تخزين بالحاسب ، ومن ثم تستطيع تسخير هذه التعليماتلمساعدتك فى تكوين و التعامل مع المتغيرات المنطقيه Boolean Variables والتى تحتملقيمتين فقط أما صح أو خطأ True or False ،،،
Read On

دورة الاسمبلي : الدرس الخامس

 
 
سنبدأ بتعليمات وأوامر الأسمبلى ،،،
التعليمات الحسابيه Arithmatic Instructions
-------------------------------------------------------
1 - الجمع :-
--------------
التعليمه : Add
وتأخذ فىالحاله العاديه 2 وسيط ، المصدر و الهدف وهى تكافىء === المصدر = المصدر + الهدف
ADD Source , Destination === Source = Source + Destination

أمثله :

CODE


; A2H + 20H = C2
MOV AX , A2; 1st Number
ADD AX , 20; 2nd Num

نأخذ فىإعتبارنا أن العدد كون بالنظام السادس عشر إفتراضيا حالما يتم تغييره إلى عشرى أوثنائىبمعنى فى المثال السابق أول خطوه نقوم بتحميل A2 بالنظام السادس عشر إلىالمسجل AX
وفى الخطوه الثانيه قمنا بجمع على ما بداخل المسجل الرقم السادس عشر A2


مثال آخر:

CODE
[/u]

; A111 + 2302 + 1203 + 4099 = 116AF
; OF COURCE AX IS 16 BIT RWG. SO IT WILL CONTAINS 16AF AFTER THE OPERATION
MOV AX , A111
ADD AX , 2302
ADD AX , 1203
ADD AX , 4099
; AX = 16AF AND CARRY FLAG IS BEEN SET

[U]

مثال آخر ( بإستخدام الذاكره ) : نضيف محتويات الذاكره بالعنوان [A200] + [3409] >>>>


CODE

MOV AX , [A200]
ADD AX , [3409]

ملاحظه :يمكن القيام بكل هذه الأمثله على برنامج ال Debug والذى تم شرحه فى الدرسالسابق ،،،

-------------------------------------------------------------------------------------------------------------------------
2 - الطرح :-
-------------
التعليمه : SUB

بالظبط نفس تعليمة الجمعمثال :-نطرحمحتويات المسجل CX من محتويات المسجل SI


CODE

SUB SI , CX

مثال آخر : نطرح محتويات المكان فى الذاكره المعنون بالعنوان الموجود فىالمسجل BX من FFFF


CODE

MOV AX , FFFF
SUB AX , [BX]



-------------------------------------------------------------------------------------------------------------------------
3 - الضرب :-
---------------
التعليمه : MUL

يتم ضرب أى رقمين فى لغة الأسمبلى فى ثلاث أنظم ألى الآن :- الأول : ال8-بت (البايت) :-يتم وضع إحدى قيمالضرب فى AL و الآخر فى أى ريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كودالضرب الذى هو فى حالتنا هنا [MUL] للأرقام الغير محددة الإشاره . و [IMUL] للأرقامالمحددة الإشاره .وتوضع النتيجه فى ال AX .

مثال :للحصول على حاصل ضرب 120 * 30 نقوم بالأتى :-



CODE
;----------------------------------
MOV CL,30D
MOV AL,120D
MUL CL
MOV [1000H] , AX ;
لتخزين الناتج فى الذاكره المعنونه ب1000 بالنظام السادس عشر
;----------------------------------
الثانى : ال16-بت (الكلمه) :-يتم وضع إحدى القيم فى AX و ألآخرفى أىريجستر آخر له نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه فى DX:AX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال AX و الجزء ال High سيوضع فى ال DX .

مثال : للحصول على حاصل ضرب 20000 * 2365 سنقوم بالآتى :-



CODE
;----------------------------------
MOV CX,2365D
MOV AX,20000D MUL CX
MOV [1000H],AX ;
تخزين الجزء الأول فى المكان فى الذاكره المعنون ب 1000
MOV [1001H],DX ;
تخزين الجزء الثانى فى المكان فى الذاكره الذى يلى المكان السابق
;----------------------------------
الثالث : ال32 بت :- يتم وضع إحدى القيم فى EAX و ألآخرفى أى ريجستر آخرله نفس الحجم أو مكان فى الذاكره بجانب كود الضرب و توضع النتيجه(64 بت) فى EDX:EAX . و هذا معناه أن الجزء ال Low من ناتج القسمه سيخزن فى ال EAX و الجزء ال High سيوضع فى ال EDX .

بالطبع نحن نتعامل كبدايه على الأنظمه إلى ال 16 بت ،،،


-------------------------------------------------------------------------------------------------------------------------
4 - القسمه :-
---------------
التعليمه : DIV

أيضاً تتم فى نفس النظم السابقه والخاصه بالضرب :-

الأول : ال8بت (بايت) :- يتم و ضع المقسوم فى AX و المقسوم عليه فى أىريجستر حجمه بايت مثل BL,CL,DL,... أو مكان فى الذاكره لها حجم بايت مثل BYTE PTR [1234H] , BYTE PTR [BX] .و يوضع ناتج القسمه فى AL و باقى القسمه فى AH بإستخدام [DIV] .
لاحظ:- أنه فى حالة قسمة الأرقامالمحددة الإشاره بإستخدام [IDIV]تكون إشارة ناتج القسمه هى الإشاره العاديه فى هذهالحالات . وتكون إشارة خارج القسمه Remender دائماً موجبه و صحيحه Integer.

لاحظ:-كل القيم هنا 8-بت إذاً , لابد من تحويل القيمه ال 8-بت للمقسوم إلى 16-بت ليمكن نقلها ألى AX ويتم ذلك فى حالة القيم غير محددةالإشاره بمسح ال AH ليكون كله أصفار و تكون قيمة المقسوم 16-بت . أما فى حالة القيممحددة الإشاره يتم ذلك عن طريق كود [CBW] المسئول عن تحويل البايت(8-بت) إلى كلمه (16-بت) لل AX فقط.

مثال :- للحصول على ناتجقسمة(+16) على (-5) يمكننا عمل الأتى :-



CODE
;----------------------------------
MOV AL,16D
CBW
MOV BL,5D
NEG BL
IDIV BL
MOV PYTE PTR[1000H] , AL
MOV PYTE PTR[2000H] , AH
;----------------------------------
وهناتم نقل المقسوم إلى AL وتم عمل مد له عن طريق [CBW] . ثم تم نقل قيمة المقسوم عليهإلى BL بعد وضع الإشاره السالبه عن طريق [NEG]. إذا القيم جاهزه لعملية القسمه ويتمحفظ الناتج فى الذاكرهبعدها.


--------------------------------------------------------------------------------

باقىالنظم كما سبق من الممكن أن تقوم بإستنتاجها .


-------------------------------------------------------------------------------------------------------------------------
ملاحظه أخيره :إستخدمنا التعليمه MOV وهى مسئوله - كما توقعتم - على تحميل المسجلات أو أماكن الذاكره بقيم معينه أو محتويات مسجل أوأى قيم أخرى ،،
Read On

دورة الاسمبلي : الدرس الرابع

 
سنتناولالأتى فى هذا الدرس :-
---------------------------------
1 -
نظم العنونه Addressing Modes
2 -
تعليمات الأسمبلى Assemply Instructions


ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــ

1 - نظم العنونه Addressing Modes :-
-------------------------------------------------
قلناأننا نتعامل مباشرا مع الذاكره و أماكنها المختلفه فيجب أن نتعرف على ما هى نظمعنونة الذاكره و التى تمكن لنا وصولا مضمونا إلى القيم الأخيره (المستهدفه) Operands ،معلومات عامه :-
-------------------
1 -
الذاكره تكونمقسمه تخيليا (عن طريق نظام التشغيل و البروسسور) إلى أجزاء تسمى مقاطع (Segments) . هذه المقاطع تعمل كأقسام بيانات وهى أجزاء محددة الطول ب 64 كيلو بايت ، كل مقطعله رقمه ( عنوانه ) و يمكن الوصول إلى مقطع محدد عن طريق مسجلات المقاطع التى تمذكرها فى الدرس السابق ، عند أى إستخدام للذاكره ، يجب تحديد المقطع أولا عن طريق Data Segment أو أى مسجل مقاطع آخر ومن ثم تحديد أى مكان داخل هذا المقطع عن طريقمسجل يحمل العنوان المراد وهو بالطبع من 0 إلى 65535 ومن هنا يتم تحديد مكانالبيانات بالظبط ،ممكن أن تتخيلها بطريقه أخر : تخيل أن مدينه معينه وأريدالوصول إلى شخص ما فيها أو منزل بها ، المدينه مقسمه إلى شوارع ، كل شارع برقم معينبالترتيب و داخل كل شارع توجد منازل بأرقام مرتبه أيضا من 1 إلى 100 منزل ، كنتأريد الوصول إلى المنزل 45 فى الشارع ال 20 . عندها سأحاول البحث عن الشارع أولاومن ثم البحث داخله عن المنزل ، نفس طريقة العمل بالظبط يتم التعامل بها فى إستخدامالذاكره و تخزين و إخراج البيانات منها .

2 -
عند تشغيل أى برنامج ، فإننظام التشغيل يقوم بتحميل البرنامج فى الذاكره ..أين و كم مقطع سيترك للبرنامج؟؟فى الحقيقه ، كل برنامج يتم تشغيله على الأقل يأخذ 2 مقطع ، مقطع للشفره Code Segment يتم وضع عنوان هذا المقطع داخل CS مادام البرنامج يتم العمل داخله ،والمقطع الآخر يوضع به البيانات لذلك سمى ب Data Segment ويوضع عنوان هذا المقطع فى DS ،كل برنامج يكون مكتوب به عدد المقاطع التى يحتاجها أولا ، هذا لخدمةالبرامج الكبيرة و التى تكون حجمها أكبر من وضعها فى مقطع واحد ، يتم فعليا تحديدحجم البرنامج فى أوله عن طريق تحديد نوعه ما بين صغير ، كبير ، متوسط ، كبير جدا .

أنواع العنونه :-
-----------------
1 -
عنونه فعليه (حقيقيه) Phsical Addressing :-
-------------------------------------------------------------
وهىالعنونه الحقيقيه التى يتم التعامل بها بين داخل الذاكره ، بمعنى لو أن الذاكره 128ميجا ، فإنها ستكون مرتبه ترتيبا تصاعديا من المكان صفر إلى المكان 128 ميجا ،نظام الهارد وير الفعلى على شريحة الذاكره يعمل بهذا النوع ( طبيعياً) .
مثال بالنظام السادس عشر ، على أساس الذاكره مثلا 1 ميجا ، فإنها بها مليونمكان يتم تحديدهم Decoding ب عشرين مكان ثنائى AF67B .

2 -
عنونه تخيليه Logical Addressing :-
----------------------------------------------------
وهو النوع الذىتكلمت عنه بأعلى ، الذاكره مقسمه إلى أقسام Segments و كل قسم به محتوياته منالمكان Offset صفر إلى المكان 64 كيلو ، وهذا النظام يتم التعامل به من جانبالبروسسور مع نظام التشغيل و البرامج الأخرى و من ثم يكون المعالج مسؤلأ على تحويلهذا العنوان إلى العنوان الفعلى عن طريق عمليه حسابيه بسيطه وهى عن طريق
[
أضربعنوان المقطع فى 10 و من ثم أضيف عليه ال Offset = العنوان الفعلى ]
مثال : [A100 : 9C00] المكان الأول هو عنوان المقطع و الثانى هو ال Offset داخل هذا المقطع، يتم التعامل بهذا النظام فعليا فى الأسمبلى و بهذه الطريقه بالظبط .

أنظمةعنونة وسائط التخزين المختلفه والوصول إلى القيم المستهدفه Operand (مسجلات و ذاكرهو ... ) :-
-------------------------------------------------------------------------------------------------------------------
1 - Impiled Mode :- (
الصراحه الترجمه العربيه مخرفه معايا شويا ، نأسف لهذا العطل .. )
----------------------------
وهو لا يتم ذكر بهالعنوان و تكون التعليمه مفهومه للبروسسور بدون أى براميتارات إضافيه ،مثال : HLT هذه التعليمه سنتعرض لها فى جزء التعليمات .

2 - Immediate Mode :-
--------------------------------
ويتم ذكر العنوان صراحاً به ،مثال: ADD AX,1000B وهذه التعليمه ذكر بها القيمه صراحاً التى سيتم التعامل بها .

3 - Register mode :-
------------------------------
فى هذا النظامتكون القيمه المرادالتعامل معها فى مسجل Register ما ، لذلك يتم ذكر إسم المسجلبجانب التعليمه .
مثال : MOV AX,BX وهنا سيتم التعامل مع المسجلان المذكوران .

4 - Direct memory mode :-
-----------------------------------------
وهنا يتم ذكر العنوان فىالذاكره الذى يحتوى القيمه المستهدفه .
مثال : ADD AX,[1000:200A] حيث أننا نكتبالعنوان الذى يوجد به القيمه المستهدفه داخل التعليمه كما هو موضح .

5 - Indirect memory mode :-
-------------------------------------------
وهنايكون عنوان القيمه فى الذاكره موجود بداخل مسجل و فيها يأخذ المعالج القيمه التى فىالمسجل و تكون هى عنوان الذاكره الذى يحتوى على القيمه .
مثال : add BX,[SI] .

ملاحظه : المسجلات التى من الممكن إستخدامها فى هذا النظام 4 وهما BX , SI , BP , DI

ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــــــــــــــــــــــــــــــ ــ

1 تعليمات الأسمبلى Assemply Instructions :-
-------------------------------------------------
تتكونالتعليمه الواحدة في الأسمبلي من تمثيل بسيط بالأحرف الأنجليزيه يقابله بالأرقامتعليمة لغة آله ، تتكون كل تعليمة من ممايلي : أولاُ جزء الأمر وهو أمر يدل على نوعالعملية المطلوبة مثل ADD (للجمع) ، الجزء الثاني هو الوسائط علماً بأن بعضالتعليمات لايأخذ وسائط والجزء الآخر وسيطة واحدة فقط والبعض الآخر أكثر من ذلك ،تحدد هذه الوسائط الشئ الذي سيعمل عليه الأمر ،فالأمر ADD لوحده عقيم لايدل علىشئ لكن الأمر ADD AX,5 يدل على جمع الرقم 5 مع القيمة الموجودة في المسجل AX ويوضحالمثال التالي بعض الأوامر
CODE
clc ; فقط أمر بدون وسائط
dec ax ;
وسيطة واحدة فقط
mov cx,dx;
وسيطتين
لاحظ أن أي نص في شفرةالأسمبلي يأتي بعد الفاصلة المنقوطة هو مجرد تعليقالوسائط ممكن تكونعدة أنواع :-
-----------------------------------
1.
بيانات فورية (مباشرة) (أي ثابته) مثال : 10 / 30 / 'a'

2.
مسجل مثال : AX / EAX / BL

3.
موقع ذاكره (يتم تحديده عن طريق العنوان) مثال : [200] / [bx] / [100]

4.
متغير (وهو نفس السابق لكن بدل أن تحفظ أو تحسب العنوان يدوياً يقومالأسمبلر بأستبدال المتغير برقم يدل على عنوانه ) مثال : count / VAR1 / INTVAL / STR1


مدخل الى الديبغر Debugge :-
------------------------------------
ها قد وصلنا الى واحد من أقوىالبرامج المبيته في النظام فبواسطة اليبغ تستطيع عمل أشياء عجيبه وغريبه ، حسناًشغل الدوس وعند محث الأوامر أطبع debug ثم أنتر وستظهر لك علامه '-' ليل علىأستعداد الديبغر على أستقبال أوامرك .

الأن دعنا نكتب هذا البرنامجالصغير

CODE
mov ax,2 ; نقل العدد 2 كمعلومة مباشرة الى المسجل أي-أكس
mov bx,3 ;
نقل العدد 3 كمعلومة مباشرة الى المسجل بي-اكس
add ax,bx ;
جمع أي-اكي مع بي-اكس مع وضع الجواب في أي-اكس / أي-اكس=أي-أكس + بي-أكس
كيف تقوم بأذخال هذاالكود :-
--------------------------------
1.
عند المحث '-' أدخل a100 أيأننا سنبدأ نكتب الكود من العنوان 100 ثم أضغط أنتر بالطبع
2.
الآن أدخل كلتعليميه ثم أضغط أنتر ومع نهاية التعليمية الأخيرة أضغط أنتر مرتين .

الأنقم بأدخال الرمز R ثم أنتر لترى حالة المسجلاتلاحظ أن المسجل AX يساوي صفروسترى أيضاَ ظهور التعليميه MOV ax,0002 وهي التعليميه التي عليها الدور في التنفيذوليس المعلومة المنفذه ، الآن قم بطباعة الرمز T ثم أنتر لتنفيذ التعليميه التيعليها الدور هنا هي MOV AX,0002 سترى الآن أن المسجل AX أصبح يساوي 2 وهذا مانتوقعهبالضبط وسترى أيضاً التعليميع التي عليها دور التنفيذ وهي MOV BX,0003 أدخل الرمز T ثم أنتر لتنفيذها لترى أن المسجل BX أصبح يساوي 3 وسترى أيضاً التعليميه التي عليهاالدور في التنفيذ وهي ADD AX,BX قم بأدخال الرمز T لتنفيذها ولاحظ كيف أن المسجل AX أصبحت قيمته مجموع العددين 2+3 وهو خمسة بينما بقى المسجل BX يساوي 3 .

الآنبعدما عرفت كيف تكتب كود بسيط أخرج من الديبغر بالضغط على Q ثم أدخل مرة أخرىبكتابة الأمر Debug حتى تصفر المسجلات مرة أخرى أدخل التعليميه A100 ثم جرب تكتبكود من عندك ومع كل نهاية تعليميه أضغط أنتر وفي نهاية التعليميه الأخيرة أضغط أنترمرتين
(
ملاحظة لترى شفرتك بلغة الآله والأسمبلي أدخل الرمز U ثم أنتر مباشرةبعد إدخال الكود وقبل إدخال الرمز R )
أضغط R ثم أنتر لترى المسجلات قبل تنفيذأي عملية ولترى التعليميه التي عليها الدور في التنفيذ أضغط T ثم أنتر لتنفذالتعليميه وترى النتائج والتعليميه التي بعدها وهكذا ولاتنسى أذا أردت أن تدخل كودجديد الخروج والعودة مرة أخرى الى الديبغر لتصفر المسجلات والذاكره
Read On

من انا ؟