You are on page 1of 97

‫ھﯿﻜﻠﯿـ ـ ـ ـ ــﺔ اﻟﺤﺎﺳـ ـ ـ ـ ــﻮب‬

‫وﻟﻐ ـ ـ ـ ـ ــﺔ اﻟﺘﺠﻤﯿ ـ ـ ــﻊ‬


‫‪ASSEMBLY‬‬

‫اﻟﺪﻟﯿﻞ اﻟﻌﻤﻠﻲ‬

‫اﻋﺪاد‬
‫د‪ .‬ﯾﻮﺳﻒ اﺑﻮزر‬

‫ﺟﻤﯿـــﻊ اﻟﺤﻘـــﻮق ﻣﺤﻔﻮظـــﺔ‬


‫‪2016‬‬
‫ﺟﺎﻣﻌـــــﺔ اﻟﻘــــﺪس اﻟﻤﻔﺘﻮﺣﺔ‬
2
‫ﻤﺤﺘوﯿﺎت اﻟدﻟﯿل‬
‫اﻟﺼﻔﺤﺔ‬ ‫اﻟﻤﻮﺿﻮع‬
‫‪Debug ___________________________________________________ 6‬ﻣﻘﺪﻣﺔ اﻟﻰ ﺑﺮﻧﺎﻣﺞ اﻟﻤﻨﻘﺢ‬
‫‪ .1‬اﻟﻤﻘﺪﻣﺔ __________________________________________________________ ‪7‬‬
‫‪ 1.1‬ﺗﻤﮭﯿﺪ _____________________________________________________________ ‪7‬‬
‫‪ 2.1‬أھﺪاف اﻟﻮﺣﺪة ________________________________________________________ ‪7‬‬
‫‪ 3.1‬أﻗﺴﺎم اﻟﻮﺣﺪة ________________________________________________________ ‪8‬‬
‫‪ 4.1‬ﻣﺎ ﺗﺤﺘﺎج إﻟﯿﮫ ﻟﺪراﺳﺔ اﻟﻮﺣﺪة ________________________________ ______________ ‪8‬‬
‫‪ .2‬ﻣﺪﺧﻞ اﻟﻰ ﺑﺮﻧﺎﻣﺞ اﻟﻤﻨﻘﺢ ‪8 __________________________________________ Debug‬‬
‫‪ 1.2‬ﺑﺮﻧﺎﻣﺞ اﻟﻤﻨﻘﺢ ‪8 ___________________________________________________Debug‬‬
‫‪ 2.2‬ﺗﺸﻐﯿﻞ ﺑﺮﻧﺎﻣﺞ ‪9 ___________________________________________________ Debug‬‬
‫‪ 3.2‬ﺧﻄﻮات ﺗﺸﻐﯿﻞ ﺑﺮﻧﺎﻣﺞ ال ‪ Debug‬ﻋﻠﻰ أﺟﮭﺰة اﻟﺤﺎﺳﻮب اﻟﺤﺪﯾﺜﺔ________________________ ‪11‬‬
‫‪ 4.2‬ﻋﺮض اﻟﻤﺴﺠﻼت_____________________________________________________ ‪12‬‬
‫‪ 4.2‬ﻣﻌﺎﻟﺠﺔ ﻗﯿﻢ اﻟﻤﺴﺠﻼت __________________________________________________ ‪17‬‬
‫‪ 3‬ادﺧﺎل ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ _________________________________________ ‪19‬‬
‫‪ 4‬ﺗﺘﺒﻊ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ اﻻﻣﺮ ‪21 _____________________________________ T‬‬
‫‪ .5‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺬاﻛﺮة ___________________________________________________ ‪26‬‬
‫‪ 1.5‬اﻻﻣﺮ ‪26 ___________________________________________________________ D‬‬
‫‪ 2.5‬اﻻﻣﺮ ‪27 ___________________________________________________________ E‬‬
‫‪ 3.5‬اﻻﻣﺮ ‪29 ___________________________________________________________M‬‬
‫‪ 4.5‬اﻻﻣﺮ ‪29 ___________________________________________________________ F‬‬
‫‪ .6‬أواﻣﺮ أﺧﺮى ﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻨﻘﺢ ‪29 _______________________________________ Debug‬‬
‫‪ 1.6‬اﻻﻣﺮ ‪29 ___________________________________________________________ U‬‬
‫‪ 2.6‬اﻻﻣﺮ ‪30 ___________________________________________________________ Q‬‬
‫‪ .7‬ﻧﺸﺎط ﺗﺪرﯾﺒﻲ ______________________________________________________ ‪31‬‬
‫‪ .8‬اﻟﻤﺮاﺟﻊ _________________________________________________________ ‪33‬‬
‫ﻣﻘﺪﻣﺔ اﻟﻰ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺳﻤﺒﻠﻲ _____________________________________________ ‪34‬‬
‫‪ .1‬اﻟﻤﻘﺪﻣﺔ _________________________________________________________ ‪35‬‬

‫‪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‬‬
‫اﻟوﺤـدة اﻻوﻟﻰ‬

‫ﻤﻘدﻤﺔ اﻟﻰ ﺒرﻨﺎﻤﺞ‬


‫اﻟﻤﻨﻘﺢ ‪Debug‬‬

‫‪6‬‬
‫‪ .1‬اﻟﻤﻘدﻤﺔ‬

‫‪ 1.1‬ﺘﻤﻬﯿد‬

‫ﻋزﯿزي اﻟطﺎﻟب‪ ،‬أﻫﻼً ﺒك إﻟﻰ اﻟوﺤدة اﻷوﻟﻰ ﻤن اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻟﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ وﻫﻲ‬
‫ﺒﻌﻨوان ﻤﻘدﻤﺔ اﻟﻰ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ‪.Debug‬‬

‫ﺘﻬدف ﻫذﻩ اﻟوﺤدة إﻟﻰ إﻋطﺎﺌك ﻤﻌﻠوﻤﺎت أﺴﺎﺴﯿﺔ ﻓﯿﻤﺎ ﯿﺘﻌﻠق ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ‪ Debug‬ﻤن ﺤﯿث اﻟﻌرﯿف‬
‫واﻟﺘﻌﺎﻤل ﻤﻊ اﻷواﻤر واﻟﺘﻌﻠﯿﻤﺎت ﻟﻤﻌﺎﻟﺠﺔ اﻟﻤﺴﺠﻼت واﻟذاﻛرة ﻤن ﺤﯿث اﺴﺘﻌراﻀﻬﺎ واﻟﺘﺨزﯿن ﺒﻬﺎ وﻛﯿﻔﯿﺔ ﻛﺘﺎﺒﺔ وﺘﻨﻔﯿذ‬
‫ﺒراﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪ ،‬وﺘﺘﺒﻊ ﺘﻌﻠﯿﻤﺎت ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠر وأﺨﯿ ار اﻟوﺼول إﻟﻰ اﻟذاﻛرة وﻋرض ﻤﺤﺘوﯿﺎﺘﻬﺎ واﻟﺘﻌدﯿل‬
‫ﻋﻠﯿﻬﺎ‬

‫وﻗد ﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ﺒﺎﻟﻌدﯿد ﻤن اﻷﻤﺜﻠﺔ اﻟﺘوﻀﯿﺤﯿﺔ‪ ،‬واﻟﺘدرﯿﺒﺎت‪ ،‬إﻀﺎﻓﺔ إﻟﻰ ﺒﻌض أﺴﺌﻠﺔ اﻟﺘﻘوﯿم اﻟذاﺘﻲ واﻹﺸﻛﺎل‬
‫اﻟﺘﻲ ﺘوﻀﺢ ﺒﻌض اﻟﻤﻔﺎﻫﯿم‪.‬‬

‫ﻤرة أﺨرى ﻨرﺤب ﺒك ﻓﻲ ﻫذﻩ اﻟوﺤدة‪ ،‬آﻤﻠﯿن أن ﺘﺴﺘﻤﺘﻊ ﺒدراﺴﺘك ﻟﻠﻤﺎدة اﻟﺘﻲ ﻨﻌرﻀﻬﺎ ﻟك ﻓﻲ ﻫذﻩ اﻟوﺤدة‪.‬‬

‫‪ 2.1‬أﻫداف اﻟوﺤدة‬

‫ﯿﻨﺘظر ﻤﻨك‪ ،‬ﻋزﯿزي اﻟطﺎﻟب‪ ،‬ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ‪:‬‬

‫‪ .1‬ﺘﺘﻌرف ﻋﻠﻰ ﺒرﻨﺎﻤﺞ ‪ Debug‬وﻛﯿﻔﯿﺔ ﺘﺸﻐﯿﻠﻪ واﻟﺘﻌﺎﻤل ﻤﻌﻪ‪.‬‬


‫‪ .2‬ﺘﺘﻤﻛن ﻤن اﺴﺘﻌراض ﻗﯿم اﻟﻤﺴﺠﻼت ﻓﻲ ﻤﻌﺎﻟﺞ ‪.8086‬‬
‫‪ .3‬ﺘﺘﻤﻛن ﻤن ﺘﺨزﯿن ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ ﻓﻲ ﻤﻛﺎن ﻤﻌﯿن ﻓﻲ اﻟذاﻛرة‪.‬‬
‫‪ .4‬ﺘﺘﻤﻛن ﻤن ﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ‪.‬‬
‫‪ .5‬ﺘﺘﻤﻛن ﻤن ﺘﺘﺒﻊ ﺘﻌﻠﯿﻤﺎت ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ‪ ،‬وﻤﺎذا ﯿﺤدث ﻓﻲ اﻟﻤﺴﺠﻼت ﺒﻌد ﻛل ﺘﻌﻠﯿﻤﺔ‪.‬‬
‫‪ .6‬ﺘﺘﻤﻛن ﻤن اﻟوﺼول إﻟﻰ اﻟذاﻛرة وﻋرض ﻤﺤﺘوﯿﺎﺘﻬﺎ واﻟﺘﻌدﯿل ﻋﻠﯿﻬﺎ‪.‬‬
‫‪ .7‬ﺘﺘﺄﻛد ﻤن ﺼﺤﺔ واﻤﻛﺎﻨﯿﺔ اﺴﺘﺨدام اﻟﺘﻌﻠﯿﻤﺎت‪.‬‬

‫‪7‬‬
‫‪ 3.1‬أﻗﺴﺎم اﻟوﺤدة‬

‫ﺘﺘﻛون ﻫذﻩ اﻟوﺤدة ﻤن ﺴﺘﺔ أﻗﺴﺎم رﺌﯿﺴﺔ‪ .‬ﻓﺎﻟﻘﺴم اﻷول ﯿﻨﺎﻗش ﻤﻘدﻤﺔ ﻟﻠوﺤدة‪ ،‬اﻤﺎ اﻟﻘﺴم اﻟﺜﺎﻨﻲ ﻓﯿﻨﺎﻗش‬
‫ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ وطرق ﺘﺸﻐﯿﻠﻪ واﻟﺘﻌﺎﻤل ﻤﻊ اﻟﻤﺴﺠﻼت واﻟذاﻛرة وﻛﯿﻔﯿﺔ ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ‪ .‬اﻟﻘﺴم‬
‫اﻟﺜﺎﻟث ﻓﯿوﻀﺢ ﻛﯿﻔﯿﺔ ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ‪ .‬ﻓﻲ اﻟﻘﺴم اﻟراﺒﻊ ﺘم ﻤﻨﺎﻗﺸﺔ ﺘﺘﺒﻊ ﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ ﻟﻐﺔ‬
‫اﺨﯿر اﻟﻘﺴم اﻟﺴﺎدس ﯿﻨﺎﻗش أواﻤر أﺨرى‬
‫اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪ .‬اﻟﻘﺴم اﻟﺨﺎﻤس ﯿﻨﺎﻗش أواﻤر اﻟﺘﻌﺎﻤل ﻤﻊ اﻟذاﻛرة و ا‬
‫ﻟﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ‪.‬‬

‫‪ 4.1‬ﻤﺎ ﺘﺤﺘﺎج إﻟﯿﻪ ﻟدراﺴﺔ اﻟوﺤدة‬

‫ﻟﻘد ﺘﻀﻤﻨت ﻫذﻩ اﻟوﺤدة اﻟﻌدﯿد ﻤن اﻟﻤﻔﺎﻫﯿم اﻷﺴﺎﺴﯿﺔ‪ ،‬وﺒذﻟك ﻓﺎن طﺒﯿﻌﺔ اﻟﻤﺎدة اﻟﻤﻌروﻀﺔ‪ ،‬ﻋزﯿزي اﻟطﺎﻟب‪،‬‬
‫ﺘﺤﺘﺎج إﻟﻰ ﺠو ﻫﺎدئ ﺨﺎص وﻤرﯿﺢ ﺤﺘﻰ ﺘﺴﺘطﯿﻊ اﻟﺘرﻛﯿز ﻋﻠﻰ اﻟﻤﻔﺎﻫﯿم اﻟﻤﻌطﺎة‪ ،‬وﺘﺴﺘوﻋﺒﻬﺎ ﺒﺎﻟﺸﻛل اﻟﻤﻨﺎﺴب‪ .‬وﻛل‬
‫ﻤﺎ ﺘﺤﺘﺎﺠﻪ ﺒﻌد ذﻟك ﺒﻌض اﻟﻘرطﺎﺴﯿﺔ ﻛﻘﻠم رﺼﺎص وورق أﺒﯿض ﻟﺘﻘوم ﺒﺘطﺒﯿق ﺒﻌض اﻟﻤﻔﺎﻫﯿم وﺘﺤل اﻷﺴﺌﻠﺔ واﻟﺘدرﯿﺒﺎت‬
‫اﻟﻤﻌطﺎة ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة‪ .‬وﯿﻤﻛﻨك ﻋزﯿزي اﻟطﺎﻟب اﺴﺘﺨدام اﻻﻨﺘرﻨت ﻟﻠﺒﺤث ﻋن ﺒﻌض اﻟﻤﻔﺎﻫﯿم واﻟﻤواﻀﯿﻊ اﻟﻤﺘﻌﻠﻘﺔ‬
‫ﺒرﻨﺎﻤﺞ ‪ .Debug‬ﻛﻤﺎ ان ﻫﻨﺎك ﺤﺎﺠﺔ اﻟﻰ‪:‬‬

‫‪ .1‬ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت اﻟﻤﻌﺎﻟﺞ ‪ 8086‬وﻤﺴﺠﻼﺘﻪ اﻟرﺌﯿﺴﯿﺔ‪) .‬راﺠﻊ اﻟوﺤدة اﻟﺜﺎﻨﯿﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(‪.‬‬
‫‪ .2‬ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ‪) .‬راﺠﻊ اﻟوﺤدة اﻟراﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(‪.‬‬

‫‪ .2‬ﻤدﺨل اﻟﻰ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ‪Debug‬‬

‫‪ 1.2‬ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ‪Debug‬‬

‫ﻤﺼﻠﺢ ‪ debug‬ﺘﺸﯿر إﻟﻰ ﻋﻤﻠﯿﺔ ﺘﺘﺒﻊ اﻷﺨطﺎء ﻓﻲ ﺒراﻤﺞ اﻟﺤﺎﺴوب وﺘﺼﺤﯿﺤﻬﺎ‪ ،‬وﻛل ﻟﻐﺔ ﺒرﻤﺠﺔ ﺘوﻓر ﻤﺤرر‬
‫ﻻﻛﺘﺸﺎف وﺘﺼﺤﯿﺢ اﻷﺨطﺎء‬

‫ﻤﺎ ﻫو ﺒرﻨﺎﻤﺞ ‪ debugger‬اﻟﻤﻨﻘﺢ؟ ﻫو ﺒرﻨﺎﻤﺞ ﯿﺘﯿﺢ ﻟك ﻋرض اﻟﻤﺴﺠﻼت واﻟﻤﻛدس واﻷواﻤر ﺒﻠﻐﺔ اﻻﺴﻤﺒﻠﻲ‬
‫وأﺸﯿﺎء أﺨرى ﻛﺜﯿرة‪ .‬وﯿﻘوم ﻛذﻟك ﺒﻌﻤل ﺘﺘﺒﻊ ‪ tracing‬ﻟﻠﺒرﻨﺎﻤﺞ وذﻟك ﻻﻛﺘﺸﺎف اﻷﺨطﺎء ان وﺠدت‪.‬‬

‫ﺒرﻨﺎﻤﺞ ‪ Debug‬ﻫو إﺤدى اﻷدوات اﻟﺒرﻤﺠﯿﺔ اﻟﻤﺴﺘﺨدﻤﺔ ﻟﺘﻨﻔﯿذ وﺘﺘﺒﻊ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ‪ .‬وﻫو ﻤﺨﺼص ﻟﻠﻤﻌﺎﻟﺞ‬
‫‪.Intel-8086‬‬

‫‪8‬‬
‫ﺒرﻨﺎﻤﺞ ‪ Debug‬ﻤوﺠود ﻀﻤن ﻏﺎﻟﺒﯿﺔ أﻨظﻤﺔ ﺘﺸﻐﯿل ‪ DOS‬و ‪ .WINDOWS‬ﺒﺎﻹﻀﺎﻓﺔ إﻟﻰ اﻤﻛﺎﻨﯿﺔ ﻛﺘﺎﺒﺔ‬
‫وﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ‪ ،‬ﯿﺤﺘوي ﺒرﻨﺎﻤﺞ ‪ Debug‬ﻋﻠﻰ اﻟﻌدﯿد ﻤن اﻻواﻤر اﻟﺘﻲ ﯿﻤﻛن اﺴﺘﺨداﻤﻬﺎ ﻟﻠوﺼول اﻟﻰ‬
‫اﻟذاﻛرة وﻋرض ﻤﺤﺘواﻫﺎ واﻟﻘراءة ﻤﻨﻬﺎ او اﻟﻛﺘﺎﺒﺔ ﻋﻠﯿﻬﺎ‪ ،‬ﺒﺎﻹﻀﺎﻓﺔ اﻟﻰ اﻤﻛﺎﻨﯿﺔ ﻋرض وﺘﻌدﯿل ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ‪.‬‬

‫‪ 2.2‬ﺘﺸﻐﯿل ﺒرﻨﺎﻤﺞ ‪Debug‬‬

‫ﺴﻨﺒدأ ﻓﻲ ﻫذا اﻟﺸرح ﻋزﯿزي اﻟطﺎﻟب ﺒﺘوﻀﯿﺢ ﻛﯿﻔﯿﺔ ﺘﺸﻐﯿل ﺒرﻨﺎﻤﺞ ‪ .Debug‬وﻨظ ار ﻻن ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ ﺘﺤﺘﺎج‬
‫إﻟﻰ ﻤﻌرﻓﺔ ﻤﻌﻠوﻤﺎت ﻋن ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ اﻟذي ﺴﯿﺘم ﻛﺘﺎﺒﺔ اﻟﺒرﻨﺎﻤﺞ ﻟﻪ‪ ،‬ﻓﺴﯿﺘم اﺴﺘﻌراض ﻤﻠﺨص ﻋن ﻤﺴﺠﻼت‬
‫اﻟﻤﻌﺎﻟﺞ اﻟﻤﺴﺘﺨدم ﻫﻨﺎ وﻫو ﻤﻌﺎﻟﺞ ‪ .8086‬ﺒﻌد ذﻟك ﺴﯿﺘم اﺴﺘﻌراض أواﻤر ﺒرﻨﺎﻤﺞ ‪ Debug‬واﻻطﻼع ﻋﻠﻰ اﻤﺜﻠﺔ‬
‫ﺘﺒﯿن اﺴﺘﺨدام ﻫذﻩ اﻻواﻤر‪.‬‬
‫وﺘدرﯿﺒﺎت ّ‬
‫ﯿﻤﻛﻨك اﻟﺘﻌﺎﻤل ﻤﻊ اﻟﻤﻨﻘﺢ ‪ debug‬وذﻟك ﺒدﺨوﻟك اﻟﻰ ﻨظﺎم اﻟدوس وذﻟك ﺒﺎﺘﺒﺎع اﻟﺨطوات اﻟﺘﺎﻟﯿﺔ‬

‫ﺜم اﻟﻀﻐط ﻋﻠﻰ ﻛﺎﻓﺔ اﻟﺒراﻤﺞ ‪All Programs‬‬ ‫‪ .1‬اﻟﻨﻘر ﻋﻠﻰ اﯿﻘوﻨﺔ أﺒدأ‬

‫ﻓﺘظﻬر ﻟﻨﺎ اﻟﻘﺎﺌﻤﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬ ‫‪ .2‬ﺜم اﺨﺘﯿﺎر اﻹﻛﺴﺴوارات‬

‫ﻨﺨﺘﺎر ﻤﻨﻬﺎ ﻤﺤث اﻟدوس ‪Command Prompt‬‬

‫او‬

‫‪9‬‬
‫‪ .1‬اﻟﻨﻘر ﻋﻠﻰ اﯿﻘوﻨﺔ أﺒدأ‬
‫‪ .2‬ﻨدﺨل ‪ cmd‬ﺜم ‪Enter‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﻧﺎﻓﺬة اﻟﺪوس ‪ DOS‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪:‬‬

‫ﻟﻠدﺨول ﻋﻠﻰ ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ﻨدﺨل اﻟﻛﻠﻤﺔ ‪ 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‬اﻧﻘﺮ ﻓﻮق اﻻﯾﻘﻮﻧﺔ ﻟﺘﺒﺪئ ﺑﺎﻟﺘﺸﻐﯿﻞ ﺗﻈﮭﺮ ﻟﻚ اﻟﺸﺎﺷﺔ اﻟﺘﻠﯿﺔ‪:‬‬

‫‪ -4‬ﻟﺘﺸﻐﯿﻞ ﺑﺮﻧﺎﻣﺞ اﻟﻤﻨﻘﺢ ‪ Debug‬ﻧﻜﺘﺐ اﻷواﻣﺮ اﻟﺘﺎﻟﯿﺔ‪:‬‬


‫‪ ،‬ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح اﻻدﺧﺎل‪ ،‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪:‬‬ ‫‪ -1‬ﻧﻜﺘﺐ \‪Z:>mount c c:‬‬

‫‪11‬‬
‫‪-2‬ﻧﻨﺘﻘﻞ اﻟﻰ اﻟﻤﺤﺮك اﻟﺬي ﺗﻢ ﺗﺨﺰﯾﻦ ﺑﺮﻧﺎﻣﺞ ‪ Debug‬ﻋﻠﯿﺔ وﻓﻲ ﺣﺎﻟﺘﻨﺎ ﻛﺎن اﻟﻘﺮص اﻟﺼﻠﺐ ‪ C‬ﺑﺈدﺧﺎل اﻷﻣﺮ‬

‫اﻟﺘﺎﻟﻲ ‪ C:‬ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح اﻻدﺧﺎل‪.‬‬


‫ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح اﻻدﺧﺎل ‪ ،‬ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺑﺮﻧﺎﻣﺞ ‪Debug‬‬ ‫‪ -3‬ﻧﻜﺘﺐ ﻛﻠﻤﺔ ‪Debug‬‬
‫ﺑﻮﺟﻮد إﺷﺎرة اﻟﺴﺎﻟﺐ‪ ،‬ﺣﯿﺚ ﯾﻤﻜﻨﻨﺎ ان ﻧﺒﺪئ ﺑﺈدﺧﺎل أواﻣﺮ ‪ ،Debug‬ﻓﻤﺜﻼ ﻟﻌﺮض أواﻣﺮ ‪ Debug‬ﻧﻄﺒﻊ اﻟﺮﻣﺰ‬
‫إﺷﺎرة اﻻﺳﺘﻔﮭﺎم ؟ وﻧﻀﻐﻂ ﻋﻠﻰ ﻣﻔﺘﺎح اﻻدﺧﺎل‪ ،.‬ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺑﺮﻧﺎﻣﺞ ‪ Debug‬اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ 4.2‬ﻋرض اﻟﻤﺴﺠﻼت‬

‫ﻟﻠﺘﻌرف ﻋﻠﻰ اﻟﻤﺴﺠﻼت ﻨدﺨل اﻟﺤرف ‪ R‬ﺜم ﻨﻀﻐط ﻋﻠﻰ ﻤﻔﺘﺎح اﻻدﺨﺎل‪ ،‬ﻓﺘظﻬر ﻟﻨﺎ ﻗﺎﺌﻤﺔ ﺒﺄﺴﻤﺎء اﻟﻤﺴﺠﻼت‬
‫واﻟﻘﯿم اﻟﻤﺨزﻨﺔ ﻓﯿﻬﺎ‪.‬‬

‫‪12‬‬
‫ﻨﺸﺎط )‪(1‬‬

‫‪ .1‬ﻤﺎ أﺴﻤﺎء اﻟﻤﺴﺠﻼت اﻟﺘﻲ ﺘظﻬر ﻋﻠﻰ اﻟﺸﺎﺸﺔ؟‬

‫‪........................................................................................................‬‬
‫‪.................................................‬‬

‫‪ .2‬ﻤﺎ ﻫﻲ اﻟﻘﯿم ﻓﻲ ﻛل ﻤﺴﺠل؟‬

‫‪........................................................................................................‬‬
‫‪.................................................‬‬

‫ﺼﻨف اﻟﻤﺴﺠﻼت ﺤﺴب أﻨواﻋﻬﺎ‬

‫‪.................................................‬‬

‫‪.................................................‬‬

‫‪.................................................‬‬

‫‪13‬‬
‫‪.................................................‬‬

‫‪.................................................‬‬

‫ﻗﺒل اﻟﺨوض ﺒﻤزﯿد ﻤن اﻷواﻤر‪ ،‬ﻟﻨﺘﻌرف ﺒﺸﻛل ﺴرﯿﻊ ﻋﻠﻰ ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ ‪ ،8086‬واﻟﺘﻲ ﯿﻌﻤل ﻤﻌﻬﺎ‬
‫ﺒرﻨﺎﻤﺞ ‪ ،Debug‬وﻻ ﯿﻤﻛن أن ﻨﺘﻌﺎﻤل ﻤﻊ ﻫذا اﻟﺒرﻨﺎﻤﺞ ﺒدون اﻻطﻼع ﻋﻠﻰ ﻫذﻩ اﻟﻤﺴﺠﻼت وﻤﻌرﻓﺔ وظﯿﻔﺘﻬﺎ‪.‬‬

‫ﯿﺤﺘوي ﻤﻌﺎﻟﺞ ‪ 8086‬ﻋﻠﻰ ‪ 14‬ﻤﺴﺠل ﯿﻤﻛن ﻟﻠﻤﺴﺘﺨدم أن ﯿﺘﻌﺎﻤل ﻤﻌﻬﺎ‪ .‬وﯿﻤﻛن ﺘﺼﻨﯿف ﻫذﻩ اﻟﻤﺴﺠﻼت‬
‫ﻛﻤﺎ ﯿﻠﻲ ﺸﻛل )‪:(1‬‬

‫ﺸﻛل )‪ (1‬أﻨواع اﻟﻤﺴﺠﻼت‬

‫‪ .1‬ﻤﺴﺠﻼت اﻟﻤﻌطﯿﺎت )ﻋﺎﻤﺔ اﻻﺴﺘﺨدام(‪:‬‬

‫و ﻋددﻫﺎ أرﺒﻌﺔ وﻫﻲ‪.AX, BX, CX, DX :‬‬

‫‪14‬‬
‫ﺤﺠم ﻛل ﻤﻨﻬﺎ ‪ 16‬ﺒت‪ .‬وﺴﻤﯿت ﻋﺎﻤﺔ اﻻﺴﺘﺨدام ﻻن اﻟﻤﺴﺘﺨدم ﯿﻤﻛﻨﻪ اﻟﺘﻌﺎﻤل ﻤﻌﻬﺎ ﻛﯿف ﻤﺎ ﺸﺎء؛ ﯿﻤﻛﻨﻪ‬
‫ﺘﺤﻤﯿﻠﻬﺎ ﺒﺄي ﻗﯿﻤﺔ‪ ،‬ﻨﻘل ﻤﺤﺘوﯿﺎﺘﻬﺎ إﻟﻰ ﺒﻌض اﻟﻤﺴﺠﻼت اﻷﺨرى أو إﻟﻰ ﺒﻌﻀﻬﺎ اﻟﺒﻌض أو إﻟﻰ اﻟذاﻛرة‪.‬‬

‫ﯿﻤﻛن‬ ‫ﻫذﻩ اﻟﻤﺴﺠﻼت ﺒﻬﺎ ﺨﺎﺼﯿﺔ إﻤﻛﺎﻨﯿﺔ ﺘﻘﺴﯿﻤﻬﺎ إﻟﻰ ﺠزأﯿن؛ ﻛل ﺠزء ﺤﺠﻤﻪ ‪ 8‬ﺒت‪ .‬ﻤﺜﻼ ﻤﺴﺠل ‪AX‬‬
‫ﺘﻘﺴﯿﻤﻪ إﻟﻰ ﺠزأﯿن؛ اﻟﺠزء اﻷﻋﻠﻰ و ﺤﺠﻤﻪ ‪ 8‬ﺒت ﯿﺴﻤﻰ ‪ ) AH‬ﺤرف ‪ H‬ﻤن ﻛﻠﻤﺔ ‪ ،( High‬و اﻟﺠزء اﻷﺴﻔل‬
‫و ﺤﺠﻤﻪ اﯿﻀﺎ ‪ 8‬ﺒت و ﯿﺴﻤﻰ ‪) AL‬ﺤرف ‪ L‬ﻤن ﻛﻠﻤﺔ ‪.( Low‬‬

‫أي أن اﻟﻤﺴﺠل اﻟﻛﺎﻤل واﻟذي ﺤﺠﻤﻪ ‪ 16‬ﺒت ﯿﻀﺎف إﻟﻰ اﺴﻤﻪ ‪)X‬ﻤﺜﻼ ‪ ،(AX‬واﻟﺠزء اﻷﻋﻠﻰ ﻤﻨﻪ ﯿﻀﺎف‬
‫إﻟﻰ اﺴﻤﻪ ‪) H‬ﻤﺜﻼ ‪ .(AH‬وﻫذا ﯿﻨطﺒق ﻋﻠﻰ اﻟﻤﺴﺠﻼت ‪ ،CX ،BX ،AX‬و ‪ .DX‬اﻟﺸﻛل)‪ (2‬ﯿﺒﯿن ﻫذا‬
‫اﻟﺘﻘﺴﯿم ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﺴﺠل ‪.AX‬‬

‫ﺸﻛل)‪ :(2‬ﻤﺴﺠل ‪AX‬‬

‫ﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ ﻟﺸﻛل)‪ (2‬أﻋﻼﻩ‪ ،‬اﻟﺒﺘﺎت اﻟﺜﻤﺎﻨﯿﺔ ﻋﻠﻰ اﻟﯿﻤﯿن ﻫم اﻟﺠزء اﻷﺴﻔل )‪ ،(AL‬و اﻟﺒﺘﺎت اﻟﺜﻤﺎﻨﯿﺔ‬
‫ﻋﻠﻰ اﻟﯿﺴﺎر ﻫم اﻟﺠزء اﻷﻋﻠﻰ )‪.(AH‬‬

‫‪ .2‬ﻤﺴﺠﻼت اﻟﻘطﺎﻋﺎت‪:‬‬

‫وﻋددﻫﺎ أرﺒﻌﺔ وﻫﻲ‪:‬‬

‫• ﻤﺴﺠل ﻗطﺎع اﻟﺒﯿﺎﻨﺎت ‪ :DS‬ﯿﺨزن ﻋﻨوان ﺒداﯿﺔ ﻗطﺎع اﻟﺒﯿﺎﻨﺎت‪ .‬وﻫو اﻟﻘطﺎع اﻟذي ﯿﺨزن ﺒﻪ ﺠﻤﯿﻊ‬
‫اﻟﻤﺘﻐﯿرات واﻟﺜواﺒت و ‪ DS‬ﯿﺴﺘﺨدم ﻟﺘﺨزﯿن ﺒداﯿﺔ ﻋﻨوان ﻫذا اﻟﻘطﺎع‪.‬‬
‫• ﻤﺴﺠل ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت ‪ :CS‬ﯿﺨزن ﻋﻨوان ﺒداﯿﺔ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت‪ .‬وﻫو اﻟﻘطﺎع اﻟذي ﯿﺨزن ﺒﻪ‬
‫ﺘﻌﻠﯿﻤﺎت ﺒرﻨﺎﻤﺞ اﻻﺴﻤﺒﻠﻲ‪ .‬و ‪ CS‬ﺒﻪ ﺒداﯿﺔ ﻋﻨوان ﻫذا اﻟﻘطﺎع‪.‬‬
‫• ﻤﺴﺠل ﻗطﺎع اﻟﻤﻛدس ‪ : SS‬ﯿﺨزن ﻋﻨوان ﺒداﯿﺔ اﻟﻤﻛدس‪.‬‬
‫• ﻤﺴﺠل ﻗطﺎع اﻟﺒﯿﺎﻨﺎت اﻹﻀﺎﻓﻲ ‪ES‬‬

‫‪15‬‬
‫‪ .3‬ﻤﺴﺠﻼت اﻟﻔﻬرﺴﺔ و اﻟﺘﺄﺸﯿر‪:‬‬

‫وﻋددﻫﺎ ﺨﻤﺴﺔ وﺤﺠم ﻛل ﻤﻨﻬﺎ ‪ 16‬ﺒت وﻫﻲ‪:‬‬

‫• ﻤﺴﺠل ﻤؤﺸر اﻟﺘﻌﻠﯿﻤﺎت ‪ IP:‬وﯿﺨزن ﻋﻨوان اﻟﺘﻌﻠﯿﻤﺔ اﻟﻘﺎدﻤﺔ اﻟﺘﻲ ﺴﯿﺘم ﺘﻨﻔﯿذﻫﺎ‪.‬‬
‫• ﻤﺴﺠل ﻤؤﺸر اﻟﻤﻛدس ‪ :SP‬وﯿﺨزن ﻋﻨوان اﻟﻌﻨﺼر اﻟﻤوﺠود ﻓﻲ أﻋﻠﻰ اﻟﻤﻛدس‪.‬‬
‫• ﻤﺴﺠل ‪ :BP‬وﯿﻤﻛن أن ﯿؤﺸر إﻟﻰ أي ﻤﻛﺎن ﻓﻲ اﻟﻤﻛدس اﯿﻀﺎ‪.‬‬
‫• ﻤﺴﺠل ‪ :SI‬ﯿﺴﺘﺨدم ﻤﻊ ﺴﻠﺴﻠﺔ اﻟرﻤوز‬
‫• ﻤﺴﺠل ‪ : DI‬ﯿﺴﺘﺨدم ﻤﻊ ﺴﻠﺴﻠﺔ اﻟرﻤوز اﯿﻀﺎ‬

‫‪ .4‬ﻤﺴﺠل اﻟراﯿﺎت )ﺤﺎﻟﺔ اﻟﺒرﻨﺎﻤﺞ(‪:‬‬

‫ﯿﺤﺘوي ﻋﻠﻰ ‪ 16‬ﺒت‪ 9 ،‬ﻤﻨﻬﺎ ﻫﻲ ﺒﺘﺎت ﻟﻠراﯿﺎت واﻟﺴﺒﻌﺔ اﻟﻤﺘﺒﻘﯿﺔ ﻏﯿر ﻤﺴﺘﺨدﻤﺔ‪ .‬ﻫذﻩ اﻟراﯿﺎت ﺘﺘﺒدل ﻗﯿﻤﺘﻬﺎ‬
‫ﺒﺸﻛل ﻤﺴﺘﻤر ﺒﻌد ﺘﻨﻔﯿذ ﻛل ﺘﻌﻠﯿﻤﺔ‪ .‬وﻤن اﻷﻤﺜﻠﺔ ﻋﻠﻰ ﻫذﻩ اﻟراﯿﺎت‪:‬‬

‫• ﺒت راﯿﺔ اﻟﺼﻔر‪ ZF:‬ﯿﺼﺒﺢ ﻗﯿﻤﺔ ﻫذا اﻟﺒت ‪ 1‬إذا ﻛﺎﻨت ﻨﺘﯿﺠﺔ اﻟﻌﻤﻠﯿﺔ ﺘﺴﺎوي ﺼﻔرا‪.‬‬
‫• ﺒت راﯿﺔ اﻹﺸﺎرة ‪ : SF‬ﯿﺼﺒﺢ ﻗﯿﻤﺔ ﻫذا اﻟﺒت ‪ 1‬إذا ﻛﺎﻨت ﻨﺘﯿﺠﺔ اﻟﻌﻤﻠﯿﺔ ﺴﺎﻟﺒﺔ‪.‬‬

‫واﻟﺠدول اﻟﺘﺎﻟﻲ )‪ (1‬ﯿﻠﺨص ﻫذﻩ اﻟراﯿﺎت‬

‫ﺠدول )‪ (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‬ﻤﻌﺎﻟﺠﺔ ﻗﯿم اﻟﻤﺴﺠﻼت‬

‫ﺸﻛل )‪ (3‬ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠﻼت‬

‫اﻟﻘﯿم اﻟﺘﻲ ﺘظﻬر ﻫﻲ ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس ﻋﺸري ‪. Hexadecimal‬‬


‫ﺒﺎﻟرﺠوع اﻟﻰ اﻟﺸﻛل )‪ (3‬اﻟﺴﺎﺒق ﻨرى ان ﺠﻤﯿﻊ ّ‬
‫ﻓﻤﺜﻼ اﻟﻘﯿﻤﺔ اﻟﻤﺨزﻨﺔ ﻓﻲ ﻤﺴﺠل ‪ AX‬ﻫﻲ ‪ – 0000‬أرﺒﻌﺔ أرﻗﺎم ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس ﻋﺸري ‪-‬أي ‪ 16‬ﺒت ﺒﺎﻟﻨظﺎم‬
‫اﻟﺜﻨﺎﺌﻲ وﻫو ﺤﺠم ﺠﻤﯿﻊ ﻤﺴﺠﻼت اﻟﻤﻌﺎﻟﺞ ‪.8086‬‬

‫ﻛﻤﺎ اﺸﺎرﻨﺎ ﺴﺎﺒﻘﺎ ﯿﻤﻛﻨﻨﺎ اﺴﺘﺨدام اﻷﻤر ‪ R‬ﻹظﻬﺎر ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠﻼت‪ ،‬ﻹظﻬﺎر ﻤﺤﺘوﯿﺎت أﺤد اﻟﻤﺴﺠﻼت‬
‫ﻨدﺨل ‪ R‬ﺜم اﺴم اﻟﻤﺴﺠل‪ ،‬ﻓﻤﺜﻼ ﻹظﻬﺎر ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠل ‪ AX‬ﻓﻘط ﻨطﺒﻊ ‪ R‬ﺒﻌدﻫﺎ اﺴم اﻟﻤﺴﺠل ‪ AX‬اﻟذي‬
‫ﺘرﯿد ﻤﻌرﻓﺔ ﻤﺤﺘوﯿﺎﺘﻪ ﻛﻤﺎ ﯿﻠﻲ‪:‬‬

‫اﻛﺘب ‪ R AX‬ﺜم اﻀﻐط ﻤﻔﺘﺎح اﻻدﺨﺎل ﻟﯿظﻬر ﻟك ﻤﺤﺘوﯿﺎت ‪ AX‬ﻓﻘط ﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ اﻟﺸﻛل )‪ (4‬اﻟﺘﺎﻟﻲ‪.‬‬

‫ﺸﻛل )‪ (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‬‬

‫ﻨدﺨل اﻟرﻗم ‪ 2000‬ﺒﻌد اﻟرﻤز اﻟﺨﺎص ‪ :‬ﺜم ﻨﻀﻐط ﻤﻔﺘﺎح اﻻدﺨﺎل‪.‬‬


‫‪R IP‬‬
‫‪:100‬‬
‫‪-3‬‬

‫ﻟﻤﻌرﻓﺔ ﻤﺤﺘوى ﻤﺴﺠل اﻟﺘﻌﻠﯿﻤﺔ ‪ CS‬ﻗﺒل ﺘﺸﻐﯿل اﻟﺒرﻨﺎﻤﺞ‪ ،‬اﻛﺘب‪ .R CS :‬ﺒﻌد ذﻟك‪ ،‬ﺴوف ﻨرى اﻟﻌﻨوان اﻟذي‬
‫ﯿﺸﯿر اﻟﯿﻪ اﻟﻤﺴﺠل ‪. CS‬‬

‫‪18‬‬
‫ﻨدﺨل اﻟرﻗم ‪ 2000‬ﺒﻌد اﻟرﻤز اﻟﺨﺎص ‪ :‬ﺜم ﻨﻀﻐط ﻤﻔﺘﺎح اﻻدﺨﺎل‪.‬‬
‫‪R CS‬‬
‫‪:2000‬‬

‫أﺴﺌﻠﺔ اﻟﺘﻘوﯿم اﻟذاﺘﻲ )‪(1‬‬

‫‪-1‬ﻤﺎ ﻫو ﺒرﻨﺎﻤﺞ ‪ Debug‬؟‬

‫‪-2‬ﻛﯿف ﯿﺘم ﺘﺸﻐﯿل ﺒرﻨﺎﻤﺞ ‪ Debug‬؟‬

‫وﺒﯿن ﻟﻤﺎذا ﺴﻤﯿت ﺒﻤﺴﺠﻼت ﻋﺎﻤﺔ اﻻﺴﺘﺨدام؟‬


‫‪-3‬اذﻛر أﺴﻤﺎء اﻟﻤﺴﺠﻼت اﻷرﺒﻌﺔ ﻟﻠﻤﻌطﯿﺎت ‪ّ ،Data Registers‬‬
‫‪-4‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﻤﺴﺠل ‪ CS‬؟‬

‫‪-5‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﻤﺴﺠل ‪ IP‬؟‬

‫‪-6‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ ﻤﺴﺠل اﻟراﯿﺎت )ﻤﺴل ﺤﺎﻟﺔ اﻟﺒرﻨﺎﻤﺞ(؟‬

‫‪-7‬ﺒﯿن ﻋﻤل راﯿﺔ اﻟﺼﻔر ﻓﻲ ﻤﺴﺠل اﻟراﯿﺎت؟‬

‫‪ -8‬ﻟﻤﺎذا ﻨﻐﯿر ﻗﯿم اﻟﻤﺴﺠﻼت ‪ CS‬و‪ IP‬؟‬

‫‪ -9‬ﻤﺎ ﻨﺎﺘﺞ ﺘﻨﻔﯿذ اﻷواﻤر واﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﻠﯿﺔ‪:‬‬

‫‪ 3‬ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‬

‫اﻷﻤر ‪ A‬ﯿﺴﻤﺢ ﺒﺈدﺨﺎل ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ إﻟﻰ اﻟذاﻛرة‪ .‬وﯿﻤﻛن ﻛﺘﺎﺒﺔ رﻗم ﺒﻌد ﺤرف ‪ A‬ﯿﺤدد اﻟﻌﻨوان اﻟذي ﺴﯿﺘم‬
‫ﻛﺘﺎﺒﺔ اﻟﺘﻌﻠﯿﻤﺎت ﺒﻪ‪ .‬ﻓﻤﺜﻼ ﻹدﺨﺎل ﺒرﻨﺎﻤﺞ ﯿﺒدأ ﻤن اﻟﻌﻨوان ‪ 100‬ﻓﻲ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت‪ ،‬ﻤﺎ ﻋﻠﯿك ﻋزﯿزي اﻟطﺎﻟب‬
‫إﻻ أن ﺘﻛﺘب‪:‬‬

‫‪19‬‬
‫‪- A 100‬‬

‫وﻟﻨﺄﺨذ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ واﻟذي ﯿﺒﯿن ﺨطوات إدﺨﺎل ﺒرﻨﺎﻤﺞ ﻓﻲ ﻗطﺎع اﻟﺘﻌﻠﯿﻤﺎت اﺒﺘداء ﻤن اﻟﻌﻨوان ‪) 100‬ﺘذﻛر‬
‫ﻋزﯿزي اﻟطﺎﻟب‪ ،‬ان ﺠﻤﯿﻊ اﻷرﻗﺎم اﻟﻤﺴﺘﺨدﻤﺔ ﻫﻨﺎ ﻫﻲ ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس ﻋﺸري(‪ .‬ﻫذا اﻟﺒرﻨﺎﻤﺞ ﯿﻀﻊ ﻗﯿﻤﺔ ‪ 5‬ﻓﻲ‬
‫ﻗﯿم اﻟﻤﺴﺠﻠﯿن ‪ AX‬و ‪ BX‬وﯿﺨزن اﻟﺘﻌﻠﯿﻤﺔ ﻓﻲ‪AX:‬‬
‫اﻟﻤﺴﺠل ‪ ،AX‬وﻗﯿﻤﺔ ‪ 3‬ﻓﻲ اﻟﻤﺴﺠل ‪ BX‬ﺜم ﯿﺠﻤﻊ ّ‬
‫ﻤﺜﺎل‪:2‬‬

‫ﻣﻼﺣﻈﺔ‪ :‬ﻟﻠﺨﺮوج ﻣﻦ ﻛﺘﺎﺑﺔ اﻟﺘﻌﻠﯿﻤﺎت‪ ،‬ﻓﻘﻂ اﺿﻐﻂ ‪ Enter‬ﻣﺮﺗﯿﻦ ﺑﻌﺪ آﺧﺮ ﺗﻌﻠﯿﻤﺔ ﺗﻜﺘﺒﮭﺎ‪.‬‬

‫ﯿﻤﻛن ﻤﻼﺤظﺔ ﺒﻌض اﻟﻨﻘﺎط إذا ﻤﺎ ﻨظرﻨﺎ إﻟﻰ اﻟﻤﺜﺎل أﻋﻼﻩ‪.‬‬

‫أوﻻ‪ ،‬ﺒﻌد ﻛﺘﺎﺒﺔ ‪ A 100‬واﻟﻀﻐط ‪ Enter‬ﯿظﻬر اﻟﺴطر اﻟﺘﺎﻟﻲ‪:‬‬


‫‪0B58: 0100‬‬

‫ھﺬا اﻟﺴﻄﺮ ﯾﺒﯿﻦ ﻗﯿﻤﺔ ﻣﺴﺠﻞ ﻗﻄﺎع اﻟﺘﻌﻠﯿﻤﺎت ‪ CS‬اﻟﺤﺎﻟﯿﺔ وھﻲ ‪ ، 0B58‬ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ اﻹزاﺣﺔ اﻟﺘﻲ ﺳﯿﺘﻢ إدﺧﺎل‬
‫اﻟﺘﻌﻠﯿﻤﺎت ﺑﮭﺎ وھﻲ ‪ 100‬واﻟﺘﻲ ﺣﺪدﻧﺎھﺎ ﻋﻨﺪﻣﺎ ﻛﺘﺒﻨﺎ ‪) A 100‬إي ادﺧﻞ ﺗﻌﻠﯿﻤﺔ اﺑﺘﺪاء ﻣﻦ اﻹزاﺣﺔ ‪.(100‬‬
‫ﺑﻌﺪ ﻛﺘﺎﺑﺔ أول ﺗﻌﻠﯿﻤﺔ واﻟﺘﻲ ھﺪﻓﮭﺎ ﺗﺤﻤﯿﻞ ‪ AX‬ﺑﻘﯿﻤﺔ ‪ ،5‬واﻟﻀﻐﻂ ﻋﻠﻰ ‪ ،Enter‬ﯾﻈﮭﺮ اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ وھﻮ‪:‬‬
‫‪0B58: 0103‬‬
‫ﻧﺴﺘﻨﺘﺞ ﻣﻦ ھﺬا اﻟﺴﻄﺮ أن طﻮل اﻟﺘﻌﻠﯿﻤﺔ اﻷوﻟﻰ وھﻲ ‪ MOV AX,100‬ھﻮ ‪ 3‬ﺑﺎﯾﺖ‪.‬‬

‫‪20‬‬
‫ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺸﻜﻞ أﻋﻼه ﻓﺎن أول اﻟﺘﻌﻠﯿﻤﺔ ﺗﺒﺪأ ﻓﻲ اﻟﻤﻮﻗﻊ ‪ ،100‬واﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ﺳﺘﺒﺪأ ﻓﻲ اﻟﻤﻮﻗﻊ‬
‫‪ ،103‬أي أن اﻟﺘﻌﻠﯿﻤﺔ اﻷوﻟﻰ اﺣﺘﻠﺖ ‪ 3‬ﺑﺎﯾﺖ‪.‬‬

‫‪ 4‬ﺘﺘﺒﻊ ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ اﻻﻤر ‪T‬‬


‫ھﺬا اﻻﻣﺮ ﻣﻔﯿﺪ ﺟﺪا وﻛﺜﯿﺮ اﻻﺳﺘﺨﺪام ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ .Debug‬وﯾﺴﺘﺨﺪم ﻟﺘﺘﺒﻊ اﻟﺒﺮﻧﺎﻣﺞ ﺗﻌﻠﯿﻤﺔ ﺑﻌﺪ ﺗﻌﻠﯿﻤﺔ‪،‬‬
‫وﯾﺒﯿّﻦ ﻣﺎ اﻟﺬي ﯾﺤﺪث ﻓﻲ اﻟﻤﺴﺠﻼت واﻟﺮاﯾﺎت ﺑﻌﺪ ﻛﻞ ﺗﻌﻠﯿﻤﺔ‪ .‬وﻧﺴﺘﺨﺪم اﻟﺤﺮف ‪ T‬ھﻨﺎ ﻣﻦ ﻛﻠﻤﺔ "‪"Trace‬‬
‫أي ﺗﺘﺒﻊ‪.‬‬

‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ طﺮﯾﻘﺔ ﻋﻤﻞ اﻻﻣﺮ ‪.T‬‬


‫ﻣﺜﺎل‪:3‬‬
‫ﺑﺎﺳﺘﺨﺪام ‪ Debug‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ اﻻﺳﻤﺒﻠﻲ ﯾﻌﻤﻞ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫• ﯾﺤﻤﻞ ﻓﻲ ‪ AX‬ﻗﯿﻤﺔ ‪5‬‬
‫• ﯾﺤﻤﻞ ﻓﻲ ‪ BX‬ﻗﯿﻤﺔ ‪3‬‬
‫• ﯾﻀﯿﻒ ‪ BX‬إﻟﻰ ‪AX‬‬
‫• ﺛﻢ ﯾﺼﻔﺮ ‪BX‬‬
‫اﻟﺤﻞ‪:‬‬
‫ﻧﻜﺘﺐ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ ﻣﻦ اﻹزاﺣﺔ ‪) 100‬ﻧﺴﺘﺨﺪم ‪ ،(A100‬ﺛﻢ ﻧﺪﺧﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫‪MOV AX,5‬‬
‫‪MOV BX,3‬‬
‫‪ADD AX,BX‬‬
‫‪XOR BX,BX‬‬
‫ﺑﻌﺪھﺎ ﻧﻜﺘﺐ ‪ T=100‬أي اﺑﺪأ اﻟﺘﺘﺒﻊ ﻣﻦ اﻹزاﺣﺔ ‪.100‬‬

‫ﺑﻌﺪ ﻛﺘﺎﺑﺔ ‪ T=100‬واﻟﻀﻐﻂ ‪ Enter‬ﯾﻈﮭﺮ اﻟﺘﺎﻟﻲ‬

‫‪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‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ )اﺴﺘﻤر ﺒﻛﺘﺎﺒﺔ ‪:(T‬‬

‫ﻻﺤظ أن ﻗﯿﻤﺔ ‪ AX‬أﺼﺒﺤت ‪ 8‬وذﻟك ﻷﻨﻨﺎ اﻀﻔﻨﺎ ‪ (3) BX‬اﻟﻰ ‪ (5) AX‬ﺒﺎﺴﺘﺨدام ‪،ADD AX,BX‬‬
‫ﻓﺄﺼﺒﺤت اﻟﻨﺘﯿﺠﺔ ‪.8‬‬

‫اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ )اﺴﺘﻤر ﺒﻛﺘﺎﺒﺔ ‪:(T‬‬

‫ﻻﺤظ اﻨﻨﺎ ﺼﻔرﻨﺎ ﻗﯿﻤﺔ ‪ BX‬ﺒﺎﺴﺘﺨدام ‪ ،XOR BX,BX‬و ﻻﺤظ اﯿﻀﺎ أن ﻗﯿﻤﺔ راﯿﺔ اﻟﺼﻔر اﺼﺒﺤت ‪.ZR‬‬
‫أي أن ﻗﯿﻤﺔ راﯿﺔ اﻟﺼﻔر أﺼﺒﺤت ‪.1‬‬

‫ﺗﺪرﯾﺐ ‪1‬‬
‫ﻗﻢ ﺑﺈﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺘﺎﻟﯿﺔ ﺑﺎﺳﺘﺨﺪام ‪:Debug‬‬
‫‪ .1‬اﻋﺮض اﻟﻤﺤﺘﻮﯾﺎت اﻟﺤﺎﻟﯿﺔ ﻟﺠﻤﯿﻊ اﻟﻤﺴﺠﻼت‪.‬‬
‫ﺗﺘﻢ ھﺬه اﻟﺨﻄﻮة ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ ‪R‬‬

‫‪ .2‬اﻋﺮض اﻟﻮﺿﻌﯿﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻠﺮاﯾﺎت‬


‫ھﻨﺎ ﻧﺴﺘﺨﺪم ‪ F) R F‬ﺗﻌﻨﻲ ‪ Flags‬أي اﻟﺮاﯾﺎت(‬

‫‪ .3‬ادﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ ﻓﻲ اﻹزاﺣﺔ ‪،255‬‬

‫‪23‬‬
‫‪MOV CX,5‬‬
‫‪MOV AX,0‬‬
‫‪LABEL: ADD AX,CX‬‬
‫‪LOOP LABEL‬‬
‫)ﻣﻼﺣﻈﺔ‪ :‬ﻛﻠﻤﺔ‪ LABEL‬ﻻ ﺗﻜﺘﺐ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ DEBUG‬ﻻن ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻌﺎﻣﻞ ﻣﻊ ﺗﻌﻠﯿﻤﺎت و ﻻ ﯾﺘﻌﺎﻣﻞ ﻣﻊ أﺳﻤﺎء(‬

‫ﻻﺣﻆ ﺗﻌﻠﯿﻤﺔ ‪ LOOP‬أﺗﻰ ﺑﻌﺪھﺎ اﻟﻌﻨﻮان اﻟﺬي ﺗﻌﻮد إﻟﯿﺔ وھﻮ ‪ 015B‬وھﻲ اﻹزاﺣﺔ اﻟﻤﺨﺰن ﺑﮭﺎ اﻟﺘﻌﻠﯿﻤﺔ‬
‫‪ADD AX,CX‬‬
‫‪ .4‬ﺗﺘﺒﻊ ﻣﺎذا ﯾﺤﺪث ﺑﺎﻟﻤﺴﺠﻼت ﺑﻌﺪ ﺗﻨﻔﯿﺬ ﻛﻞ ﺗﻌﻠﯿﻤﺔ‪:‬‬
‫ﺗﻌﻠﯿﻤﺔ ‪MOV CX,5‬‬

‫ﺗﻌﻠﯿﻤﺔ ‪MOV AX,0‬‬

‫ﺗﻌﻠﯿﻤﺔ ‪ADD AX,CX‬‬

‫ﺗﻌﻠﯿﻤﺔ ‪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‬‬

‫ﻻﺣﻆ أن ﻣﺤﺘﻮﯾﺎت اﻟﻤﻮﻗﻊ ‪ 100‬ھﻲ ‪B8‬‬

‫‪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‬ﻋﺎدة ﻣﺎ ﯾﺴﺘﺨﺪم ھﺬا اﻻﻣﺮ ﻟﺘﺼﻔﯿﺮ ﺳﻠﺴﻠﺔ ﻣﻦ‬
‫اﻟﻤﻮاﻗﻊ‪.‬‬

‫‪ .6‬أواﻤر أﺨرى ﻟﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ ‪Debug‬‬

‫‪ 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‬‬

‫‪ (1‬ﻣﺎ ھﻲ اﻟﻘﯿﻢ او ﻣﺤﺘﻮﯾﺎت ﻛﻞ ﻣﻦ‬


‫‪ .i‬اﻟﻤﺴﺠﻞ ‪............... AX‬‬
‫‪ .ii‬اﻟﻤﺴﺠﻞ ‪............... BX‬‬
‫‪ .iii‬اﻟﻤﺴﺠﻞ ‪................ IP‬‬
‫‪ (2‬ﻣﺎ ھﻲ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﻲ ﺗﻢ إدﺧﺎﻟﮭﺎ ﻓﻲ اﻟﻤﻮﻗﻊ ‪..................................................... 100‬‬
‫‪ (3‬ﻟﻠﺤﺼ�����ﻮل ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ادﺧﻞ اﻷﻣﺮ ‪ T‬واﻟﺬي ﯾﻌﻨﻲ ‪ TRACE‬وھﻮ أﻣﺮ ﯾﺴ�����ﺘﺨﺪم ﻟﺘﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺎت ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ‬
‫واﺣﺪة ﺗﻠﻮ اﻷﺧﺮى‬
‫ﻣﻼﺣﻈﺔ‪:‬‬
‫‪ -1‬ﻗﺒﻞ اﺳﺘﺨﺪام اﻷﻣﺮ ‪ T‬ﺗﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺠﻞ ‪ IP = 100‬ﻓﺈذا ﻛﺎﻧﺖ ﻗﯿﻤﺘﮫ ﻏﯿﺮ ذﻟﻚ ﻧﻔﺬ اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫‪-R IP‬‬ ‫ادﺧﻞ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ‪ R IP‬ﺛﻢ ‪ENTER‬‬
‫ﺑﻌﺪ ذﻟﻚ ادﺧﻞ ‪ 100‬ﺛﻢ اﺿﻐﻂ ﻋﻠﻰ ‪ENTER‬‬
‫‪ -2‬ﺟﻤﯿﻊ اﻷرﻗﺎم ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎدس ﻋﺸﺮ‬

‫‪ (4‬ﻣﺎ ھﻲ اﻟﻨﺘﯿﺠﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺴﺠﻞ ‪ AX‬ﺑﻌﺪ ﺗﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﺔ ‪............................................‬‬

‫‪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‬‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬

‫‪ -1‬ﺗﺄﻛﺪ ﻣﻦ أن ‪ IP = 100‬ﺛﻢ ادﺧﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ ﻛﻤﺎ ﯾﻠﻲ‪:‬‬


‫‪-A 100‬‬
‫‪MOV CX,0A‬‬
‫‪MOV AX,0‬‬
‫‪ADD AX,CX‬‬
‫‪LOOP 106‬‬
‫‪INT 20‬‬
‫ﻧﻔﺬ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺴﺎﺑﻘﺔ‪ ,‬وﯾﻔﻀﻞ أن ﺗﺴﺘﺨﺪم اﻷﻣﺮ ‪ T‬ﻟﻤﺘﺎﺑﻌﺔ ﻣﻜﻮﻧﺎت اﻟﻤﺴﺠﻼت‬
‫ﺑﯿﻦ ﻣﺎ ھﻲ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺴﺠﻞ ‪................................................ AX‬‬
‫ﻣﺎ ھﻲ اﻟﻮظﯿﻔﺔ اﻟﺘﻲ ﺗﺆدﯾﮭﺎ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺴﺎﺑﻘﺔ ‪.........................................................................‬‬

‫اﻟﻔﺮع اﻟﺜﺎﻟﺚ‬
‫ﺑﺎﺳﺘﺨﺪام اﻟﺒﺮﻧﺎﻣﺞ ‪ DEBUG‬واﻟﺨﻮارزﻣﯿﺔ اﻟﺘﺎﻟﯿﺔ اﻛﺘﺐ ﺗﻌﻠﯿﻤﺎت ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ ﻟﻄﺒﺎﻋﺔ اﻟﺤﺮوف اﻻﻧﺠﻠﯿﺰﯾﺔ ﻣﻦ ‪A..L‬‬
‫اﻟﺨﻮارزﻣﯿﺔ ‪:‬‬
‫‪ -1‬اﺳﻨﺪ ﻗﯿﻤﺔ اﻟﺮﻣﺰ ‪ A‬وھﻲ ‪ 41H‬إﻟﻰ اﻟﻤﺴﺠﻞ ‪DX‬‬
‫‪ -2‬اﺳﻨﺪ اﻟﻘﯿﻤﺔ ‪ 02‬إﻟﻰ اﻟﻤﺴﺠﻞ ‪ AH‬ﻟﻄﺒﺎﻋﺔ اﻟﺮﻣﺰ‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬
‫‪................................................................................................................................................‬‬

‫‪32‬‬
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................

‫ اﻟﻤراﺠﻊ‬.8

.2003 ،‫ ﺠﺎﻤﻌﺔ اﻟﻘدس اﻟﻤﻔﺘوﺤﺔ‬،1381 ‫ ﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ‬.1


2. http://thestarman.pcministry.com/asm/debug/debug.htm
3. http://www.armory.com/~rstevew/Public/Tutor/Debug/debug2.htm
4. https://www.princeton.edu/ssp/trips/data/debug_tutorial.pdf

33
‫اﻟوﺤـدة اﻟﺜﺎﻨﯿﺔ‬

‫ﻤﻘدﻤﺔ اﻟﻰ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ‬


‫اﺴﻤﺒﻠﻲ‬

‫‪34‬‬
‫‪ .1‬اﻟﻤﻘدﻤﺔ‬

‫‪ 1.1‬ﺘﻤﻬﯿد‬

‫ﻋزﯿزي اﻟطﺎﻟب‪ ،‬أﻫﻼً ﺒك إﻟﻰ اﻟوﺤدة اﻟﺜﺎﻨﯿﺔ ﻤن اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻟﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب وﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ وﻫﻲ‬
‫ﺒﻌﻨوان ﻤﻘدﻤﺔ اﻟﻰ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪.‬‬

‫ﺘﻬدف ﻫذﻩ اﻟوﺤدة إﻟﻰ إﻋطﺎﺌك ﻤﻌﻠوﻤﺎت أﺴﺎﺴﯿﺔ ﻓﯿﻤﺎ ﯿﺘﻌﻠق ﺒﺎﻟﺘﻌﺎﻤل ﻤﻊ ﺒراﻤﺞ اﻻﺴﻤﺒﻠﻲ وﺒرﻨﺎﻤﺞ اﻟﻤﺠﻤﻊ ﻤن ﺤﯿث‬
‫ﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﯾﻤﺮ ﺑﮭﺎ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ‪ ،‬اﻟﺒﺮاﻣﺞ اﻟﻼزﻣﺔ اﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ وﺧﻄﻮات‬
‫اﻟﺘﻨﻔﯿﺬ‬
‫وﻗد ﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ﺒﺎﻟﻌدﯿد ﻤن اﻷﻤﺜﻠﺔ اﻟﺘوﻀﯿﺤﯿﺔ‪ ،‬واﻟﺘدرﯿﺒﺎت‪ ،‬إﻀﺎﻓﺔ إﻟﻰ ﺒﻌض أﺴﺌﻠﺔ اﻟﺘﻘوﯿم اﻟذاﺘﻲ واﻹﺸﻛﺎل‬
‫اﻟﺘﻲ ﺘوﻀﺢ ﺒﻌض اﻟﻤﻔﺎﻫﯿم‪.‬‬

‫ﻤرة أﺨرى ﻨرﺤب ﺒك ﻓﻲ ﻫذﻩ اﻟوﺤدة‪ ،‬آﻤﻠﯿن أن ﺘﺴﺘﻤﺘﻊ ﺒدراﺴﺘك ﻟﻠﻤﺎدة اﻟﺘﻲ ﻨﻌرﻀﻬﺎ ﻟك ﻓﻲ ﻫذﻩ اﻟوﺤدة‪.‬‬

‫‪ 2.1‬أﻫداف اﻟوﺤدة‬

‫ﯿﻨﺘظر ﻤﻨك‪ ،‬ﻋزﯿزي اﻟطﺎﻟب‪ ،‬ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ‪:‬‬

‫‪ .1‬ﺘﺘﻌرف ﻋﻠﻰ اﻟﺒراﻤﺞ اﻟﻼزﻤﺔ ﻟﺘﻨﻔﯿذ ﺒراﻤﺞ اﻻﺴﻤﺒﻠﻲ‪.‬‬


‫‪ .2‬ﺘﺘﻌرف ﻋﻠﻰ ﺒرﻨﺎﻤﺞ اﻻﺴﻤﺒﻠﻲ وﻛﯿﻔﯿﺔ ﺘﺸﻐﯿﻠﻪ واﻟﺘﻌﺎﻤل ﻤﻌﻪ‪.‬‬
‫‪ .3‬ﺘﺘﻌرف ﻋﻠﻰ ﻤراﺤل ﻤﻌﺎﻟﺠﺔ ﺒرﻨﺎﻤﺞ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪.‬‬
‫‪ .4‬ﺘﺘﻤﻛن ﻤن ﻛﺘﺎﺒﺔ ﺒرﻨﺎﻤﺞ اﻻﺴﻤﺒﻠﻲ‪.‬‬
‫‪ .5‬ﺘﺘﻤﻛن ﻤن ﺘﺨزﯿن ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ ﺒﺎﺴﺘﺨدام ﻤﺤرر اﻟﻨﺼوص‪.‬‬
‫‪ .6‬ﺘﺘﻤﻛن ﻤن ﺘﻨﻔﯿذ ﺒرﻨﺎﻤﺞ اﺴﻤﺒﻠﻲ‪.‬‬
‫‪ .7‬ﺘﺘﻤﻛن ﻤن ﺘﺼﺤﯿﺢ اﻷﺨطﺎء ﻓﻲ ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪.‬‬

‫‪ 3.1‬أﻗﺴﺎم اﻟوﺤدة‬

‫‪35‬‬
‫ﺘﺘﻛون ﻫذﻩ اﻟوﺤدة ﻤن ﺜﻼﺜﺔ أﻗﺴﺎم رﺌﯿﺴﺔ‪ .‬ﻓﺎﻟﻘﺴم اﻷول ﯿوﻀﺢ‪ .‬اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﯾﻤﺮ ﺑﮭﺎ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺑﺎﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ‪ ،‬اﻤﺎ اﻟﻘﺴم اﻟﺜﺎﻨﻲ ﻓﯿﻌرض اﻟﺒﺮاﻣﺞ اﻟﻼزﻣﺔ اﺳﺘﺨﺪام ﻧﻈﺎم اﻷﺳﻤﺒﻠﻲ ﻣﻦ ﺣﯿﺚ ادﺧﺎل‬
‫اﻟﺒﺮاﻣﺞ وﻋﻤﻠﯿﺔ اﻟﺘﺠﻤﯿﻊ ﺑﻮﺳﺎطﺔ اﻟﻤﺠﻤﻊ ‪ MASM‬وﻋﻤﻠﯿﺔ اﻟﺮﺑﻂ ﺑﻮﺳﺎطﺔ ‪ .LINK‬اﻟﻘﺴم اﻟﺜﺎﻟث ﻓﯿوﻀﺢ ﻛﯿﻔﯿﺔ‬
‫ادﺨﺎل ﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ وﺘﻨﻔﯿذﻩ‪.‬‬

‫‪ 4.1‬ﻤﺎ ﺘﺤﺘﺎج إﻟﯿﻪ ﻟدراﺴﺔ اﻟوﺤدة‬

‫ﻟﻘد ﺘﻀﻤﻨت ﻫذﻩ اﻟوﺤدة اﻟﻌدﯿد ﻤن اﻟﻤﻔﺎﻫﯿم اﻷﺴﺎﺴﯿﺔ‪ ،‬وﺒذﻟك ﻓﺎن طﺒﯿﻌﺔ اﻟﻤﺎدة اﻟﻤﻌروﻀﺔ‪ ،‬ﻋزﯿزي اﻟطﺎﻟب‪،‬‬
‫ﺘﺤﺘﺎج إﻟﻰ ﺠو ﻫﺎدئ ﺨﺎص وﻤرﯿﺢ ﺤﺘﻰ ﺘﺴﺘطﯿﻊ اﻟﺘرﻛﯿز ﻋﻠﻰ اﻟﻤﻔﺎﻫﯿم اﻟﻤﻌطﺎة‪ ،‬وﺘﺴﺘوﻋﺒﻬﺎ ﺒﺎﻟﺸﻛل اﻟﻤﻨﺎﺴب‪ .‬وﻛل‬
‫ﻤﺎ ﺘﺤﺘﺎﺠﻪ ﺒﻌد ذﻟك ﺒﻌض اﻟﻘرطﺎﺴﯿﺔ ﻛﻘﻠم رﺼﺎص وورق أﺒﯿض‪ ،‬ﺤﺎﺴوب وﺒرﻤﺠﯿﺎت ﻨظﺎم اﻻﺴﻤﺒﻠﻲ ) اﻟﻤﺠﻤﻊ( ﻟﺘﻘوم‬
‫ﺒﺘطﺒﯿق ﺒﻌض اﻟﻤﻔﺎﻫﯿم وﺘﺤل اﻷﺴﺌﻠﺔ واﻻﻤﺜﻠﺔ واﻟﺘدرﯿﺒﺎت اﻟﻤﻌطﺎة ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة‪ .‬وﯿﻤﻛﻨك ﻋزﯿزي اﻟطﺎﻟب اﺴﺘﺨدام‬
‫اﻻﻨﺘرﻨت ﻟﻠﺒﺤث ﻋن ﺒﻌض اﻟﻤﻔﺎﻫﯿم واﻟﻤواﻀﯿﻊ اﻟﻤﺘﻌﻠﻘﺔ ﺒرﻨﺎﻤﺞ ‪ .Debug‬ﻛﻤﺎ ان ﻫﻨﺎك ﺤﺎﺠﺔ اﻟﻰ‪:‬‬

‫‪ .3‬ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻤراﺤل ﺘﻨﻔﯿذ ﺒراﻤﺢ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‪) .‬راﺠﻊ اﻟوﺤدة اﻟراﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(‪.‬‬
‫‪ .4‬ﻤﻌرﻓﺔ ﺒﺄﺴﺎﺴﯿﺎت ﻟﻐﺔ اﻻﺴﻤﺒﻠﻲ ﻟﻤﻌﺎﻟﺠﺔ ﺘﻌﻠﯿﻤﺎت اﻻﺨراج‪) .‬راﺠﻊ اﻟوﺤدة اﻟﺴﺒﻌﺔ ﻤن اﻟﻛﺘﺎب اﻟﻤﻘرر(‪.‬‬

‫‪ .1‬اﻟﻤراﺤل اﻟﺘﻲ ﯿﻤر ﺒﻬﺎ ﻫذا اﻟﺒرﻨﺎﻤﺞ ﺒﺎﺴﺘﺨدام ﻨظﺎم اﻷﺴﻤﺒﻠﻲ‬

‫ﺴﻨﺘﻌرف ﻋزﯿزي اﻟطﺎﻟب ﻋﻠﻰ اﻟﻤراﺤل اﻟﺘﻲ ﯿﻤر ﺒﻬﺎ اﻟﺒرﻨﺎﻤﺞ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﺒﺎﺴﺘﺨدام ﻨظﺎم اﻷﺴﻤﺒﻠﻲ‬
‫‪ ،MASM‬ﻋﻠﻤﺎً ﺒﺄن ﻫذﻩ اﻟﻤراﺤل ﺘطﺒق ﻷي ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻷﺴﻤﺒﻠﻲ ﺸﻛل )‪. (1‬‬

‫‪36‬‬
‫ﺸﻛل )‪ (1‬ﻣﺮاﺣﻞ ﻣﻌﺎﻟﺠﺔ ﺑﺮﻧﺎﻣﺞ اﻷﺳﻤﺒﻠﻲ‬

‫‪ 1.1‬اﻟﻤرﺤﻠﺔ اﻷوﻟﻰ ‪:‬ادﺨﺎل اﻟﺒرﻨﺎﻤﺞ ‪Program input‬‬

‫ﺘﻬدف ﻫذﻩ اﻟﻤرﺤﻠﺔ إﻟﻰ ﻨﻘل اﻟﺒرﻨﺎﻤﺞ إﻟﻰ اﻟﺤﺎﺴوب وﺘﺨزﯿﻨﻪ ﻋﻠﻰ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ( اﻟﻘرص اﻟﺼﻠب أو اﻟﻘرص اﻟﻤرن‬
‫او ‪(. USB‬وﻋﺎدة ﻨﺴﺘﺨدم ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﻤن ﺨﻼل أﺤد ﺒراﻤﺞ ﻤﻌﺎﻟﺠﺔ اﻟﻨﺼوص ‪ Word processor‬أو‬
‫ﻤﺤرر اﻟﻨﺼوص ‪ Text editor‬ﯿﺘم ادﺨﺎل اﻟﺒرﻨﺎﻤﺞ اﺒﺘداء ﻤن اﻟرﻤز اﻷول ﻓﻲ اﻟﺴطر اﻷول ﺤﺘﻰ ﻨﻬﺎﯿﺔ اﻟﺴطر‪،‬‬
‫وﻤن ﺜم اﻟرﻤز اﻷول ﻓﻲ اﻟﺴطر اﻟﺜﺎﻨﻲ‪ ... ،‬وﻫﻛذا‪.‬‬
‫ﻛﻤﺎ ﻧﻮد ان ﻧﺬﻛﺮك ﻋﺰﯾﺰي اﻟﻄﺎﻟﺐ ان اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻜﺘﻮب ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﯾﺤﺐ أن ﯾﺨﺰن اﯾﻀﺎ ً ﻓﻲ ﻣﻠﻒ ‪.‬ﯾﺘﻢ‬
‫اﺧﺘﯿﺎر أﺳﻤﺎء اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﺤﺘﻮي ﺑﺮاﻣﺞ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ ﺣﺴﺐ ﻗﻮاﻋﺪ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ‪ ( DOS ).‬ﺑﺤﯿﺚ ﯾﺤﺘﻮي‬
‫اﻟﺸﻖ اﻟﺜﺎﻧﻲ داﺋﻤﺎ ً اﻟﺮﻣﻮز ‪ ( ASM ).‬وﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻧﻔﺮض أن اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺗﻢ إدﺧﺎﻟﮫ ﻣﻦ ﻗﺒﻞ ﻗﺪ ﺧﺰن‬
‫ﻓﻲ ﻣﻠﻒ اﺳﻤﮫ‪SOURC1. ASM .‬‬

‫‪Program Compilation‬‬ ‫‪ .2.1‬اﻟﻤرﺤﻠﺔ اﻟﺜﺎﻨﯿﺔ ‪:‬ﺘرﺠﻤﺔ اﻟﺒرﻨﺎﻤﺞ‬

‫ﺘﻬدف ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ إﻟﻰ‪:‬‬

‫‪-‬اﻛﺘﺸﺎف وﺘﺼﺤﯿﺢ اﻷﺨطﺎء اﻟﻤطﺒﻌﯿﺔ واﻟﻘواﻋدﯿﺔ‪ ،‬أي اﻷﺨطﺎء اﻟﻨﺎﺠﻤﺔ ﻋن ﻤﺨﺎﻟﻔﺔ ﻗواﻋد اﻟﻠﻐﺔ‪.‬‬

‫‪37‬‬
‫‪-‬ﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري إﻟﻰ ﺒرﻨﺎﻤﺞ ﻫدﻓﻲ‪.‬‬

‫ﺘﻨﻔذ ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ ﺒواﺴطﺔ ﻤﺘرﺠم اﻻﺴﻤﺒﻠر اﻟذي ﯿﺤﻤل اﺴم ‪ MASM‬وﻛﻤﺎ ﻫو ﻤﺒﯿن ﻓﻲ اﻟﺸﻛل ( ‪) 1‬ﻓﺈن اﻻﺴﻤﺒﻠر‬
‫ﻻ ﯿﻛون اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ إﻻ ﻓﻲ ﺤﺎﻟﺔ ﺨﻠو اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري ﻤن ﻛﺎﻓﺔ اﻷﺨطﺎء اﻟﻤطﺒﻌﯿﺔ واﻟﻘواﻋدﯿﺔ ‪.‬وﻓﻲ ﺤﺎﻟﺔ‬
‫وﺠود ﻤﺜل ﻫذﻩ اﻷﺨطﺎء ﯿﺼدر اﻷﺴﻤﺒﻠر ﻗﺎﺌﻤﺔ ﺘﺘﻀﻤن رﻗم اﻟﺨطﺄ‪ ،‬ورﻗم اﻟﺴطر اﻟذي ﯿﺤﺘوي اﻟﺨطﺄ‪ ،‬ووﺼف‬
‫ﻗﺼﯿر ﻟﻠﺨطﺄ ‪.‬إن وﺠود اﺨطﺎء ﻗواﻋدﯿﺔ ﯿﺘطﻠب ﻤن اﻟﻤﺒرﻤﺞ اﻟرﺠوع إﻟﻰ ﻤرﺤﻠﺔ ادﺨﺎل اﻟﺒرﻨﺎﻤﺞ ﻹﺠراء اﻟﺘﺼﺤﯿﺤﺎت‬
‫واﻟﺘﻌدﯿﻼت اﻟﻼزﻤﺔ وﺘﺴﺘﻤر ﻋﻤﻠﯿﺔ اﻻﻨﺘﻘﺎل ﺒﯿن ﻤرﺤﻠﺘﻲ اﻹدﺨﺎل واﻟﺘرﺠﻤﺔ ﻟﺤﯿن اﻟﺤﺼول ﻋﻠﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ ‪.‬‬
‫ﻻ ﺘﻨﺴﻰ‪ ،‬ﻋزﯿزي اﻟطﺎﻟب‪ ،‬أن ﺘﺨزن اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ ﺒﻌد إﺠراء أي ﺘﻐﯿﯿر ﻋﻠﯿﻪ‪ ،‬ﻓﺎﻟﺘﻐﯿﯿر اﻟذي ﺘﺠرﯿﻪ‬
‫ﻋن طرﯿق ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﯿﺘم ﻋﻠﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺨزن ﻓﻲ اﻟذاﻛرة اﻟرﺌﯿﺴﺔ ﻓﻲ ﺤﯿن أن اﻷﺴﻤﺒﻠر ﯿﻌﺎﻟﺞ اﻟﺒرﻨﺎﻤﺞ‬
‫اﻟﻤﺨزن ﻓﻲ اﻟذاﻛرة اﻟﺜﺎﻨوﯿﺔ‪.‬‬

‫واﻟﺘﺤرﯿر‪Program Linking‬‬ ‫‪ .3.1‬اﻟﻤرﺤﻠﺔ اﻟﺜﺎﻟﺜﺔ ‪:‬اﻟرﺒط‬

‫أن اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ اﻟﻨﺎﺘﺞ ﻤن ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ ﻻ ﯿﻛون ﺠﺎﻫ ًاز ﻟﻠﺘﻨﻔﯿذ ﺒﺴﺒب اﺤﺘواﺌﻪ ﻋﻠﻰ رﻤوز ﻻ ﯿﺴﺘطﯿﻊ ﺒرﻨﺎﻤﺞ‬
‫اﻷﺴﻤﺒﻠر ﺘرﺠﻤﺘﻬﺎ إﻟﻰ ﻟﻐﺔ اﻵﻟﺔ ﻓﻲ ﻤرﺤﻠﺔ اﻟﺘرﺠﻤﺔ ‪.‬ﻓﻤﺜﻼً‪ ،‬ﯿﻤﻛن أن ﯿﺤﺘوي اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﺴﺘدﻋﺎء ﻟﺒراﻤﺞ ﻤﻛﺘﺒﯿﺔ‬
‫أو ﺒراﻤﺞ أﺨرى ﻟﻠﻤﺴﺘﺨدم ﺘﻤت ﺘرﺠﻤﺘﻬﺎ ﺴﺎﺒﻘﺎً ﺒﺸﻛل ﻤﻨﻔﺼل ﻋن اﻟﺒرﻨﺎﻤﺞ اﻟﺤﺎﻟﻲ ‪.‬أن ﺘرﺠﻤﺔ ﻤﺜل ﻫذﻩ اﻻﺴﺘدﻋﺎءات‬
‫ﺘﺘم ﻓﻲ ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر وﺘﺘطﻠب اﻟﺒﺤث ﻋن ﻫذﻩ اﻟﺒراﻤﺞ ودﻤﺠﻬﺎ ﻤﻊ اﻟﺒرﻨﺎﻤﺞ اﻟﺤﺎﻟﻲ ﻟﺘﻛوﯿن ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي‬
‫واﺤد‪.‬‬

‫ﺘﻨﻔذ ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﺒوﺴﺎطﺔ ﺒرﻨﺎﻤﺞ اﻟرﺒط واﻟﺘﺤرﯿر ‪ ، Linker‬اﻟذي ﯿﺴﺘﻘﺒل ﺒرﻨﺎﻤﺠﺎً ﺒرﻨﺎﻤﺠﺎً ﻫدﻓﯿﺎً واﺤداً‬
‫)أو ﻤﺠﻤوﻋﺔ ﺒراﻤﺞ ﻫدﻓﯿﺔ (ﻤﺨزن ﻋﻠﻰ اﻟذاﻛرة اﻟﻤﺴﺎﻋدة وﯿﺤوﻟﻪ إﻟﻰ ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي ‪.‬ﯿﻼﺤظ أن اﺴم اﻟﺒرﻨﺎﻤﺞ‬
‫اﻟﻬدﻓﻲ ﯿﺘﻀﻤن ﻋﺒﺎرة ‪ ( Obj ).‬ﻓﻲ ﺤﯿن أن اﺴم اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي ﯿﺘﻀﻤن ﻋﺒﺎرة‪. EXE‬‬

‫ﯿﺘﻛون اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي ﻓﻘط ﻓﻲ ﺤﺎﻟﺔ ﺨﻠو اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ) اﻟﺒراﻤﺞ اﻟﻬدﻓﯿﺔ (ﻤن اﻷﺨطﺎء ‪.‬وﻓﻲ ﺤﺎﻟﺔ وﺠود اﺨطﺎء‬
‫ﻓﻲ ﻋﻤﻠﯿﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﯿﺠب اﻟرﺠوع إﻟﻰ ﻤرﺤﻠﺔ اﻻدﺨﺎل ﻹﺠراء اﻟﺘﻌدﯿﻼت اﻟﻼزﻤﺔ‪ ،‬واﺠراء ﻋﻤﻠﯿﺔ اﻟﺘرﺠﻤﺔ‪،‬‬
‫وﻤن ﺜم ﺘﻨﻔﯿذ ﻋﻤﻠﯿﺔ اﻟرﺒط واﻟﺘﺤرﯿر‪.‬‬

‫وﺘﺴﺘﻤر ﻋﻤﻠﯿﺔ اﻻﻨﺘﻘﺎل ﺒﯿن ﻤراﺤل اﻹدﺨﺎل واﻟﺘرﺠﻤﺔ واﻟرﺒط واﻟﺘﺤرﯿر ﻟﺤﯿن ﺘﻛوﯿن اﻟﺒرﻨﺎﻤﺞ اﻟﺘﻨﻔﯿذي‬

‫‪:‬ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ‪( (Program Execution‬‬ ‫‪.4.1‬اﻟﻤرﺤﻠﺔ اﻟراﺒﻌﺔ‬

‫‪38‬‬
‫أن اﻟﺒرﻨﺎﻤﺞ اﻟﻨﺎﺘﺞ ﺒﻌد ﻤرﺤﻠﺔ اﻟرﺒط واﻟﺘﺤرﯿر ﯿﺼﺒﺢ ﺠﺎﻫ اًز ﻟﻠﺘﻨﻔﯿذ ‪.‬ﺘﻬدف ﻤرﺤﻠﺔ اﻟﺘﻨﻔﯿذ إﻟﻰ اﻟﺤﺼول ﻋﻠﻰ اﻟﻨﺘﺎﺌﺞ‬
‫اﻟﻤطﻠوﺒﺔ‪.‬وﯿوﺠد طرﯿﻘﺘﺎن ﻟﺘﻨﻔﯿذ اﻟﺒراﻤﺞ ﻫﻤﺎ‪:‬‬

‫ﻨظﺎم‪DOS‬‬ ‫‪-‬اﻟطرﯿﻘﺔ اﻟﻤﺒﺎﺸرة ﻤن ﺨﻼل‬

‫‪-‬اﺴﺘﺨدام ﺒرﻨﺎﻤﺞ« ﻤﻛﺘﺸف اﻷﺨطﺎء‪. Debug‬‬

‫ﺘﺴﺘﺨدم اﻟطرﯿﻘﺔ اﻟﻤﺒﺎﺸرة ﻋﺎدة ﻓﻲ اﻟﺤﺎﻻت اﻟﺘﻲ ﯿﺘﻀﻤن ﻓﯿﻬﺎ اﻟﺒرﻨﺎﻤﺞ وﺴﺎﺌل ﻹدﺨﺎل اﻟﻤﻌطﯿﺎت واﺨراج اﻟﻨﺘﺎﺌﺞ‬
‫إﻟﻰ وﺤدات اﻹﺨراج اﻟﻤﻨﺎﺴﺒﺔ ‪.‬ﺘﺴﺘﺨدم اﻟطرﯿﻘﺔ اﻟﺜﺎﻨﯿﺔ ﻓﻲ اﻟﺤﺎﻻت اﻟﺘﻲ ﻻ ﯿﺘﻀﻤن اﻟﺒرﻨﺎﻤﺞ ﻓﯿﻬﺎ ﻤﺜل ﻫذﻩ اﻟوﺴﺎﺌل‬
‫أو اﻟﺤﺎﻻت اﻟﺘﻲ ﺘؤدي إﻟﻰ ﻨﺘﺎﺌﺞ ﺨﺎطﺌﺔ أو ﻻ ﺘﻌطﻲ أي ﻨﺘﺎﺌﺞ ﺴﺒب وﺠود اﺨطﺎء ﻤﻨطﻘﯿﺔ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ ﻨﻔﺴﻪ‪.‬‬

‫وﺘﺒﻌﺎً ﻟﻠطرﯿﻘﺔ اﻟﻤﺒﺎﺸرة ﯿﺘم ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﺒﻛﺘﺎﺒﺔ اﺴم اﻟﺒرﻨﺎﻤﺞ ﻓﻘط ‪ SOURCE1‬ﺒﻌد اﻟﺤﺼول ﻋﻠﻰ اﺸﺎرة ﺠﺎﻫزﯿﺔ‬
‫اﻟﺤﺎﺴوب ﻻﺴﺘﻘﺒﺎل اﻷﻤر اﻟﺘﺎﻟﻲ ‪.‬وﻫﻨﺎ ﯿﺒدأ اﻟﺤﺎﺴوب ﻓو اًر ﺒﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ طﺒﻘﺎً ﻟﺘﺴﻠﺴل اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻛوﻨﺔ ﻟﻪ‪.‬‬

‫وﺘﺒﻌﺎً ﻟﻠطرﯿﻘﺔ اﻟﺜﺎﻨﯿﺔ ﯿﺘم ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ﻤن ﺨﻼل اﺴﺘدﻋﺎء ﺒرﻨﺎﻤﺞ ) ‪ ( Debug‬اﻟذي ﺒدورﻩ ﯿطﻠب ﻤن اﻟﻤﺴﺘﺨدم‬
‫طﺒﺎﻋﺔ اﻷواﻤر ﻋن طرﯿق ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ‪.‬ﯿﺴﺘﺨدم ﺒرﻨﺎﻤﺞ ‪ Debug‬ﻟﺘﻨﻔﯿذ اﻟﻌﻤﻠﯿﺎت اﻵﺘﯿﺔ‪:‬‬

‫‪-‬ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ دﻓﻌﺔ واﺤدة أو ﺘﻌﻠﯿﻤﺔ ﺒﻌد ﺘﻌﻠﯿﻤﻪ‪.‬‬

‫‪-‬ﻋرض ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠﻼت وﻤواﻗﻊ اﻟذاﻛرة اﻟرﺌﯿﺴﺔ ﺤﺴب اﻟطﻠب‪.‬‬

‫‪-‬ﺘﻌدﯿل ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠﻼت وﻤواﻗﻊ اﻟذاﻛرة اﻟرﺌﯿﺴﺔ ﺤﺴب اﻟﺤﺎﺠﺔ‪.‬‬

‫‪-‬ﺘﺤوﯿل اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﺼدرﯿﺔ ) ‪ ( Source Instructions‬إﻟﻰ ﻟﻐﺔ اﻵﻟﺔ وﺒﺎﻟﻌﻛس‪.‬‬

‫‪-‬اﻟﺒﺤث ﻓﻲ اﻟذاﻛرة اﻟرﺌﯿﺴﺔ‪ ،‬ﻤﻠﻲء ﻤﺠﻤوﻋﺔ ﻤواﻗﻊ ﺒﻘﯿﻤﺔ ﻤﻌﯿﻨﺔ‪... ،‬وﻏﯿرﻫﺎ‪.‬‬

‫‪.2‬اﻟﺒراﻤﺞ اﻟﻼزﻤﺔ اﺴﺘﺨدام ﻨظﺎم اﻷﺴﻤﺒﻠﻲ‬

‫• ﺒرﻨﺎﻤﺞ ﺘﺤرﯿر اﻟﻨﺼوص ‪ edit‬او ‪Notepad‬‬

‫• ﺒرﻨﺎﻤﺞ ﻤﺘرﺠم اﻻﺴﻤﺒﻠر ‪MASM‬‬

‫‪LINK‬‬ ‫• ﺒرﻨﺎﻤﺞ اﻟﺘﺤرﯿر واﻟرﺒط‬

‫• ﺒرﻨﺎﻤﺞ اﻛﺘﺸﺎف اﻷﺨطﺎء ‪DEBUG‬‬

‫‪ .3‬ﺨطوات ﺘﻨﻔﯿذ ﺒراﻤﺞ اﻟﺘﺠﻤﯿﻊ أﺴﻤﺒﻠﻲ‬

‫‪39‬‬
‫• ﻨﻨﺘﻘل اﻟﻰ اﻟدﻟﯿل اﻟﻔرﻋﻲ اﻟذي ﯿﺤﺘوي ﻋﻠﻰ ﻤﺠﻤﻊ ﺒرﻨﺎﻤﺞ أﺴﻤﺒﻠﻲ‪.‬‬

‫• ادﺨﺎل ﻨص اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري ﺒوﺴﺎطﺔ أﺤد ﻤﻌﺎﻟﺠﺎت اﻟﻨﺼوص‬

‫• ﺘﺨزﯿﻨﻪ ﻓﻲ ﻤﻠف اﺴﻤﻪ ‪ SOURCE1.ASM‬ﻓﻤﺜﻼ ‪hello.asm‬‬

‫• ﯿﺴﺘﺨدم ﺒرﻨﺎﻤﺞ اﻷﺴﻤﺒﻠر ‪ MASM‬ﻟﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻤﺼدري إﻟﻰ ﺒرﻨﺎﻤﺞ ﻫدﻓﻲ ﺒواﺴطﺔ اﻷﻤر اﻟﺘﺎﻟﻲ‪،‬‬
‫ﻤﺘﺒوع ﺒﻔﺎﺼﻠﺔ ﻤﻨﻘوطﺔ ;‬
‫‪C> MASM‬‬
‫;‪C> MASM SOURCE1.ASM‬‬

‫‪Source filename [.ASM]: SOURCE1‬‬


‫‪Object filename [SOURCE1.OBJ]: SOURCE1‬‬
‫‪Source listing [NUL.LST]: SOURCE1‬‬
‫‪Cross- reference [NUL.CRF]: SOURCE1‬‬

‫• ﺒﻌد إﻛﻤﺎل ﻋﻤﻠﯿﺔ اﻟﺘرﺠﻤﺔ ﯿﻠزم ﺘﺤوﯿل اﻟﺒرﻨﺎﻤﺞ اﻟﻬدﻓﻲ اﻟﻨﺎﺘﺞ إﻟﻰ ﺒرﻨﺎﻤﺞ ﺘﻨﻔﯿذي ﺒوﺴﺎطﺔ ﺒرﻨﺎﻤﺞ اﻟرﺒط‬
‫واﻟﺘﺤرﯿك اﻟذي ﯿﺴﺘدﻋﻰ ﻤن ﺨﻼل اﻻﻤر‪:‬‬
‫‪C> LINK‬‬
‫;‪C> LINK SORCE1‬‬
‫‪Object Modules [.OBJ]: SOURCE1‬‬
‫‪Run File [SOURCE1.EXE]: SOURCE1‬‬
‫‪List File [NUL.MAP]: SOURCE1‬‬
‫‪Libraries [.LIB] :‬‬

‫• ﻨدﺨل اﺴم اﻟﺒرﻨﺎﻤﺞ ‪ SOURCE1‬ﻟﺘﻨﻔﯿذﻩ‬

‫‪.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

hellodat SEGMENT BYTE 'DATA' ;Define the data segment


dos_print EQU 9 ;define a constant via EQU
strng DB 'Hello World',13,10,'$' ;Define the character string
hellodat ENDS

hellocod SEGMENT BYTE 'CODE' ;Define the Code segment. list


assume cs:hellocod,ds:hellodat,ss:hellostk
START: mov ax, SEG hellodat ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET strng ;dx <-- beginning of string
int 21h ;DOS service interrupt

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‬‬
‫ﻨوﻀﺢ ﻛل ﺘﻌﻠﯿﻤﺔ ﻋﻠﻰ اﻟﻨﺤو اﻟﺘﺎﻟﻲ‪:‬‬

‫اﻟﻤﻬﻤﺔ )‪ ( 9‬ﻓﻲ اﻟﻤﺴﺠل ‪ AH‬ﺤﯿث ان اﻟﺜﺎﺒت ‪ dos_print‬ﯿﺤﺘوي‬


‫ّ‬ ‫‪ -1‬ﺘﺴﺘﺨدم ﺘﻌﻠﯿﻤﺔ ‪ MOV‬ﻟﺘﺨزﯿن رﻗم‬
‫اﻟﻘﯿﻤﺔ ‪.9‬‬
‫‪dos_print EQU 9‬‬ ‫‪;define a constant via EQU‬‬

‫‪mov dx,OFFSET strng‬‬ ‫‪ -2‬ﺘﺴﺘﺨدم ﺘﻌﻠﯿﻤﺔ ‪;dx <-- beginning of string‬‬

‫ﻟﺘﺨزﯿن ﻗﯿﻤﺔ اﻹزاﺤﺔ ﻟﺴﻠﺴﻠﺔ اﻟرﻤوز‪ strng‬ﻓﻲ اﻟﻤﺴﺠل ‪ .DX‬وﯿﻤﻛن ان ﻨﺴﺘﺨدم ﺘﻌﻠﯿﻤﺔ ‪ LEA‬ﻟﺘﺨزﯿن ﻗﯿﻤﺔ‬
‫‪LEA dx, strng‬‬ ‫اﻹزاﺤﺔ ﻟﺴﻠﺴﻠﺔ اﻟرﻤوز‪ strng‬ﻓﻲ اﻟﻤﺴﺠل‪;dx <-- beginning of string .DX‬‬

‫‪-3‬ﺘﺴﺘﺨدم اﻟﺘﻌﻠﯿﻤﺔ ‪ INT‬ﻟﺘﻨﻔﯿذ ﻤﻬﻤﺔ ﻋرض ﺴﻠﺴﻠﺔ اﻟرﻤوز‪.‬‬

‫وﺘﺠدر اﻹﺸﺎرة ﻫﻨﺎ إﻟﻰ أن ﺴﻠﺴﻠﺔ اﻟرﻤوز ‪ strng‬اﻟﻤطﻠوب ﻋرﻀﻬﺎ ﻋﻠﻰ اﻟﺸﺎﺸﺔ ﯿﺠب أن ﺘﻨﺘﻬﻲ ﺒﺈﺸﺎرة ‪ $.‬وﻓﻲ‬
‫ﺤﺎﻟﺔ ﻋدم وﺠود ﻫذﻩ اﻹﺸﺎرة ﻓﻲ ﻨﻬﺎﯿﺔ ﺴﻠﺴﻠﺔ اﻟرﻤوز ﻓﺈن ﻋﻤﻠﯿﺔ ﻋرض اﻟرﻤوز ﻤن اﻟذاﻛرة اﻟرﺌﯿﺴﯿﺔ ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬
‫ﺴوف ﺘﺴﺘﻤر ﻟﺤﯿن اﻟوﺼول إﻟﻰ ﺒﺎﯿت ﯿﺤﺘوي إﺸﺎرة‪$.‬‬

‫ﺘدرﯿب )‪(1‬‬

‫اﻋد ﻛﺘﺎﺒﺔ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق ﻟطﺒﺎﻋﺔ اﺴﻤك ‪,‬رﻗﻤك اﻟﺠﺎﻤﻌﻲ ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬

‫‪43‬‬
‫اﻟﺤل‬

hellostk SEGMENT BYTE STACK 'STACK' ;Define the stack segment


DB 100h DUP(?) ;Set maximum stack size to 256 bytes (100h(
hellostk ENDS

hellodat SEGMENT BYTE 'DATA' ;Define the data segment


dos_print EQU 9 ;define a constant via EQU
str1 DB 'Yousef Abuzir',13,10,'$' ;Define the character string
str2 DB '0123012002120',13,10,'$' ;Define the character string
hellodat ENDS

hellocod SEGMENT BYTE 'CODE' ;Define the Code segment. list


assume cs:hellocod,ds:hellodat,ss:hellostk
START: mov ax, SEG hellodat ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET str1 ;dx <-- beginning of string
int 21h ;DOS service interrupt

mov dx,OFFSET str2 ;dx <-- beginning of string


int 21h ;DOS service interrupt

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
‫ﺒﻌد ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ اﺠب ﻋن اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ -1‬ﻤﺎ ﻫو اﻟﺘﻐﯿﯿر ﻋﻠﻰ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق؟‬

‫‪ -2‬ﻛﯿف ﺨزﻨت اﺴﻤك ورﻗﻤك اﻟﺠﺎﻤﻌﻲ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ؟‬

‫‪ -3‬ﻤﺎﻫﻲ ﺘﻌﻠﯿﻤﺎت اﻟطﺒﺎﻋﺔ؟‬

‫‪ -4‬ﻛﯿف ﺘﻌرف اﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟﺒﯿﺎﻨﺎت اﻟﺘﻲ ﺴﯿﺘم طﺒﺎﻋﺘﻬﺎ؟‬

‫‪45‬‬
‫اﻟوﺤـدة اﻟﺜﺎﻟﺜﺔ‬

‫اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺒﯿﺔ ﻓﻲ ﻟﻐﺔ‬


‫اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ‬

‫‪46‬‬
‫‪.1‬ﻤﻘدﻤﺔ‬

‫أﻤﺎ ﺒﺎﻟﻨﺴﺒﺔ اﻟوﺤدة اﻟﺜﺎﻟﺜﺔ ﻤن اﻟﻌﻤﻠﻲ ﻓﻬﻲ ﻤرﺘﺒطﺔ ﺒﺎﻟوﺤدة اﻟﺴﺎدﺴﺔ ﻤن اﻟﻛﺘﺎب وﺘﻌﺎﻟﺞ طﺎﻗم اﻟﺘﻌﻠﯿﻤﺎت اﻟﺨﺎﺼﺔ‬
‫ﺒﺎﻟﻤﻌﺎﻟﺞ اﻟدﻗﯿق ﻤن ﻨوع ‪ 8088 / 8086 .‬وﺴﺘﻨﺎول ﻓﻲ ﻫذﻩ اﻟوﺤدة اﻟﺼﯿﻐﺔ اﻟﻌﺎﻤﺔ ﻟﺘﻌﻠﯿﻤﺎت ﻟﻐﺔ أﺴﻤﺒﻠﻲ واﻟﺘﻌﻠﯿﻤﺎت‬
‫اﻟﻤﺨﺘﻠﻔﺔ ﻤن ﻋﻠﯿﻤﺎت ﻨﻘل اﻟﺒﯿﺎﻨﺎت‪ ،‬اﻟﺘﻌﻠﯿﻤﺎت اﻟﺤﺴﺎﺒﯿﺔ‪ .،‬وﺴﯿﺘم اﻟﺤدﯿث ﻋن ﺘﻌﻠﯿﻤﺎت ﻨﻘل اﻟﺘﺤﻛم‪ ،‬ﺘﻌﻠﯿﻤﺎت‬
‫ﻤﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻨﺎت اﻟﺜﻨﺎﺌﯿﺔ‪ ،‬ﺘﻌﻠﯿﻤﺎت ﻤﻌﺎﻟﺠﺔ ﺴﻼﺴل اﻟرﻤوز ﻓﻲ اﻟوﺤدة اﻟﺘﺎﻟﯿﺔ‪.‬‬

‫وﺴﺘﺠد ﻓﻲ ﺜﻨﺎﯿﺎ اﻟوﺤدة أﻤﺜﻠﺔ وﺘدرﯿﺒﺎت وأﺴﺌﻠﺔ ﺘﻘوﯿم ذاﺘﻲ ﻋﻠﻰ اﻟﻤواﻀﯿﻊ اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ اﻟوﺤدة ﻟﻤﺴﺎﻋدﺘك ﻋﻠﻰ ﻓﻬم‬
‫ﻤﺎدة اﻟﻤﻘرر‪.‬‬

‫أﻫﻼً ﺒك ﻓﻲ رﺤﺎب ﻫذﻩ اﻟوﺤدة وأرﺠو أن ﺘﻨﺘﻔﻊ ﺒﻤوﻀوﻋﺎﺘﻬﺎ‬


‫‪.‬‬
‫‪.2‬أﻫداف اﻟوﺤدة‬

‫ﺒﻌد دراﺴﺔ ﻫذﻩ اﻟوﺤدة وﺘﻨﻔﯿذ اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻋﻠﻰ اﻟﺤﺎﺴوب ﯿﻨﺘظر ﻤﻨك ﻋزﯿزي اﻟطﺎﻟب أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ‪:‬‬

‫‪-1‬ﺘﻌرف طرق ﺘﻤﺜﯿل اﻟﺒﯿﺎﻨﺎت اﻟرﻗﻤﯿﺔ واﻟرﻤزﯿﺔ اﻟﻤﺨﺘﻠﻔﺔ‬

‫‪-2‬ﺘﺒﯿن طﺎﻗم ﺘﻌﻠﯿﻤﺎت اﻟﻤﻌﺎﻟﺞ اﻟدﻗﯿق‬

‫‪-3‬ﺘذﻛر اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﺨﺘﻠﻔﺔ وﻛﯿﻔﯿﺔ اﺴﺘﺨداﻤﻬﺎ‬

‫‪-4‬ﺘﻛﺘب ﺒراﻤﺞ ﺒﻠﻐﺔ أﺴﻤﺒﻠﻲ ﻟﺤل ﻤﺴﺎﺌل ﻤﺨﺘﻠﻔﺔ‬

‫‪-5‬ﺘﺤﻠل ﺒراﻤﺞ ﻟﻐﺔ أﺴﻤﺒﻠﻲ ﻋن طرﯿق ﺘﺘﺒﻊ ﺘﻌﻠﯿﻤﺎﺘﻬﺎ‬

‫‪.3‬اﻟﻤﺜﺎل اﻷول‪ADD32.asm :‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﺠﻤﻊ ﻋددﯿن ﺼﺤﯿﺤﯿن طول ﻛل ﻤﻨﻬﻤﺎ ‪ 32‬ﺒت ‪) 32 bit‬اﻟﻘﯿم ﺒﺎﻟﻨظﺎم‬
‫اﻟﺴﺎدس ﻋﺸر(‪ ،‬ﺤﯿث ان اﻟﻘﯿم اﻷدﻨﻰ ﻤﺴﺘوى ﻤن اﻟﻌدد اﻷول واﻟﺜﺎﻨﻲ ﺴﯿﺘم ﺠﻤﻌﻬﺎ وﺘﺨزﯿﻨﻬﺎ ﻓﻲ اﻟﻤﺴﺠل ‪DX‬‬
‫و اﻟﻘﯿم اﻻﻋﻠﻰ ﻤﺴﺘوى ن اﻟﻌدد اﻷول واﻟﺜﺎﻨﻲ ﻓﻲ اﻟﻤﺴﺠل ‪CX‬‬

‫ﻤﻼﺤظﺔ )ﻀرورة ﻤراﺠﻌﺔ ﻋﻤﻠﯿﺎت اﻟﺠﻤﻊ ﻤﻊ اﻟﺤﻤل ‪(ADC‬‬

‫‪47‬‬
val2 val1 ‫اﻟﻌدد اﻷول‬

2222h 1111h

val4 val3 ‫اﻟﻌدد اﻟﺜﺎﻨﻲ‬

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

mov dx, val1


add dx, val3

mov cx, val2


adc cx, val4

48
‫‪mov ax, 4c00h‬‬
‫‪int 21h‬‬
‫‪code ends‬‬
‫‪end start‬‬

‫ﻟﻠﺘﺄﻛد ﻤن اﻟﻨﺘﺎﺌﺞ ﯿﻤﻛن اﺴﺘﺨدام ﺒرﻨﺎﻤﺞ ‪ DEBUG‬ﻟﻤﺘﺎﺒﻌﺔ ﺨطوات ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ واﻟﻘﯿم ﻓﻲ ﻛل ﻤن ﻤواﻗﻊ‬
‫اﻟذاﻛرة واﻟﻤﺴﺠﻼت‪ .‬ﻟﻠﻘﯿﺎم ﺒذﻟك‬

‫‪ Debug add32.exe‬ﺜم ﻤﻔﺘﺎح اﻻدﺨﺎل‬

‫ﻨﺴﺘﺨدم اﻻﻤر ‪ T‬ﻟﺘﻨﻔﯿذ ﺠﻤل اﻟﺒرﻨﺎﻤﺞ ﺘﻌﻠﯿﻤﺔ ﺘﻌﻠﯿﻤﻪ وﻤﺘﺎﺒﻌﺔ اﻟﻘﯿم ﻓﻲ اﻟﻤﺴﺠﻼت ﻛﻤﺎ ﯿﻠﻲ‪:‬‬

‫‪49‬‬
‫أﺴﺌﻠﺔ‬

‫‪ -1‬ﻤﺎ ﻫو اﻟﻌدد اﻷول ‪....................................‬‬

‫و ﻤﺎ ﻫو اﻟﻌدد اﻟﺜﺎﻨﻲ ‪....................................‬‬

‫‪ -2‬ﻤﺎ ﻨﺘﯿﺠﺔ ﺠﻤﻊ اﻟﻌددﯿن ‪....................................‬‬


‫‪ -3‬اﯿن ﺘم ﺘﺨرﯿن اﻟﻨﺘﯿﺠﺔ او ﺤﺎﺼل ﺠﻤﻊ اﻟﻌددﯿن ‪ ،....................................‬ﺒﯿن ذﻟك ﺒﺎﻟرﺴم‬

‫‪ -4‬ﻟﻤﺎذا اﺴﺘﺨدﻤﻨﺎ ﻛﻼ ‪ ADD‬و ‪ ADC‬ﻟﺠﻤﻊ اﻟﻌددﯿن ‪.....................................‬‬


‫‪ -5‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ‬
‫‪mov ax, 4c00h‬‬
‫‪int 21h‬‬

‫اﻟﻤﺜﺎل اﻟﺜﺎﻨﻲ )‪(nxchang.asm‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﻓﻲ ﻟﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﺘﺒدﯿل ﻤﺤﺘوﯿﺎت اﻟﻤوﻗﻌﯿن او اﻟﻤﺘﻐﯿرﯿن ‪ A‬و ‪) B‬اﻟﻘﯿم ﺒﺎﻟﻨظﺎم اﻟﺴﺎدس‬
‫ﻋﺸر(‪ ،‬ﺤﯿث ان اﻟﻤوﻗﻊ اﻷول ﯿﺤﺘوي ﻋﻠﻰ ﻗﯿﻤﺔ ‪ 10 = A‬اﻟﻤوﻗﻊ اﻟﺜﺎﻨﻲ ﯿﺤﺘوي ﻋﻠﻰ ﻗﯿﻤﺔ ‪20 = B‬‬

‫ﻤﻼﺤظﺔ )ﻀرورة ﻤراﺠﻌﺔ ﺘﻌﻠﯿﻤﺎت اﻟﻨﻘل(‬

‫'‪stk SEGMENT BYTE STACK 'STACK‬‬ ‫‪;Define the stack segment‬‬


‫)?(‪DB 100h DUP‬‬ ‫)‪;Set maximum stack size to 256 bytes (100h‬‬
‫‪stk ENDS‬‬
‫‪DATA SEGMENT‬‬
‫‪A DB 10‬‬
‫‪B DB 20‬‬
‫‪DATA ENDS‬‬
‫‪CODE SEGMENT‬‬

‫‪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

‫ﺨطوات اﻟﺘﻨﻔﯿذ‬

Debug ‫اﻟﻤﺘﺎﺒﻌﺔ ﺒﺎﺴﺘﺨدام ﺒرﻨﺎﻤﺞ اﻟﻤﻨﻘﺢ‬

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‬‬ ‫‪-‬ﺘﻌﻠﯿﻤﺎت اﻟﻘﻔز ﻏﯿر اﻟﻤﺸروط واﺴﺘدﻋﺎء اﻟﺒرﻨﺎﻤﺞ اﻟﻔرﻋﻲ واﻟﻌودة‬

‫اﻟﻤﺸروط‪Conditional Transfer Instructions‬‬ ‫‪-‬ﺘﻌﻠﯿﻤﺎت ﻨﻘل اﻟﺘﺤﻛم‬

‫‪-‬ﺘﻌﻠﯿﻤﺎت اﻟﺘﻛرار‪Iteration Control Instructions‬‬

‫‪-‬ﺘﻌﻠﯿﻤﺎت اﻻﻋﺘراض‪Interrupt Instructions‬‬

‫وﻓﯿﻤﺎ ﯿﺄﺘﻲ اﻤﺜﻠﺔ ﺘوﻀﺢ وﺸرح ﺒﻌض ﻫذا اﻟﺘﻌﻠﯿﻤﺎت‪ :‬ﻤن ﺨﻼل ﺘطﺒﯿﻘﺎت ﺒرﻤﺠﯿﺔ ﻋﻠﻰ اﻟﺤﺎﺴوب‪.‬‬

‫‪.2‬اﻟﻤﺜﺎل اﻷول )‪(compXY.as‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﻹدﺨﺎل ﻋددﯿن وطﺒﺎﻋﺔ ‪ Y‬ﻓﻲ ﺤﺎﻟﺔ ﻛون اﻟﻌددﯿن ﻤﺘﺴﺎوﯿن وﯿطﺒﻊ ‪ N‬ﻓﻲ ﺤﺎﻟﺔ ﻋدم ﻤﺴﺎواة‬
‫اﻟﻌددﯿن‪.‬‬

‫'‪STACK SEGMENT PARA STACK 'STACK‬‬


‫'(‪DB 64 DUP('STACK‬‬
‫‪STACK ENDS‬‬

‫'‪DATA SEGMENT PARA PUBLIC 'DATA‬‬


‫;*****************************‬
‫‪xx db 0‬‬

‫‪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‬‬

‫‪ A= 20 , B= 20‬ﻤﺎ ﻨﺎﺘﺞ اﻟﺘﻨﻔﯿذ ‪...............................‬‬ ‫‪-2‬اﺴﻨد ﻗﯿم ﺠدﯿدة ﻟﻠﻤﺘﻐﯿرات‬

‫‪ A= 70 , B= 50‬ﻤﺎ ﻨﺎﺘﺞ اﻟﺘﻨﻔﯿذ ‪...............................‬‬ ‫‪-3‬اﺴﻨد ﻗﯿم ﺠدﯿدة ﻟﻠﻤﺘﻐﯿرات‬

‫‪ -4‬ﻟﻤﺎذا اﺴﻨﺎدﻨﺎ ﻗﯿم اﻟﻤﺘﻐﯿر ‪ A‬اﻟﻰ اﻟﻤﺴﺠل ‪............................................. AL‬‬

‫ادرس اﻟﺤل "اﻟﺒرﻨﺎﻤﺞ" اﻟﻤوﺠود ﻟﻠﺘدرﯿب ﺜم اﺠب ﻋن اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ -5‬ﻤﺎ ﻫﻲ ﺠﻤﻠﺔ اﻟﻤﻘﺎرﻨﺔ اﻟﻤﺴﺘﺨدﻤﺔ ﻓﻲ اﻟﺒرﻨﺎﻤﺞ وﻛﯿف ﺘﻌﻤل ‪....................................‬‬

‫‪ -6‬ﻤﺘﻰ ﻨﻨﺘﻘل اﻟﻰ اﻹﺸﺎرة ‪............................................... LAB1‬‬

‫‪ -7‬ﻤﺘﻰ ﻨﻨﺘﻘل اﻟﻰ اﻹﺸﺎرة ‪................................................. LAB2‬‬

‫‪-8‬ﻤﺘﻰ ﻨطﺒﻊ ﻤﺤﺘوى اﻟﻌﺒﺎرة ‪............................................... MSG3‬‬

‫‪ -9‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ ‪:‬‬


‫‪............................................................ MOV AH,09H‬‬

‫‪............................................................ JMP END1‬‬

‫‪............................................................ JZ LAB1‬‬

‫‪............................................................ LEA DX,MSG3‬‬

‫‪............................................................ INT 21H‬‬

‫اﻟﺒرﻨﺎﻤﺞ‪:‬‬

‫‪; A PROGRAM TO COMPARE TO MEMORY LOCATION in Assembly Language‬‬


‫‪DATA SEGMENT‬‬
‫‪A DB 10H‬‬

‫‪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

END1: MOV AX,4C00H


INT 21H

60
CODE ENDS
END START

OUTPUT
***********
B IS GREATER THAN A

(ALby4.asm) ‫اﻟﻤﺜﺎل اﻟﺜﺎﻨﻲ‬.3

‫ وطﺒﺎﻋﺔ اﻟﻨﺘﺎﺌﺞ ﺒﻌﻨﺎوﯿن‬4 ‫ ﻋﻠﻰ اﻟﻘﯿﻤﺔ‬AL ‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﻘﺴﻤﺔ ﻤﺤﺘوﯿﺎت اﻟﻤﺴﺠل‬
:‫ ﺒﺤﯿث ﺘﻛون اﻟﻨﺘﺎﺌﺞ ﻛﻤل ﯿﻠﻲ‬، ‫واﻀﺤﺔ‬

SHR instruction ‫اﺴﺘﺨدم ﺘﻌﻠﯿﻤﺎت اﻻزاﺤﺔ ﻟﻠﯿﻤن‬

stk SEGMENT BYTE STACK 'STACK' ;Define the stack segment


DB 100h DUP(?) ;Set maximum stack size to 256 bytes (100h)
stk ENDS

dat SEGMENT BYTE 'DATA' ;Define the data segment


PROMPT_1 DB 'Original value of AL : $'
PROMPT_2 DB 0DH,0AH,'Divide value of AL by 4 : $'
dat ENDS

cod SEGMENT BYTE 'CODE' ;Define the Code segment


assume cs: cod,ds: dat,ss: stk
START: mov ax, SEG dat ;ax <-- data segment start address

61
mov ds, ax ;ds <-- initialize data segment register MOV DS,

AX

LEA DX, PROMPT_1 ; load and print PROMPT_1


MOV AH, 9
INT 21H

MOV AL, 38H ; place 8 in the AL


MOV BL, AL ; save Al in to BL

MOV AH, 2 ; print the original value of AL


MOV DL, AL
INT 21H

LEA DX, PROMPT_2 ; load and print PROMPT_2


MOV AH, 9
INT 21H

AND BL, 0FH ; convert ascii to decimal code

MOV CL, 2 ; divide AL by 4


SHR BL, CL

OR BL, 30H ; convert decimal to ascii code

MOV AH, 2 ; print the processed value of AL


MOV DL, BL
INT 21H

62
‫‪MOV AH, 4CH‬‬ ‫‪; return control to DOS‬‬
‫‪INT 21H‬‬
‫‪cod ENDS‬‬
‫‪END START‬‬

‫ﺨطوات اﻟﺘﻨﻔﯿذ واﻟﺤل‪:‬‬

‫‪.4‬اﻟﻤﺜﺎل اﻟﺜﺎﻟث )‪(eono.asm‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻹﯿﺠﺎد ﻋدد اﻷرﻗﺎم اﻟﻔردﯿﺔ وﻋدد اﻷرﻗﺎم اﻟزوﺠﯿﺔ ﻓﻲ ﻤﺼﻔوﻓﺔ ﻤن اﻷرﻗﺎم‬
‫ﻗﺎﺌﻤﺔ اﻻﻋداد ﻫﻲ ﻤن ‪ 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:->

;AX=0005 BX=0002 CX=0000 DX=0505 SP=0000 BP=0000 SI=0014 DI=0000

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‬‬

‫‪-2‬اﯿن ﯿﺘم ﺘﺨزﯿن ﻋدد اﻷرﻗﺎم اﻟزوﺠﯿﺔ ‪................................................‬‬

‫‪-3‬اﯿن ﯿﺘم ﺘﺨزﯿن ﻋدد اﻷرﻗﺎم اﻟﻔردﯿﺔ ‪................................................‬‬

‫‪-4‬ﻟﻤﺎذا اﺴﻨﺎدﻨﺎ ﻟﻠﻤﺴﺠل اﻟﻘﯿﻤﺔ ‪ 10‬ﻋن طرﯿق اﻟﺘﻌﻠﯿﻤﺔ ‪MOV CL,10‬‬

‫‪-5‬ﻫل ﺘﺘﻐﯿر ﻗﯿﻤﺔ اﻟﻤﺴﺠل ‪ CX‬ﻓﻲ اﻟﺒرﻨﺎﻤﺞ ‪...........‬‬

‫• اذا ﻛﺎﻨت اﺠﺎﺒﺘك ﺒﻨﻌم ﻓﻛﯿف واي ﺘﻌﻠﯿﻤﺔ ﺘﻐﯿر ﻗﯿﻤﺔ اﻟﻤﺴﺠل ‪........................................‬‬
‫• وﻫل ﺘﺘﻐﯿر ﺒﺎﻟزﯿﺎدة ام ﺒﺎﻟﻨﻘﺼﺎن وﻟﻤﺎذا ‪.........................................................‬‬

‫‪-6‬ﻤﺎ أﻫﻤﯿﺔ اﻟﺘﻌﻠﯿﻤﺔ ‪....................................... CMP CL,00‬‬

‫‪-7‬ﻟﻤﺎذا ﻨﻀﯿف اﻟﻌدد ‪ 2‬اﻟﻰ اﻟﻤﺴﺠل ‪ SI‬ﻓﻲ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ‪................... ADD SI,2 :‬‬

‫‪-8‬اذا اردﻨﺎ ان ﻨﻀﯿف ‪ 1‬اﻟﻰ اﻟﻤﺴﺠل ‪ SI‬وﯿﺒﻘﻰ اﻟﺒرﻨﺎﻤﺞ ﯿﻌﻤل ﺒﻨﻔس اﻷﺴﻠوب ﻤﺎ ﻫو اﻟﺘﻌدﯿل اﻟﻤطﻠوﺒﺔ ﻋﻠﻰ‬
‫اﻟﺒرﻨﺎﻤﺞ ‪........................................‬‬

‫‪-9‬ﻫل ﯿﻤﻛن ان ﻨﺴﺘﻌﻤل اﻟﺘﻌﻠﯿﻤﺔ ‪ INC‬ﺒدﻻ ﻤن ‪............................. ADD SI,1‬‬

‫‪ -10‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺔ ]‪....................... MOV AX,WORD PTR[SI‬‬

‫‪.5‬اﻟﻤﺜﺎل اﻟراﺒﻊ )‪(2s.asm‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﯿﻘوم ﺒﺈﯿﺠﺎد اﻟﻤﺘم اﻟﺜﻨﺎﺌﻲ ﻷي ﻋدد ﺜﻨﺎﺌﻲ ﻤﺨزن ﻓﻲ ﻤﺘﻐﯿر طوﻟﻪ ‪ 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

CMP BYTE PTR[SI],'N'

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‬ﺒﻐض اﻟﻨظر اذا ﻛﺎن ﺼﻐﯿر ام ﻛﺒﯿر‪.‬‬

‫ﺘدرﯿب )‪(nooc.asm) (3‬‬


‫أﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻹﯿﺠﺎد ﻋدد ﻤرات ﺘﻛرار اﻷرﻗﺎم اﻟﺴﺎﻟﺒﺔ واﻷرﻗﺎم اﻟﻤوﺠﺒﺔ ﻓﻲ ﺴﻠﺴﻠﺔ ﻤن‬
‫اﻷرﻗﺎم ﻤﺨزﻨﺔ ﻓﻲ ﻤﺼﻔوﻓﺔ ﺒﺎﺴم ‪ num‬وﺨزن اﻟﻨﺘﺎﺌﺞ ﻓﻲ ﻤﺘﻐﯿرﯿن اﻷول ‪ p‬ﻟﻌدد ﺘﻛرار اﻻﻋداد اﻟﻤوﺠﺒﺔ و ‪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‬أﻫداف اﻟوﺤدة‬

‫ﺒﻌد اﻨﺘﻬﺎﺌك ﻤن دراﺴﺔ ﻫذﻩ اﻟوﺤدة وﺘﻨﻔﯿذ اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ واﻟﺒرﻨﺎﻤﺞ ﻋﻠﻰ اﻟﺤﺎﺴوب ﯿﻨﺘظر ﻤﻨك ﻋزﯿزي اﻟطﺎﻟب‬
‫أن ﺘﻛون ﻗﺎد اًر ﻋﻠﻰ أن‪:‬‬

‫‪-1‬ﺘﻛﺘب ﺒراﻤﺞ ﻟﺘﻨﻔﯿذ ﻋﻤﻠﯿﺎت اﻹدﺨﺎل ﺒواﺴطﺔ ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ‪.‬‬

‫‪-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

‫اﺠب ﻋن اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﻲ‬

.......................................... MOV AH,09H ‫ ﻤﺎ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ‬-1

INT 21H ‫ ﻤﺎ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ‬-2

MOV DX,OFFSET MSG ‫ ﻤﺎ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ‬-3

MSG DB "HELLO WORLD$" ‫ ﻓﻲ ﻨﻬﺎﯿﺔ اﻟﺴﻠﺴﺔ اﻟرﻤزﯿﺔ‬$ ‫ ﻤﺎ أﻫﻤﯿﺔ إﺸﺎرة اﻟدوﻻر اﻷﻤرﯿﻛﻲ ﻓﻲ‬-4

(cls.asm) ‫اﻟﻤﺜﺎل اﻟﺜﺎﻨﻲ‬.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

‫ادرس اﻟﻤﺜﺎل اﻟﺴﺎﺒق واﺠب ﻋﻠﻰ اﻷﺴﺌﻠﺔ‬

:‫ ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﺎﻟﯿﺔ‬-1


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 ‫ﻤﺎ ﻫﻲ وظﯿﻔﺔ اﻻﻋﺘراض‬-2

‫ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ‬

76
‫ ﯿﺘم ﻤﺴﺤﺢ اﻟﺸﺎﺸﺔ‬cls ‫وﻋﻨد ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ‬

(3-19.asm) ‫اﻟﻤﺜﺎل اﻟﺜﺎﻟث‬.5

‫ ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬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‬ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬

‫‪....................................................................................‬‬

‫‪....................................................................................‬‬

‫‪....................................................................................‬‬

‫‪ -2‬ﻤﺎ اﻻﻋﺘراض اﻟﻤﺴﺘﺨدم ﻟﻠﺘﻌﺎﻤل ﻤﻊ اﻟﺸﺎﺸﺔ‪.‬‬

‫‪....................................................................................‬‬

‫‪78‬‬
( border.asm) (4) ‫اﻟﻤﺜﺎل‬.6

‫اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اطﺎر ﻤﻠون ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬

:‫اﻟﺤل‬

;Program to Print a Color Border on the 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

mov ah,0bh
mov bx,01
int 10h

mov ah,4ch
int 21h
code ends
END

:‫ادرس اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق واﺠب ﻋن اﻷﺴﺌﻠﺔ اﻻﺘﯿﺔ‬

‫ﻤﺎ ﻫﻲ اﻟﺘﻌﻠﯿﻤﺎت ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟوﻀﻊ اطﺎر ﻤﻠون ﻋﻠﻰ اﻟﺸﺎﺸﺔ‬-1

....................................................................................

....................................................................................

.‫ ﻤﺎ اﻻﻋﺘراض اﻟﻤﺴﺘﺨدم ﻟﻠﺘﻌﺎﻤل ﻤﻊ اﻟﺸﺎﺸﺔ‬-2

....................................................................................

79
‫ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق‬

(blue.asm) (5) ‫اﻟﻤﺜﺎل‬.7

‫اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟﻤﺴﺢ اﻟﺴﺎﺴﺔ وﺠﻌل ﻟون ﻨﻤط اﻟﺨط اﻟظﺎﻫر ﻋﻠﻰ اﻟﺨﻠﻔﯿﺔ ازرق‬

:‫اﻟﺤل‬
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

MOV AX, DATA


MOV DS,AX

MOV AX,0600h ;06 isfor row and 00 isfor column

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) ‫ﺘدرﯿب‬
‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﯿﻘوم ﺒﺈدﺨﺎل ﺴﻠﺴﻠﺔ رﻤزﯿﺔ وﯿﻘوم ﺒﺘﺤوﯿل اﻻﺤرف اﻟﺼﻐﯿرة او اﻟﻛﺒﯿرة اﻟﻰ أﺤرف ﺼﻐﯿرة او‬
‫ﻛﺒﯿرة وطﺒﺎﻋﺔ اﻻﺤرف‬

‫اﻟﺤل‬

stack segment BYTE STACK 'STACK' ;Define the stack segment


DB 255h DUP(?) ;Set maximum stack size to 256 bytes (100h)
stack ends
DATA SEGMENT
MSG DB 0DH,0AH, ' ENTER THE STRING :-----> : $'
MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $'
STR1 DB 255 DUP(?)
ONE DB ?
TWO DB ?
DATA ENDS
CODE SEGMENT BYTE 'CODE' ;Define the Code segment
ASSUME DS:DATA,CS:CODE,ss:stack
START :
MOV AX,DATA
MOV DS,AX

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‬ﻤﻘدﻤﺔ‬

‫أﻫﻼً ﺒك ﻋزﯿزي اﻟطﺎﻟب ﻓﻲ رﺤﺎب اﻟوﺤدة اﻟﺴﺎدﺴﺔ واﻷﺨﯿرة ﻓﻲ دﻟﯿل اﻟﺘطﺒﯿق اﻟﻌﻤﻠﻲ ﻤن ﻤﻘرر ﻫﯿﻛﻠﯿﺔ اﻟﺤﺎﺴوب‬
‫وﻟﻐﺔ أﺴﻤﺒﻠﻲ ‪ ،‬وﻫﻲ ﺘﻌﺎﻟﺞ ﻤوﻀوع اﻟﻤﺎﻛرو واﺴﺘﺨداﻤﻬﺎ ‪.‬‬

‫ﻫذﻩ اﻟوﺤدة ﺘﻌﺎﻟﺞ ﻤواﻀﯿﻊ أﺴﺎﺴﯿﺔ ﻋن اﻟﻤﺎﻛرو وﻫذﻩ اﻟﻤواﻀﯿﻊ ﻫﻲ‪:‬‬

‫‪-‬ﻤﻛوﻨﺎت اﻟﻤﺎﻛرو ﺤﯿث ﯿﺘﻛون اﻟﻤﺎﻛرو ﻤن ﺠﻤﻠﺔ اﻟﺒداﯿﺔ وﺠﻤﻠﺔ اﻟﻨﻬﺎﯿﺔ وﻤﺘن اﻟﻤﺎﻛرو‪.‬‬

‫‪-‬ﺠﻤﻠﺔ اﺴﺘدﻋﺎء اﻟﻤﺎﻛرو‪.‬‬

‫وﺘم ﺘزوﯿد ﻫذﻩ اﻟوﺤدة ب أﻤﺜﻠﺔ وﺘدرﯿﺒﺎت ﻋﻠﻰ اﻟﻤواﻀﯿﻊ اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ اﻟوﺤدة ﻟﻤﺴﺎﻋدﺘك ﻋﻠﻰ ﻓﻬم ﻤﺎدة اﻟﻤﻘرر‪.‬‬

‫‪.2‬اﻟﻤﺜﺎل اﻷول )‪(mactoc.asm‬‬

‫اﻛﺘب ﺒرﻨﺎﻤﺠﺎ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟطﺒﺎﻋﺔ ﻋﻨوان او اﺴم ﻋﻠﻰ وﺴط اﻟﺸﺎﺸﺔ‪ ،‬اﺴﺘﺨدم ﻤﺎﻛرو ﺒﺎﺴم ‪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‬‬

‫‪CODE SEGMENT BYTE 'CODE' ;Define the Code segment‬‬


‫‪ASSUME CS:CODE,DS:DATA ,ss:stack‬‬

‫‪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

،‫اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ أﺴﻤﺒﻠﻲ ﯿﺴﺘدﻋﻲ ﻤﺎﻛرو ﻹظﻬﺎر ﻋﺒﺎرة ﻹدﺨﺎل اﻟﻨص وﻤﺎﻛرو اﺨر ﻟطﺒﺎﻋﺔ اﻟﻨﺘﺎﺌﺞ‬
‫ﺒﺤﯿث ﯿﻘوم اﻟﺒرﻨﺎﻤﺞ ﺒﻘراءة ﻨص وطﺒﺎﻋﺔ ﺒﺎﻟﻤﻌﻛوس‬

:‫ﺒﺤﯿث ﺘﻛون اﻟﻨﺘﺎﺌﺞ ﻛﻤﺎ ﯿﻠﻲ‬


ENTER THE STRING :abc
cba REVERSE STRING IS
‫اﻟﺤل‬

;Code for PROGRAM TO FIND THE REVERSE OF A STRING USING MACRO;OUTPUT


;***********
;C:\masm\reverse
;ENTER THE STRING :abc
;cba REVERSE STRING IS

GETSTR MACRO STR


MOV AH,0AH
LEA DX,STR
INT 21H
ENDM

PRINTSTR MACRO STR


MOV AH,09H
LEA DX,STR
INT 21H
ENDM

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

MOV CL,STR1+1 ;FOR STORING THE LENGTH OF THE STRING


MOV CH,00H
MOV BL,CL
MOV BH,00H

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
‫أﺴﺌﻠﺔ‪:‬‬

‫ادرس اﻟﺒرﻨﺎﻤﺞ اﻟﺴﺎﺒق ﺠﯿد ﺜم اﺠب ﻋن اﻷﺴﺌﻠﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫‪ .1‬ﻤﺎ ﻋدد اﻟﻤﺎﻛرو ﻓﻲ اﻟﺒرﻨﺎﻤﺞ‪..........................................‬‬


‫‪ .2‬ﻤﺎ اﺴﻤﺎء اﻟﻤﺎﻛرو ‪..........................................‬‬
‫‪ .3‬ﻤﺎ ﻫﻲ وظﯿﻔﺔ ﻛل ﻤﺎﻛرو ‪..........................................‬‬
‫‪ .4‬ﻛﯿف ﺘم اﺴﺘدﻋﺎء ﻛل اﻟﻤﺎﻛرو ‪ ........................‬وﻤﺎ ﻫﻲ ﺠﻤل اﻻﺴﺘدﻋﺎء ‪.............‬‬
‫‪ .5‬ﻤﺎ ﻫﻲ ﻨﺘﯿﺠﺔ ﺘﻨﻔﯿذ اﻟﺒرﻨﺎﻤﺞ ‪...................................‬‬

‫ﺘدرﯿب )‪(printer.asm)(1‬‬

‫ﺒﺎﺴﺘﺨدام اﻻﻋﺘراض رﻗم ‪ INT 17h‬واﻟﻤﺎﻛرو اﻛﺘب ﺒرﻨﺎﻤﺞ ﺒﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ اﺴﻤﺒﻠﻲ ﻟطﺒﺎﻋﺔ ﻨص ﯿﺘم ادﺨﺎﻟﺔ‬
‫ﻤن ﻟوﺤﺔ اﻟﻤﻔﺎﺘﯿﺢ ﻋﻠﻰ اﻟطﺎﺒﻌﺔ‬

‫‪94‬‬
‫اﻟﺤل‬

; Program to Print a given string on printer Using INT 17h in Assembly

Language

prnstr macro msg


mov ah, 09h
lea dx, msg
int 21h
ENDM
hellostk SEGMENT BYTE STACK 'STACK' ;Define the stack segment
DB 100h DUP(?) ;Set maximum stack size to 256 bytes (100h)
hellostk ENDS

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]

mov dx, 0000h


again :
mov ah, 02h
int 17h

test ah, 00101001b


jz cont
prnstr msg2
jmp again
cont :
mov ah, 00h
mov dx, 0000h
next :
mov ah, 00h
mov al, [si]
int 17h
inc si
loop next

mov ax, 4c00h


int 21h
code ends
end start

96
‫ﺨطوات اﻟﺘﻨﻔﯿذ‬

‫‪97‬‬

You might also like