Professional Documents
Culture Documents
اﻟﺪﻟﯿﻞ اﻟﻌﻤﻠﻲ
اﻋﺪاد
د .ﯾﻮﺳﻒ اﺑﻮزر
3
1.1ﺗﻤﮭﯿﺪ ____________________________________________________________ 35
2.1أھﺪاف اﻟﻮﺣﺪة _______________________________________________________ 35
3.1أﻗﺴﺎم اﻟﻮﺣﺪة _______________________________________________________ 35
4.1ﻣﺎ ﺗﺤﺘﺎج إﻟﯿﮫ ﻟﺪراﺳﺔ اﻟﻮﺣﺪة ________________________________ _____________ 36
.1اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﯾﻤﺮ ﺑﮭﺎ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ _________________________ 36
1.1اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ :ادﺧﺎل اﻟﺒﺮﻧﺎﻣﺞ 37 _ ________________________________ Program input
.2.1اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻧﯿﺔ :ﺗﺮﺟﻤﺔ اﻟﺒﺮﻧﺎﻣﺞ 37 ________________________ Program Compilation
.3.1اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻟﺜﺔ :اﻟﺮﺑﻂ واﻟﺘﺤﺮﯾﺮ38 _______________________________ Program Linking
.4.1اﻟﻤﺮﺣﻠﺔ اﻟﺮاﺑﻌﺔ :ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ38 ____________________________ ( (Program Execution
.2اﻟﺒﺮاﻣﺞ اﻟﻼزﻣﺔ اﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ ______________________________________ 39
.3ﺧﻄﻮات ﺗﻨﻔﯿﺬ ﺑﺮاﻣﺞ اﻟﺘﺠﻤﯿﻊ أﺳﻤﺒﻠﻲ _______________________________________ 39
.4اﻟﻤﺜﺎل اﻻول _______________________________________________________ 40
اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ _____________________________________ 46
.1ﻣﻘﺪﻣﺔ ___________________________________________________________ 47
.2أھﺪاف اﻟﻮﺣﺪة ______________________________________________________ 47
.3اﻟﻤﺜﺎل اﻷول 47 ______________________________________________ ADD32.asm :
اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ)50 _____________________________________________ (nxchang.asm
ﻋﻤﻠﯿﺎت اﻟﺘﺤﻜﻢ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ ________________________________________ 55
.1ﻣﻘﺪﻣﺔ ___________________________________________________________ 56
.2اﻟﻤﺜﺎل اﻷول )56 _____________________________________________ (compXY.as
.3اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ )61 _____________________________________________ (ALby4.asm
.4اﻟﻤﺜﺎل اﻟﺜﺎﻟﺚ )63 _____________________________________________ (eono.asm
.5اﻟﻤﺜﺎل اﻟﺮاﺑﻊ )65 ________________________________________________ (2s.asm
.6اﻟﻤﺜﺎل اﻟﺨﺎﻣﺲ )69 _____________________________________________ (nooc.asm
ﺑﺮﻣﺠﺔ ﻋﻤﻠﯿﺎت اﻹدﺧﺎل واﻹﺧﺮاج ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ ____________________________ 73
.1ﻣﻘﺪﻣﺔ ___________________________________________________________ 74
.2أھﺪاف اﻟﻮﺣﺪة ______________________________________________________ 74
.3اﻟﻤﺜﺎل اﻷول _______________________________________________________ 74
4
.4اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ )75 _______________________________________________ (cls.asm
.5اﻟﻤﺜﺎل اﻟﺜﺎﻟﺚ )77 ______________________________________________ (3-19.asm
.6اﻟﻤﺜﺎل )79 _____________________________________________ ( border.asm) (4
.7اﻟﻤﺜﺎل )80 ________________________________________________ (blue.asm) (5
اﻟﻤﺎﻛﺮو واﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ ____________________________________ 87
.1ﻣﻘﺪﻣﺔ ___________________________________________________________ 88
.2اﻟﻤﺜﺎل اﻷول )88 ____________________________________________ (mactoc.asm
.3اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ )91 ___________________________________________ (REVERSE.asm
5
اﻟوﺤـدة اﻻوﻟﻰ
6
.1اﻟﻤﻘدﻤﺔ
1.1ﺘﻤﻬﯿد
ﻋزﯿزي اﻟطﺎﻟب ،أﻫﻼً ﺒك إﻟﻰ اﻟوﺤدة اﻷوﻟﻰ ﻤن اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻟﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ وﻫﻲ
ﺒﻌﻨوان ﻤﻘدﻤﺔ اﻟﻰ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ .Debug
ﺘﻬدف ﻫذﻩ اﻟوﺤدة إﻟﻰ إﻋطﺎﺌك ﻤﻌﻠوﻤﺎت أﺴﺎﺴﯿﺔ ﻓﯿﻤﺎ ﯿﺘﻌﻠق ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ Debugﻤن ﺤﯿث اﻟﻌرﯿف
واﻟﺘﻌﺎﻤل ﻤﻊ اﻷواﻤر واﻟﺘﻌﻠﯿﻤﺎت ﻟﻤﻌﺎﻟﺠﺔ اﻟﻤﺴﺠﻼت واﻟذاﻛرة ﻤن ﺤﯿث اﺴﺘﻌراﻀﻬﺎ واﻟﺘﺨزﯿن ﺒﻬﺎ وﻛﯿﻔﯿﺔ ﻛﺘﺎﺒﺔ وﺘﻨﻔﯿذ
ﺒراﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ،وﺘﺘﺒﻊ ﺘﻌﻠﯿﻤﺎت ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠر وأﺨﯿ ار اﻟوﺼول إﻟﻰ اﻟذاﻛرة وﻋرض ﻤﺤﺘوﯿﺎﺘﻬﺎ واﻟﺘﻌدﯿل
ﻋﻠﯿﻬﺎ
وﻗد ﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ﺒﺎﻟﻌدﯿد ﻤن اﻷﻤﺜﻠﺔ اﻟﺘوﻀﯿﺤﯿﺔ ،واﻟﺘدرﯿﺒﺎت ،إﻀﺎﻓﺔ إﻟﻰ ﺒﻌض أﺴﺌﻠﺔ اﻟﺘﻘوﯿم اﻟذاﺘﻲ واﻹﺸﻛﺎل
اﻟﺘﻲ ﺘوﻀﺢ ﺒﻌض اﻟﻤﻔﺎﻫﯿم.
ﻤرة أﺨرى ﻨرﺤب ﺒك ﻓﻲ ﻫذﻩ اﻟوﺤدة ،آﻤﻠﯿن أن ﺘﺴﺘﻤﺘﻊ ﺒدراﺴﺘك ﻟﻠﻤﺎدة اﻟﺘﻲ ﻨﻌرﻀﻬﺎ ﻟك ﻓﻲ ﻫذﻩ اﻟوﺤدة.
2.1أﻫداف اﻟوﺤدة
ﯿﻨﺘظر ﻤﻨك ،ﻋزﯿزي اﻟطﺎﻟب ،ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ:
7
3.1أﻗﺴﺎم اﻟوﺤدة
ﺘﺘﻛون ﻫذﻩ اﻟوﺤدة ﻤن ﺴﺘﺔ أﻗﺴﺎم رﺌﯿﺴﺔ .ﻓﺎﻟﻘﺴم اﻷول ﯿﻨﺎﻗش ﻤﻘدﻤﺔ ﻟﻠوﺤدة ،اﻤﺎ اﻟﻘﺴم اﻟﺜﺎﻨﻲ ﻓﯿﻨﺎﻗش
ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ وطرق ﺘﺸﻐﯿﻠﻪ واﻟﺘﻌﺎﻤل ﻤﻊ اﻟﻤﺴﺠﻼت واﻟذاﻛرة وﻛﯿﻔﯿﺔ ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ .اﻟﻘﺴم
اﻟﺜﺎﻟث ﻓﯿوﻀﺢ ﻛﯿﻔﯿﺔ ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ .ﻓﻲ اﻟﻘﺴم اﻟراﺒﻊ ﺘم ﻤﻨﺎﻗﺸﺔ ﺘﺘﺒﻊ ﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ ﻟﻐﺔ
اﺨﯿر اﻟﻘﺴم اﻟﺴﺎدس ﯿﻨﺎﻗش أواﻤر أﺨرى
اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ .اﻟﻘﺴم اﻟﺨﺎﻤس ﯿﻨﺎﻗش أواﻤر اﻟﺘﻌﺎﻤل ﻤﻊ اﻟذاﻛرة و ا
ﻟﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ.
ﻟﻘد ﺘﻀﻤﻨت ﻫذﻩ اﻟوﺤدة اﻟﻌدﯿد ﻤن اﻟﻤﻔﺎﻫﯿم اﻷﺴﺎﺴﯿﺔ ،وﺒذﻟك ﻓﺎن طﺒﯿﻌﺔ اﻟﻤﺎدة اﻟﻤﻌروﻀﺔ ،ﻋزﯿزي اﻟطﺎﻟب،
ﺘﺤﺘﺎج إﻟﻰ ﺠو ﻫﺎدئ ﺨﺎص وﻤرﯿﺢ ﺤﺘﻰ ﺘﺴﺘطﯿﻊ اﻟﺘرﻛﯿز ﻋﻠﻰ اﻟﻤﻔﺎﻫﯿم اﻟﻤﻌطﺎة ،وﺘﺴﺘوﻋﺒﻬﺎ ﺒﺎﻟﺸﻛل اﻟﻤﻨﺎﺴب .وﻛل
ﻤﺎ ﺘﺤﺘﺎﺠﻪ ﺒﻌد ذﻟك ﺒﻌض اﻟﻘرطﺎﺴﯿﺔ ﻛﻘﻠم رﺼﺎص وورق أﺒﯿض ﻟﺘﻘوم ﺒﺘطﺒﯿق ﺒﻌض اﻟﻤﻔﺎﻫﯿم وﺘﺤل اﻷﺴﺌﻠﺔ واﻟﺘدرﯿﺒﺎت
اﻟﻤﻌطﺎة ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة .وﯿﻤﻛﻨك ﻋزﯿزي اﻟطﺎﻟب اﺴﺘﺨدام اﻻﻨﺘرﻨت ﻟﻠﺒﺤث ﻋن ﺒﻌض اﻟﻤﻔﺎﻫﯿم واﻟﻤواﻀﯿﻊ اﻟﻤﺘﻌﻠﻘﺔ
ﺒرﻨﺎﻤﺞ .Debugﻛﻤﺎ ان ﻫﻨﺎك ﺤﺎﺠﺔ اﻟﻰ:
.1ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت اﻟﻤﻌﺎﻟﺞ 8086وﻤﺴﺠﻼﺘﻪ اﻟرﺌﯿﺴﯿﺔ) .راﺠﻊ اﻟوﺤدة اﻟﺜﺎﻨﯿﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(.
.2ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ) .راﺠﻊ اﻟوﺤدة اﻟراﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(.
ﻤﺼﻠﺢ debugﺘﺸﯿر إﻟﻰ ﻋﻤﻠﯿﺔ ﺘﺘﺒﻊ اﻷﺨطﺎء ﻓﻲ ﺒراﻤﺞ اﻟﺤﺎﺴوب وﺘﺼﺤﯿﺤﻬﺎ ،وﻛل ﻟﻐﺔ ﺒرﻤﺠﺔ ﺘوﻓر ﻤﺤرر
ﻻﻛﺘﺸﺎف وﺘﺼﺤﯿﺢ اﻷﺨطﺎء
ﻤﺎ ﻫو ﺒرﻨﺎﻤﺞ debuggerاﻟﻤﻨﻘﺢ؟ ﻫو ﺒرﻨﺎﻤﺞ ﯿﺘﯿﺢ ﻟك ﻋرض اﻟﻤﺴﺠﻼت واﻟﻤﻛدس واﻷواﻤر ﺒﻠﻐﺔ اﻻﺴﻤﺒﻠﻲ
وأﺸﯿﺎء أﺨرى ﻛﺜﯿرة .وﯿﻘوم ﻛذﻟك ﺒﻌﻤل ﺘﺘﺒﻊ tracingﻟﻠﺒرﻨﺎﻤﺞ وذﻟك ﻻﻛﺘﺸﺎف اﻷﺨطﺎء ان وﺠدت.
ﺒرﻨﺎﻤﺞ Debugﻫو إﺤدى اﻷدوات اﻟﺒرﻤﺠﯿﺔ اﻟﻤﺴﺘﺨدﻤﺔ ﻟﺘﻨﻔﯿذ وﺘﺘﺒﻊ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ .وﻫو ﻤﺨﺼص ﻟﻠﻤﻌﺎﻟﺞ
.Intel-8086
8
ﺒرﻨﺎﻤﺞ Debugﻤوﺠود ﻀﻤن ﻏﺎﻟﺒﯿﺔ أﻨظﻤﺔ ﺘﺸﻐﯿل DOSو .WINDOWSﺒﺎﻹﻀﺎﻓﺔ إﻟﻰ اﻤﻛﺎﻨﯿﺔ ﻛﺘﺎﺒﺔ
وﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ ،ﯿﺤﺘوي ﺒرﻨﺎﻤﺞ Debugﻋﻠﻰ اﻟﻌدﯿد ﻤن اﻻواﻤر اﻟﺘﻲ ﯿﻤﻛن اﺴﺘﺨداﻤﻬﺎ ﻟﻠوﺼول اﻟﻰ
اﻟذاﻛرة وﻋرض ﻤﺤﺘواﻫﺎ واﻟﻘراءة ﻤﻨﻬﺎ او اﻟﻛﺘﺎﺒﺔ ﻋﻠﯿﻬﺎ ،ﺒﺎﻹﻀﺎﻓﺔ اﻟﻰ اﻤﻛﺎﻨﯿﺔ ﻋرض وﺘﻌدﯿل ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ.
ﺴﻨﺒدأ ﻓﻲ ﻫذا اﻟﺸرح ﻋزﯿزي اﻟطﺎﻟب ﺒﺘوﻀﯿﺢ ﻛﯿﻔﯿﺔ ﺘﺸﻐﯿل ﺒرﻨﺎﻤﺞ .Debugوﻨظ ار ﻻن ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ ﺘﺤﺘﺎج
إﻟﻰ ﻤﻌرﻓﺔ ﻤﻌﻠوﻤﺎت ﻋن ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ اﻟذي ﺴﯿﺘم ﻛﺘﺎﺒﺔ اﻟﺒرﻨﺎﻤﺞ ﻟﻪ ،ﻓﺴﯿﺘم اﺴﺘﻌراض ﻤﻠﺨص ﻋن ﻤﺴﺠﻼت
اﻟﻤﻌﺎﻟﺞ اﻟﻤﺴﺘﺨدم ﻫﻨﺎ وﻫو ﻤﻌﺎﻟﺞ .8086ﺒﻌد ذﻟك ﺴﯿﺘم اﺴﺘﻌراض أواﻤر ﺒرﻨﺎﻤﺞ Debugواﻻطﻼع ﻋﻠﻰ اﻤﺜﻠﺔ
ﺘﺒﯿن اﺴﺘﺨدام ﻫذﻩ اﻻواﻤر.
وﺘدرﯿﺒﺎت ّ
ﯿﻤﻛﻨك اﻟﺘﻌﺎﻤل ﻤﻊ اﻟﻤﻨﻘﺢ debugوذﻟك ﺒدﺨوﻟك اﻟﻰ ﻨظﺎم اﻟدوس وذﻟك ﺒﺎﺘﺒﺎع اﻟﺨطوات اﻟﺘﺎﻟﯿﺔ
ﺜم اﻟﻀﻐط ﻋﻠﻰ ﻛﺎﻓﺔ اﻟﺒراﻤﺞ All Programs .1اﻟﻨﻘر ﻋﻠﻰ اﯿﻘوﻨﺔ أﺒدأ
او
9
.1اﻟﻨﻘر ﻋﻠﻰ اﯿﻘوﻨﺔ أﺒدأ
.2ﻨدﺨل cmdﺜم Enter
ﻟﻠدﺨول ﻋﻠﻰ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ﻨدﺨل اﻟﻛﻠﻤﺔ debugﺜم ﻤﻔﺘﺎح اﻻدﺨﺎل .Enterﻓﺘظﻬر ﻟﻨﺎ اﺸﺎرة اﻟﺴﺎﻟﺒﺔ ﻟﻠدﻻﻟﺔ
ﻋﻠﻰ اﻨﻨﺎ ﻓﻲ ﻨظﺎم اﻟﻤﻨﻘﺢ .ﺤﯿث ﯿﻤﻛﻨﻨﺎ ان ﻨدﺨل اﻻواﻤر اﻟﺨﺎﺼﺔ ﺒﺎﻟﻤﻨﻘﺢ
10
3.2ﺨطوات ﺘﺸﻐﯿل ﺒرﻨﺎﻤﺞ ال Debugﻋﻠﻰ أﺠﻬزة اﻟﺤﺎﺴوب اﻟﺤدﯿﺜﺔ
ﻫﻨﺎك اﻟﻌدﯿد ﻤن اﻷﺠﻬزة اﻟﺤدﯿﺜﺔ ﻻ ﯿﻌﻤل ﻋﻠﯿﻬﺎ ﺒرﻨﺎﻤﺞ ال ،Debugﻟﺘﺸﻐﯿل اﻟﺒرﻨﺎﻤﺞ ﻻ ﺒد ﻤن اﺴﺘﺨدام اﻟﺒراﻤﺞ
اﻟﺘﺎﻟﯿﺔ اﺘﺒﺎع اﻟﺨطوات اﻟﺘﺎﻟﯿﺔ:
-1ﺗﻨﺰﯾﻞ ﺑﺮﻧﺎﻣﺞ dosboxﻣﻦ ھﺬا اﻟﺮاﺑﻂ ) :ﻣﺴﺎﺣﺘﮫ 1.38ﻣﯿﺠﺎﺑﺎﯾﺖ ( او اطﻠﺒﮫ ﻣﻦ اﻟﻔﻨﻲ اﻟﻤﺨﺘﺒﺮ
http://www.dosbox.com/download.php?main=1
اطﻠﺐ ﻣﻠﻒ اﻟﻤﻨﻘﺢ Debugﻣﻦ ﻓﻨﻲ اﻟﻤﺨﺘﺒﺮ وﺧﺰن اﻟﻤﻠﻒ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ ﻟﺤﺎﺳﻮﺑﻚ ﻟﻨﻔﺮض ﻋﻠﻰ
اﻟﻘﺮص C
-2ﻣﺮﺣﻠﺔ اﻻﻋﺪاد :اﺿﻐﻂ ﻋﻠﻰ اﻷﯾﻘﻮﻧﺔ اﺿﻐﻂ nextاﺿﻐﻂ nextاﺿﻐﻂ installاﺿﻐﻂ closeﺳﺘﺠﺪ
ھﺬه اﻷﯾﻘﻮﻧﺔ ﻋﻠﻰ ﺳﻄﺢ اﻟﻤﻜﺘﺐ
-3اﻧﻘﺮ ﻓﻮق اﻻﯾﻘﻮﻧﺔ ﻟﺘﺒﺪئ ﺑﺎﻟﺘﺸﻐﯿﻞ ﺗﻈﮭﺮ ﻟﻚ اﻟﺸﺎﺷﺔ اﻟﺘﻠﯿﺔ:
11
-2ﻧﻨﺘﻘﻞ اﻟﻰ اﻟﻤﺤﺮك اﻟﺬي ﺗﻢ ﺗﺨﺰﯾﻦ ﺑﺮﻧﺎﻣﺞ Debugﻋﻠﯿﺔ وﻓﻲ ﺣﺎﻟﺘﻨﺎ ﻛﺎن اﻟﻘﺮص اﻟﺼﻠﺐ Cﺑﺈدﺧﺎل اﻷﻣﺮ
4.2ﻋرض اﻟﻤﺴﺠﻼت
ﻟﻠﺘﻌرف ﻋﻠﻰ اﻟﻤﺴﺠﻼت ﻨدﺨل اﻟﺤرف Rﺜم ﻨﻀﻐط ﻋﻠﻰ ﻤﻔﺘﺎح اﻻدﺨﺎل ،ﻓﺘظﻬر ﻟﻨﺎ ﻗﺎﺌﻤﺔ ﺒﺄﺴﻤﺎء اﻟﻤﺴﺠﻼت
واﻟﻘﯿم اﻟﻤﺨزﻨﺔ ﻓﯿﻬﺎ.
12
ﻨﺸﺎط )(1
........................................................................................................
.................................................
........................................................................................................
.................................................
.................................................
.................................................
.................................................
13
.................................................
.................................................
ﻗﺒل اﻟﺨوض ﺒﻤزﯿد ﻤن اﻷواﻤر ،ﻟﻨﺘﻌرف ﺒﺸﻛل ﺴرﯿﻊ ﻋﻠﻰ ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ ،8086واﻟﺘﻲ ﯿﻌﻤل ﻤﻌﻬﺎ
ﺒرﻨﺎﻤﺞ ،Debugوﻻ ﯿﻤﻛن أن ﻨﺘﻌﺎﻤل ﻤﻊ ﻫذا اﻟﺒرﻨﺎﻤﺞ ﺒدون اﻻطﻼع ﻋﻠﻰ ﻫذﻩ اﻟﻤﺴﺠﻼت وﻤﻌرﻓﺔ وظﯿﻔﺘﻬﺎ.
ﯿﺤﺘوي ﻤﻌﺎﻟﺞ 8086ﻋﻠﻰ 14ﻤﺴﺠل ﯿﻤﻛن ﻟﻠﻤﺴﺘﺨدم أن ﯿﺘﻌﺎﻤل ﻤﻌﻬﺎ .وﯿﻤﻛن ﺘﺼﻨﯿف ﻫذﻩ اﻟﻤﺴﺠﻼت
ﻛﻤﺎ ﯿﻠﻲ ﺸﻛل ):(1
14
ﺤﺠم ﻛل ﻤﻨﻬﺎ 16ﺒت .وﺴﻤﯿت ﻋﺎﻤﺔ اﻻﺴﺘﺨدام ﻻن اﻟﻤﺴﺘﺨدم ﯿﻤﻛﻨﻪ اﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ﻛﯿف ﻤﺎ ﺸﺎء؛ ﯿﻤﻛﻨﻪ
ﺘﺤﻤﯿﻠﻬﺎ ﺒﺄي ﻗﯿﻤﺔ ،ﻨﻘل ﻤﺤﺘوﯿﺎﺘﻬﺎ إﻟﻰ ﺒﻌض اﻟﻤﺴﺠﻼت اﻷﺨرى أو إﻟﻰ ﺒﻌﻀﻬﺎ اﻟﺒﻌض أو إﻟﻰ اﻟذاﻛرة.
ﯿﻤﻛن ﻫذﻩ اﻟﻤﺴﺠﻼت ﺒﻬﺎ ﺨﺎﺼﯿﺔ إﻤﻛﺎﻨﯿﺔ ﺘﻘﺴﯿﻤﻬﺎ إﻟﻰ ﺠزأﯿن؛ ﻛل ﺠزء ﺤﺠﻤﻪ 8ﺒت .ﻤﺜﻼ ﻤﺴﺠل AX
ﺘﻘﺴﯿﻤﻪ إﻟﻰ ﺠزأﯿن؛ اﻟﺠزء اﻷﻋﻠﻰ و ﺤﺠﻤﻪ 8ﺒت ﯿﺴﻤﻰ ) AHﺤرف Hﻤن ﻛﻠﻤﺔ ،( Highو اﻟﺠزء اﻷﺴﻔل
و ﺤﺠﻤﻪ اﯿﻀﺎ 8ﺒت و ﯿﺴﻤﻰ ) ALﺤرف Lﻤن ﻛﻠﻤﺔ .( Low
أي أن اﻟﻤﺴﺠل اﻟﻛﺎﻤل واﻟذي ﺤﺠﻤﻪ 16ﺒت ﯿﻀﺎف إﻟﻰ اﺴﻤﻪ )Xﻤﺜﻼ ،(AXواﻟﺠزء اﻷﻋﻠﻰ ﻤﻨﻪ ﯿﻀﺎف
إﻟﻰ اﺴﻤﻪ ) Hﻤﺜﻼ .(AHوﻫذا ﯿﻨطﺒق ﻋﻠﻰ اﻟﻤﺴﺠﻼت ،CX ،BX ،AXو .DXاﻟﺸﻛل) (2ﯿﺒﯿن ﻫذا
اﻟﺘﻘﺴﯿم ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﺴﺠل .AX
ﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ ﻟﺸﻛل) (2أﻋﻼﻩ ،اﻟﺒﺘﺎت اﻟﺜﻤﺎﻨﯿﺔ ﻋﻠﻰ اﻟﯿﻤﯿن ﻫم اﻟﺠزء اﻷﺴﻔل ) ،(ALو اﻟﺒﺘﺎت اﻟﺜﻤﺎﻨﯿﺔ
ﻋﻠﻰ اﻟﯿﺴﺎر ﻫم اﻟﺠزء اﻷﻋﻠﻰ ).(AH
.2ﻤﺴﺠﻼت اﻟﻘطﺎﻋﺎت:
• ﻤﺴﺠل ﻗطﺎع اﻟﺒﯿﺎﻨﺎت :DSﯿﺨزن ﻋﻨوان ﺒداﯿﺔ ﻗطﺎع اﻟﺒﯿﺎﻨﺎت .وﻫو اﻟﻘطﺎع اﻟذي ﯿﺨزن ﺒﻪ ﺠﻤﯿﻊ
اﻟﻤﺘﻐﯿرات واﻟﺜواﺒت و DSﯿﺴﺘﺨدم ﻟﺘﺨزﯿن ﺒداﯿﺔ ﻋﻨوان ﻫذا اﻟﻘطﺎع.
• ﻤﺴﺠل ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت :CSﯿﺨزن ﻋﻨوان ﺒداﯿﺔ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت .وﻫو اﻟﻘطﺎع اﻟذي ﯿﺨزن ﺒﻪ
ﺘﻌﻠﯿﻤﺎت ﺒرﻨﺎﻤﺞ اﻻﺴﻤﺒﻠﻲ .و CSﺒﻪ ﺒداﯿﺔ ﻋﻨوان ﻫذا اﻟﻘطﺎع.
• ﻤﺴﺠل ﻗطﺎع اﻟﻤﻛدس : SSﯿﺨزن ﻋﻨوان ﺒداﯿﺔ اﻟﻤﻛدس.
• ﻤﺴﺠل ﻗطﺎع اﻟﺒﯿﺎﻨﺎت اﻹﻀﺎﻓﻲ ES
15
.3ﻤﺴﺠﻼت اﻟﻔﻬرﺴﺔ و اﻟﺘﺄﺸﯿر:
• ﻤﺴﺠل ﻤؤﺸر اﻟﺘﻌﻠﯿﻤﺎت IP:وﯿﺨزن ﻋﻨوان اﻟﺘﻌﻠﯿﻤﺔ اﻟﻘﺎدﻤﺔ اﻟﺘﻲ ﺴﯿﺘم ﺘﻨﻔﯿذﻫﺎ.
• ﻤﺴﺠل ﻤؤﺸر اﻟﻤﻛدس :SPوﯿﺨزن ﻋﻨوان اﻟﻌﻨﺼر اﻟﻤوﺠود ﻓﻲ أﻋﻠﻰ اﻟﻤﻛدس.
• ﻤﺴﺠل :BPوﯿﻤﻛن أن ﯿؤﺸر إﻟﻰ أي ﻤﻛﺎن ﻓﻲ اﻟﻤﻛدس اﯿﻀﺎ.
• ﻤﺴﺠل :SIﯿﺴﺘﺨدم ﻤﻊ ﺴﻠﺴﻠﺔ اﻟرﻤوز
• ﻤﺴﺠل : DIﯿﺴﺘﺨدم ﻤﻊ ﺴﻠﺴﻠﺔ اﻟرﻤوز اﯿﻀﺎ
ﯿﺤﺘوي ﻋﻠﻰ 16ﺒت 9 ،ﻤﻨﻬﺎ ﻫﻲ ﺒﺘﺎت ﻟﻠراﯿﺎت واﻟﺴﺒﻌﺔ اﻟﻤﺘﺒﻘﯿﺔ ﻏﯿر ﻤﺴﺘﺨدﻤﺔ .ﻫذﻩ اﻟراﯿﺎت ﺘﺘﺒدل ﻗﯿﻤﺘﻬﺎ
ﺒﺸﻛل ﻤﺴﺘﻤر ﺒﻌد ﺘﻨﻔﯿذ ﻛل ﺘﻌﻠﯿﻤﺔ .وﻤن اﻷﻤﺜﻠﺔ ﻋﻠﻰ ﻫذﻩ اﻟراﯿﺎت:
• ﺒت راﯿﺔ اﻟﺼﻔر ZF:ﯿﺼﺒﺢ ﻗﯿﻤﺔ ﻫذا اﻟﺒت 1إذا ﻛﺎﻨت ﻨﺘﯿﺠﺔ اﻟﻌﻤﻠﯿﺔ ﺘﺴﺎوي ﺼﻔرا.
• ﺒت راﯿﺔ اﻹﺸﺎرة : SFﯿﺼﺒﺢ ﻗﯿﻤﺔ ﻫذا اﻟﺒت 1إذا ﻛﺎﻨت ﻨﺘﯿﺠﺔ اﻟﻌﻤﻠﯿﺔ ﺴﺎﻟﺒﺔ.
Flags Description
ov | no Overflow | No overflow
dn | up Decrement | Increment
ei | di Input enable | Input disable
ng | pl Sign: Negative | Positive
zr | nz Zero | Not zero
ac | na Auxiliary carry | No auxiliary carry
pe | po Parity even | Parity odd
cy | nc Carry | No carry
16
4.2ﻤﻌﺎﻟﺠﺔ ﻗﯿم اﻟﻤﺴﺠﻼت
ﻛﻤﺎ اﺸﺎرﻨﺎ ﺴﺎﺒﻘﺎ ﯿﻤﻛﻨﻨﺎ اﺴﺘﺨدام اﻷﻤر Rﻹظﻬﺎر ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠﻼت ،ﻹظﻬﺎر ﻤﺤﺘوﯿﺎت أﺤد اﻟﻤﺴﺠﻼت
ﻨدﺨل Rﺜم اﺴم اﻟﻤﺴﺠل ،ﻓﻤﺜﻼ ﻹظﻬﺎر ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠل AXﻓﻘط ﻨطﺒﻊ Rﺒﻌدﻫﺎ اﺴم اﻟﻤﺴﺠل AXاﻟذي
ﺘرﯿد ﻤﻌرﻓﺔ ﻤﺤﺘوﯿﺎﺘﻪ ﻛﻤﺎ ﯿﻠﻲ:
اﻛﺘب R AXﺜم اﻀﻐط ﻤﻔﺘﺎح اﻻدﺨﺎل ﻟﯿظﻬر ﻟك ﻤﺤﺘوﯿﺎت AXﻓﻘط ﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ اﻟﺸﻛل ) (4اﻟﺘﺎﻟﻲ.
اﻷﻤر :Rﺴﺒق أن ﺘﺤدﺜﻨﺎ ﻋن ﻫذا اﻷﻤر وأﻨﻪ ﯿﻌرض ﻗﯿﻤﺔ اﻟﻤﺴﺠﻼت ﻛﺎﻓﺔ أو ﻗﯿﻤﺔ ﻤﺴﺠل ﻤﻌﯿن.
ﺒﺎﻹﻀﺎﻓﺔ اﻟﻰ ﻤﺎ ﺘم ذﻛرﻩ ﺴﺎﺒﻘﺎ ﻫﻨﺎك إﻤﻛﺎﻨﯿﺔ ﺘﻌدﯿل ﻗﯿﻤﺔ اﻟﻤﺴﺠل اﻟﻰ ﻗﯿﻤﺔ ﺠدﯿدة ﺒﻌد ﻋرض ﻗﯿﻤﺘﻪ اﻟﺤﺎﻟﯿﺔ
ﺒﺎﺴﺘﺨدام اﻻﻤر ، Rو ذﻟك ﺒﻛﺘﺎﺒﺔ اﻟﻘﯿﻤﺔ اﻟﺠدﯿدة ﺒﻌد اﻟﻨﻘطﺘﯿن ﻛﻤﺎ ﯿﻠﻲ:
R CX
CX 0000
: 500
17
ﻓﻲ اﻟﻤﺜﺎل اﻋﻼﻩ ،ﺘم ﻋرض اﻟﻘﯿﻤﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻠﻤﺴﺠل CXوﻫﻲ ،0000ﺜم ﻗﻤﻨﺎ ﺒﻛﺘﺎﺒﺔ اﻟﻘﯿﻤﺔ اﻟﺠدﯿدة وﻫﻲ
ٕ .500واذا ﻛﻨﺎ ﻻ ﻨرﯿد ﺘﻌدﯿل اﻟﻘﯿﻤﺔ ﯿﺠب اﻟﻀﻐط ﻋﻠﻰ ﻤﻔﺘﺎح Enterﻹﻨﻬﺎء ﺨﯿﺎر ﺘﻌدﯿل اﻟﻘﯿﻤﺔ.
ﻤﺜﺎل:1
-1اﻛﺘب اﻻﻤر اﻟذي ﯿﻌرض ﻤﺤﺘوى اﻟﻤﺴﺠل CXﺜم ﻗم ﺒﺘﻐﯿﯿر ﻗﯿﻤﺘﻪ إﻟﻰ ،155ﺜم ﺘﺄﻛد ﻤن اﻟﻘﯿﻤﺔ اﻟﺠدﯿدة.
-2ﺘﻐﯿﯿر ﻤﺤﺘوى اﻟﻤﺴﺠل IPاﻟﻰ اﻟﻘﯿم ،100ﺤﯿث ان ﻫذﻩ اﻟﻌﻤﻠﯿﺔ ﻀرورﯿﺔ ﻗﺒل ﺘﻨﻔﯿذ ﺒراﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ
ﺒﺎﺴﺘﺨدام ﺒرﻨﺎﻤﺞ debugﻟﺘﺄﻛد ﻤن ان ﻤؤﺸر اﻟﺒرﻨﺎﻤﺞ IPﯿﺸﯿر اﻟﻰ اول ﻤوﻗﻊ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ.
-3ﺘﻐﯿﯿر ﻤﺤﺘوى اﻟﻤﺴﺠل CSاﻟﻰ اﻟﻘﯿم ،2000ﺤﯿث ان ﻫذﻩ اﻟﻌﻤﻠﯿﺔ ﻀرورﯿﺔ ﻗﺒل ادﺨﺎل ﺒراﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ
ﺒﺎﺴﺘﺨدام ﺒرﻨﺎﻤﺞ . debug
اﻟﺤل:
-1
-2
ﻟﻤﻌرﻓﺔ ﻤﺤﺘوى ﻤﺴﺠل اﻟﺘﺄﺸﯿر IPﻗﺒل ﺘﺸﻐﯿل اﻟﺒرﻨﺎﻤﺞ ،اﻛﺘب .R IP :ﺒﻌد ذﻟك ،ﺴوف ﻨرى اﻟﻌﻨوان اﻟذي ﯿﺸﯿر
اﻟﯿﻪ اﻟﻤﺴﺠل .IP
ﻟﻤﻌرﻓﺔ ﻤﺤﺘوى ﻤﺴﺠل اﻟﺘﻌﻠﯿﻤﺔ CSﻗﺒل ﺘﺸﻐﯿل اﻟﺒرﻨﺎﻤﺞ ،اﻛﺘب .R CS :ﺒﻌد ذﻟك ،ﺴوف ﻨرى اﻟﻌﻨوان اﻟذي
ﯿﺸﯿر اﻟﯿﻪ اﻟﻤﺴﺠل . CS
18
ﻨدﺨل اﻟرﻗم 2000ﺒﻌد اﻟرﻤز اﻟﺨﺎص :ﺜم ﻨﻀﻐط ﻤﻔﺘﺎح اﻻدﺨﺎل.
R CS
:2000
اﻷﻤر Aﯿﺴﻤﺢ ﺒﺈدﺨﺎل ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ إﻟﻰ اﻟذاﻛرة .وﯿﻤﻛن ﻛﺘﺎﺒﺔ رﻗم ﺒﻌد ﺤرف Aﯿﺤدد اﻟﻌﻨوان اﻟذي ﺴﯿﺘم
ﻛﺘﺎﺒﺔ اﻟﺘﻌﻠﯿﻤﺎت ﺒﻪ .ﻓﻤﺜﻼ ﻹدﺨﺎل ﺒرﻨﺎﻤﺞ ﯿﺒدأ ﻤن اﻟﻌﻨوان 100ﻓﻲ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت ،ﻤﺎ ﻋﻠﯿك ﻋزﯿزي اﻟطﺎﻟب
إﻻ أن ﺘﻛﺘب:
19
- A 100
وﻟﻨﺄﺨذ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ واﻟذي ﯿﺒﯿن ﺨطوات إدﺨﺎل ﺒرﻨﺎﻤﺞ ﻓﻲ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت اﺒﺘداء ﻤن اﻟﻌﻨوان ) 100ﺘذﻛر
ﻋزﯿزي اﻟطﺎﻟب ،ان ﺠﻤﯿﻊ اﻷرﻗﺎم اﻟﻤﺴﺘﺨدﻤﺔ ﻫﻨﺎ ﻫﻲ ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس ﻋﺸري( .ﻫذا اﻟﺒرﻨﺎﻤﺞ ﯿﻀﻊ ﻗﯿﻤﺔ 5ﻓﻲ
ﻗﯿم اﻟﻤﺴﺠﻠﯿن AXو BXوﯿﺨزن اﻟﺘﻌﻠﯿﻤﺔ ﻓﻲAX:
اﻟﻤﺴﺠل ،AXوﻗﯿﻤﺔ 3ﻓﻲ اﻟﻤﺴﺠل BXﺜم ﯿﺠﻤﻊ ّ
ﻤﺜﺎل:2
ﻣﻼﺣﻈﺔ :ﻟﻠﺨﺮوج ﻣﻦ ﻛﺘﺎﺑﺔ اﻟﺘﻌﻠﯿﻤﺎت ،ﻓﻘﻂ اﺿﻐﻂ Enterﻣﺮﺗﯿﻦ ﺑﻌﺪ آﺧﺮ ﺗﻌﻠﯿﻤﺔ ﺗﻜﺘﺒﮭﺎ.
ھﺬا اﻟﺴﻄﺮ ﯾﺒﯿﻦ ﻗﯿﻤﺔ ﻣﺴﺠﻞ ﻗﻄﺎع اﻟﺘﻌﻠﯿﻤﺎت CSاﻟﺤﺎﻟﯿﺔ وھﻲ ، 0B58ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ اﻹزاﺣﺔ اﻟﺘﻲ ﺳﯿﺘﻢ إدﺧﺎل
اﻟﺘﻌﻠﯿﻤﺎت ﺑﮭﺎ وھﻲ 100واﻟﺘﻲ ﺣﺪدﻧﺎھﺎ ﻋﻨﺪﻣﺎ ﻛﺘﺒﻨﺎ ) A 100إي ادﺧﻞ ﺗﻌﻠﯿﻤﺔ اﺑﺘﺪاء ﻣﻦ اﻹزاﺣﺔ .(100
ﺑﻌﺪ ﻛﺘﺎﺑﺔ أول ﺗﻌﻠﯿﻤﺔ واﻟﺘﻲ ھﺪﻓﮭﺎ ﺗﺤﻤﯿﻞ AXﺑﻘﯿﻤﺔ ،5واﻟﻀﻐﻂ ﻋﻠﻰ ،Enterﯾﻈﮭﺮ اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ وھﻮ:
0B58: 0103
ﻧﺴﺘﻨﺘﺞ ﻣﻦ ھﺬا اﻟﺴﻄﺮ أن طﻮل اﻟﺘﻌﻠﯿﻤﺔ اﻷوﻟﻰ وھﻲ MOV AX,100ھﻮ 3ﺑﺎﯾﺖ.
20
ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ أﻋﻼه ﻓﺎن أول اﻟﺘﻌﻠﯿﻤﺔ ﺗﺒﺪأ ﻓﻲ اﻟﻤﻮﻗﻊ ،100واﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ﺳﺘﺒﺪأ ﻓﻲ اﻟﻤﻮﻗﻊ
،103أي أن اﻟﺘﻌﻠﯿﻤﺔ اﻷوﻟﻰ اﺣﺘﻠﺖ 3ﺑﺎﯾﺖ.
21
ﻓﻲ اﻟﺸﻛل اﻟﺴﺎﺒق أﻋﻼﻩ ،ﻻﺤظ ﻋزﯿزي اﻟطﺎﻟب أن اﻟﻤﻌﻠوﻤﺎت اﻟﺘﻲ ظﻬرت ﻫﻨﺎ ﺘﺒﯿن ﻗﯿم اﻟﻤﺴﺠﻼت ووﻀﻌﯿﺔ
اﻟراﯿﺎت ﺒﻌد ﺘﻨﻔﯿذ اﻟﺘﻌﻠﯿﻤﺔ .MOV AX,5ﻤن ﻫذﻩ اﻟﻤﻌﻠوﻤﺎت ﯿظﻬر ﻟﻨﺎ ﻤﺎ ﯿﻠﻲ:
• أن ﻗﯿﻤﺔ AXأﺻﺒﺤﺖ ،5
وأن ﻗﯿﻤﺔ اﻟﻤﺴﺠﻞ IPأي ﻋﻨﻮان اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ھﻮ ،103 •
وأن اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ھﻲ ،MOV BX,3وھﻲ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ اﻟﺘﻲ ﻗﻤﻨﺎ ﻧﺤﻦ ﺑﺈدﺧﺎﻟﮭﺎ. •
• ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺮاﯾﺎت :ھﻨﺎك 8ﺛﻤﺎن راﯾﺎت ﻣﻤﻜﻦ أن ﺗﺘﻐﯿﺮ ﺑﻌﺪ ﻛﻞ ﺗﻌﻠﯿﻤﺔ .وﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل NZ ،ﺗﻌﻨﻲ
أن ﻧﺘﯿﺠﺔ آﺧﺮ ﺗﻌﻠﯿﻤﺔ ﻻ ﺗﺴﺎوي ﺻﻔﺮاً ،أي أن راﯾﺔ اﻟﺼﻔﺮ ﺗﺴﺎوي ﺻﻔﺮا .واﯾﻀﺎ PLﺗﻌﻨﻲ أن ﻧﺘﯿﺠﺔ
آﺧﺮ ﺗﻌﻠﯿﻤﺔ ھﻲ ﻣﻮﺟﺒﺔ ،أي أن راﯾﺔ اﻹﺷﺎرة ﺗﺴﺎوي ﺻﻔﺮا .وﺟﺪول 2ﯾﺒﯿﻦ ﺑﻌﺾ اﻟﺮاﯾﺎت وﻣﻌﻨﺎھﺎ
ﻓﻲ ﺑﺮﻧﺎﻣﺞ .Debug
إذا ﻛﺎﻧﺖ ﻗﯿﻤﺘﮭﺎ ﺗﺴﺎوي واﺣﺪ إذا ﻛﺎﻧﺖ ﻗﯿﻤﺘﮭﺎ ﺗﺴﺎوي ﺻﻔﺮ اﻟﺮاﯾﺔ
ZR NZ راﯾﺔ اﻟﺼﻔﺮ
NG PL راﯾﺔ اﻹﺷﺎرة
CY NC راﯾﺔ اﻟ ِﺤﻤﻞ
ﺟﺪول : 2ﺑﻌﺾ اﻟﺮاﯾﺎت و ﻣﻌﻨﺎھﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺞ Debug
ﺒﺎﻟﻌودة إﻟﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺒق واﻟذي أدﺨﻠﻨﺎ ﻓﯿﻪ ﺒرﻨﺎﻤﺞ ﺜم ﺒدأﻨﺎ ﺒﺎﻟﺘﺘﺒﻊ ﻤن ﻤوﻗﻊ 100ﺒﺎﺴﺘﺨدام اﻻﻤر .T=100
ﻟﻨرى اﻵن اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ وﻤﺎ اﻟﺘﻐﯿﯿرات اﻟﺘﻲ اﺤدﺜﺘﻬﺎ .ﻨﻛﺘب ﻫﻨﺎ Tﻓﻘط ،وﻻ ﯿﻠزم ﺘﺤدﯿد اﻟﻌﻨوان ﻟﻬذﻩ اﻟﺘﻌﻠﯿﻤﺔ.
ﻓﻘط ﯿﻠزم ﺘﺤدﯿد ﻋﻨوان أول ﺘﻌﻠﯿﻤﺔ ،ﺒﻌدﻫﺎ ﻨﻛﺘب Tﻓﻘط.
22
ﻻﺤظ أن ﻗﯿﻤﺔ BXﺘﻐﯿرت ﻷﻨﻨﺎ ﻨﻔذﻨﺎ اﻟﺘﻌﻠﯿﻤﺔ . MOV BX,3ﻻﺤظ اﯿﻀﺎ ﻋﻨوان اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ) ،(IPو
ﻨص اﻟﺘﻌﻠﯿﻤﺔ ).(ADD AX,BX
ﻻﺤظ أن ﻗﯿﻤﺔ AXأﺼﺒﺤت 8وذﻟك ﻷﻨﻨﺎ اﻀﻔﻨﺎ (3) BXاﻟﻰ (5) AXﺒﺎﺴﺘﺨدام ،ADD AX,BX
ﻓﺄﺼﺒﺤت اﻟﻨﺘﯿﺠﺔ .8
ﻻﺤظ اﻨﻨﺎ ﺼﻔرﻨﺎ ﻗﯿﻤﺔ BXﺒﺎﺴﺘﺨدام ،XOR BX,BXو ﻻﺤظ اﯿﻀﺎ أن ﻗﯿﻤﺔ راﯿﺔ اﻟﺼﻔر اﺼﺒﺤت .ZR
أي أن ﻗﯿﻤﺔ راﯿﺔ اﻟﺼﻔر أﺼﺒﺤت .1
ﺗﺪرﯾﺐ 1
ﻗﻢ ﺑﺈﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺘﺎﻟﯿﺔ ﺑﺎﺳﺘﺨﺪام :Debug
.1اﻋﺮض اﻟﻤﺤﺘﻮﯾﺎت اﻟﺤﺎﻟﯿﺔ ﻟﺠﻤﯿﻊ اﻟﻤﺴﺠﻼت.
ﺗﺘﻢ ھﺬه اﻟﺨﻄﻮة ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ R
23
MOV CX,5
MOV AX,0
LABEL: ADD AX,CX
LOOP LABEL
)ﻣﻼﺣﻈﺔ :ﻛﻠﻤﺔ LABELﻻ ﺗﻜﺘﺐ ﻓﻲ ﺑﺮﻧﺎﻣﺞ DEBUGﻻن ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻌﺎﻣﻞ ﻣﻊ ﺗﻌﻠﯿﻤﺎت و ﻻ ﯾﺘﻌﺎﻣﻞ ﻣﻊ أﺳﻤﺎء(
ﻻﺣﻆ ﺗﻌﻠﯿﻤﺔ LOOPأﺗﻰ ﺑﻌﺪھﺎ اﻟﻌﻨﻮان اﻟﺬي ﺗﻌﻮد إﻟﯿﺔ وھﻮ 015Bوھﻲ اﻹزاﺣﺔ اﻟﻤﺨﺰن ﺑﮭﺎ اﻟﺘﻌﻠﯿﻤﺔ
ADD AX,CX
.4ﺗﺘﺒﻊ ﻣﺎذا ﯾﺤﺪث ﺑﺎﻟﻤﺴﺠﻼت ﺑﻌﺪ ﺗﻨﻔﯿﺬ ﻛﻞ ﺗﻌﻠﯿﻤﺔ:
ﺗﻌﻠﯿﻤﺔ MOV CX,5
ﺗﻌﻠﯿﻤﺔ LOOP
ﻻﺣﻆ أن ھﺬه اﻟﺘﻌﻠﯿﻤﺔ ﺳﺘﻨﻔﺬ ﺧﻤﺲ ﻣﺮات ،ﻻن ﻗﯿﻤﺔ ، CX=5واﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ CXھﻲ اﻟﺘﻲ ﺗﺤﺪد ﻋﻤﻠﯿﺎت اﻟﺘﻜﺮار .و ﻓﻲ
ﻛﻞ ﻣﺮة ﺗﻌﻮد إﻟﻰ اﻟﺘﻌﻠﯿﻤﺔ ADD AX,CXو ﺗﻨﻘﺺ ﻣﻦ CXواﺣﺪ إﻟﻰ أن ﯾﺼﺒﺢ CXﯾﺴﺎوي ﺻﻔﺮا.
24
ﺗﻢ ﺗﻨﻔﯿﺬ LOOPﻣﺮﺗﯿﻦ ﻓﻘﻂ ﻓﻲ اﻟﺸﻜﻞ أﻋﻼه .ﯾﻤﻜﻨﻚ ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ أن ﺗﻜﻤﻞ ﺗﻨﻔﯿﺬ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ .ﻻﺣﻆ ﻣﺤﺘﻮى CXﻗﺪ ﺑﺪأ ﻣﻦ
،5ﺛﻢ أﺧﺬ ﯾﺘﻨﺎﻗﺺ ﻣﻊ ﺗﻨﻔﯿﺬ LOOPﻛﻞ ﻣﺮه.
ﻛﻤﺎ ﯾﻤﻜﻨﻚ ﺗﻨﻔﯿﺬ ﻋﺪد ﻣﻌﯿﻦ ﻣﻦ اﻟﺠﻤﻞ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ ،Tو ذﻟﻚ ﺑﻜﺘﺎﺑﺔ ﻋﺪد اﻟﺠﻤﻞ ﺑﻌﺪ اﻻﻣﺮ ، Tﻣﺜﻼ ﻟﺘﻨﻔﯿﺬ
ﺛﻼث ﺟﻤﻞ ﻧﻜﺘﺐ اﻻﻣﺮ اﻟﺘﺎﻟﻲ:
T3
اﻻﻣﺮ G
ﯾﻌﻨﻲ GOوﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﺘﻨﻔﯿﺬ ﺑﺮﻧﺎﻣﺞ أو ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺘﻌﻠﯿﻤﺎت .وﯾﺠﺐ اﻹزاﺣﺔ ﻷول ﺗﻌﻠﯿﻤﺔ وﻵﺧﺮ
ﺗﻌﻠﯿﻤﺔ ﻋﻨﺪ ﻛﺘﺎﺑﺔ ھﺬا اﻻﻣﺮ.
ﻣﺜﺎل :4
ادﺧﻞ وﻧﻔﺬ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ .G
MOV AX,11
MOV BX,22
MOV CX, 33
MOV DX,44
25
اﻟﺤﻞ :اﻟﺸﻜﻞ .اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ اﻟﺤﻞ
ﺗﻢ إدﺧﺎل اﻟﺒﺮﻧﺎﻣﺞ اﺑﺘﺪاء ﻣﻦ اﻹزاﺣﺔ 0100و اﻧﺘﮭﻰ ﺑﺎﻹزاﺣﺔ .010Cﻟﺬﻟﻚ اﺳﺘﺨﺪﻣﻨﺎ:
G=100 10C
ﻟﺘﻨﻔﯿﺬ اﻷواﻣﺮ ﻣﻦ اﻹزاﺣﺔ 0100إﻟﻰ .010Cﻻﺣﻆ اﯾﻀﺎ ﻗﯿﻢ اﻟﻤﺴﺠﻼت ،CX ،BX ،AXو DXو
اﻟﺘﻲ ﺗﻐﯿﺮت إﻟﻰ اﻟﻘﯿﻢ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ.
.5اﻟﺘﻌﺎﻤل ﻤﻊ اﻟذاﻛرة
1.5اﻻﻤر D
ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﻌﺮض ﻣﺤﺘﻮﯾﺎت اﻟﺬاﻛﺮة .ﯾﺠﺐ ﺗﺤﺪﯾﺪ اﻟﻤﻮاﻗﻊ اﻟﺘﻲ ﻧﺮﯾﺪ ﻋﺮﺿﮭﺎ .ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل
اﻻﻣﺮ:
D DS: 100 105
ھﺬا اﻻﻣﺮ ﯾﻌﺮض ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮاﻗﻊ ﻓﻲ ﻗﻄﺎع اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﻮﻗﻊ 100إﻟﻰ اﻟﻤﻮﻗﻊ .105
26
ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ 102ھﻲ 11
ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ 103ھﻲ 00
ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ 104ھﻲ 22
ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ 105ھﻲ 00
ﻣﻊ اﻟﻌﻠﻢ ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ ،ان اﻻﻣﺮ Dﯾﻌﺮض ﻣﺤﺘﻮﯾﺎت ﻗﻄﺎع اﻟﺒﯿﺎﻧﺎت إذا ﻟﻢ ﯾﺘﻢ ﺗﺤﺪﯾﺪ اﻟﻘﻄﺎع ،ﻓﻤﺜﻼ:
D ﯾﻌﺮض اﻷﻣﺮ أول 128ﺑﺎﯾﺖ ﻣﻦ ﻗﻄﺎع اﻟﺒﯿﺎﻧﺎت
D 100 ﯾﻌﺮض اﻷﻣﺮ أول 128ﺑﺎﯾﺖ ﻣﻦ اﻟﻌﻨﻮان 100
D ES:0000 ﯾﻌﺮض اﻷﻣﺮ أول 128ﻣﻦ اﻟﻘﻄﺎع اﻹﺿﺎﻓﻲ
2.5اﻻﻤر E
ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﻠﻜﺘﺎﺑﺔ ﻋﻠﻰ ﻣﻮﻗﻊ أو ﻣﻮاﻗﻊ ﻣﻌﯿﻨﺔ ﻓﻲ اﻟﺬاﻛﺮة.
ﻣﺜﻼ ﻟﻜﺘﺎﺑﺔ اﻟﻘﯿﻤﺔ 41ﻋﻠﻰ اﻹزاﺣﺔ 230ﻣﻦ ﻗﻄﺎع اﻟﺒﯿﺎﻧﺎت:
E DS: 230 55
ﯾﻤﻜﻦ ﻟﻚ أن ﺗﺘﺄﻛﺪ ﻣﻦ ﻗﯿﻤﺔ ھﺬا اﻟﻤﻮﻗﻊ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ:
D DS:230
اﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ،وﻟﻨﻼﺣﻆ ﺑﻌﺾ اﻷﻣﻮر.
ﻻﺣﻆ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ اﻧﮫ ﻋﻨﺪ ﻛﺘﺎﺑﺔ اﻻﻣﺮ ،D DS:230ظﮭﺮت ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻮاﻗﻊ اﻟﺘﺨﺰﯾﻨﯿﺔ ﻣﻦ
ﺿﻤﻨﮭﺎ اﻟﻤﻮﻗﻊ 230واﻟﺬي ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ .41ﻧﻼﺣﻆ اﯾﻀﺎ ﻋﻠﻰ اﻟﺠﮭﺔ اﻟﯿﻤﻨﻰ ﻣﻦ اﻟﺸﻜﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻦ
27
اﻟﺮﻣﻮز ﺗﻤﺜﻞ اﻟﺮﻣﻮز اﻟﻤﻘﺎﺑﻠﺔ ﻟﻜﻮد ASCIIﻓﻲ ﻛﻞ ﻣﻮﻗﻊ .ﻣﺜﻼ اﻟﺤﺮف Aﻛﻮد ASCIIﻟﮫ ھﻮ ) 41ﺑﺎﻟﻨﻈﺎم
اﻟﺴﺎدس ﻋﺸﺮي(.
ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ ،ﻟﻨﻔﺘﺮض اﻧﻚ ﺗﺮﯾﺪ إدﺧﺎل ﻗﯿﻢ ﻓﻲ ﻣﻮاﻗﻊ ﻣﺘﺘﺎﻟﯿﺔ ،ﻓﺎن اﻻﻣﺮ Eﯾﻤﻜﻨﻚ ﻣﻦ ﻓﻌﻞ ذﻟﻚ .أي اﻧﮫ
ﻻ ﯾﻘﺘﺼﺮ ﻓﻘﻂ ﻋﻠﻰ اﻟﻜﺘﺎﺑﺔ ﻓﻲ ﻣﻮﻗﻊ واﺣﺪ.
ﻣﺜﺎل :5
اﻛﺘﺐ ﻋﻠﻰ اﻟﻤﻮاﻗﻊ 504,503,502,501,500 :ﺑﺎﻟﺘﺘﺎﺑﻊ اﻟﻘﯿﻢ 44,33,22,11,00
اﻟﺤﻞ:
ﻧﺒﺪأ ﺑﺎﻹدﺧﺎل إﻟﻰ اﻟﻤﻮﻗﻊ اﻷول ﻛﺎﻟﺘﺎﻟﻲ
E DS:500ﺛﻢ ﻣﻔﺘﺎح اﻻدﺧﺎل
ﻻﺣﻆ أﻧﻨﺎ ﻟﻢ ﻧﻜﺘﺐ اﻟﻘﯿﻤﺔ .ﺑﻌﺪ اﻟﻀﻐﻂ ، Enterﺗﻈﮭﺮ اﻟﻘﯿﻤﺔ اﻟﻘﺪﯾﻤﺔ ﻟﮭﺬا اﻟﻤﻮﻗﻊ ،ﯾﻤﻜﻨﻨﺎ ﻛﺘﺎﺑﺔ اﻟﻘﯿﻤﺔ
اﻟﺠﺪﯾﺪة ﻣﺒﺎﺷﺮة ﺑﺠﺎﻧﺒﮭﺎ ،ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻰ اﻟﻤﺴﻄﺮةاو اﻟﻌﺎرﺿﺔ اﻟﻄﻮﯾﻠﺔ ) (space barﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ،
ﻟﯿﻌﻄﯿﻨﺎ إﻣﻜﺎﻧﯿﺔ ﺗﻌﺪﯾﻞ اﻟﻤﻮﻗﻊ اﻟﺬي ﯾﻠﯿﮫ و ھﻜﺬا ﺣﺘﻰ ﻧﻨﺘﮭﻲ ﻧﻀﻐﻂ .Enter
ﺗﺪرﯾﺐ 2
اﻛﺘﺐ اﻟﺠﻤﻠﺔ
I'M STUDYING IN QOU
ﻓﻲ اﻟﻤﻮاﻗﻊ اﻟﺘﺨﺰﯾﻨﯿﺔ اﺑﺘﺪاء ﻣﻦ اﻟﻤﻮﻗﻊ 1000ﻓﻲ ﻗﻄﺎع اﻟﺒﯿﺎﻧﺎت .ﺛﻢ ﺗﺄﻛﺪ ﻣﻦ وﺟﻮدھﺎ ﻓﻲ اﻟﺬاﻛﺮة
اﻟﺤﻞ:
"E DS:1000 " I'M STUDYING IN QOU
اﻟﻤﻮﻗﻊ 1000ﻛﺘﺒﻨﺎ ﻓﯿﮫ ،Iاﻟﻤﻮﻗﻊ 1001ﻛﺘﺒﻨﺎ ﻓﯿﮫ ' ،اﻟﻤﻮﻗﻊ 1003ﻛﺘﺒﻨﺎ ﻓﯿﮫ ،Mو ھﻜﺬا...
ﻟﻠﺘﺄﻛﺪ ،اﻛﺘﺐ
28
D DS:1000
اﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
3.5اﻻﻤر M
ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﻨﺴﺦ ﻣﺤﺘﻮى ﻣﻮﻗﻊ أو ﻣﻮاﻗﻊ ﻓﻲ اﻟﺬاﻛﺮة اﻟﻰ ﻣﻜﺎن ﻣﻌﯿﻦ ﻓﻲ اﻟﺬاﻛﺮة .ﻣﺜﻼ اﻻﻣﺮ اﻟﺘﺎﻟﻲ:
M CS:100 110 CS:500
ھﺬا اﻻﻣﺮ ﯾﻨﺴﺦ ﻣﺤﺘﻮى اﻟﻤﻮاﻗﻊ ﻣﻦ 100اﻟﻰ 110ﻓﻲ ﻗﻄﺎع اﻟﺘﻌﻠﯿﻤﺎت CSو ﯾﻀﻌﮭﺎ اﺑﺘﺪاءا ﻣﻦ اﻟﻤﻮﻗﻊ
500ﻓﻲ ﻧﻔﺲ اﻟﻘﻄﺎع ﻓﻲ اﻟﺬاﻛﺮة ،أي اﻧﮫ ﯾﻨﺴﺦ ﻣﺤﺘﻮى اﻟﻤﻮﻗﻊ 100اﻟﻰ ،500و ﻣﺤﺘﻮى 101اﻟﻰ ،501
و ھﻜﺬا...
4.5اﻻﻤر F
Fﻣﻦ Fillأي اﻣﻸ .ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﻤﻠﻲء ﺳﻠﺴﻠﺔ ﻣﻦ اﻟﻤﻮاﻗﻊ اﻟﺘﺨﺰﯾﻨﯿﺔ ﺑﻘﯿﻤﺔ واﺣﺪة .ﻣﺜﻼ اﻻﻣﺮ اﻟﺘﺎﻟﻲ:
F 100 150 33
ﯾﻘﻮم ھﺬا اﻻﻣﺮ ﺑﺘﻌﺒﺌﺔ اﻟﻤﻮاﻗﻊ ﻣﻦ 100إﻟﻰ 150ﺑﺎﻟﻘﯿﻤﺔ .33ﻋﺎدة ﻣﺎ ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﺘﺼﻔﯿﺮ ﺳﻠﺴﻠﺔ ﻣﻦ
اﻟﻤﻮاﻗﻊ.
1.6اﻻﻤر U
Uﻣﻦ .UnAssembleھﺬا اﻻﻣﺮ أواﻣﺮ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ اﻵﻟﺔ إﻟﻰ ﺷﻜﻠﮭﺎ ﺑﻠﻐﺔ اﻻﺳﻤﺒﻠﻲ .ﻣﺜﻼ اﻻﻣﺮ:
U 100 106
29
ﯾﻌﺮض اﻷرﻗﺎم اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﻮاﻗﻊ ﻣﻦ 100إﻟﻰ ،106وﻣﺎ ﯾﻘﺎﺑﻠﮭﺎ ﻣﻦ ﺗﻌﻠﯿﻤﺎت اﺳﻤﺒﻠﻲ .اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﺒﯿﻦ
ﻋﻤﻞ ھﺬا اﻻﻣﺮ.
ﻻﺣﻆ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ أن اﻟﻤﻮﻗﻊ 100ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ 250000وھﻲ ﻛﻮد اﻟﺔ ﯾﻘﺎﺑﻠﮭﺎ ﺑﻠﻐﺔ اﻻﺳﻤﺒﻠﻲ
اﻟﺘﻌﻠﯿﻤﺔ . AND AX,0000
2.6اﻻﻤر Q
ھﺬا اﻻﻣﺮ ﯾﺴﺘﺨﺪم ﻟﻠﺨﺮوج ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ .ﻓﻤﺜﻼ ﺑﻌﺪ إدﺧﺎل:
-Q
ﯾﺨﺮج اﻟﺒﺮﻧﺎﻣﺞ و ﯾﻌﻮد إﻟﻰ ﺻﻔﺤﺔ أواﻣﺮ DOS
إﻟﻰ ھﻨﺎ ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ ﺗﻢ اﺳﺘﻌﺮاض ﺟﻤﯿﻊ اﻷواﻣﺮ اﻟﻤﮭﻤﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺞ .Debugﻣﻊ اﻟﻌﻠﻢ ﺑﻮﺟﻮد ﺑﻌﺾ
اﻻواﻣﺮ اﻟﺘﻲ ﻟﻢ ﯾﺘﻢ اﻟﺤﺪﯾﺚ ﻋﻨﮭﺎ
ﻧﺸﺎط:
ﺗﻌﺮف ﻋﻠﻰ ﻛﯿﻔﯿﺔ اﺳﺘﺨﺪام اﻻواﻣﺮ اﻟﺘﺎﻟﯿﺔ ،اﻧﻈﺮ اﻟﻤﻠﺤﻖ ﻓﻲ اﻟﻜﺘﺎب اﻟﻤﻘﺮر:
اﻻﻣﺮ (Compare) : Cﯾﺴﺘﺨﺪم ﻟﻠﻤﻘﺎرﻧﺔ -
اﻻﻣﺮ (Search) :Sﯾﺴﺘﺨﺪم ﻟﻠﺒﺤﺚ -
اﻻﻣﺮ (Write) :W -
اﻻﻣﺮ (Load) : L -
اﻻﻣﺮ (Name) : N -
30
أﺳﺌﻠﺔ اﻟﺘﻘﻮﯾﻢ اﻟﺬاﺗﻲ )(2
(1ﻣﺎ ھﻮ اﻻﻣﺮ اﻟﻼزم ﻓﻲ ﺑﺮﻧﺎﻣﺞ Debugﻟﻌﺮض اﻟﻮﺿﻌﯿﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻠﺮاﯾﺎت؟
(2ﻣﺎ ھﻮ اﺳﺘﺨﺪام اﻻﻣﺮ T؟
(3ﻛﯿﻒ ﯾﺘﻢ ﻋﺮض ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ 1FA2ﻓﻲ اﻟﺬاﻛﺮة؟ اﻛﺘﺐ اﻻﻣﺮ اﻟﻼزم.
(4ﻛﯿﻒ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻟﻘﯿﻤﺔ 23ﻓﻲ اﻟﻤﻮﻗﻊ 234ﺑﺎﺳﺘﺨﺪام أواﻣﺮ Debug؟
(5اﺳﺘﺨﺪم اﻻﻣﺮ Uﻟﺘﺤﻮﯾﻞ ﻛﻮد اﻵﻟﺔ اﻟﻤﺨﺰن ﻓﻲ اﻟﻤﻮاﻗﻊ 120إﻟﻰ 133إﻟﻰ ﻣﺎ ﯾﻘﺎﺑﻠﮫ ﺑﻠﻐﺔ اﻻﺳﻤﺒﻠﻲ؟
.7ﻨﺸﺎط ﺘدرﯿﺒﻲ
ھﺬا اﻟﻨﺸ�ﺎط ﺧﺎص ﺑﺒﺮﻧﺎﻣﺞ اﻛﺘﺸﺎف اﻷﺧﻄﺎء اﻟﻤﻨﻘﺢ ,DEBUGإذا اﺣﺘﺠﺖ إﻟﻰ أي اﺳﺘﻔﺴﺎر ﻋﻦ ھﺬا اﻟﺘﻄﺒﯿﻖ ﯾﻤﻜﻨﻚ اﻟﺮﺟﻮع
إﻟﻰ اﻟﻤﺎدة اﻟﺴﺎﺑﻘﺔ ﻟﻠﺘﻌﺮف ﻋﻠﻰ أواﻣﺮ أل ) DEBUGوﯾﻔﻀﻞ أن ﯾﺘﻢ ﺗﻨﻔﯿﺬه أﻣﺎم ﻋﻀﻮ ھﯿﺌﺔ اﻟﺘﺪرﯾﺲ ﻓﻲ ﻣﺨﺘﺒﺮ اﻟﺤﺎﺳﻮب(
اﻟﻔﺮع اﻷول
اﻧﺘﻘﻞ إﻟﻰ ﻧﻈﺎم ﺗﺸ�ﻐﯿﻞ أل DOSوﺗﺄﻛﺪ ﻣﻦ وﺟﻮد اﻟﺒﺮﻧﺎﻣﺞ . DEBUGﻟﺘﺸ�ﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ادﺧﻞ DEBUGأﻣﺎم إﺷﺎرة اﻟﺤﺚ
ﻓﻲ ﻧﻈﺎم اﻟﺪوس ﺛﻢ اﺿﻐﻂ ENTER
ﺗﻈﮭﺮ ﺑﻌﺪ ذﻟﻚ إﺷﺎرة ﺳﺎﻟﺐ – ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ أن اﻟﺒﺮﻧﺎﻣﺞ ﻣﺴﺘﻌﺪ ﻻﺳﺘﻘﺒﺎل اﻷواﻣﺮ
-R AX R AXﺛﻢ ENTER أطﺒﻊ ﻣﺎ ﯾﻠﻲ أﻣﺎم إﺷﺎرة اﻟﺴﺎﻟﺐ -
ﺛﻢ ادﺧﻞ اﻟﺮﻗﻢ 13ﺛﻢ ENTER
-R BX R BXﺛﻢ ENTER أطﺒﻊ ﻣﺎ ﯾﻠﻲ أﻣﺎم إﺷﺎرة اﻟﺴﺎﻟﺐ -
ﺛﻢ ادﺧﻞ اﻟﺮﻗﻢ 3ﺛﻢ ENTER
-E 100 E 100ﺛﻢ ENTER أطﺒﻊ ﻣﺎ ﯾﻠﻲ أﻣﺎم إﺷﺎرة اﻟﺴﺎﻟﺐ -
ﺑﻌ��ﺪ ذﻟ���ﻚ ادﺧ���ﻞ 01ﺛﻢ اﺿ������ﻐﻂ ﻋﻠﻰ اﻟﻌ���ﺎرﺿ��������ﺔ اﻟﻄﻮﻟﯿ���ﺔ
SPACE BAR
ادﺧﻞ أﻻن اﻟﺮﻗﻢ D8ﺛﻢ ENTER
31
اﻟﻔﺮع اﻟﺜﺎﻧﻲ
-1ﺗﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺠﻞ IP = 100ﺛﻢ ادﺧﻞ ﻣﺎ ﯾﻠﻲ
-E 200
41 4C 51 55 44 53 20 4A 50 45 4E 20 55 4E 49 56 45 52 53 49 54 59 24
ﻻ ﺗﻨﺴ���ﻰ أن ﺗﻀ���ﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح ENTERﺑﻌﺪ إدﺧﺎل ﺟﻤﯿﻊ اﻟﻘﯿﻢ اﻟﺴ���ﺎﺑﻘﺔ .اﻟﻘﯿﻢ اﻟﺴ���ﺎﺑﻘﺔ ﯾﻤﻜﻦ اﻟﺤﺼ���ﻮل ﻋﻠﯿﮭﺎ ﻣﻦ اﻟﻤﻘﺮر
ﺻﻔﺤﺔ 338ﺷﯿﻔﺮة أﺳﻜﻲ ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎدس ﻋﺸﺮ
–A 100 ادﺧﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ ,ﻹدﺧﺎل اﻟﺘﻌﻠﯿﻤﺎت اﺳﺘﺨﺪم اﻷﻣﺮ Aﻛﻤﺎ ﯾﻠﻲ
ﺑﻌﺪ ذﻟﻚ ادﺧﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﻲ ﻛﻞ ﺗﻌﻠﯿﻤﺔ ﻋﻠﻰ ﺳﻄﺮ ﻣﺘﺒﻮﻋﺔ ﺑﻤﻔﺘﺎح اﻹدﺧﺎل ENTER
MOV AH,09
MOV DX,200
INT 21
INT 20
ﺛﻢ ﻣﻔﺘﺎح اﻹدﺧﺎل ENTERﺣﺘﻰ ﺗﻈﮭﺮ اﻹﺷﺎرة . -ﯾﻤﻜﻦ ﺗﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﺎت ﺑﺎﺳﺘﺨﺪام اﻷﻣﺮ Gأو اﻷﻣﺮ T
ﻣﺎ ھﻲ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﺣﺼﻠﺖ ﻋﻠﯿﮭﺎ
..............................................................................................
..............................................................................................
-2أﻋﺘﻤﺪ ﻋﻠﻰ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ وﺑﺎﻟﺮﺟﻮع إﻟﻰ اﻟﺼﻔﺤﺔ رﻗﻢ 338ﻣﻦ اﻟﻤﻘﺮر ،اﻛﺘﺐ ﻣﺤﺘﻮﯾﺎت اﻟﺬاﻛﺮة وﺗﻌﻠﯿﻤﺎت ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ
ﻟﻄﺒﺎﻋﺔ اﻟﻌﺒﺎرة ASSEMBLY LANGUAGE
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
اﻟﻔﺮع اﻟﺜﺎﻟﺚ
ﺑﺎﺳﺘﺨﺪام اﻟﺒﺮﻧﺎﻣﺞ DEBUGواﻟﺨﻮارزﻣﯿﺔ اﻟﺘﺎﻟﯿﺔ اﻛﺘﺐ ﺗﻌﻠﯿﻤﺎت ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ ﻟﻄﺒﺎﻋﺔ اﻟﺤﺮوف اﻻﻧﺠﻠﯿﺰﯾﺔ ﻣﻦ A..L
اﻟﺨﻮارزﻣﯿﺔ :
-1اﺳﻨﺪ ﻗﯿﻤﺔ اﻟﺮﻣﺰ Aوھﻲ 41Hإﻟﻰ اﻟﻤﺴﺠﻞ DX
-2اﺳﻨﺪ اﻟﻘﯿﻤﺔ 02إﻟﻰ اﻟﻤﺴﺠﻞ AHﻟﻄﺒﺎﻋﺔ اﻟﺮﻣﺰ
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
32
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
اﻟﻤراﺠﻊ.8
33
اﻟوﺤـدة اﻟﺜﺎﻨﯿﺔ
34
.1اﻟﻤﻘدﻤﺔ
1.1ﺘﻤﻬﯿد
ﻋزﯿزي اﻟطﺎﻟب ،أﻫﻼً ﺒك إﻟﻰ اﻟوﺤدة اﻟﺜﺎﻨﯿﺔ ﻤن اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻟﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ وﻫﻲ
ﺒﻌﻨوان ﻤﻘدﻤﺔ اﻟﻰ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ.
ﺘﻬدف ﻫذﻩ اﻟوﺤدة إﻟﻰ إﻋطﺎﺌك ﻤﻌﻠوﻤﺎت أﺴﺎﺴﯿﺔ ﻓﯿﻤﺎ ﯿﺘﻌﻠق ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺒراﻤﺞ اﻻﺴﻤﺒﻠﻲ وﺒرﻨﺎﻤﺞ اﻟﻤﺠﻤﻊ ﻤن ﺤﯿث
ﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﯾﻤﺮ ﺑﮭﺎ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ ،اﻟﺒﺮاﻣﺞ اﻟﻼزﻣﺔ اﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ وﺧﻄﻮات
اﻟﺘﻨﻔﯿﺬ
وﻗد ﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ﺒﺎﻟﻌدﯿد ﻤن اﻷﻤﺜﻠﺔ اﻟﺘوﻀﯿﺤﯿﺔ ،واﻟﺘدرﯿﺒﺎت ،إﻀﺎﻓﺔ إﻟﻰ ﺒﻌض أﺴﺌﻠﺔ اﻟﺘﻘوﯿم اﻟذاﺘﻲ واﻹﺸﻛﺎل
اﻟﺘﻲ ﺘوﻀﺢ ﺒﻌض اﻟﻤﻔﺎﻫﯿم.
ﻤرة أﺨرى ﻨرﺤب ﺒك ﻓﻲ ﻫذﻩ اﻟوﺤدة ،آﻤﻠﯿن أن ﺘﺴﺘﻤﺘﻊ ﺒدراﺴﺘك ﻟﻠﻤﺎدة اﻟﺘﻲ ﻨﻌرﻀﻬﺎ ﻟك ﻓﻲ ﻫذﻩ اﻟوﺤدة.
2.1أﻫداف اﻟوﺤدة
ﯿﻨﺘظر ﻤﻨك ،ﻋزﯿزي اﻟطﺎﻟب ،ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ:
3.1أﻗﺴﺎم اﻟوﺤدة
35
ﺘﺘﻛون ﻫذﻩ اﻟوﺤدة ﻤن ﺜﻼﺜﺔ أﻗﺴﺎم رﺌﯿﺴﺔ .ﻓﺎﻟﻘﺴم اﻷول ﯿوﻀﺢ .اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﯾﻤﺮ ﺑﮭﺎ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ
ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ ،اﻤﺎ اﻟﻘﺴم اﻟﺜﺎﻨﻲ ﻓﯿﻌرض اﻟﺒﺮاﻣﺞ اﻟﻼزﻣﺔ اﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ ﻣﻦ ﺣﯿﺚ ادﺧﺎل
اﻟﺒﺮاﻣﺞ وﻋﻤﻠﯿﺔ اﻟﺘﺠﻤﯿﻊ ﺑﻮﺳﺎطﺔ اﻟﻤﺠﻤﻊ MASMوﻋﻤﻠﯿﺔ اﻟﺮﺑﻂ ﺑﻮﺳﺎطﺔ .LINKاﻟﻘﺴم اﻟﺜﺎﻟث ﻓﯿوﻀﺢ ﻛﯿﻔﯿﺔ
ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ.
ﻟﻘد ﺘﻀﻤﻨت ﻫذﻩ اﻟوﺤدة اﻟﻌدﯿد ﻤن اﻟﻤﻔﺎﻫﯿم اﻷﺴﺎﺴﯿﺔ ،وﺒذﻟك ﻓﺎن طﺒﯿﻌﺔ اﻟﻤﺎدة اﻟﻤﻌروﻀﺔ ،ﻋزﯿزي اﻟطﺎﻟب،
ﺘﺤﺘﺎج إﻟﻰ ﺠو ﻫﺎدئ ﺨﺎص وﻤرﯿﺢ ﺤﺘﻰ ﺘﺴﺘطﯿﻊ اﻟﺘرﻛﯿز ﻋﻠﻰ اﻟﻤﻔﺎﻫﯿم اﻟﻤﻌطﺎة ،وﺘﺴﺘوﻋﺒﻬﺎ ﺒﺎﻟﺸﻛل اﻟﻤﻨﺎﺴب .وﻛل
ﻤﺎ ﺘﺤﺘﺎﺠﻪ ﺒﻌد ذﻟك ﺒﻌض اﻟﻘرطﺎﺴﯿﺔ ﻛﻘﻠم رﺼﺎص وورق أﺒﯿض ،ﺤﺎﺴوب وﺒرﻤﺠﯿﺎت ﻨظﺎم اﻻﺴﻤﺒﻠﻲ ) اﻟﻤﺠﻤﻊ( ﻟﺘﻘوم
ﺒﺘطﺒﯿق ﺒﻌض اﻟﻤﻔﺎﻫﯿم وﺘﺤل اﻷﺴﺌﻠﺔ واﻻﻤﺜﻠﺔ واﻟﺘدرﯿﺒﺎت اﻟﻤﻌطﺎة ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة .وﯿﻤﻛﻨك ﻋزﯿزي اﻟطﺎﻟب اﺴﺘﺨدام
اﻻﻨﺘرﻨت ﻟﻠﺒﺤث ﻋن ﺒﻌض اﻟﻤﻔﺎﻫﯿم واﻟﻤواﻀﯿﻊ اﻟﻤﺘﻌﻠﻘﺔ ﺒرﻨﺎﻤﺞ .Debugﻛﻤﺎ ان ﻫﻨﺎك ﺤﺎﺠﺔ اﻟﻰ:
.3ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻤراﺤل ﺘﻨﻔﯿذ ﺒراﻤﺢ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ) .راﺠﻊ اﻟوﺤدة اﻟراﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(.
.4ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ ﻟﻤﻌﺎﻟﺠﺔ ﺘﻌﻠﯿﻤﺎت اﻻﺨراج) .راﺠﻊ اﻟوﺤدة اﻟﺴﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(.
ﺴﻨﺘﻌرف ﻋزﯿزي اﻟطﺎﻟب ﻋﻠﻰ اﻟﻤراﺤل اﻟﺘﻲ ﯿﻤر ﺒﻬﺎ اﻟﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﺒﺎﺴﺘﺨدام ﻨظﺎم اﻷﺴﻤﺒﻠﻲ
،MASMﻋﻠﻤﺎً ﺒﺄن ﻫذﻩ اﻟﻤراﺤل ﺘطﺒق ﻷي ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻷﺴﻤﺒﻠﻲ ﺸﻛل ). (1
36
ﺸﻛل ) (1ﻣﺮاﺣﻞ ﻣﻌﺎﻟﺠﺔ ﺑﺮﻧﺎﻣﺞ اﻷﺳﻤﺒﻠﻲ
ﺘﻬدف ﻫذﻩ اﻟﻤرﺤﻠﺔ إﻟﻰ ﻨﻘل اﻟﺒرﻨﺎﻤﺞ إﻟﻰ اﻟﺤﺎﺴوب وﺘﺨزﯿﻨﻪ ﻋﻠﻰ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ( اﻟﻘرص اﻟﺼﻠب أو اﻟﻘرص اﻟﻤرن
او (. USBوﻋﺎدة ﻨﺴﺘﺨدم ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﻤن ﺨﻼل أﺤد ﺒراﻤﺞ ﻤﻌﺎﻟﺠﺔ اﻟﻨﺼوص Word processorأو
ﻤﺤرر اﻟﻨﺼوص Text editorﯿﺘم ادﺨﺎل اﻟﺒرﻨﺎﻤﺞ اﺒﺘداء ﻤن اﻟرﻤز اﻷول ﻓﻲ اﻟﺴطر اﻷول ﺤﺘﻰ ﻨﻬﺎﯿﺔ اﻟﺴطر،
وﻤن ﺜم اﻟرﻤز اﻷول ﻓﻲ اﻟﺴطر اﻟﺜﺎﻨﻲ ... ،وﻫﻛذا.
ﻛﻤﺎ ﻧﻮد ان ﻧﺬﻛﺮك ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ ان اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻜﺘﻮب ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﯾﺤﺐ أن ﯾﺨﺰن اﯾﻀﺎ ً ﻓﻲ ﻣﻠﻒ .ﯾﺘﻢ
اﺧﺘﯿﺎر أﺳﻤﺎء اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﺤﺘﻮي ﺑﺮاﻣﺞ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ ﺣﺴﺐ ﻗﻮاﻋﺪ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ( DOS ).ﺑﺤﯿﺚ ﯾﺤﺘﻮي
اﻟﺸﻖ اﻟﺜﺎﻧﻲ داﺋﻤﺎ ً اﻟﺮﻣﻮز ( ASM ).وﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻧﻔﺮض أن اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺗﻢ إدﺧﺎﻟﮫ ﻣﻦ ﻗﺒﻞ ﻗﺪ ﺧﺰن
ﻓﻲ ﻣﻠﻒ اﺳﻤﮫSOURC1. ASM .
-اﻛﺘﺸﺎف وﺘﺼﺤﯿﺢ اﻷﺨطﺎء اﻟﻤطﺒﻌﯿﺔ واﻟﻘواﻋدﯿﺔ ،أي اﻷﺨطﺎء اﻟﻨﺎﺠﻤﺔ ﻋن ﻤﺨﺎﻟﻔﺔ ﻗواﻋد اﻟﻠﻐﺔ.
37
-ﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري إﻟﻰ ﺒرﻨﺎﻤﺞ ﻫدﻓﻲ.
ﺘﻨﻔذ ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ ﺒواﺴطﺔ ﻤﺘرﺠم اﻻﺴﻤﺒﻠر اﻟذي ﯿﺤﻤل اﺴم MASMوﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ اﻟﺸﻛل ( ) 1ﻓﺈن اﻻﺴﻤﺒﻠر
ﻻ ﯿﻛون اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ إﻻ ﻓﻲ ﺤﺎﻟﺔ ﺨﻠو اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري ﻤن ﻛﺎﻓﺔ اﻷﺨطﺎء اﻟﻤطﺒﻌﯿﺔ واﻟﻘواﻋدﯿﺔ .وﻓﻲ ﺤﺎﻟﺔ
وﺠود ﻤﺜل ﻫذﻩ اﻷﺨطﺎء ﯿﺼدر اﻷﺴﻤﺒﻠر ﻗﺎﺌﻤﺔ ﺘﺘﻀﻤن رﻗم اﻟﺨطﺄ ،ورﻗم اﻟﺴطر اﻟذي ﯿﺤﺘوي اﻟﺨطﺄ ،ووﺼف
ﻗﺼﯿر ﻟﻠﺨطﺄ .إن وﺠود اﺨطﺎء ﻗواﻋدﯿﺔ ﯿﺘطﻠب ﻤن اﻟﻤﺒرﻤﺞ اﻟرﺠوع إﻟﻰ ﻤرﺤﻠﺔ ادﺨﺎل اﻟﺒرﻨﺎﻤﺞ ﻹﺠراء اﻟﺘﺼﺤﯿﺤﺎت
واﻟﺘﻌدﯿﻼت اﻟﻼزﻤﺔ وﺘﺴﺘﻤر ﻋﻤﻠﯿﺔ اﻻﻨﺘﻘﺎل ﺒﯿن ﻤرﺤﻠﺘﻲ اﻹدﺨﺎل واﻟﺘرﺠﻤﺔ ﻟﺤﯿن اﻟﺤﺼول ﻋﻠﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ .
ﻻ ﺘﻨﺴﻰ ،ﻋزﯿزي اﻟطﺎﻟب ،أن ﺘﺨزن اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ ﺒﻌد إﺠراء أي ﺘﻐﯿﯿر ﻋﻠﯿﻪ ،ﻓﺎﻟﺘﻐﯿﯿر اﻟذي ﺘﺠرﯿﻪ
ﻋن طرﯿق ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﯿﺘم ﻋﻠﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺨزن ﻓﻲ اﻟذاﻛرة اﻟرﺌﯿﺴﺔ ﻓﻲ ﺤﯿن أن اﻷﺴﻤﺒﻠر ﯿﻌﺎﻟﺞ اﻟﺒرﻨﺎﻤﺞ
اﻟﻤﺨزن ﻓﻲ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ.
أن اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ اﻟﻨﺎﺘﺞ ﻤن ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ ﻻ ﯿﻛون ﺠﺎﻫ ًاز ﻟﻠﺘﻨﻔﯿذ ﺒﺴﺒب اﺤﺘواﺌﻪ ﻋﻠﻰ رﻤوز ﻻ ﯿﺴﺘطﯿﻊ ﺒرﻨﺎﻤﺞ
اﻷﺴﻤﺒﻠر ﺘرﺠﻤﺘﻬﺎ إﻟﻰ ﻟﻐﺔ اﻵﻟﺔ ﻓﻲ ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ .ﻓﻤﺜﻼً ،ﯿﻤﻛن أن ﯿﺤﺘوي اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﺴﺘدﻋﺎء ﻟﺒراﻤﺞ ﻤﻛﺘﺒﯿﺔ
أو ﺒراﻤﺞ أﺨرى ﻟﻠﻤﺴﺘﺨدم ﺘﻤت ﺘرﺠﻤﺘﻬﺎ ﺴﺎﺒﻘﺎً ﺒﺸﻛل ﻤﻨﻔﺼل ﻋن اﻟﺒرﻨﺎﻤﺞ اﻟﺤﺎﻟﻲ .أن ﺘرﺠﻤﺔ ﻤﺜل ﻫذﻩ اﻻﺴﺘدﻋﺎءات
ﺘﺘم ﻓﻲ ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر وﺘﺘطﻠب اﻟﺒﺤث ﻋن ﻫذﻩ اﻟﺒراﻤﺞ ودﻤﺠﻬﺎ ﻤﻊ اﻟﺒرﻨﺎﻤﺞ اﻟﺤﺎﻟﻲ ﻟﺘﻛوﯿن ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي
واﺤد.
ﺘﻨﻔذ ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﺒوﺴﺎطﺔ ﺒرﻨﺎﻤﺞ اﻟرﺒط واﻟﺘﺤرﯿر ، Linkerاﻟذي ﯿﺴﺘﻘﺒل ﺒرﻨﺎﻤﺠﺎً ﺒرﻨﺎﻤﺠﺎً ﻫدﻓﯿﺎً واﺤداً
)أو ﻤﺠﻤوﻋﺔ ﺒراﻤﺞ ﻫدﻓﯿﺔ (ﻤﺨزن ﻋﻠﻰ اﻟذاﻛرة اﻟﻤﺴﺎﻋدة وﯿﺤوﻟﻪ إﻟﻰ ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي .ﯿﻼﺤظ أن اﺴم اﻟﺒرﻨﺎﻤﺞ
اﻟﻬدﻓﻲ ﯿﺘﻀﻤن ﻋﺒﺎرة ( Obj ).ﻓﻲ ﺤﯿن أن اﺴم اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي ﯿﺘﻀﻤن ﻋﺒﺎرة. EXE
ﯿﺘﻛون اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي ﻓﻘط ﻓﻲ ﺤﺎﻟﺔ ﺨﻠو اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ) اﻟﺒراﻤﺞ اﻟﻬدﻓﯿﺔ (ﻤن اﻷﺨطﺎء .وﻓﻲ ﺤﺎﻟﺔ وﺠود اﺨطﺎء
ﻓﻲ ﻋﻤﻠﯿﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﯿﺠب اﻟرﺠوع إﻟﻰ ﻤرﺤﻠﺔ اﻻدﺨﺎل ﻹﺠراء اﻟﺘﻌدﯿﻼت اﻟﻼزﻤﺔ ،واﺠراء ﻋﻤﻠﯿﺔ اﻟﺘرﺠﻤﺔ،
وﻤن ﺜم ﺘﻨﻔﯿذ ﻋﻤﻠﯿﺔ اﻟرﺒط واﻟﺘﺤرﯿر.
وﺘﺴﺘﻤر ﻋﻤﻠﯿﺔ اﻻﻨﺘﻘﺎل ﺒﯿن ﻤراﺤل اﻹدﺨﺎل واﻟﺘرﺠﻤﺔ واﻟرﺒط واﻟﺘﺤرﯿر ﻟﺤﯿن ﺘﻛوﯿن اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي
38
أن اﻟﺒرﻨﺎﻤﺞ اﻟﻨﺎﺘﺞ ﺒﻌد ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﯿﺼﺒﺢ ﺠﺎﻫ اًز ﻟﻠﺘﻨﻔﯿذ .ﺘﻬدف ﻤرﺤﻠﺔ اﻟﺘﻨﻔﯿذ إﻟﻰ اﻟﺤﺼول ﻋﻠﻰ اﻟﻨﺘﺎﺌﺞ
اﻟﻤطﻠوﺒﺔ.وﯿوﺠد طرﯿﻘﺘﺎن ﻟﺘﻨﻔﯿذ اﻟﺒراﻤﺞ ﻫﻤﺎ:
ﺘﺴﺘﺨدم اﻟطرﯿﻘﺔ اﻟﻤﺒﺎﺸرة ﻋﺎدة ﻓﻲ اﻟﺤﺎﻻت اﻟﺘﻲ ﯿﺘﻀﻤن ﻓﯿﻬﺎ اﻟﺒرﻨﺎﻤﺞ وﺴﺎﺌل ﻹدﺨﺎل اﻟﻤﻌطﯿﺎت واﺨراج اﻟﻨﺘﺎﺌﺞ
إﻟﻰ وﺤدات اﻹﺨراج اﻟﻤﻨﺎﺴﺒﺔ .ﺘﺴﺘﺨدم اﻟطرﯿﻘﺔ اﻟﺜﺎﻨﯿﺔ ﻓﻲ اﻟﺤﺎﻻت اﻟﺘﻲ ﻻ ﯿﺘﻀﻤن اﻟﺒرﻨﺎﻤﺞ ﻓﯿﻬﺎ ﻤﺜل ﻫذﻩ اﻟوﺴﺎﺌل
أو اﻟﺤﺎﻻت اﻟﺘﻲ ﺘؤدي إﻟﻰ ﻨﺘﺎﺌﺞ ﺨﺎطﺌﺔ أو ﻻ ﺘﻌطﻲ أي ﻨﺘﺎﺌﺞ ﺴﺒب وﺠود اﺨطﺎء ﻤﻨطﻘﯿﺔ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ ﻨﻔﺴﻪ.
وﺘﺒﻌﺎً ﻟﻠطرﯿﻘﺔ اﻟﻤﺒﺎﺸرة ﯿﺘم ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﺒﻛﺘﺎﺒﺔ اﺴم اﻟﺒرﻨﺎﻤﺞ ﻓﻘط SOURCE1ﺒﻌد اﻟﺤﺼول ﻋﻠﻰ اﺸﺎرة ﺠﺎﻫزﯿﺔ
اﻟﺤﺎﺴوب ﻻﺴﺘﻘﺒﺎل اﻷﻤر اﻟﺘﺎﻟﻲ .وﻫﻨﺎ ﯿﺒدأ اﻟﺤﺎﺴوب ﻓو اًر ﺒﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ طﺒﻘﺎً ﻟﺘﺴﻠﺴل اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻛوﻨﺔ ﻟﻪ.
وﺘﺒﻌﺎً ﻟﻠطرﯿﻘﺔ اﻟﺜﺎﻨﯿﺔ ﯿﺘم ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﻤن ﺨﻼل اﺴﺘدﻋﺎء ﺒرﻨﺎﻤﺞ ) ( Debugاﻟذي ﺒدورﻩ ﯿطﻠب ﻤن اﻟﻤﺴﺘﺨدم
طﺒﺎﻋﺔ اﻷواﻤر ﻋن طرﯿق ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ .ﯿﺴﺘﺨدم ﺒرﻨﺎﻤﺞ Debugﻟﺘﻨﻔﯿذ اﻟﻌﻤﻠﯿﺎت اﻵﺘﯿﺔ:
39
• ﻨﻨﺘﻘل اﻟﻰ اﻟدﻟﯿل اﻟﻔرﻋﻲ اﻟذي ﯿﺤﺘوي ﻋﻠﻰ ﻤﺠﻤﻊ ﺒرﻨﺎﻤﺞ أﺴﻤﺒﻠﻲ.
• ﯿﺴﺘﺨدم ﺒرﻨﺎﻤﺞ اﻷﺴﻤﺒﻠر MASMﻟﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري إﻟﻰ ﺒرﻨﺎﻤﺞ ﻫدﻓﻲ ﺒواﺴطﺔ اﻷﻤر اﻟﺘﺎﻟﻲ،
ﻤﺘﺒوع ﺒﻔﺎﺼﻠﺔ ﻤﻨﻘوطﺔ ;
C> MASM
;C> MASM SOURCE1.ASM
• ﺒﻌد إﻛﻤﺎل ﻋﻤﻠﯿﺔ اﻟﺘرﺠﻤﺔ ﯿﻠزم ﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ اﻟﻨﺎﺘﺞ إﻟﻰ ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي ﺒوﺴﺎطﺔ ﺒرﻨﺎﻤﺞ اﻟرﺒط
واﻟﺘﺤرﯿك اﻟذي ﯿﺴﺘدﻋﻰ ﻤن ﺨﻼل اﻻﻤر:
C> LINK
;C> LINK SORCE1
Object Modules [.OBJ]: SOURCE1
Run File [SOURCE1.EXE]: SOURCE1
List File [NUL.MAP]: SOURCE1
Libraries [.LIB] :
.4اﻟﻤﺜﺎل اﻻول
40
" ﻋﻠﻰ اﻟﺸﺎﺸﺔHello World" ﻟﻨﺘﺒﻊ ﺨطوات ﻛﺘﺎﺒﺔ ﺒرﻨﺎﻤﺞ ﻟﯿطﺒﻊ اﻟﻌﺒﺎرة
ﻨﻨﺘﻘل اﻟﻰ اﻟدﻟﯿل اﻟﻔرﻋﻲ اﻟذي ﯿﺤﺘوي ﻋﻠﻰ ﻤﺠﻤﻊ ﺒرﻨﺎﻤﺞ أﺴﻤﺒﻠﻲ وﻓﻲ ﻤﺜﺎﻟﻨﺎ ﺘم اﺴﺘﺨدام دﻟﯿل ﻗرﻋﻲ-1
CD MASM DOS ﺒﺎﺴﺘﺨدام اﻻﻤر اﻟﺘﺎﻟﻲ ﻤن اﻟدوس.MASM ﺒﺎﺴم
ﺘوﺠﯿﻬﺎت وﺘﻌﻠﯿﻤﺎت ﻟﻐﺔ أﺴﻤﺒﻠﻲ. ادﺨﺎل ﻨص اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري ﺒوﺴﺎطﺔ أﺤد ﻤﻌﺎﻟﺠﺎت اﻟﻨﺼوص-2
." ﻋﻠﻰ اﻟﺸﺎﺸﺔHello World" اﻟﺘﺎﻟﯿﺔ ﺘﻘوم ﺒطﺒﺎﻋﺔ اﻟﻌﺒﺎرة
hellostk SEGMENT BYTE STACK 'STACK' ;Define the stack segment
DB 100h DUP(?) ;Set maximum stack size to 256 bytes (100h(
hellostk ENDS
41
mov ax, 4c00h ;ax <-- 4c DOS 21h program halt function
int 21h ;DOS service interrupt
hellocod ENDS
END START ; ?END label? defines program entry
-3ﺘﺨزﯿن اﻟﻤﻠف ﺒﺎﺴم hello.asmﻓﻲ ﻨﻔس اﻟدﻟﯿل اﻟﻔرﻋﻲ اﻟذي ﯿﺤﺘوي ﻋﻠﻰ ﻤﺠﻤﻊ ﻟﻐﺔ اﺴﻤﺒﻠﻲ
-4ﻨﺴﺘﺨدم ﺒرﻨﺎﻤﺞ اﻷﺴﻤﺒﻠر MASMﻟﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري إﻟﻰ ﺒرﻨﺎﻤﺞ ﻫدﻓﻲ ﺒواﺴطﺔ اﻷﻤر اﻟﺘﺎﻟﻲ،
ﻤﺘﺒوع ﺒﻔﺎﺼﻠﺔ ﻤﻨﻘوطﺔ ;
;C\ MASM> MASM hello.asm
-5ﺒﻌد إﻛﻤﺎل ﻋﻤﻠﯿﺔ اﻟﺘرﺠﻤﺔ ﺒدون أﺨطﺎء ﯿﻠزم ﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ اﻟﻨﺎﺘﺞ إﻟﻰ ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي ﺒوﺴﺎطﺔ
ﺒرﻨﺎﻤﺞ اﻟرﺒط اﻟذي ﯿﺴﺘدﻋﻰ ﻤن ﺨﻼل اﻻﻤر:
;C\ MASM> LINK hello
-6ﺒﻌد إﻛﻤﺎل ﻋﻤﻠﯿﺔ اﻟﺘﺤوﯿل ﺒدون أﺨطﺎء ﻨدﺨل اﺴم اﻟﺒرﻨﺎﻤﺞ helloﻟﺘﻨﻔﯿذﻩ ﺜم ﻤﻔﺘﺎح اﻻدﺨﺎل .ﻓﯿطﺒﻊ
ﻟﻨﺎ اﻟﺒرﻨﺎﻤﺞ اﻟﻌﺒﺎرة Hello Worldﻋﻠﻰ اﻟﺸﺎﺸﺔ.
42
اﻟﻤﺴﻤﻰ MES
ّ ﺒﺎﻟرﺠوﻋﺎﻟﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق ﻨرى اﻨﻪ أن ﻟدﯿﻨﺎ ﺴﻠﺴﻠﺔ ﻤن اﻟرﻤوز ﻓﻲ ﻗطﺎع اﻟﻤﻌطﯿﺎت ﺘﺒدأ ﺒﺎﻟﺒﺎﯿت
وﺘﻨﺘﻬﻲ ﺒﺎﻟﺒﺎﯿت اﻟذي ﯿﺤﺘوي رﻤز إﺸﺎرة اﻟدوﻻر $.اﻟﻤطﻠوب ﻋرض ﺴﻠﺴﻠﺔ اﻟرﻤوز ﻋﻠﻰ اﻟﺸﺎﺸﺔ.
strng DB 'Hello World',13,10,'$' ;Define the character string
وﺒﺎﻟرﺠوع إﻟﻰ اﻟوﺤدة اﻟﺴﺎﺒﻌﺔ ﻨﺠد أن ﻋرض ﺴﻠﺴﻠﺔ رﻤوز ﻋﻠﻰ اﻟﺸﺎﺸﺔ ﯿﻤﻛن أن ﺘﻨﻔد ﺒﺈﺴﺘﺨدام اﻟﻤﻬﻤﺔ رﻗم 9ﻓﻲ
اﻹﻋﺘراض رﻗم 21Hﻛﻤﺎ ﻓﻲ ﺴﻠﺴﻠﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻵﺘﯿﺔ:
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
ﻨوﻀﺢ ﻛل ﺘﻌﻠﯿﻤﺔ ﻋﻠﻰ اﻟﻨﺤو اﻟﺘﺎﻟﻲ:
ﻟﺘﺨزﯿن ﻗﯿﻤﺔ اﻹزاﺤﺔ ﻟﺴﻠﺴﻠﺔ اﻟرﻤوز strngﻓﻲ اﻟﻤﺴﺠل .DXوﯿﻤﻛن ان ﻨﺴﺘﺨدم ﺘﻌﻠﯿﻤﺔ LEAﻟﺘﺨزﯿن ﻗﯿﻤﺔ
LEA dx, strng اﻹزاﺤﺔ ﻟﺴﻠﺴﻠﺔ اﻟرﻤوز strngﻓﻲ اﻟﻤﺴﺠل;dx <-- beginning of string .DX
وﺘﺠدر اﻹﺸﺎرة ﻫﻨﺎ إﻟﻰ أن ﺴﻠﺴﻠﺔ اﻟرﻤوز strngاﻟﻤطﻠوب ﻋرﻀﻬﺎ ﻋﻠﻰ اﻟﺸﺎﺸﺔ ﯿﺠب أن ﺘﻨﺘﻬﻲ ﺒﺈﺸﺎرة $.وﻓﻲ
ﺤﺎﻟﺔ ﻋدم وﺠود ﻫذﻩ اﻹﺸﺎرة ﻓﻲ ﻨﻬﺎﯿﺔ ﺴﻠﺴﻠﺔ اﻟرﻤوز ﻓﺈن ﻋﻤﻠﯿﺔ ﻋرض اﻟرﻤوز ﻤن اﻟذاﻛرة اﻟرﺌﯿﺴﯿﺔ ﻋﻠﻰ اﻟﺸﺎﺸﺔ
ﺴوف ﺘﺴﺘﻤر ﻟﺤﯿن اﻟوﺼول إﻟﻰ ﺒﺎﯿت ﯿﺤﺘوي إﺸﺎرة$.
ﺘدرﯿب )(1
اﻋد ﻛﺘﺎﺒﺔ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق ﻟطﺒﺎﻋﺔ اﺴﻤك ,رﻗﻤك اﻟﺠﺎﻤﻌﻲ ﻋﻠﻰ اﻟﺸﺎﺸﺔ
43
اﻟﺤل
mov ax, 4c00h ;ax <-- 4c DOS 21h program halt function
int 21h ;DOS service interrupt
hellocod ENDS
END START ; ?END label? defines program entry
44
ﺒﻌد ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ اﺠب ﻋن اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﯿﺔ:
45
اﻟوﺤـدة اﻟﺜﺎﻟﺜﺔ
46
.1ﻤﻘدﻤﺔ
أﻤﺎ ﺒﺎﻟﻨﺴﺒﺔ اﻟوﺤدة اﻟﺜﺎﻟﺜﺔ ﻤن اﻟﻌﻤﻠﻲ ﻓﻬﻲ ﻤرﺘﺒطﺔ ﺒﺎﻟوﺤدة اﻟﺴﺎدﺴﺔ ﻤن اﻟﻛﺘﺎب وﺘﻌﺎﻟﺞ طﺎﻗم اﻟﺘﻌﻠﯿﻤﺎت اﻟﺨﺎﺼﺔ
ﺒﺎﻟﻤﻌﺎﻟﺞ اﻟدﻗﯿق ﻤن ﻨوع 8088 / 8086 .وﺴﺘﻨﺎول ﻓﻲ ﻫذﻩ اﻟوﺤدة اﻟﺼﯿﻐﺔ اﻟﻌﺎﻤﺔ ﻟﺘﻌﻠﯿﻤﺎت ﻟﻐﺔ أﺴﻤﺒﻠﻲ واﻟﺘﻌﻠﯿﻤﺎت
اﻟﻤﺨﺘﻠﻔﺔ ﻤن ﻋﻠﯿﻤﺎت ﻨﻘل اﻟﺒﯿﺎﻨﺎت ،اﻟﺘﻌﻠﯿﻤﺎت اﻟﺤﺴﺎﺒﯿﺔ .،وﺴﯿﺘم اﻟﺤدﯿث ﻋن ﺘﻌﻠﯿﻤﺎت ﻨﻘل اﻟﺘﺤﻛم ،ﺘﻌﻠﯿﻤﺎت
ﻤﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻨﺎت اﻟﺜﻨﺎﺌﯿﺔ ،ﺘﻌﻠﯿﻤﺎت ﻤﻌﺎﻟﺠﺔ ﺴﻼﺴل اﻟرﻤوز ﻓﻲ اﻟوﺤدة اﻟﺘﺎﻟﯿﺔ.
وﺴﺘﺠد ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة أﻤﺜﻠﺔ وﺘدرﯿﺒﺎت وأﺴﺌﻠﺔ ﺘﻘوﯿم ذاﺘﻲ ﻋﻠﻰ اﻟﻤواﻀﯿﻊ اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ اﻟوﺤدة ﻟﻤﺴﺎﻋدﺘك ﻋﻠﻰ ﻓﻬم
ﻤﺎدة اﻟﻤﻘرر.
ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة وﺘﻨﻔﯿذ اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻋﻠﻰ اﻟﺤﺎﺴوب ﯿﻨﺘظر ﻤﻨك ﻋزﯿزي اﻟطﺎﻟب أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ:
اﻛﺘب ﺒرﻨﺎﻤﺞ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﺠﻤﻊ ﻋددﯿن ﺼﺤﯿﺤﯿن طول ﻛل ﻤﻨﻬﻤﺎ 32ﺒت ) 32 bitاﻟﻘﯿم ﺒﺎﻟﻨظﺎم
اﻟﺴﺎدس ﻋﺸر( ،ﺤﯿث ان اﻟﻘﯿم اﻷدﻨﻰ ﻤﺴﺘوى ﻤن اﻟﻌدد اﻷول واﻟﺜﺎﻨﻲ ﺴﯿﺘم ﺠﻤﻌﻬﺎ وﺘﺨزﯿﻨﻬﺎ ﻓﻲ اﻟﻤﺴﺠل DX
و اﻟﻘﯿم اﻻﻋﻠﻰ ﻤﺴﺘوى ن اﻟﻌدد اﻷول واﻟﺜﺎﻨﻲ ﻓﻲ اﻟﻤﺴﺠل CX
47
val2 val1 اﻟﻌدد اﻷول
2222h 1111h
4444h 3333h
data segment
val1 dw 1111h
val2 dw 2222h
val3 dw 3333h
val4 dw 4444h
data ends
code segment
assume cs:code, ds:data
start :
mov ax, data
mov ds, ax
48
mov ax, 4c00h
int 21h
code ends
end start
ﻟﻠﺘﺄﻛد ﻤن اﻟﻨﺘﺎﺌﺞ ﯿﻤﻛن اﺴﺘﺨدام ﺒرﻨﺎﻤﺞ DEBUGﻟﻤﺘﺎﺒﻌﺔ ﺨطوات ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ واﻟﻘﯿم ﻓﻲ ﻛل ﻤن ﻤواﻗﻊ
اﻟذاﻛرة واﻟﻤﺴﺠﻼت .ﻟﻠﻘﯿﺎم ﺒذﻟك
ﻨﺴﺘﺨدم اﻻﻤر Tﻟﺘﻨﻔﯿذ ﺠﻤل اﻟﺒرﻨﺎﻤﺞ ﺘﻌﻠﯿﻤﺔ ﺘﻌﻠﯿﻤﻪ وﻤﺘﺎﺒﻌﺔ اﻟﻘﯿم ﻓﻲ اﻟﻤﺴﺠﻼت ﻛﻤﺎ ﯿﻠﻲ:
49
أﺴﺌﻠﺔ
اﻛﺘب ﺒرﻨﺎﻤﺞ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﺘﺒدﯿل ﻤﺤﺘوﯿﺎت اﻟﻤوﻗﻌﯿن او اﻟﻤﺘﻐﯿرﯿن Aو ) Bاﻟﻘﯿم ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس
ﻋﺸر( ،ﺤﯿث ان اﻟﻤوﻗﻊ اﻷول ﯿﺤﺘوي ﻋﻠﻰ ﻗﯿﻤﺔ 10 = Aاﻟﻤوﻗﻊ اﻟﺜﺎﻨﻲ ﯿﺤﺘوي ﻋﻠﻰ ﻗﯿﻤﺔ 20 = B
50
ASSUME DS:DATA,CS:CODE, ,ss: stk
START:
MOV AX,DATA
MOV DS,AX
MOV AL,A
MOV AH,B
MOV A,AH
MOV B,AL
MOV BL,A
MOV BH,B
MOV AH,4CH
INT 21
CODE ENDS
END START
ﺨطوات اﻟﺘﻨﻔﯿذ
51
ﺘدرﯿب )(1
اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﺠﻤﻊ ﻋددﯿن ٕواﯿﺠﺎد ﻤﻌدﻟﻬﻤﺎ ﺜم ﺘﺨزﯿن اﻟﻨﺘﯿﺠﺔ ﻓﻲ اﻟذاﻛرة.
52
:اﻟﺤل
; Program to save average of 2 numbers in Assembly Language
stack segment
stack ends
data segment
temp1 dw 6h
temp2 dw 8h
avg1 db 2h
temp3 db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,temp1
add ax,temp2
div avg1
mov temp3,al
mov ax,4c00h
int 21h
code ends
end start
ﯿﻤﻛﻨك إﻋﺎدة ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﺒﺎﻟﺘﻌدﯿﻼت او،ادرس اﻟﺒرﻨﺎﻤﺞ او اﻟﺤل اﻟﺴﺎﺒق وﺤﺎول اﻻﺠﺎﺒﺔ ﻋﻠﻰ اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﯿﺔ
:اﻷﺴﺌﻠﺔ اﻟﻤطﻠوﺒﺔ
53
-1ﻫل ﯿﻤﻛن ان ﻨﺴﺘﺒدل avg1ب اﻟﻘﯿﻤﺔ 2ﻓﻲ اﻟﺘﻌﻠﯿﻤﯿﺔ ،div avg1ﻤﻊ ﺒﯿﺎن اﻟﺴﺒب ...................
-2ﻟﻤﺎذا ﻟم ﻨﺠﻤﻊ ﻤﺤﺘوﯿﺎت اﻟﻤﺘﻐﯿرات temp1و temp2ﻤﺒﺎﺸرة ....................................
-3ﻫل ﯿﻤﻛن ﺘﺨزﯿن ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿر temp1ﻓﻲ اﻟﻤﺴﺠل ALوﻟﻤﺎذا .....................................
-4ﻟﻤﺎذا اﺴﺘﺨدم اﻟﻤﺘﻐﯿر temp3ﻓﻲ اﻟﺒرﻨﺎﻤﺞ ..........................................................
-5ﻤﺎذا ﺘﻌﻨﻲ إﺸﺎرة اﻟﺴؤال ﻓﻲ اﻟﺘوﺠﯿﻬﺔ اﻟﺘﺎﻟﯿﺔ ? ............................................. temp3 db
54
اﻟوﺤـدة اﻟراﺒﻌﺔ
55
.1ﻤﻘدﻤﺔ
إن اﻟﺸﻛل اﻻﻋﺘﯿﺎدي ﻟﺴﯿر ﺘﻨﻔﯿذ ﺘﻌﻠﯿﻤﺎت أي ﺒرﻨﺎﻤﺞ ﻤن اﻟﺒراﻤﺞ ﻫو اﻟﺸﻛل اﻟﺘﺴﻠﺴﻠﻲ ،أي أن اﻟﺘﻌﻠﯿﻤﺎت ﺘﻨﻔذ ﺤﺴب
ﻤوﻗﻌﻬﺎ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ .إﻻ أﻨﻪ وﻓﻲ ﺒﻌض اﻷﺤﯿﺎن ﻗد ﯿﺘطﻠب اﻷﻤر ﺘﻐﯿﯿر ﻫذا اﻟﺘﺴﻠﺴل واﻻﻨﺘﻘﺎل ﺒﺴﯿر ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ
إﻟﻰ ﺘﻌﻠﯿﻤﺔ ﻤﻌﯿﻨﺔ وﻓﻘﺎً ﻟﻠﺘﺴﻠﺴل اﻟﻤﻨطﻘﻲ ﻟﻠﺒرﻨﺎﻤﺞ وﻟﯿس وﻓﻘﺎً ﻟﻠﺘﺴﻠﺴل اﻟﻤوﻗﻌﻲ.
ﺘﻤﺘﻠك ﻟﻐﺔ أﺴﻤﺒﻠﻲ ﻤﺠﻤوﻋﺔ ﻤن اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﺨﺼﺼﺔ ﻟﻬذﻩ اﻟﻐﺎﯿﺔ ،ﺤﯿث ﺘﺴﺘﺨدم ﻫذﻩ اﻟﺘﻌﻠﯿﻤﺎت ﻟﻨﻘل اﻟﺘﺤﻛم
وﺘﻐﯿﯿر ﺴﯿر ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ.
ﻤﻨﻪJMP, CALL, RET -ﺘﻌﻠﯿﻤﺎت اﻟﻘﻔز ﻏﯿر اﻟﻤﺸروط واﺴﺘدﻋﺎء اﻟﺒرﻨﺎﻤﺞ اﻟﻔرﻋﻲ واﻟﻌودة
وﻓﯿﻤﺎ ﯿﺄﺘﻲ اﻤﺜﻠﺔ ﺘوﻀﺢ وﺸرح ﺒﻌض ﻫذا اﻟﺘﻌﻠﯿﻤﺎت :ﻤن ﺨﻼل ﺘطﺒﯿﻘﺎت ﺒرﻤﺠﯿﺔ ﻋﻠﻰ اﻟﺤﺎﺴوب.
اﻛﺘب ﺒرﻨﺎﻤﺞ ﻹدﺨﺎل ﻋددﯿن وطﺒﺎﻋﺔ Yﻓﻲ ﺤﺎﻟﺔ ﻛون اﻟﻌددﯿن ﻤﺘﺴﺎوﯿن وﯿطﺒﻊ Nﻓﻲ ﺤﺎﻟﺔ ﻋدم ﻤﺴﺎواة
اﻟﻌددﯿن.
56
yy db 0
*****************************;
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
*****************************;
ASSUME CS:CODE,DS:DATA,SS:STACK
PROG PROC FAR
PUSH DS
MOV AX,0H
PUSH AX
MOV AX,DATA
MOV DS,AX
************************;
mov cx,1
next: mov ah,1
int 21h
mov xx,al
;mov ah,21h
mov ah,1
int 21h
mov yy ,al
mov bh,xx
mov bl,yy
cmp bh,bl
jne notequal
eqlual:
mov dl,'Y'
mov ah,2 ; Writes one character to the standard output (screen). DOS 1.x function
(obsolete(
int 21h
jmp continue;
57
notequal:
'mov dl,'N
mov ah,2
int 21h
continue:
loop next
;*************************
RET
PROG ENDP
CODE ENDS
END PROG
ﺘدرﯿب 1
اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﻤﻘﺎرﻨﺔ ﻋددﯿن A= 10 , B= 20وطﺒﺎﻋﺔ اﺤد اﻟﻌﺒﺎرات اﻟﺘﺎﻟﯿﺔ ﻤﺘﺴﺎوﯿن
او اﻛﺒر او اﺼﻐر،
58
-1ﺒﺤﯿث ﺘﻛون اﻟﻨﺘﺎﺌﺞ ﻛﻤﺎ ﯿﻠﻲ:
BOTH A AND B ARE EQUAL ﯿطﺒﻊ اﻟﻌﺒﺎرة اﻟﺘﺎﻟﯿﺔ اذا اﻟﻌددﯿن ﻤﺘﺴﺎوﯿﯿن
A IS GREATER THAN B B ﯿطﺒﻊ اﻟﻌﺒﺎرة اﻟﺘﺎﻟﯿﺔ إذا اﻟﻌدد اﻷول Aأﻛﺒر ﻤن اﻟﻌدد اﻟﺜﺎﻨﻲ
B IS GREATER THAN A ﯿطﺒﻊ اﻟﻌﺒﺎرة اﻟﺘﺎﻟﯿﺔ إذا اﻟﻌدد اﻷول Aاﺼﻐر ﻤن اﻟﻌدد اﻟﺜﺎﻨﻲ B
............................................................ JZ LAB1
اﻟﺒرﻨﺎﻤﺞ:
59
B DB 20H
MSG1 DB 10,13,"BOTH A AND B ARE EQUAL$"
MSG2 DB 10,13,"A IS GREATER THAN B$"
MSG3 DB 10,13,"B IS GREATER THAN A$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,A
CMP AL,B
JZ LAB1
JA LAB2
MOV AH,09H
LEA DX,MSG3
INT 21H
JMP END1
LAB1:
MOV AH,09H
LEA DX,MSG1
INT 21H
JMP END1
LAB2:
MOV AH,09H
LEA DX,MSG2
INT 21H
JMP END1
60
CODE ENDS
END START
OUTPUT
***********
B IS GREATER THAN A
وطﺒﺎﻋﺔ اﻟﻨﺘﺎﺌﺞ ﺒﻌﻨﺎوﯿن4 ﻋﻠﻰ اﻟﻘﯿﻤﺔAL اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﻘﺴﻤﺔ ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠل
: ﺒﺤﯿث ﺘﻛون اﻟﻨﺘﺎﺌﺞ ﻛﻤل ﯿﻠﻲ، واﻀﺤﺔ
61
mov ds, ax ;ds <-- initialize data segment register MOV DS,
AX
62
MOV AH, 4CH ; return control to DOS
INT 21H
cod ENDS
END START
اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻹﯿﺠﺎد ﻋدد اﻷرﻗﺎم اﻟﻔردﯿﺔ وﻋدد اﻷرﻗﺎم اﻟزوﺠﯿﺔ ﻓﻲ ﻤﺼﻔوﻓﺔ ﻤن اﻷرﻗﺎم
ﻗﺎﺌﻤﺔ اﻻﻋداد ﻫﻲ ﻤن 1اﻟﻰ . 9اﺴﺘﺨدم ﺒرﻨﺎﻤﺞ debugﻟﻠﺘﺄﻛد ﻤن اﻟﻨﺘﺎﺌﺞ.
;Program to find the total no. of even and odd numbers. from an array in Assembly
DATA SEGMENT
A DW 1,2,3,4,5,6,7,8,9,10
DATA ENDS
63
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA SI,A
MOV DX,0000
MOV BL,02
MOV CL,10
L1:MOV AX,WORD PTR[SI]
DIV BL
CMP AH,00
JNZ L2
INC DH
JMP L3
L2:INC DL
L3:
ADD SI,2
DEC CL
CMP CL,00
JNZ L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
;OUTPUT:->
64
;DS=0BF4 ES=0BE4 SS=0BF4 CS=0BF6 IP=0029 NV UP EI PL ZR NA PE NC
;0BF6:0029 B44C MOV AH,4C
-1ﻨﻔذ اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟﺤﺎﺴوب واﺴﺘﺨدم ﺒرﻨﺎﻤﺞ debugﻟﻤﺘﺎﺒﻌﺔ وﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ وﻤﺎ ﻫﻲ اﻟﻘﯿﻤﺔ اﻟﻤﺨزﻨﺔ ﻓﻲ
وﻤﺎ ﻫﻲ دﻻﻟﺘﻬﺎ ﻟك..................................... . اﻟﻤﺴﺠﻼت CXو AXو DX
• اذا ﻛﺎﻨت اﺠﺎﺒﺘك ﺒﻨﻌم ﻓﻛﯿف واي ﺘﻌﻠﯿﻤﺔ ﺘﻐﯿر ﻗﯿﻤﺔ اﻟﻤﺴﺠل ........................................
• وﻫل ﺘﺘﻐﯿر ﺒﺎﻟزﯿﺎدة ام ﺒﺎﻟﻨﻘﺼﺎن وﻟﻤﺎذا .........................................................
-7ﻟﻤﺎذا ﻨﻀﯿف اﻟﻌدد 2اﻟﻰ اﻟﻤﺴﺠل SIﻓﻲ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ................... ADD SI,2 :
-8اذا اردﻨﺎ ان ﻨﻀﯿف 1اﻟﻰ اﻟﻤﺴﺠل SIوﯿﺒﻘﻰ اﻟﺒرﻨﺎﻤﺞ ﯿﻌﻤل ﺒﻨﻔس اﻷﺴﻠوب ﻤﺎ ﻫو اﻟﺘﻌدﯿل اﻟﻤطﻠوﺒﺔ ﻋﻠﻰ
اﻟﺒرﻨﺎﻤﺞ ........................................
اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﯿﻘوم ﺒﺈﯿﺠﺎد اﻟﻤﺘم اﻟﺜﻨﺎﺌﻲ ﻷي ﻋدد ﺜﻨﺎﺌﻲ ﻤﺨزن ﻓﻲ ﻤﺘﻐﯿر طوﻟﻪ 8ﺜﻨﺎﺌﯿﺎت.
اﺴﺘﺨدم اﻟﺒرﻨﺎﻤﺞ debugﻟﻤﺘﺎﺒﻌﺔ ﺨطوات اﻟﺤل واﻟﺘﺄﻛد ﻤن اﻟﻨﺘﯿﺠﺔ.
اﻟﺤل
; Program to find 2's Complement of given binary umber in Assembly Language
Data Segment
65
num db 00000010B
Data Ends
Code Segment
Assume cs:code, ds:data
Begin:
mov ax, data
mov ds, ax
mov es, ax
mov ah, 0000h
mov al, num
NOT al
mov bl, al
adc al, 00000001B
mov bl, al
Exit:
mov ax, 4c00h
int 21h
Code Ends
End Begin
66
ﻤﺘﺎﺒﻌﺔ اﻟﺒرﻨﺎﻤﺞ ﺒﺎﺴﺘﺨدام اﻟﺒرﻨﺎﻤﺞ debug
ﺘدرﯿب )(2
اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻹﯿﺠﺎد اﻛﺒر واﺼﻐر ﻋدد ﻓﻲ ﻤﺠﻤوﻋﺔ ﻤن اﻻﻋداد ﻓﻲ ﻤﺼﻔوﻓﺔ ﻤﻛوﻨﺔ ﻤن
ﺴﺘﺔ ارﻗﺎم ﻤﺨزن ﻛل ﻋدد ﻤﻨﻬﺎ ﻓﻲ ﺒﺎﯿت واﺤد ) 8ﺜﻨﺎﺌﯿﺎت( .
اﻟﺤل
;Program to find the largest and smallest number from an array of n 8 bit numbers
DATA SEGMENT
A DB 5,2,5,6,4,3
? B DB
67
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV CX,0000
MOV CL,06
LEA BX,A
MOV AL,00
MOV AH,BYTE PTR[BX]
L1:CMP AL,BYTE PTR[BX]
JNC L2
MOV AL,BYTE PTR[BX]
L2:CMP AH,BYTE PTR[BX]
JC L3
MOV AH,BYTE PTR[BX]
L3:INC BX
DEC CL
CMP CL,00
JNZ L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
;OUTPUT:->
;-G CS: 0025
;
;AX=0206 BX=0006 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
;DS=0BF4 ES=0BE4 SS=0BF4 CS=0BF5 IP=0025 NV UP EI PL ZR NA PE NC
;0BF5:0025 B44C MOV AH,4C
68
(nooc.asm) اﻟﻤﺜﺎل اﻟﺨﺎﻤس.6
“ ﻓﻲ ﺴﻠﺴﻠﺔ رﻤزﯿﺔ ﯿﺘم إدﺨﺎﻟﻬﺎ ﻤنN” أﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻹﯿﺠﺎد ﻋدد ﻤرات ﺘﻛرار اﻟﺤرف
.ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ
اﻟﺒرﻨﺎﻤﺞ
;Program to find the no. of occurrences of character ‘N’ in the input;string
stk SEGMENT BYTE STACK 'STACK' ;Define the stack segment
DB 100h DUP(?) ;Set maximum stack size to 256 bytes (100h)
stk ENDS
DATA SEGMENT
MSG1 DB "ENTER THE STRING : $"
MSG2 DB "NO OF OCCURANCES OF N : $"
NEWLINE DB 10,13,'$'
STR1 DB 80 DUP('$')
CNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE, SS:stk
START :
MOV AX,DATA
MOV DS,AX
MOV AH,09H
LEA DX,MSG1
INT 21H
MOV AH,0AH
LEA DX,STR1
INT 21H
MOV AH,09H
LEA DX,NEWLINE
69
INT 21H
LEA SI,STR1+1
MOV CL,BYTE PTR[SI]
MOV CH,00H
L1 : INC SI
JNZ L2
INC CNT
L2 : LOOP L1
ADD CNT,'0'
MOV AH,09H
LEA DX,MSG2
INT 21H
MOV AH,02H
MOV DH,00H
MOV DL,CNT
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
;OUTPUT
;
; ENTER THE STRING : Nablus
; NO OF OCCURANCES OF N : 1
70
ﻋدل اﻟﺒرﻨﺎﻤﺞ ﻹﯿﺠﺎد ﻋدد ﻤرات ﺘﻛرر اﻟﺤرف nﺒﻐض اﻟﻨظر اذا ﻛﺎن ﺼﻐﯿر ام ﻛﺒﯿر.
اﻟﺒرﻨﺎﻤﺞ
;Program to count the number of +ve ( positive ) and _ve ( negative ) numbers
data segment
'num db -3,1,-5,6,-7,9,'#
p_cnt db 0h
n_cnt db 0h
data ends
code segment
assume ds:data,cs:code
start:
71
mov ax,data
mov ds,ax
lea si,num
main:
cmp num[si],0h
jg pos
inc si
add n_cnt,01h
cmp num[si],'#'
je exit
jmp main
pos:
add p_cnt,01h
inc si
cmp num[si],'#'
je exit
jmp main
exit:
mov bl,p_cnt
mov cl,n_cnt
mov ax,4c00h
int 21h
code ends
end start
72
اﻟوﺤـدة اﻟﺨﺎﻤﺴﺔ
73
.1ﻤﻘدﻤﺔ
ﻋزﯿزي اﻟطﺎﻟب ،أﻫﻼً ﺒك ﻓﻲ رﺤﺎب اﻟوﺤدة اﻟﺨﺎﻤﺴﺔ ﻤن دﻟﯿل اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻟﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ
اﻷﺴﻤﺒﻠﻲ ».ﺘﺸﻛل ﻫذﻩ اﻟوﺤدة ﺒرﻤﺠﺔ ﻋﻤﻠﯿﺎت اﻹدﺨﺎل واﻹﺨراج وﺘﻌﺘﺒر ﺠزًء ﻤﻬﻤﺎً ﻓﻲ ﻟﻐﺔ اﻷﺴﻤﺒﻠﻲ وذﻟك
ﻷن ﻤﻌظم اﻟﺘطﺒﯿﻘﺎت ﺘﺘطﻠب اﺴﺘﺨدام ﻋﻤﻠﯿﺎت اﻹدﺨﺎل واﻹﺨراج وﺒﺸﻛل ﻤﻛﺜف.
ﺴوف ﻨﻘدم ﻟك ﻋزﯿزي اﻟطﻠب ﺒﻌض اﻷﻤﺜﻠﺔ اﻟﺘطﺒﯿﻘﯿﺔ ﻟﻨوﻀﺢ أﺴﺎﻟﯿب ﺒرﻤﺠﺔ ﻋﻤﻠﯿﺎت اﻹدﺨﺎل/اﻹﺨراج
وﺒﺎﻟﺘﺤدﯿد :ﻋﻤﻠﯿﺎت اﻹدﺨﺎل/اﻹﺨراج اﻟﻤﺒرﻤﺠﺔ وﻋﻤﻠﯿﺎت اﻹدﺨﺎل/اﻹﺨراج اﻟﻤوﺠﻬﺔ ﺒﺎﻻﻋﺘراﻀﺎت .وﺴوف ﻨﻨﺎﻗش
وﻨﻨﻔذ اﻤﺜﻠﺔ ﻋﻤﻠﯿﺔ ﻟﺘوﻀﯿﺢ ﻤﻬﺎم اﻻﻋﺘراﻀﺎت 21H, 17H, 16H, 10Hودورﻫﺎ ﻓﻲ ﺒرﻤﺠﺔ ﺘﻠك اﻟﻌﻤﻠﯿﺎت
.2أﻫداف اﻟوﺤدة
ﺒﻌد اﻨﺘﻬﺎﺌك ﻤن دراﺴﺔ ﻫذﻩ اﻟوﺤدة وﺘﻨﻔﯿذ اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ واﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟﺤﺎﺴوب ﯿﻨﺘظر ﻤﻨك ﻋزﯿزي اﻟطﺎﻟب
أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ أن:
.3اﻟﻤﺜﺎل اﻷول
اﻛﺘب ﺒرﻨﺎﻤﺞ ﻟطﺒﺎﻋﺔ اﻟﻌﺒﺎرة HELLO WORLDﻋﻠﻰ اﻟﺸﺎﺸﺔ ﺒﺎﺴﺘﺨدام اﻤر اﻻﻋﺘراض INT 21Hواﻟوظﯿﻔﺔ
رﻗم 09H
اﻟﺤل
PROGRAM TO DISPLAY HELLO WORLD ON THE CONSOLE in Assembly Language
DATA SEGMENT
"MSG DB "HELLO WORLD$
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
74
MOV AH,09H
MOV DX,OFFSET MSG
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
MSG DB "HELLO WORLD$" ﻓﻲ ﻨﻬﺎﯿﺔ اﻟﺴﻠﺴﺔ اﻟرﻤزﯿﺔ$ ﻤﺎ أﻫﻤﯿﺔ إﺸﺎرة اﻟدوﻻر اﻷﻤرﯿﻛﻲ ﻓﻲ-4
اﻟﺤل واﻟﺘﻨﻔﯿذ
;PROGRAM TO CLEAR SCREEN in Assembly Language
STACK SEGMENT
STACK ENDS
DATA SEGMENT
DATA ENDS
CODE SEGMENT BYTE 'CODE' ;Define the Code segment
ASSUME CS:CODE, ds:data, ss:stack
START:
75
MOV AX,0600H ;06 TO SCROLL & 00 FOR FULLJ SCREEN
MOV BH,71H ;ATTRIBUTE 7 FOR BACKGROUND AND 1 FOR FOREGROUND
MOV CX,0000H ;STARTING COORDINATES
MOV DX,184FH ;ENDING COORDINATES
INT 10H ;FOR VIDEO DISPLAY
MOV AH,4CH ;RETURN TO DOS MODE
INT 21H
CODE ENDS
END START
ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ
76
ﯿﺘم ﻤﺴﺤﺢ اﻟﺸﺎﺸﺔcls وﻋﻨد ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ
ﻋﻠﻰ اﻟﺸﺎﺸﺔ19 اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اﻟﻤؤﺸر ﻓﻲ اﻟﺴطر اﻟﺜﺎﻟث اﻟﻌﻤود
اﻟﺤل واﻟﺘﻨﻔﯿذ
Code for Program to set the cursor on row-3 and column-19 in Assembly Language
STACK SEGMENT
STACK ENDS
DATA SEGMENT
DATA ENDS
CODE SEGMENT BYTE 'CODE' ;Define the Code segment
assume cs:code,ds:data,ss:stack
MOV AX,data
MOV DS,AX
MOV AH,02H
MOV BH,00
MOV DH,3
MOV DL,19
INT 10H
77
MOV Ax,4C00H
INT 21H
code ends
END
-1ﻤﺎ ﻫﻲ اﻟﺘﻌﻠﯿﻤﺎت ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اﻟﻤؤﺸر ﻓﻲ اﻟﺴطر اﻟﺜﺎﻟث اﻟﻌﻤود 19ﻋﻠﻰ اﻟﺸﺎﺸﺔ
....................................................................................
....................................................................................
....................................................................................
....................................................................................
78
( border.asm) (4) اﻟﻤﺜﺎل.6
اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اطﺎر ﻤﻠون ﻋﻠﻰ اﻟﺸﺎﺸﺔ
:اﻟﺤل
mov ah,0bh
mov bx,01
int 10h
mov ah,4ch
int 21h
code ends
END
ﻤﺎ ﻫﻲ اﻟﺘﻌﻠﯿﻤﺎت ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اطﺎر ﻤﻠون ﻋﻠﻰ اﻟﺸﺎﺸﺔ-1
....................................................................................
....................................................................................
....................................................................................
79
ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق
اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﻤﺴﺢ اﻟﺴﺎﺴﺔ وﺠﻌل ﻟون ﻨﻤط اﻟﺨط اﻟظﺎﻫر ﻋﻠﻰ اﻟﺨﻠﻔﯿﺔ ازرق
:اﻟﺤل
PROGRAM TO CLEAR THE SCREEN AND MAKE BLUE FOREGROUND
stack segment
stack ends
data segment
MSG1 DB 'HELLO! How are you?$'
MSG2 DB ' Hi!!!!!!!!!!!!!!!!!!!$'
data ends
code segment BYTE 'CODE' ;Define the Code segment
assume cs:code,ds:data,ss:stack
80
MOV BH,71H ;7 is used for white background
MOV CX,0000H ;and 1 is used for blue foreground
MOV DX,184FH
INT 10H
; Upper Left corner to Lower right corner
MOV dx,OFFSET MSG1
mov ah,09h
int 21h
mov ah,4ch
int 21h
code ends
END
: ﺜم ﻤﻔﺘﺎح اﻻدﺨﺎل ﻓﺘﻛون ﻨﺘﯿﺠﺔ اﻟﺘﻨﻔﯿذ ﻛﻤﺎ ﯿﻠﻲblue ﻟﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ اطﺒﻊ
81
(1-9.asm) (1) ﺘدرﯿب
ﻋﻠﻰ اﻟﺸﺎﺸﺔ9 اﻟﻰ0 اﻛﺘب ﺒرﻨﺎﻤﺞ ﻟطﺒﺎﻋﺔ اﻻﻋداد ﻤن
اﻟﺤل
;Code for Program to print the digits 0, 1… 9 in Assembly Language
stack segment
stack ends
DATA SEGMENT
DATA ENDS
CODE SEGMENT BYTE 'CODE' ;Define the Code segment
ASSUME DS:DATA,CS:CODE,ss:stack
START :
MOV AX,DATA
MOV DS,AX
82
MOV BL,00H
MOV CH,00H
MOV CL,0AH
L1 : MOV DH,00H
MOV DL,BL
ADD DL,'0'
MOV AH,02H
INT 21H
INC BL
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
83
(atoa.asm)(2) ﺘدرﯿب
اﻛﺘب ﺒرﻨﺎﻤﺞ ﯿﻘوم ﺒﺈدﺨﺎل ﺴﻠﺴﻠﺔ رﻤزﯿﺔ وﯿﻘوم ﺒﺘﺤوﯿل اﻻﺤرف اﻟﺼﻐﯿرة او اﻟﻛﺒﯿرة اﻟﻰ أﺤرف ﺼﻐﯿرة او
ﻛﺒﯿرة وطﺒﺎﻋﺔ اﻻﺤرف
اﻟﺤل
LEA DX,MSG
MOV AH,09H
INT 21H
LEA SI,STR1
MOV AH,01H
84
READ:
INT 21H
MOV BL,AL
CMP AL,0DH
JE DISPLAY
XOR AL,20H
MOV [SI],AL
INC SI
;CMP BL,0DH
JMP READ
DISPLAY:
MOV AL,'$'
MOV [SI],AL
LEA DX,MSG2
MOV AH,09H
INT 21H
LEA DX,STR1
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
85
CODE ENDS
END START
ﻨﺘﯿﺠﺔ اﻟﺘﻨﻔﯿذ
86
اﻟوﺤـدة اﻟﺴﺎدﺴﺔ
87
.1ﻤﻘدﻤﺔ
أﻫﻼً ﺒك ﻋزﯿزي اﻟطﺎﻟب ﻓﻲ رﺤﺎب اﻟوﺤدة اﻟﺴﺎدﺴﺔ واﻷﺨﯿرة ﻓﻲ دﻟﯿل اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻤن ﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب
وﻟﻐﺔ أﺴﻤﺒﻠﻲ ،وﻫﻲ ﺘﻌﺎﻟﺞ ﻤوﻀوع اﻟﻤﺎﻛرو واﺴﺘﺨداﻤﻬﺎ .
-ﻤﻛوﻨﺎت اﻟﻤﺎﻛرو ﺤﯿث ﯿﺘﻛون اﻟﻤﺎﻛرو ﻤن ﺠﻤﻠﺔ اﻟﺒداﯿﺔ وﺠﻤﻠﺔ اﻟﻨﻬﺎﯿﺔ وﻤﺘن اﻟﻤﺎﻛرو.
وﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ب أﻤﺜﻠﺔ وﺘدرﯿﺒﺎت ﻋﻠﻰ اﻟﻤواﻀﯿﻊ اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ اﻟوﺤدة ﻟﻤﺴﺎﻋدﺘك ﻋﻠﻰ ﻓﻬم ﻤﺎدة اﻟﻤﻘرر.
اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟطﺒﺎﻋﺔ ﻋﻨوان او اﺴم ﻋﻠﻰ وﺴط اﻟﺸﺎﺸﺔ ،اﺴﺘﺨدم ﻤﺎﻛرو ﺒﺎﺴم PRNSTR
ﻟطﺒﺎﻋﺔ اﻟﻌﻨوان ﻋﻠﻰ اﻟﺸﺎﺸﺔ
اﻟﺤل:
;PROGRAM TO DISPLAY NAME IN CENTER OF SCREEN
PRNSTR MACRO MSG
MOV AH,09H
LEA DX,MSG
INT 21H
ENDM
stack segment BYTE STACK 'STACK' ;Define the stack segment
)DB 255h DUP(?) ;Set maximum stack size to 256 bytes (100h
stack ends
DATA SEGMENT
"MSG1 DB "Al-Quds Open University $
DATA ENDS
88
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0600H
MOV BH,71H
MOV CX,000H ;UPPER LEFT ROW,COLUMN
MOV DX,184H ;LOWER RIGHT ROW,COLUMN
INT 10H
MOV AH,02H
MOV BH,00H
MOV DH,0CH
MOV DL,23H
INT 10H
PRNSTR MSG1
MOV AH,4CH
INT 21H
CODE ENDS
END START
89
اﻟﻨﺘﯿﺠﺔ
ﻨﺘﯿﺠﺔ اﻟﺘﻨﻔﯿذ ،ﯿﻔﻀل ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ clsاﻟذي ﻛﺘﺒﻨﺎﻩ ﺴﺎﺒﻘﺎ ﻗﺒل ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﺒﻬدف ﻤﺴﺢ اﻟﺸﺎﺸﺔ
أﺴﺌﻠﺔ:
90
(REVERSE.asm) اﻟﻤﺜﺎل اﻟﺜﺎﻨﻲ.3
،اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ أﺴﻤﺒﻠﻲ ﯿﺴﺘدﻋﻲ ﻤﺎﻛرو ﻹظﻬﺎر ﻋﺒﺎرة ﻹدﺨﺎل اﻟﻨص وﻤﺎﻛرو اﺨر ﻟطﺒﺎﻋﺔ اﻟﻨﺘﺎﺌﺞ
ﺒﺤﯿث ﯿﻘوم اﻟﺒرﻨﺎﻤﺞ ﺒﻘراءة ﻨص وطﺒﺎﻋﺔ ﺒﺎﻟﻤﻌﻛوس
DATA SEGMENT
STR1 DB 80,80 DUP('$')
91
STR2 DB 80,80 DUP('$')
MSG1 DB 10,13,'ENTER THE STRING :$'
MSG2 DB 10,13,'THE REVERSE STRING IS :$'
STORE DB 2 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
PRINTSTR MSG1
GETSTR STR1
PRINTSTR MSG2
LEA SI,STR1+2
LEA DI,STR2+2
LAB1:
INC SI ;FOR GOING TO THE END OF THE STRING
LOOP LAB1
92
MOV CX,BX
LAB2:
MOV AL,DS:BYTE PTR[SI] ;FOR COPYING CONTENTS OF STR1 TO AL
MOV DS:BYTE PTR[DI],AL ;FOR COPYING CONTENTS OF AL TO STR2
INC DI
DEC SI
LOOP LAB2
PRINTSTR STR2+2
MOV AH,DS:BYTE PTR[SI]
MOV STORE,AH
PRINTSTR STORE
MOV AX,4C00H
INT 21H
CODE ENDS
END START
93
أﺴﺌﻠﺔ:
ﺘدرﯿب )(printer.asm)(1
ﺒﺎﺴﺘﺨدام اﻻﻋﺘراض رﻗم INT 17hواﻟﻤﺎﻛرو اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟطﺒﺎﻋﺔ ﻨص ﯿﺘم ادﺨﺎﻟﺔ
ﻤن ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﻋﻠﻰ اﻟطﺎﺒﻌﺔ
94
اﻟﺤل
Language
data segment
msg1 db "Enter string to be printed : $"
msg2 db 0dh, 0ah, "I/O Error or Paper out...$"
msg3 db 0ah, "Printing string...$"
buf db 80
db 0
db 80 dup(' ')
data ends
code segment
assume cs:code, ds:data, es:data,ss:hellostk
start :
mov ax, data
mov ds, ax
mov es, ax
prnstr msg1
95
mov ah, 0ah
lea dx, buf
int 21h
mov si, offset buf + 2
mov ch, 00h
mov cl, byte ptr [si-1]
96
ﺨطوات اﻟﺘﻨﻔﯿذ
97