Professional Documents
Culture Documents
ﺗﻌﺮﻳﻒ اﻷﺳﻤﺒﻠﺮ
اﻷﺳﻤﺒﻠﺮ ھﻮ ﺑﺮﻧﺎﻣﺞ ﻳﻘﻮم ﺑﺘﺤﻮﻳﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻜﺘﻮﺑﺔ ﺑﻸﺳﻤﺒﻠﻲ اﻟﻰ ﻟﻐﺔ اﻵﻟﻪ .
ﻣﺨﻄﻂ ﻳﻮﺿﺢ اﻟﻌﻼﻗﺔ ﺑﯿﻦ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ وﻟﻐﺔ اﻵﻟﻪ وﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى وﻟﻐﺔ اﻵﻟﻪ
ﺗﺘﻄﻠﺐ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻣﻌﺮﻓﺔ ﺑﺎﻟﻌﺘﺎد وﻋﻨﺎﻳﺔ ﺧﺎﺻﺔ ﻣﻊ اﻷھﺘﻤﺎم ﺑﺄﺪ ﻗ
وأﻗﻞ اﻟﺘﻔﺎﺻﯿﻞ ،ﻓﻲ أﻳﺎم اﻟﺒﺮﻣﺠﺔ اﻟﻘﺪﻳﻤﺔ ﻛﺎن اﻟﻤﺒﺮﻣﺠﻮن ﻳﻜﺘﺒﻮن ﺑﺮاﻣﺠﮫﻢ ﺑﻠﻐﺔ
اﻷﺳﻤﺒﻠﻲ ﻷن ذاﻛﺮة اﻟﺮﺎ ﻣ وﻗﺘﮫﺎ ﻛﺎﻧﺖ ﺻﻐﯿﺮة )أﻗﻞ ﻣﻦ ٦٤ﻛﯿﻠﻮﺑﺎﻳﺖ( ﻮھﻢ ﺑﺤﺎﺟﺔ اﻟﻰ
ﺑﺮاﻣﺞ أﺻﻐﺮ وأﺳﺮع ﺧﺼﻮﺻًﺎ ﺄ ﻧ ﻣﻌﺎﻟﺠﺘﮫﻢ أﻳﻀًﺎ ﻛﺎﻧﺖ ﺑﻄﯿﺌﺔ ،ﻣﻊ ﺗﻄﻮر اﻟﺤﺎﺳﻮب وﺗﻮﺳﻊ
ﻻ وﺗﻌﻘﯿﺪًا ،ھﺬا اﻟﺘﻌﻘﯿﺪ أﺪى
ﺳﻌﺔ ذاﻛﺮة اﻟﺮﺎ ﻣ وزﻳﺎدة ﺳﺮﻋﺘﻪ أﺻﺒﺤﺖ اﻟﺒﺮاﻣﺞ أﻛﺜﺮ ﻃﻮ ً
اﻟﻰ أﺳﺘﺨﺪﺎ ﻣ اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى HLLﻣﺜﻞ اﻟﺴﻲ واﻟﻜﻮﺑﻮل واﻟﺒﯿﺴﻚ
واﻟﺒﺎﺳﻜﺎل واﻟﻔﻮرﺗﺮن ،ﻣﺮة أﺧﺮى ﺗﻄﻮر اﻟﺤﺎﺳﻮب ﻓﺄﺪى اﻟﻰ أﺳﺘﺨﺪﺎ ﻣ اﻟﻠﻐﺎت اﻟﻌﻠﯿﺎ
اﻟﻤﻮﺟﮫﺔ اﻟﮫﺪف OOPﻣﺜﻞ اﻟﺴﻲ ++واﻟﺠﺎﻓﺎ واﻟﺘﻲ ﻣﻜﻨﺖ ﻣﻦ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺞ ﻗﻮاﻣﮫﺎ آﻻف
اﻷﺳﻄﺮ واﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻌﻘﺪه واﻟﻤﺘﺪاﺧﻠﻪ .
ﻣﻦ اﻟﺼﻌﺐ ﺄ ﻧ ﺗﻼﻗﻲ ﺑﺮاﻣﺞ ﻛﺒﯿﺮة ﻣﻜﺘﻮﺑﺔ ﻛﺎﻣﻠﺔ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻷن ﻛﺘﺎﺑﺘﮫﺎ ﺻﻌﺐ
واﻷھﻢ ﻣﻦ ذﻟﻚ ﺗﻄﻮﻳﺮھﺎ وﺻﯿﺎﻧﺘﮫﺎ أﺻﻌﺐ ﺑﻜﺜﯿﺮ ،ﺑﺪل ذﻟﻚ ﻳﻘﻮم اﻟﻤﺒﺮﻣﺠﯿﻦ ﺑﺒﺮﻣﺠﺔ
ﻣﻘﺎﻃﻊ ﻣﺒﺮﻣﺠﺔ ﺑﺮﻣﺠﺔ ﻣﺜﻠﻰ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻷﺳﺘﺨﺪﻣﮫﺎ ﻓﻲ ﺗﻨﻔﯿﺬ أﺳﺮع أو اﻟﻮﺻﻮل
اﻟﻰ اﻟﻌﺘﺎد ﻋﻦ ﻃﺮﻳﻘﮫﺎ وﺑﺎﻗﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى .
ﻳﻔﺾ اﻟﻤﺒﺮﻣﺠﯿﻦ ﻟﻐﺔ اﻟﺴﻲ ++ﻛﻠﻐﺔ ﻗﯿﺎﺳﯿﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﻋﻠﯿﺎ ﻷن ﻟﮫﺎ ﻗﺪرة ﻋﺎﻟﯿﺔ
وﻗﻮﻳﺔ ﺟﺪًا وﻣﻮﺟﮫﺔ اﻟﮫﺪف ﻣﻊ اﻟﻘﺪرة ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﻣﻘﺎﻃﻊ اﻟﺴﻲ ﻓﯿﮫﺎ ﻮھﻲ ﻟﻐﺔ أﻗﻞ
أﻧﺨﻔﺎﺿًﺎ وأﻛﺜﺮ ﻣﺮوﻧﺔ ﻣﻊ أﺳﺘﺨﺪﺎ ﻣ اﻷﺳﻤﺒﻠﻲ ﻛﻌﻨﺼﺮ ﻣﮫﻢ ﻓﻲ اﻟﻮﺻﻮل اﻟﻰ اﻟﻌﺘﺎد
وﺑﺮﻣﺠﺔ اﻟﺠﺰﺋﯿﺎت اﻟﻤﺤﺘﺎﺟﺔ ﻟﻠﺴﺮﻋﺔ .
ﻻ ﻳﺴﺘﺨﺪم اﻟﻤﺒﺮﻣﺠﻮن ﺷﻔﺮة اﻷﺳﻤﺒﻠﻲ وﺳﻂ ﺷﻔﺮة ﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ﻋﺎدة وأﻧﻤﺎ
ﻳﺴﺘﺨﺪﻣﻮﻧﮫﺎ ﻋﻦ ﻃﺮﻳﻖ واﺟﻪ ﻋﻠﻰ ﺷﻜﻞ داﻟﺔ أو ﻛﺎﺋﻦ وﺗﺤﺘﻮي ھﺬه اﻟﺪاﻟﺔ أو ھﺬا اﻟﻜﺎﺋﻦ
ﻋﻠﻰ ﺷﻔﺮة اﻷﺳﻤﺒﻠﻲ اﻟﻤﻄﻠﻮﺑﺔ ،وﻗﺪ ﺗﺴﺘﺨﺪم روﺗﯿﻨًﺎ ﻓﺮﻋﯿًﺎ أو داﻟﺔ ﻓﻲ ﻟﻐﺔ ﻋﺎﻟﯿﺔ
اﻟﻤﺴﺘﻮى وأﻧﺖ ﻻﺗﻌﻠﻢ ﺑﺄﻧﻚ ﺑﺎﺳﺘﺪﻋﺎء ھﺬه اﻟﺪاﻟﺔ أو اﻟﺮوﺗﯿﻦ اﻟﻔﺮﻋﻲ ﻗﺪ أﺳﺘﺪﻋﯿﺖ
ﺷﻔﺮة ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ .
ﻟﻐﺔ اﻵﻟﻪ ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘًﺎ ھﻲ اﻟﻠﻐﺔ اﻟﺘﻲ ﺗﺴﻄﯿﻊ اﻵﻟﻪ أو اﻟﻤﻌﺎﻟﺞ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻣﺒﺎﺷﺮة
،ﻓﻲ اﻟﻌﺎﺋﻠﺔ ٨٦Xﻛﻞ ﻣﻌﺎﻟﺞ ﻳﺤﺘﻮي ﻳﺴﺘﻄﯿﻊ ﺗﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺎت اﻟﻤﻌﺎﻟﺞ اﻟﺬي ﻗﺒﻠﻪ وﻳﻤﻠﻚ
ﻣﺠﻤﻮﻋﺔ ﺗﻌﻠﯿﻤﺎت ﻣﻮﺳﻌﺔ وأ ﺿﺎﻓﯿﺔ ﻻ ﺗﺴﺘﻄﯿﻊ اﻟﻤﻌﺎﻟﺠﺎت اﻟﺘﻲ ﻗﺒﻠﻪ ﺗﻨﻔﯿﺬھﺎ وأﻣﺎ
اﻟﻤﻌﺎﻟﺞ اﻟﺬي ﻳﺄﺗﻲ ﺑﻌﺪ ھﺬا اﻟﻤﻌﺎﻟﺞ ﻓﺄﻧﻪ ﻳﺪﻋﻢ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻮﺳﻌﺔ ﻟﻠﻤﻌﺎﻟﺞ اﻟﺬي ﻗﺒﻠﻪ
ﺑﯿﻨﻤﺎ ﻳﺤﺘﻮي ھﻮ أﻳﻀًﺎ ﻋﻠﻰ ﺗﻌﻠﯿﻤﺎت ﺟﺪﻳﺪة وﻣﻮﺳﻌﺔ ،ﺑﺄﺧﺘﺼﺎر اذا ﺻﻤﻤﺖ ﺑﺮﻧﺎﻣﺞ
ﻟﻤﻌﺎﻟﺢ ﻣﺎ ﻓﺄن اﻟﻤﻌﺎﻟﺠﺎت ﻣﺎﻗﺒﻞ ھﺬا اﻟﻤﻌﺎﻟﺢ ﻟﻦ ﺗﺴﺘﻄﯿﻊ ﺗﺸﻐﯿﻠﻪ ﺑﯿﻨﻤﺎ اﻟﻤﻌﺎﻟﺞ ﻧﻔﺴﺔ
واﻟﻤﻌﺎﻟﺠﺎت اﻟﺘﻲ ﺑﻌﺪه )ﻣﻦ ﻧﻔﺲ اﻟﻌﺎﺋﻠﺔ( ﺗﺴﺘﻄﯿﻊ ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ .
ﻟﻔﺪ ﺣﺎﻓﻈﺖ ﺷﺮﻛﺔ أﻧﺘﻞ ﻋﻠﻰ اﻟﺘﻮاﻓﻘﯿﺔ ﻓﻲ اﻟﻌﺎﺋﻠﺔ ٨٦Xأﺑﺘﺪاء ﻣﻦ اﻟﻤﻌﺎﻟﺞ ٨٠٨٦وﺻﻮ ً
ﻻ
اﻟﻰ ﺑﺎﻧﺘﻨﯿﻮم ٨٠٨٨٦=٤وﻟﻜﻦ اﻟﺤﻔﺎظ ﻋﻠﻰ اﻟﺘﻮاﻓﻘﯿﺔ ﻳﻔﺮض ﻗﯿﻮد ﻋﻠﻰ ﺗﺼﻤﯿﻢ اﻟﻤﻌﺎﻟﺞ
وأﺳﺘﺨﺪﺎ ﻣ ﺗﻘﻨﯿﺎت ﻗﺪﻳﻤﺔ ،وﻣﺆﺧﺮًا ﻗﺮﺮ ﺗ ﺷﺮﻛﺔ أﻧﺘﻞ اﻳﻘﺎف ﻋﺎﺋﻠﺔ اﻟﻤﻌﺎﻟﺢ ٨٦Xﻋﻨﺪ
ﺑﺎﻧﺘﻨﯿﻮم ٤وﻗﺎﻣﺖ ﺑﺄﻧﺸﺎء ﻣﻌﺎﻟﺞ ﺟﺪﻳﺪ )ﻏﯿﺮ ﻣﺘﻮاﻓﻖ ﻣﻊ اﻟﻌﺎﺋﻠﺔ ( ٨٦Xﻣﺒﻨﻲ ﻋﻠﻰ ﺗﻘﻨﯿﺔ
ﻻ ٦٤ﺑﺖ ﻮھﻮ اﻟﻤﻌﺎﻟﺞ اﺗﺎﻧﯿﻮم اﻟﺠﺪﻳﺪ .
اﻟﻤﻌﺎﻟﺞ :
ﻳﻤﺜﻞ اﻟﻤﻌﺎﻟﺞ ﻋﻘﻞ اﻟﺤﺎﺳﻮب ﻮھﻲ اﻟﻮﺣﺪة اﻟﻤﺴﺆﻟﻪ ﻋﻦ اﻟﻘﯿﺎم ﺑﺄدارة اﻟﺤﺎﺳﻮب واﻟﻘﯿﺎم
ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ واﻟﻤﻨﻄﻘﯿﺔ وﻧﺤﻦ ھﻨﺎ ﻛﻤﺎ أوﺿﺤﺖ ﻧﺪﺮ ﺳ ﻣﻌﺎﻟﺠﺎت أﻧﺘﻞ ﻣﻦ اﻟﻌﺎﺋﻠﺔ
٨٦Xﻷﻧﮫﺎ اﻟﻌﺎﺋﻠﺔ اﻷﺷﮫﺮ واﻷﻛﺜﺮ أﺳﺘﺨﺪاﻣًﺎ ﺑﯿﻦ اﻟﻨﺎس .
وﺣﺪة اﻟﺘﻨﻔﯿﺬ ووﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ : Execution Unit And Bus Interface Unit
ﻳﺘﺄﻟﻒ اﻟﻤﻌﺎﻟﺞ ﻣﻦ وﺣﺪﺗﯿﻦ ھﻤﺎ وﺣﺪة اﻟﺘﻨﻔﯿﺬ Execution Unitأﺧﺘﺼﺎرًا EUوﻣﮫﻤﺘﮫﺎ
ﺗﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﺎت ،ووﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ Bus Interface Unitأﺧﺘﺼﺎرًا BIUوﻣﮫﻤﺘﮫﺎ ﻧﻘﻞ
اﻟﺒﯿﺎﻧﺎت واﻟﻤﻌﻄﯿﺎت اﻟﻰ وﺣﺪة اﻟﺘﻨﻔﯿﺬ .ﺗﺤﺘﻮي وﺣﺪة اﻟﺘﻨﻔﯿﺬ ﻋﻠﻰ وﺣﺪة اﻟﺤﺴﺎب
واﻟﻤﻨﻄﻖ Arithmetic And Logic Unitأﺧﺘﺼﺎرًا ALUووﺣﺪة اﻟﺘﺤﻜﻢ Control Unit
أﺧﺘﺼﺎرًا CUوﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﺴﺠﻼت .ﺗﺘﺄﻟﻒ وﺣﺪة ﻣﻼﺋﻤﺔ اﻟﻤﻤﺮ ﻣﻦ وﺣﺪة اﻟﺘﺤﻜﻢ
ﺑﺎﻟﻤﻤﺮ Unit Bus Controlوﻣﺴﺠﻼت اﻟﻤﻘﺎﻃﻊ Segment Registersورﺗﻞ=ﻛﯿﻮ
اﻟﺘﻌﻠﯿﻤﺎت ) Instruction Queueاﻟﺮﺗﻞ أو اﻟﻜﯿﻮ ھﻮ ﻧﻮع ﻣﻦ أدارة اﻟﺬاﻛﺮة ﺗﻜﻮن ﻓﯿﻪ
ﻻ .( FIFO=First In First Outوﺗﻘﻮم وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ اﻟﻤﻌﻠﻮﻣﺔ اﻟﺪاﺧﻠﺔ أوﻻ ﺧﺎرﺟﺔ أو ً
ﺑﻌﻤﻠﯿﺎت اﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﻤﺮ وﻧﻘﻞ اﻟﻤﻌﻄﯿﺎت ﺑﯿﻦ ﻛﻞ ﻣﻦ وﺣﺪة اﻟﺘﻨﻔﯿﺬ واﻟﺬاﻛﺮة وأﺟﮫﺰة
اﻷدﺧﺎل واﻷﺧﺮﺎﺟ اﻟﺨﺎرﺟﯿﺔ ،ﻛﻤﺎ ﺗﻘﻮم ﻣﺴﺠﻼت اﻟﻤﻘﺎﻃﻊ ﺑﻌﻤﻠﯿﺔ اﻟﺘﺤﻜﻢ ﻓﻲ ﻋﻨﻮﻧﺔ
اﻟﺬاﻛﺮة .ﺗﻀﻊ وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ ﺗﻀﻊ اﻟﺘﻌﻠﯿﻤﺎت ﻓﻲ رﺗﻠﮫﺎ اﻟﻤﺨﺼﺺ ﻟﮫﺎ ﻓﻲ وﺣﺪة
اﻟﺘﻨﻔﯿﺬ ﺑﻌﺪ ﺄ ﻧ ﺗﻘﻮم ﺑﺠﻠﺒﮫﺎ ﻣﻦ اﻟﺬاﻛﺮة .ﻳﺨﺼﺺ رﺗﻞ اﻟﺘﻌﻠﯿﻤﺎت ﻟﻮﺿﻊ اﻟﺘﻌﻠﯿﻤﺎت ﻓﯿﻪ ﺑﻌﺪ
ﺟﻠﺒﮫﺎ ﻣﻦ اﻟﺬاﻛﺮة ﺑﻮاﺳﻄﺔ وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ ،وﻟﺬﻟﻚ ﻳﻮﺟﺪ داﺋﻤًﺎ رﺗﻞ ﻣﻦ اﻟﺘﻌﻠﯿﻤﺎت
ﺟﺎھﺰه ﻟﺘﻨﻔﯿﺬھﺎ ﻣﻦ ﻗﺒﻞ وﺣﺪة اﻟﺘﻨﻔﯿﺬ .ﺗﻌﻤﻞ وﺣﺪة اﻟﺘﻨﻔﯿﺬ ووﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ ﻋﻠﻰ
اﻟﺘﻮاﺰ ﻳ )ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ( ،ﺑﯿﻨﻤﺎ ﺗﺤﺘﻘﻆ وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ ﺑﺨﻄﻮة ﻧﺤﻮ اﻷﻣﺎم ،ﻓﻌﻨﺪﻣﺎ
ﺗﻘﻮم وﺣﺪة اﻟﺘﻨﻔﯿﺬ ﺑﺘﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺔ ﻣﺎ ،ﺗﻌﻤﻞ وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ أﻣﺎ ﻋﻠﻰ ﺟﻠﺐ ﺗﻌﻠﯿﻤﺔ
ﻣﻦ اﻟﺬاﻛﺮة ووﺿﻌﮫﺎ ﻓﻲ رﺗﻞ اﻟﺘﻌﻠﯿﻤﺎت ﻟﻜﻲ ﺗﻨﺘﻈﺮ دوﺮھﺎ ﻓﻲ اﻟﺘﻨﻔﯿﺬ ،أو ﻋﻠﻰ ﺟﻠﺐ
ﻣﻌﻄﯿﺎت ﻣﻦ اﻟﺬاﻛﺮة أو أﺣﺪ أﺟﮫﺰة اﻷدﺧﺎل أو اﻷﺧﺮﺎﺟ .وﺧﻼﻓًﺎ ﻟﻠﻄﺮﻳﻘﺔ اﻟﺘﺴﻠﺴﻠﯿﺔ ﻓﻲ
اﻟﻤﻌﺎﻟﺠﺔ ﻓﺄن ھﺬه اﻟﻌﻤﻠﯿﺔ ﺗﺤﻘﻖ ﺣﺪﻮ ﺛ ﻋﻤﻠﯿﺘﻲ اﻟﺠﻠﺐ fetchingاﻟﺘﻨﻔﯿﺬ execution
ﻓﻲ وﻗﺖ واﺣﺪ اﻷﻣﺮ اﻟﺬي ﻳﺰﻳﺪ ﺑﺪورة ﻣﻦ ﺳﺮﻋﺔ اﻟﻤﻌﺎﻟﺞ .
ﻗﺪ ﺗﺘﺴﺎﺋﻞ ﻣﺎ ﻋﻼﻗﺔ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت واﻟﻌﺪ اﻟﺜﻨﺎﺋﻲ ﺑﺎﻷﺳﻤﺒﻠﻲ ؟ ﺣﺴﻨًﺎ ﻛﻤﺎ
وﺿﺤﺖ ﻣﻦ ﻗﺒﻞ ﻓﺄن اﻷﺳﻤﺒﻠﻲ ھﻲ ﻟﻐﺔ ﻗﺮﻳﺒﺔ ﺟﺪًا ﻣﻦ ﻟﻐﺔ اﻵﻟﻪ ﻮھﻲ ﻟﻐﻪ
ﻣﻨﺨﻔﻀﺔ اﻟﻤﺴﺘﻮى ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﺘﺎد واﻟﻤﻌﺎﻟﺢ ﺑﺼﻮرة ﻣﺒﺎﺷﺮة وﻟﻜﻲ ﻧﺤﻘﻖ
ﻓﮫﻤًﺎ أوﺳﻊ ﻟﮫﺬه اﻟﻠﻐﻪ ﻳﺠﺐ ﺄ ﻧ ﻧﻔﮫﻢ ﺑﻌﺾ اﻷﺷﯿﺎء اﻟﻤﮫﻤﺔ ﺟﺪًا ﻓﻲ ﺑﻨﯿﺔ
اﻟﻤﻌﺎﻟﺞ .
ﺗﺨﺰﻳﻦ اﻷرﻗﺎم ﺑﺪﻮ ﻧ أﺷﺎرة ﻳﺄﺧﺬ اﻟﻨﻄﺎق اﻵﺗﻲ ﻟﻜﻞ وﺣﺪه ﻣﻦ اﻟﻮﺣﺪﺎ ﺗ
اﻷﺳﺎﺳﯿﺔ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﻃﺮﻳﻘﺔ ﺑﺪﻮ ﻧ اﻷﺷﺎرة :unsigned
اﻟﻤﺠﺎل أﺳﻢ
اﻟ ﻰ ﻣﻦ اﻟﻮﺣﺪة
٢٥٦ ٠ اﻟﺒﺎﻳﺖ
٦٥٥٣٦ ٠ اﻟﻜﻠﻤﺔ
اﻟﻜﻠﻤﺔ
٤،٢٩٤،٩٦٧،٢٩٦ ٠
اﻟﻤﻀﺎﻋﻔﺔ
اﻟﻜﻠﻤﺔ
١٨،٤٤٦،٧٤٤،٠٧٣،٧٠٩،٥٥١،٦١٦ ٠
اﻟﺮﺑﺎﻋﯿﺔ
ﻳﺘﻢ ﻓﻲ اﻟﺤﺎﺳﻮب وﺑﻘﯿﺔ ﺗﻮﺣﯿﺪ أﺳﺘﺨﺪﺎ ﻣ اﻟﺮﻣﻮز أﺳﺘﺨﺪﺎ ﻣ ﺷﻔﺮة اﻵﺳﻜﻲ ﻛﻮد )ﺣﺎﻟﯿﺎً
ﻌﻳﻤﻞ ﻋﻠﻰ ﺗﺒﻨﻲ ﺷﻔﺮةﻻ unicodeﻮھﻲ ﺗﺴﻤﺢ ﺑﺘﻌﺪد اﻟﻠﻐﺎت ﻓﻲ ﻣﺴﺘﻨﺪ واﺣﺪ ﺣﯿﺚ
ﻳﺘﻢ ﺗﻤﺜﯿﻞ ﻛﻞ ﺣﺮف ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﻛﻠﻤﺔ واﺣﺪه=٢ﺑﺎﻳﺖ( ﻛﻠﻤﺔ ASCIIھﻲ أﺧﺘﺼﺎر ل :
Interchange Information Code For Standard American National
وﻳﺘﻢ أﺳﺘﺨﺪﺎ ﻣ ھﺬا اﻟﻜﻮد اﻟﻤﻮﺣﺪ ﻟﺘﺴﮫﯿﻞ ﺗﻨﺎﻗﻞ اﻟﺒﯿﺎﻧﺎت وﻳﻤﺜﻞ ﻛﻞ رﻣﺰ ﻓﯿﻪ ﺑﻌﺪد ﺛﻨﺎﺋﻲ
ﺑﻄﻮل ١ﺑﺎﻳﺖ=٨ﺑﺖ=٢٥٦أﺣﺘﻤﺎل .
إﺿﻐﻂ ھﻨﺎ ﻟﻤﺸﺎھﺪة اﻟﺠﺪﻮ ﻟ آﺳﻜﻲ
ﻟﻜﺘﺎﺑﺔ ﻋﺪد ﺛﻨﺎﺋﻲ ﻳﻮﺿﻊ ﻓﻲ آﺧﺮ اﻟﺮﻣﺰ ) (bﻟﺪﻻﻟﺔ ﻋﻠﻰ أﻧﻪ ﺑﺎﻳﻨﺮي ﻣﺜﺎل :
= B١١٠١٠٠١٠Binaryأﻣﺎ اﻟﻌﺪد اﻟﻌﺸﺮي ﻓﻼﻳﺤﺘﺎج اﻟﻰ أﺿﺎﻓﺔ وأﻣﺎ اﻟﻌﺪد
ﻷﺳﺎس ٨ﻓﯿﻜﺘﺐ ﻣﻊ اﻟﻤﺮﻣﺰ ) (Qﻓﻲ ﻧﮫﺎﻳﺘﻪ = Q١٢٧٦Octalأو اﻟﺮﻣﺰ ) (Oﻓﻲ
ﻧﮫﺎﻳﺘﻪ = O١٢٧٦Octalأﻣﺎ اﻟﻌﺪد اﻟﺴﺪاﺳﻲ ﻋﺸﺮ ﻓﯿﻜﺘﺐ ﺑﻮﺿﻊ Hﻓﻲ ﻧﮫﺎﻳﺘﻪ
= CDH٩AB٠hexadecimalﻣﻊ ﻣﺮاﻋﺎة وﺿﻊ ٠اذا ﻛﺎن اﻟﻌﺪد ﻳﺒﺪأ ﺑﺤﺮف ﻛﻤﺎ
اﻟﻤﺜﺎل .
ﻳﺠﺐ ﺄ ﻧ ﺗﻌﺮف اﻟﻔﺮق ﺑﯿﻦ ﺗﺨﺰﻳﻦ اﻟﺮﻗﻢ ﻛﺮﻗﻢ أو ﺗﺨﺰﻳﻨﻪ ﻛﻨﺺ ﻓﺘﺨﺰﻳﻦ اﻟﺮﻗﻢ
ﻼ ﻛﺮﻗﻢ ﺳﺴﯿﺄﺧﺬ ﺑﺎﻳﺖ واﺣﺪ ﻮھﻮ ﺟﺎھﺰ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺎت رﻳﺎﺿﯿﺔ ٢٠١ﻣﺜ ً
وﻣﻨﻄﻘﯿﻪ ﻋﻠﯿﻪ أﻣﺎ ﺗﺨﺰﻳﻨﻪ ﻛﻨﺺ ﻓﺴﯿﺄﺧﺬ ﺛﻼﺛﺔ ﺑﺎﻳﺖ ﻓﻲ اﻟﺒﺎﻳﺖ اﻷﻮ ﻟ ﺳﯿﺨﺰن
اﻟﺮﻗﻢ اﻟﺨﺎص ﺑﺎﻷﺳﻜﻲ ﻛﻮد ﻟﻠﺮﻣﺰ ' '٢وﻛﻤﺎ ﻗﻠﺖ ﻳﺨﺰن ﻛﺮﻗﻢ ﻳﺪل ﻋﻠﻰ اﻟﺮﻣﺰ أﻣﺎ
اﻟﺒﺎﻳﺖ اﻟﺜﺎﻧﻲ ﻓﺴﯿﺨﺰن رﻗﻢ اﻵﺳﻜﻲ ﻛﻮد ﻟﻠﺮﻣﺰ ' '٠أﻣﺎ اﻟﺒﺎﻳﺖ اﻟﺜﺎﻟﺚ ﻓﯿﺄﺧﺬ
اﻟﻘﯿﻤﻪ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺮﻣﺰ ' '١ﻓﻲ اﻵﺳﻜﻲ ﻛﻮد ﺄ ﻳ ﺄ ﻧ اﻟﺮﻗﻢ ﺧﺰن ﺑﻄﺮﻳﻘﺔ ""١٠٢
وﻟﯿﺲ ١٠٢ﻮھﺬه اﻟﻄﺮﻳﻘﺔ ﻟﯿﺴﺖ ﺟﺎھﺰ ﻟﻠﺠﻤﻊ أو اﻟﻄﺮح وﻟﻜﻨﮫﺎ ﻣﻤﺘﺎز ﻟﻠﻄﺒﺎﻋﻪ
ﻋﻠﻰ اﻟﺸﺎﺷﻪ وﻳﻤﻜﻦ ﺗﺤﻮﻳﻞ اﻟﻨﺺ اﻟﻰ رﻗﻢ واﻟﻌﻜﺲ .
اﻟﻤﺠﺎل أﺳﻢ
اﻟ ﻰ ﻣﻦ اﻟﻮﺣﺪة
١٢٧+ ١٢٨- اﻟﺒﺎﻳﺖ
٣٢،٧٦٧+ ٣٢،٧٦٨- اﻟﻜﻠﻤﺔ
اﻟﻜﻠﻤﺔ
٢،١٤٧،٤٨٣،٦٤٧+ ٢،١٤٧،٤٨٣،٦٤٨-
اﻟﻤﻀﺎﻋﻔﺔ
اﻟﻜﻠﻤﺔ
٩،٢٢٣،٣٧٢،٠٣٦،٨٥٤،٧٧٥،٨٠٧+ ٩،٢٢٣،٣٧٢،٠٣٦،٨٥٤،٧٧٥،٨٠٨-
اﻟﺮﺑﺎﻋﯿﺔ
اﻟﻤﺴﺠﻼت : REGISTERS
اﻟﻜﻤﺒﯿﺰﺗﺮ ﻳﺤﺘﺎج ﻓﻲ ﺗﻌﺎﻣﻼﺗﻪ اﻟﻰ ذاﻛﺮة ﺳﺮﻳﻌﺔ ﺟﺪًا وﻣﺘﺼﻠﺔ ﺑﺎﻟﻤﻌﺎﻟﺞ ﻣﺒﺎﺷﺮة ﺣﺘﻰ
ﻳﻤﻜﻦ ﻟﻪ ﺄ ﻧ ﻳﺨﺰن ﻓﯿﮫﺎ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻟﻌﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ ﻣﻌﯿﻨﺔ أو ﻋﺪاد ﻟﺤﻠﻘﺔ ﻣﻌﯿﻨﺔ
،ھﺬه اﻟﺬاﻛﺮة ﺗﻌﺮف ﺑﺎﻟﻤﺴﺠﻼت REGISTERSﻮھﻲ ذاﻛﺮة ﺳﺮﻳﻌﺔ ﺟﺪًا ﺗﻔﯿﺪ اﻟﻤﻌﺎﻟﺞ ﻓﻲ
أﺟﺮاء اﻟﻌﻤﻠﯿﺎت ﺑﺴﺮﻋﻪ وﻛﻔﺎءة أﻛﺒﺮ
ﻼ ﻣﻦ ﻣﺮﺟﻊ ھﻨﺎك ﺧﻤﺴﺔ أﻧﻮﺎﻋ أو ﺗﺼﻨﯿﻔﺎت ﻟﻠﻤﺴﺠﻼت ) ﺗﺨﺘﻠﻒ ھﺬه اﻟﺘﺼﻨﯿﻔﺎت ﻗﻠﯿ ً
ﻵﺧﺮ ( ﻮھﻲ ﻣﺴﺠﻼت اﻷﻏﺮﺎ ﺿ اﻟﻌﺎﻣﺔ ) General-Purpose Registersﺗﻌﺮف ﻓﻲ ﺑﻌﺾ
اﻟﻤﺮاﺟﻊ ﺑﻤﺴﺠﻼت اﻟﻤﻌﻄﯿﺎت ( Registers Dataو ھﻨﺎك ﻣﺴﺠﻼت اﻷﻗﺴﺎم Segment
Registersواﻟﻤﺴﺠﻼت اﻟﺪﻟﯿﻠﯿﺔ Registers Indexوﻣﺴﺠﻼت اﻟﺘﺄﺷﯿﺮ Pointer
Registersﺑﺎﻷﺿﺎﻓﺔ اﻟﻰ ﻣﺴﺠﻼت اﻟﺤﺎﻟﺔ واﻟﺘﺤﻜﻢ .Status and Control Registers
اﻟﻤﺨﻄﻂ : ١_٤رﺳﻢ ﺨﺗﻄﯿﻄﻲ ﻳﻮﺿﺢ اﻟﻤﺴﺠﻼت ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ١٦ﺑﺖ
ﻻ٣٢ﺑﺖ اﻟﻤﺨﻄﻂ : ٢_٤رﺳﻢ ﺗﺨﻄﯿﻄﻲ ﻳﻮﺿﺢ اﻟﻤﺴﺠﻼت ﺑﻌﺪ ﺗﻮﺳﻌﺘﮫﺎ ﻓﻲ ﻣﻌﺎﻟﺠﺎت
ﻮھﻨﺎك ﻧﻮﻋﯿﻦ ﻣﻦ اﻷﻋﻼم ھﻲ أﻋﻼم اﻟﺤﺎﻟﺔ Status Flagsوأﻋﻼم اﻟﺘﺤﻜﻢ Control Flags
.
mov ah,٢٠٠
add ah,١٠٠
ﺑﻤﺎ ﺄ ﻧ اﻟﻤﺴﺠﻞ AHھﻮ ٨ﺑﺖ ﻓﺄن أﻗﺼﻰ ﻗﯿﻤﺔ ﻳﺘﺤﻤﻠﮫﺎ ھﻲ ٢٥٦وﺑﻤﺎ ﺄ ﻧ اﻟﻘﯿﻤﺔ ﻓﻲ
اﻟﻤﺴﺠﻞ ھﻲ ٢٠٠ﺛﻢ أﺿﻔﻨﺎ ﻟﮫﺎ ١٠٠ﻓﺄن اﻟﺠﻮﺎ ﺑ أﻛﺒﺮ ﻣﻦ اﻟﮫﺪف ) aHھﻨﺎ( ﻟﺬﻟﻚ اﻟﻌﻠﻢ
CFﺳﻮف ﻳﻀﺒﻂ= ١ﺑﻌﺪ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ
ﻟﻀﺒﻂ ﻟﻌﻠﻢ ﺑﺮﻣﺠﯿًﺎ stcوﻟﺘﺼﻔﯿﺮه clc
mov ah,-١٠٠
add ah,-٥٠
ﺑﻤﺎ ﺄ ﻧ أﺻﻐﺮ ﻗﯿﻤﺔ ﻳﺘﺤﻤﻠﮫﺎ اﻟﻤﺴﺠﻞ AHھﻲ ١٢٨-ﻟﻜﻦ ﻧﺎﺗﺞ اﻟﻌﻤﻠﯿﺔ ١٥٠-ﻓﺄن ﻋﻠﻢ
اﻟﻔﯿﺾ ﻳﻀﺒﻂ=١
اﻵن ﺑﻌﺪﻣﺎ ﻋﺮﻓﺖ ﻛﯿﻒ ﺗﻜﺘﺐ ﻛﻮد ﺑﺴﯿﻂ أﺧﺮج ﻣﻦ اﻟﺪﻳﺒﻐﺮ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ Qﺛﻢ أدﺧﻞ ﻣﺮة
أﺧﺮى ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ Debugﺣﺘﻰ ﺗﺼﻔﺮ اﻟﻤﺴﺠﻼت ﻣﺮة أﺧﺮى أدﺧﻞ اﻟﺘﻌﻠﯿﻤﯿﻪ ١٠٠Aﺛﻢ
ﺟﺮب ﺗﻜﺘﺐ ﻛﻮد ﻣﻦ ﻋﻨﺪك وﻣﻊ ﻛﻞ ﻧﮫﺎﻳﺔ ﺗﻌﻠﯿﻤﯿﻪ أﺿﻐﻂ أﻧﺘﺮ وﻓﻲ ﻧﮫﺎﻳﺔ اﻟﺘﻌﻠﯿﻤﯿﻪ اﻷﺧﯿﺮة
أﺿﻐﻂ أﻧﺘﺮ ﻣﺮﺗﯿﻦ
) ﻣﻼﺣﻈﺔ ﻟﺘﺮى ﺷﻔﺮﺗﻚ ﺑﻠﻐﺔ اﻵﻟﻪ واﻷﺳﻤﺒﻠﻲ أدﺧﻞ اﻟﺮﻣﺰ Uﺛﻢ أﻧﺘﺮ ﻣﺒﺎﺷﺮة ﺑﻌﺪ إدﺧﺎل
اﻟﻜﻮد وﻗﺒﻞ إدﺧﺎل اﻟﺮﻣﺰ ( R
أﺿﻐﻂ Rﺛﻢ أﻧﺘﺮ ﻟﺘﺮى اﻟﻤﺴﺠﻼت ﻗﺒﻞ ﺗﻨﻔﯿﺬ ﺄ ﻳ ﻋﻤﻠﯿﺔ وﻟﺘﺮى اﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﻋﻠﯿﮫﺎ
اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ أﺿﻐﻂ Tﺛﻢ أﻧﺘﺮ ﻟﺘﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﯿﻪ وﺗﺮى اﻟﻨﺘﺎﺋﺞ واﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﺑﻌﺪھﺎ
ﻮھﻜﺬا وﻻﺗﻨﺴﻰ أذا أرﺪ ﺗ ﺄ ﻧ ﺗﺪﺧﻞ ﻛﻮد ﺟﺪﻳﺪ اﻟﺨﺮﻮﺟ واﻟﻌﻮدة ﻣﺮة أﺧﺮى اﻟﻰ اﻟﺪﻳﺒﻐﺮ
ﻟﺘﺼﻔﺮ اﻟﻤﺴﺠﻼت واﻟﺬاﻛﺮه
اﻟﻀﺮبMultiplication :-
ﻳﺘﻢ ﺿﺮب ﺄى رﻗﻤﯿﻦ ﻓﻰ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻰ ﻓﻰ ﺛﻼث أﻧﻈﻢ أﻟﻰ اﻵن :-
•اﻷﻮ ﻟ :ﻻ-٨ﺑﺖ )اﻟﺒﺎﻳﺖ) :-
ﻳﺘﻢ وﺿﻊ إﺣﺪى ﻗﯿﻢ اﻟﻀﺮب ﻓﻰ ALو اﻵﺧﺮ ﻓﻰ ﺄى رﻳﺠﺴﺘﺮ آﺧﺮ ﻟﻪ ﻧﻔﺲ اﻟﺤﺠﻢ أو ﻣﻜﺎن
ﻓﻰ اﻟﺬاﻛﺮه ﺑﺠﺎﻧﺐ ﻛﻮد اﻟﻀﺮب اﻟﺬى ھﻮ ﻓﻰ ﺣﺎﻟﺘﻨﺎ ھﻨﺎ ] [MULﻟﻸرﻗﺎم اﻟﻐﯿﺮ ﻣﺤﺪدة اﻹﺷﺎﺮھ
.و ] [IMULﻟﻸرﻗﺎم اﻟﻤﺤﺪدة اﻹﺷﺎﺮھ .ﺗوﻮﺿﻊ اﻟﻨﺘﯿﺠﻪ ﻓﻰﻻ AX .
ﻣﺜﺎل :ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﺣﺎﺻﻞ ﺿﺮب ٣٠ * ١٢٠ﻧﻘﻮم ﺑﺎﻷﺗﻰ :-
;----------------------------------
MOV CL,٣٠D
MOV AL,١٢٠D
MUL CL
MOV [١٠٠٠H] , AX ب ١٠٠٠ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎﺪ ﺳ ﻟﺘﺨﺰﻳﻦ اﻟﻨﺎﺗﺞ ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮﻧﻪ ;
ﻋﺸﺮ
;----------------------------------
ﻳﻨﻘﺴﻢ اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر اﻟﺒﺮﻧﺎﻣﺞ إﻟﻰ ﻋﺪة ﻃﺮق و ﺗﻘﻨﯿﺎت و ﺗﻜﻮن ﻣﺜﻞ ﻣﺜﯿﻼﺗﮫﺎ ﻓﻰ اﻟﻠﻐﺎت
ﻼ .وﺳﻨﺘﻌﻠﻢ ﺳﻮﻳًﺎ ﺑﻌﺾ ﻣﻦ ھﺬه اﻟﺘﻘﻨﯿﺎت :- اﻟﻌﻠﯿﻪ و ﻟﻜﻦ أﻛﺜﺮ ﺗﻔﺼﯿ ً
•أوﻻ :ﺟﻤﻞ اﻟﺸﺮط IF Statements :-
إﻧﻨﻰ أﻋﺘﺒﺮ ﺟﻤﻞ اﻟﺸﺮط ﻣﻦ ﻗﻮاﻋﺪ اﻟﺒﺮﻣﺠﻪ ﻋﻤﻮﻣﺎ و ﻣﻦ ﺄھﻢ ﻗﻮاﻋﺪ اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر
اﻟﺒﺮاﻣﺞ ﺧﺼﻮﺻًﺎ.
ﺗﻘﻮم ﺟﻤﻞ اﻟﺸﺮط ﻋﻤﻮﻣﺎ ﻋﻠﻰ و ﺟﻮد ﺷﺮط أو إﺧﺘﺒﺎر ﻟﻮ ﺗﺤﻘﻖ إذًا ﺳﯿﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﻤﻞ
ﺑﻌﺾ اﻟﻤﮫﺎم ﻟﻦ ﻳﻜﻮن ﻓﺎﻋﻠﮫﺎ ﻟﻮﻟﻢ ﻳﺘﺤﻘﻖ اﻟﺸﺮط أو ﻓﺸﻞ اﻹﺧﺘﺒﺎر ,ﻛﻤﺎ ﺗﺤﺐ ﺄ ﻧ ﺗﻄﻠﻖ
ﻋﻠﯿﻪ.
إذًا ,ﻳﺠﺐ ﻋﻠﯿﻨﺎ ﻣﻌﺮﻓﺔ ﻛﯿﻔﯿﺔ إﺧﺘﺒﺎر ﻗﯿﻤﻪ )واﻟﺘﻰ ﻳﺘﺮﺗﺐ ﻋﻠﯿﮫﺎ اﻟﺸﺮط ﻓﯿﻤﺎ ﺑﻌﺪ) .
اﻹﺧﺘﺒﺎر :-
ﻳﻜﻮن ﺑﺈﺳﺘﺨﺪﺎ ﻣ داﻟﺘﯿﻦ أو ﻛﻮدﻳﻦ و ھﻤﺎ ] [CMPو[TEST] .
١-[CMP] :-ﻳﺠﺐ ﺄ ﻧ ﺗﺬﻛﺮ اﻟﻘﯿﻤﺘﯿﻦ اﻟﻠﺘﺎن ﺳﻮف ﻳﺘﻢ ﻟﮫﻤﺎ إﺧﺘﺒﺎر ﺑﻌﺪھﺎ .و ﻋﻨﺪﻣﺎ ﺗﺘﻢ ھﺬه
اﻟﺠﻤﻠﻪ ﻳﺘﻢ ﻋﻤﻞ ﻋﻤﻠﯿﺔ ﻃﺮح ﻓﻰ اﻷﺻﻞ و ﻟﻜﻦ ﻣﻊ ﻋﺪم ﺗﻐﯿﯿﺮ ﻓﻰ أﻮ ﻟ ﻣﻜﺎن )اﻟﺮﺟﺴﺘﺮ أو
اﻟﺬاﻛﺮه)(Distination).ﻟﺬﻟﻚ اﻟﺘﻐﯿﯿﺮ ﻳﻈﮫﺮ ﻓﻰ رﻳﺠﺴﺘﺮ اﻷﻋﻼم ) (FLAG REGISTERﻓﻘﻂ و
ﻳﻜﻮن اﻟﻘﻔﺰ )(JUMPﺑﻌﺪ ھﺬا اﻹﺧﺘﺒﺎر ﺷﻰء ﻃﺒﯿﻌﻰ ﻋﻠﻰ أﺳﺎس إﺧﺘﺒﺎر ﺑﺘﺎت ھﺬا اﻟﺮﺟﺴﺘﺮ
اﻟﺨﺎص.أو ﺄى ﻋﺒﺎﺮھ ﺗﺄﺗﻰ ﻣﻊ اﻟﻘﻔﺰ ﻛﻤﺎ ﺗﻢ ذﻛﺮھﻢ ﻓﻰ اﻟﺪﺮ ﺳ اﻟﺴﺎﺑﻖ.
ﻼ .ﻟﻮ ﺗﺤﻘﻖ اﻟﺸﺮط ﺳﯿﻘﻔﺰ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺜﺎل :-ﺳﻨﻘﻮم إﺧﺘﺒﺎر ﺗﺴﺎﻮى ﻟﻘﯿﻤﺘﯿﻦ و ﻟﯿﻜﻦ ٥و ٤ﻣﺜ ً
إﻟﻰ اﻟﻨﮫﺎﻳﻪ و ﻟﻦ ﻳﻜﻤﻞ
;----------------------------------
MOV AX,٥
MOV BX,٤
CMP AX,BX ;=AX-BX
JE END
...................
................... ﺳﻮف ﺗﻨﻔﺬ ﻓﻰ ﺣﺎﻟﺔ ﻋﺪم اﻟﺘﺴﺎﻮى -ﻃﺒﻌًﺎ ﺑﻌﺾ اﻟﺠﻤﻞ اﻟﺒﺮﻣﺠﯿﻪ اﻟﺘﻰ;
.ھﺘﺘﻨﻔﺬ
...................
HLT ﺗﻘﻮم ھﻨﺎ ﺑﻮﻗﻒ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺜﻼ أو اﻟﻘﻔﺰ إﻟﻰ ﻣﻜﺎن آﺧﺮ ﻷﻧﻪ ﻣﻦ ﻏﯿﺮ ذﻟﻚ ﺳﻮف ;
ﻳﻨﻔﯿﺬ اﻷواﻣﺮ اﻟﺘﺎﻟﯿﻪ أﻳﻀًﺎ ﻳﺘﻢ
END:
.اﻟﻜﻤﺒﯿﻮﺗﺮ إﺗﺠﻨﻦ .إزﺎى ٥ﺗﺴﺎﻮى ;٤
...................
................... ﺗﻨﻔﺬ ﻓﻰ ﺣﺎﻟﺔ اﻟﺘﺴﺎﻮى -ﻃﺒﻌًﺎ ﻣﺶ ﺑﻌﺾ اﻟﺠﻤﻞ اﻟﺒﺮﻣﺠﯿﻪ اﻟﺘﻰ ﺳﻮف;
.ھﺘﺘﻨﻔﺬ
...................
;----------------------------------
ﻼ أو اﻟﻘﯿﻤﻪ اﻷوﻟﻰ أﺻﻐﺮ ﻣﻦ ﺟﻤﻞ ﺗﻘﻮم ﺑﺎﻟﻘﻔﺰ إذا ﻛﺎن ﻋﺪم اﻟﺘﺴﺎﻮى أﻛﺒﺮ ﻣﻦ ﻣﺜ ً ﻃﺒﻌﺎ ﻳﻮﺟﺪ ُ
اﻷﺧﺮى ﻮھﻜﺬا .ﻳﻮﺟﺪ اﻟﻜﺜﯿﺮ و اﻟﻜﺜﯿﺮ ﻛﻤﺎ ﺗﺤﺐ ﺄ ﻧ ﺗﻜﺘﺐ ﺑﺮاﻣﺠﻚ.
ﻻ ﻣﻦ ﻋﻤﻞ ﻋﻤﻠﯿﺔ ﻃﺮح ,ﺗﻘﻮم ﺑﻌﻤﻞ ٢-[TEST] :-ﺗﻘﻮم ﺑﺎﻟﻌﻤﻞ اﻟﺴﺎﺑﻖ ﻧﻔﺴﻪ و ﻟﻜﻦ ﺑﺪ ً
Logic ANDو ھﻰ-ﺑﯿﻨﻰ و ﺑﯿﻨﻜﻢ-ﺗﺴﺘﺨﺪم ﻓﻰ إﺧﺘﺒﺎر ﺑﺖ واﺣﺪه و ھﺬه اﻟﻌﻤﻠﯿﻪ ﺗﺴﻤﻰ
Masking .
ﻣﺜﺎل :-ﺗﻌﺎﻟﻮ ﻟﻨﺮى ﻣﺎذا ﺳﺘﻔﻌﻞ ھﺬه اﻟﺪاﻟﻪ:-
;----------------------------------
MOV AX,٥
NEG AX
ADD AX,٢
TEST AX,١٠٠٠٠٠٠٠B
JZ END
ﻛﻤﺎ ھﻮ ﻣﺘﻮﻗﻊ اﻟﻘﯿﻤﻪ ﺳﺎﻟﺒﻪ;
HLT
END:
.إﻃﻼﻗًﺎ اﻟﻘﯿﻤﻪ ﻣﻮﺟﺒﻪ .ﻛﻤﺎ ھﻮ ﻟﯿﺲ ﻣﺘﻮﻗﻊ;
;----------------------------------
اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻳﻮﺿﺢ إﺳﺘﺨﺪﺎ ﻣ اﻷﻣﺮ ] [TESTﻓﻰ إﺧﺘﺒﺎر آﺧﺮ ﺑﺖ ﻓﻰ اﻟﻘﯿﻤﻪ اﻟﻤﻮﺟﻮﺪھ ﻓﻰ
ﻻ AXﻮھﺬه اﻟﺒﺖ ﺗﻮﺿﺢ إﺷﺎرة اﻟﺮﻗﻢ ﻛﻤﺎ ﻻﺑﺪ ﺄ ﻧ ﻧﻌﺮف.ﻓﻘﻤﺖ ﺑﻌﻤﻞ
TEST(AND) WITH ١٠٠٠٠٠٠٠B , IF the most segnificant bit in AX is (١) then zero
flag will reset , else it will be set by the processor.
)(٣اﻟﺪورﺎ ﺗloops :-
-ﻣﻦ ﺄھﻢ ﻗﺪرﺎ ﺗ اﻟﺤﺎﺳﺐ اﻷﻟﻰ ھﻰ ﻋﻤﻞ ﻧﻔﺲ اﻟﺸﻰء ﻣﺮﺎ ﺗ ﻋﺪه و ﻻ ﺗﺨﺘﻠﻒ ﻣﻌﻪ ﻋﺪد
ﻼ .ﻓﻼ ﻳﻤﻜﻦ ﻟﺒﺮﻧﺎﻣﺞ ﻣﻔﯿﺪ أﻻ ﻳﺤﺘﻮى ﻋﻠﻰھﺬه اﻟﻤﺮﺎ ﺗ و ھﻰ ﻣﻦ ﺄھﻢ ﺟﻮاﻧﺐ اﻟﺒﺮﻣﺠﻪ أﺻ ً
دوﺮھ أو ﻋﺪة دورﺎ ﺗ ﻟﺬا ﻛﺎن ﻣﻦ اﻟﻤﮫﻢ ﺄ ﻧ ﻧﺪرﺟﮫﺎ ھﻨﺎ و ﺗﻜﻮن ﺑﻌﺪ اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر اﻟﺒﺮاﻣﺞ
ﻟﻤﺎ ﻟﮫﺎ ﻣﻦ إرﺗﺒﺎط وﺛﯿﻖ ﺑﻤﺎ ﺳﻮف ﻧﺘﺤﺪث ﻋﻠﯿﻪ.
ﻻ ﺛﻢ ﺗﺘﺒﻌﮫﺎ
-ھﻨﺎك ﺛﻼث أﻧﻮﺎﻋ ﻣﻦ اﻟﺪورﺎ ﺗ ﺗﺘﻢ ﺑﺜﻼث ﺗﻘﻨﯿﺎت ﻣﺨﺘﻠﻔﻪ .ﺳﯿﺘﻢ ذﻛﺮ اﻷﻧﻮﺎﻋ أو ً
ﻃﺮق ﻋﻤﻠﮫﺎ و ﺗﻘﻨﯿﺎﺗﮫﺎ:-
اﻷﻧﻮﺎﻋ:-
•اﻟﺪورﺎ ﺗ اﻟﻤﺴﺘﻤﺮه )إﻟﻰ ﻣﺎﻻﻧﮫﺎﻳﻪ) :-
ﻮھﻰ اﻟﺪورﺎ ﺗ اﻟﺘﻰ ﺗﻈﻞ ﻋﺎﻣﻠﻪ إﻟﻰ ﺄ ﻧ ﻳﺘﻢ ﻏﻠﻖ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺟﺎﻧﺐ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ أو ﻏﻠﻖ
اﻟﺠﮫﺎز ﻧﻔﺴﻪ .و ﻃﺒﻌًﺎ أﻧﺖ ﺗﺴﺄل ﻧﻔﺴﻚ ھﻞ ﻟﮫﺬا اﻟﻨﻮع ﻓﺎﺋﺪه ﻓﻰ اﻟﺒﺮﻣﺠﻪ .أرد ﻋﻠﯿﻚ ﺑﻨﻌﻢ
ﻛﻤﺎ ﺳﺘﺮى:-
Conditional LOOP:-
LOOPZ •
LOOPNZ •
LOOPE •
LOOPNE •
ﻮھﺬه اﻷﻧﻮﺎﻋ ﺗﺴﺘﺨﺪم ﺑﻌﺪ CMP/TEST Instructions ,وﻋﻠﻰ ﺣﺴﺐ اﻟﺸﺮط ﻳﺘﻢ اﻟﻘﻔﺰ ,
وﻳﻜﻮن إﺳﺘﺨﺪاﻣﮫﺎ ﻣﺜﻞLOOP .
اﻟﺴﻼﺳﻞ اﻟﻨﺼﯿﻪ ھﻰ ﻣﻦ ﺄھﻢ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻰ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻓﻰ ﻧﻈﻢ اﻟﺤﺎﺳﺐ ﻋﻤﻮﻣﺎً و ﻓﻰ
ﻟﻐﺎت اﻟﺒﺮﻣﺠﻪ ﺧﺼﻮﺻًﺎ .ﻣﻦ اﻟﻤﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻋﻠﻰ أﻧﮫﺎ ﺑﻌﺾ اﻷﺣﺮف اﻟﻤﺘﺘﺎﺑﻌﻪ و
اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻛﻤﺎ ﺳﺒﻖ ﺑﺎﻟﺪورﺎ ﺗ و اﻟﺘﻜﺮار إﻋﺘﻤﺎدًا ﻋﻠﻰ ﺄ ﻧ ﺄى ﺳﻠﺴﻠﻪ ﺣﺮﻓﯿﺔ ﺗﺘﻜﻮن ﻣﻦ
ﺴ ﮫﻞ ﻋ ﻠﯿﻨ ﺎ ﻰ ﺗ ﻰ ﺗﻤﺪﺎﻧ ﺑﺒﻌﺾ اﻟﺪوﻻ اﻟﺘ
ﻋﺪة أﺣﺮف ﻣﻌﻠﻮﻣﺔ اﻟﻄﻮل وﻣﺘﺘﺎﺑﻌﻪ .و ﻟ ﻜﻦ ا ﻷﺳﻤﺒ ﻠ
ھﺬا اﻟﺘﻌﺎﻣﻞ و ﺗﻘﻠﯿﻞ اﻟﺘﻌﻘﯿﺪ و ﻃﻮل اﻟﺒﺮاﻣﺞ ﻧﺴﺒﯿًﺎ.
ﻰ :- ھه اﻟﺪوﻻ ﻣ ﺎ ﻳﻠ
ﻦ ﺄھﻢ ﺬ ﻣ
][LODS],[STOS],[MOVS],[INS],[OUTS],[SCAS],[CMPS
[LODS]
, [ ﻟﻨﻘﻞ ﺑﺎﻳﺖLODSB] ﻼ ً ھﺬه اﻟﺪاﻟﻪ ﻳﻤﻜﻨﮫﺎ اﻟﺘﻌﺎﻣﻞ ﻣﻊ أﺣﺠﺎم ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻣﺨﺘﻠﻔﻪ ﻣﺜ
DOUBLE WORD . ﻟﻨﻘﻞ ﻛﻠﻤﺘﺎن, [LODSD] [ﻟﻨﻘﻞ ﻛﻠﻤﻪLODSW]
[ ﺛﻢ ﺗﻘﻮمDS:[SI ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن بAL ﺗﻨﻘﻞ إﻟﻰ- [LODSB] :-
: ﺑﻮاﺣﺪ ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰSI ﻻD) ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه/ﺑﺰﻳﺎدة
AL=DS:[SI] , SI = SI +- ١ .
[ ھﺬه اﻟﺪاﻟﻪ ﺗﻌﻤﻞREB] , ھﻨﺎك داﻟﻪ ﻟﻠﺘﻜﺮار ﻓﻰ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺴﻼﺳﻞ اﻟﻨﺼﯿﻪ ﺗﺴﻤﻰ
وﻟﮫﺎ أﻳﻀًﺎ ﺣﺎﻻت ﺧﺎﺻﻪ ﻛﺘﻜﺮارCX ﺑﺎﻟﻀﺒﻂ وﺗﻜﺮر ﻋﺪد ﻣﺮﺎ ﺗ ﻣﺎ ﻓﻰLOOP ﺗﻜﺮار ﻣﺜﻞ
:- [REP [ وﻳﻤﻜﻦ و ﺿﻊ أﺳﻢ اﻟﺪاﻟﻪ أﻣﺎﻣﮫﺎ ﻓﻘﻂ ﻣﺜﻞREBE]/[REBNE] . ﺑﺸﺮط ﻣﺜﻞ
[LODS] و ﻻﺣﻆ ﺄ ﻧ ھﺬ ا ا ﻟﻤ ﻮﺿ ﻮع ﻨﻳﻔﻊ ﻣﻊ ﻛﻞ اﻟﺪوﻻ اﻟﻤ ﺬ ﻛ ﻮﺮھ أﻋﻼ ه ﻣ ﺎﻋ ﺪ اSTOSW]
:-ﻣﺜﺎل
;---------------------------------
CLD
MOV AX,٠٠٠٠H
MOV DS,AX ﻧﺤﺪد اﻟﻤﻘﻄﻊ اﻟﺬى ﻧﺘﻌﺎﻣﻞ ﻣﻌﻪ اﻷﻮ ﻟ;
MOV CX,١٠٠٠H ﺗﺤﺪﻳﺪ ﻋﺪد ﻣﺮﺎ ﺗ اﻟﻨﻘﻞ اﻟﺘﻰ ﺳﻮف ﺗﺘﻢ;
MOV SI,٠ اﻟﺒﺪأ ﻣﻦ أﻮ ﻟ ﻣﻜﺎن داﺧﻞ اﻟﻤﻘﻄﻊ;
MOV AH,٢H اﻟﺘﺠﮫﯿﺰ ﻟﻠﻄﺒﻊ;
START:
LODSB
MOV DL,AL ﺗﺠﮫﯿﺰ اﻟﺤﺮف اﻟﺬى ﺳﻮف ﻳﺘﻢ ﻃﺒﻌﻪ;
INT ٢١H
REP START
END :
;---------------------------------
ﻓﻰ اﻟﻤﺜﺎل :ﺗﻢ ﻃﺒﻊ أﻮ ﻟ ١٠٠٠ﺣﺮف ﻓﻰ اﻟﺬاﻛﺮه و ﻃﺒﻌًﺎ اﻟﻤﻮﺿﻮع ﻣﺶ ﻋﺎﻳﺰ ﺗﻔﺴﯿﯿﺮ أﻛﺜﺮ
ﻣﻦ ﻛﺪه.
][STOS
ھﺬه اﻟﺪاﻟﻪ ﺗﺘﻌﺎﻣﻞ أﻳﻀًﺎ ﻣﻊ اﻷﻧﻮﺎﻋ اﻟﻤﺬﻛﻮﺮھ أﻋﻼه و ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﻪ .ﻣﺜﻞ:-
- [STOSB] :-ﻨﺗﻘﻞ ﻣﺤﺘﻮﻳﺎتﻻ ALإﻟﻰ اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب [ES:[DIﺛﻢ ﺗﻘﻮم
ﺑﺰﻳﺎدة/ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه ) Dﻻ SIﺑﻮاﺣﺪ ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ :
ES:[DI]=AL , DI = DI +- ١ .
ﻣﺜﺎل:-
;---------------------------------
CLD
MOV AX ,٠B٨٠٠H
MOV ES,AX ﻧﺤﺪد اﻟﻤﻘﻄﻊ اﻟﺬى ﻧﺘﻌﺎﻣﻞ ﻣﻌﻪ اﻷﻮ ﻟ;
MOV DI,٠ اﻟﺒﺪأ ﻣﻦ أﻮ ﻟ ﻣﻜﺎن داﺧﻞ اﻟﻤﻘﻄﻊ;
MOV CX,٢٠*٨٠ ﻣﺮﺎ ﺗ اﻟﻨﻘﻞ اﻟﺘﻰ ﺳﻮف ﺗﺘﻢ ﺗﺤﺪﻳﺪ ﻋﺪد;
MOV AX,٠٧٢٠H ﻧﺴﺨﮫﺎ إﻟﻰ اﻟﺬاﻛﺮه ﺗﺤﻤﯿﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻰ ﺳﺘﺘﻢ;
END:
;---------------------------------
ھﺬا اﻟﻤﺜﺎل ﻳﻘﻮم ﺑﻤﺴﺢ اﻟﺸﺎﺷﻪ )٢٠ﺳﻄﺮ * ٨٠ﻋﻤﻮد ( ﻋﻦ ﻃﺮﻳﻖ ﻧﻘﻞ اﻟﻘﯿﻤﻪ ٠٧٢٠إﻟﻰ
ﻛﻞ اﻷﻣﺎﻛﻦ ﻓﻰ اﻟﺬاﻛﺮه اﻟﺘﻰ ﺗﺒﺪأ ﻋﻨﺪ )] ([B٨٠٠H:٠٠٠٠Hﻮھﺬا اﻟﻤﻘﻄﻊ ھﻮ ﻣﻘﻄﻊ
اﻟﺸﺎﺷﻪ و ھﺬا ﻃﺒﻌﺎ ﻓﻰ ﻧﻈﺎم اﻟﺪﻮ ﺳ ﻓﻘﻂ .وﻣﻦ اﻟﺠﺪﻳﺮ ﺑﺎﻟﺬﻛﺮ ھﻨﺎ ﺄ ﻧ اﻟﻘﯿﻤﻪ ٠٧٢٠ھﻰ
ﻋﺒﺎﺮھ ﻋﻦ ﺟﺰأﻳﻦ ,اﻟﺠﺰء اﻷﻮ ﻟ ٠٧ھﻮ ﻛﻮد اﻟﻠﻮن اﻷﺑﯿﺾ ﻋﻠﻰ اﻟﺨﻠﻔﯿﻪ اﻟﺴﻮداء ﻓﻰ ﻧﻈﺎم
اﻟﺪﻮ ﺳ و اﻟﺠﺰء اﻵﺧﺮ H ٢٠ھﻮ اﻷﺳﻜﻰ ﻛﻮد ﻟﻠﻤﺴﺎﻓﻪ اﻟﻔﺎرﻏﻪ .
اﻟﺨﻼﺻﻪ :أﻧﻨﺎ ﻧﻄﺒﻊ ﻓﻰ ذاﻛﺮه اﻟﺸﺎﺷﻪ اﻟﻤﺴﺎﻓﻪ اﻟﻔﺎرﻏﻪ ﻓﻰ ﻛﻞ أﻣﺎﻛﻦ اﻟﺸﺎﺷﻪ و ذﻟﻚ
ﻟﻤﺴﺢ اﻟﺸﺎﺷﻪ ﺑﺎﻟﻜﺎﻣﻞ و ھﺬا اﻟﻤﺜﺎل ﻣﻜﺎﻓﻰء ﻷﻣﺮ اﻟﺪﻮ ﺳCLS .
][MOVS
ھﺬه اﻟﺪاﻟﻪ اﻟﻮﺣﯿﺪه ﻓﻰ ﺟﻤﯿﻊ اﻟﻤﻌﺎﻟﺠﺎت ﻣﻦ ٨٠٨٨إﻟﻰ ﺑﻨﺘﯿﻮم ٣اﻟﺘﻰ ﺗﺴﻤﺢ ﺑﻌﻤﻠﯿﺎت
اﻟﻨﻘﻞ ﻣﻦ ﻣﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه إﻟﻰ ﻣﻜﺎن آﺧﺮ ﻓﻰ اﻟﺬاﻛﺮه.
ﺧﺬ ﺣﺬﺮ ﻛ ﻣﻦ اﻵﺗﻰ: -
ﻻ ﻧﺴﺘﻄﯿﻊ ﻋﻤﻞ ﺄى ﻋﻤﻠﯿﺎت ﻧﻘﻞ أو ﻏﯿﺮه ﺑﺤﯿﺚ ﺗﺴﺘﻠﺰم ﻣﻦ اﻟﻤﻌﺎﻟﺞ اﻟﻨﻈﺮ أﻟﻰ اﻟﺬاﻛﺮﻪ
ﻣﺮﺗﯿﻦ .ﻳﻌﻨﻰ ...
ھﺬه اﻟﺪاﻟﻪ ﺗﻌﻤﻞ ﻣﺜﻞ ﺳﺎﺑﻘﺘﮫﺎ ﻣﻦ ﺣﯿﺚ ﻣﺴﺎﺣﺎت اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﻳﻠﻰ :-
ﻣﺜﺎل :-
;---------------------------------
CLD
MOV AX,٠١٠٠٠H
MOV DS,AX ;Source Segment
MOV AX,٠٢٠٠٠H
MOV ES,AX ;Distination Segment
MOV DI,٠
MOV SI,٠
MOV CX,٦٤ * ١٠٢٤D
REP MOVSW
END :
;---------------------------------
ﻛﻤﺎ ﺗﻮﻗﻌﺘﻢ ,اﻟﻤﺜﺎل ﻳﻘﻮم ﺑﻨﺴﺦ اﻟﻤﻘﻄﻊ ١٠٠٠ﺑﺎﻟﻜﺎﻣﻞ إﻟﻰ اﻟﻤﻘﻄﻊ ٢٠٠٠ﻋﻦ ﻃﺮﻳﻖ ﺗﻜﺮار
ﻧﻘﻞ اﻟﻜﻠﻤﺎت ﻋﺪد KWORDS ٦٤و ھﻮ ﻣﺴﺎﺣﺔ اﻟﻤﻘﻄﻊ اﻟﻮاﺣﺪ ﻛﻤﺎ ﺗﻌﻠﻤﻮن.
][INS
ﺴ ﺎﺑﻘﻪ و ﺗﻜ ﻮن
أﻟﻢ ﺗﺘﺴﺎءل أﻧﻪ ﻣﻦ اﻟﻤﺴﺘﺤﺴﻦ ﺄ ﻧ ﺗﻜﻮن ھﻨﺎك داﻟﻪ ﺗ ﺘﻌ ﺎ ﻣﻞ ﻣ ﺜﻞ ا ﻟﺪو ﻻ اﻟ
ﻣﮫﻤﺘﮫﺎ إدﺧﺎل ﺄى ﺑﯿﺎﻧﺎت ﻣﻦ وﺣﺪﺎ ﺗ اﻹدﺧﺎل اﻟﻤﻌﺮوﻓﻪ )اﻟﺸﺎﺷﻪ /اﻟﮫﺎرد دﻳﺴﻚ ﻣﺜﻼ ( !!.؟
ھﺬه اﻟﺪاﻟﻪ ﺗﻘﻮم ﺑﮫﺬا اﻟﻌﻤﻞ ﺑﺘﻨﻈﯿﻢ أﻛﺒﺮ و ﻣﺮوﻧﻪ أﻛﺜﺮ و ﺗﺘﯿﺢ ﻟﻚ أﻳﻀًﺎ اﻟﺘﻜﺮار ﻋﻦ ﻃﺮﻳﻖ
إﺳﺘﺨﺪﺎ ﻣREP Instruction .
ﻳﺘﻢ وﺿﻊ ﻋﻨﻮﺎ ﻧ وﺳﯿﻠﺔ اﻹدﺧﺎل اﻟﺘﻰ ﺳﻮف ﺗﺴﺘﺨﺪﻣﮫﺎ ﻓﻰ DX •
ﺗﺠﮫﯿﺰ ﻋﻨﻮﺎ ﻧ اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﺬى ﺳﻮف ﻳﺴﺘﻘﺒﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻰ [ES:[DI •
ﺗﺠﮫﯿﺰ ﻋﻠﻢ اﻹﺗﺠﺎه ﻋﻠﻰ ﺣﺴﺐ ﻣﺘﻄﻠﺒﺎت اﻟﺒﺮﻧﺎﻣﺞ . •
ﻻ ﻗﺒﻞ ﻃﻠﺐ ھﺬه اﻟﺒﯿﺎﻧﺎت .
إﺧﺘﺒﺎر ھﻞ ﺗﻮﺟﺪ ﺑﯿﺎﻧﺎت ﺣﺎﺿﺮه ﻓﻰ وﺳﯿﻠﺔ اﻹدﺧﺎل أو ً •
ﻣﻜﺎﻓﺌﻪ ﻟﻸﺗﻰ : ES:[DI] = [DX] ; DI = DI +- ١ •
اﻟﺪاﻟﻪ ﺗﻤﻜﻨﻚ ﻣﻦ ﻧﻘﻞ ﺑﺎﻳﺖ ﻋﻦ ﻃﺮﻳﻖ [INSB] ,وإدﺧﺎل ﻛﻠﻤﻪ ﺑﺈﺳﺘﺨﺪﺎ ﻣ [INSW] ,
وإدﺧﺎل ﻛﻠﻤﺘﯿﻦ ﺑﺈﺳﺘﺨﺪﺎ ﻣ[INSD] .
ﻣﺜﺎل :-
;---------------------------------
MOV DI,٠
CLD
MOV AX,١٠٠٠H
MOV ES,AX
MOV DX,٣ACH وﺳﯿﻠﺔ اﻹدﺧﺎل اﻟﻤﺴﺘﺨﺪﻣﻪ ﻋﻨﻮﺎ ﻧ;
MOV CX,١٠٠
REP INSB
END :
;---------------------------------
ﻃﺒﻌًﺎ ﺳﮫﻞ!!!.
][OUTS
ﻧﻘﺲ ﻃﺮﻳﻘﺔ اﻹدﺧﺎل و ﻟﻜﻦ ﻟﻺﺧﺮﺎﺟ و ھﻨﺎ ﻧﺴﺘﺨﺪم ﻟﻌﻨﻮﺎ ﻧ اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه ﻣﻮﺟﻮد ﻓﻰ
[DS:[SIﻛﻤﺎ ﺗﻮﻗﻌﺘﻢ.
ﻣﺜﺎل :-
;---------------------------------
MOV SI,٠
CLD
MOV AX,١٠٠٠H
MOV DS,AX
MOV DX,٣ACH وﺳﯿﻠﺔ اﻹدﺧﺎل اﻟﻤﺴﺘﺨﺪﻣﻪ وﻟﯿﻜﻦ ﻋﻨﻮﺎ ﻧ اﻟﮫﺎرد دﻳﺴﻚ ﻋﻨﻮﺎ ﻧ ;
MOV CX,٥١٢
REP OUTB
END :
;---------------------------------
اﻟﻤﺜﺎل ﻳﻤﺜﻞ ﻧﻘﻞ ﺑﻠﻮك ﺑﯿﺎﻧﺎت ﻣﻦ اﻟﺬاﻛﺮه [DS:[SIإﻟﻰ اﻟﮫﺎرد دﻳﺴﻚ.
][SCAS
ھﺬه اﻟﺪاﻟﻪ ﺗﻘﻮم ﺑﻤﻘﺎرﻧﺔ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﺬى ﻋﻨﻮاﻧﻪ ﻣﻮﺟﻮد ﻓﻰ [ES:[DIو
ﻣﺘﻮﻳﺎتﻻ ALﻋﻨﺪ إﺳﺘﺨﺪﺎ ﻣ [SCASB] ,ﻳوﻘﺎرﻧﮫﺎ ﺑﻤﺤﺘﻮﻳﺎتﻻ AXﻋﻨﺪ إﺳﺘﺨﺪﺎ ﻣ ﺤ
[SCASW] ,ﻳوﻘﺎرﻧﮫﺎ ﺑﻤﺤﺘﻮﻳﺎتﻻ EAXﻋﻨﺪ إﺳﺘﺨﺪﺎ ﻣ [SCASD] .وﻃﺒﻌًﺎ ھﻨﺎك ذﻳﺎﺪھ أو
ﻧﻘﺼﺎن ﻓﻰ DIﻛﻤﺎﺗﻌﺮﻓﻨﺎ ﺳﺎﺑﻘًﺎ.
ﻣﺜﺎل :-
;---------------------------------
CLD
MOV DI,٠
MOV CX,٢٠٠٠
XOR AX,AX
MOV ES,AX
REBNE SCASW
END :
ﻋﻠﻰ اﻟﻤﻜﺎن اﻟﻔﺎﺮﻏ أو اﻟﻘﺼﻮد اﻟﺒﺤﺚ ﻋﻨﻪ أو ﺳﯿﺤﺘﻮى ﻓﻰ ﺣﺎﻟﺘﻨﺎ ﻋﻠﻰ ٢٠٠٠ﺳﯿﺤﺘﻮى;
DIاﻟﺒﺤﺚ ﺑﻌﺪ إﻧﺘﮫﺎء
;---------------------------------
ﻓﻰ اﻟﻤﺜﺎل ﻧﺒﺤﺚ ﻓﻰ أﻮ ﻟ ٢٠٠٠ﻣﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه ﻋﻦ أﻮ ﻟ ﻣﻜﺎن ﻓﺎﺮﻏ أو ﻳﺤﺘﻮى ﻋﻠﻰ
H ٠٠٠٠
][CMPS
ﻼ ﻋﻈﯿﻤﻪ ﻷﻧﮫﺎ ﺗﻘﺎﺮ ﻧ ﻣﻜﺎﻧﺎن ﻓﻰ اﻟﺬاﻛﺮه ﻓﻰ أﻣﺮ واﺣﺪ و ﺗﺘﻮﻗﻒ ﻣﺴﺎﺣﺔ ھﺬا
ھﺬه اﻟﺪاﻟﻪ ﻓﻌ ً
اﻟﻤﻜﺎن ﻋﻠﻰ إﺳﺘﺨﺪﺎ ﻣ اﻷﻣﺮ[CMPSB] , [CMPSW] , [CMPSD] .
ﻣﺜﺎل
;---------------------------------
CLD
MOV DI,٠
MOV SI,٠
MOV CX,٢٠٠٠
XOR AX,AX
MOV ES,AX
MOV AX,١٠٠٠H
MOV DS,AX
REBE CMPSW
END :
اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻹﺟﺮاءﺎ ﺗProcedures :-
اﻹﺟﺮاءﺎ ﺗ ﻣﻦ أﻛﺜﺮ إﻣﻜﺎﻧﯿﺎت اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﻪ ﺗﺄﺛﯿﺮًا ﻓﻰ ﻧﻈﺎم اﻟﺒﺮﻧﺎﻣﺞ و ﻗﻮﺗﮫﺎ o
إﺳﺘﻘﺮاﺮھﺎ.
ﺗﻮﻓﺮ اﻟﻜﻮد و اﻟﻮﻗﺖ ﻋﻠﻰ اﻟﻤﺒﺮﻣﺞ ﻧﻔﺴﻪ و ﺗﻌﻄﻰ ﻟﻪ إﺣﺴﺎس ﺑﻘﯿﻤﺔ ﻣﺎ o
ﻳﻔﻌﻞ.
ﻮھﻰ ﺑﺪوﺮھﺎ ﺗﺴﺎﻋﺪ ﻓﻰ إﻧﺘﺸﺎر اﻟﺒﺮاﻣﺞ و ﺧﺼﻮﺻًﺎ اﻟﻜﺒﯿﺮه و اﻟﻀﺨﻤﻪ ﻣﻨﮫﺎ و o
ﺗﺒﺎﺪ ﻟ أﺟﺰاءھﺎ ﺑﯿﻦ أﻛﺜﺮ ﻣﻦ ﺷﺨﺺ أو ﻣﺒﺮﻣﺞ.
ﻳﺘﻢ ﻋﻤﻞ ﻧﺪاء ﻟﻺﺟﺮاء اﻟﻤﺮاد اﻟﻮﺻﻮل إﻟﯿﻪ ﻋﻦ ﻃﺮﻳﻖ ][CALL Procedure_name
ﻣﻦ داﺧﻞ اﻹﺧﺮاء اﻟﺮﺋﯿﺴﻰ Main Procedureأو ﻣﻦ ﺄى إﺟﺮاء آﺧﺮ .ھﺬا ﺑﻌﺪ ﺗﺠﮫﯿﺰ
ﻣﺪﺧﻼت اﻹﺟﺮاء إذا ﻛﺎن ﻳﻌﻤﻞ ﻋﻠﻰ ﻣﺪﺧﻼت .ﻓﯿﺘﻢ أﻧﺘﻘﺎل اﻟﻌﻤﻞ إﻟﻰ اﻹﺟﺮاء
اﻟﻔﺮﻋﻰ )ﻷﻧﻪ ﻳﺘﻔﺮع ﻣﻦ إﺟﺮاء آﺧﺮ ( .وﺑﻌﺪ إﻧﺘﮫﺎء ﻋﻤﻠﻪ ﺑﺎﻷﻣﺮ ] [RETﻳﺮﺟﻊ اﻹﺟﺮاء
ﻻ.
ﺛﺎﻧﯿًﺎ إﻟﻰ اﻟﺠﻤﻠﻪ اﻟﺒﺮﻣﺠﯿﻪ اﻟﺘﻰ ﺗﻠﻰ اﻷﻣﺮ ] [CALLﻓﻰ اإﺟﺮاء اﻟﺬى ﻗﺎم ﺑﺎﻟﻨﺪاء أو ً
ھﻮ اﻹﺟﺮاء اﻟﺬى ﻳﺘﻢ ﺑﺪأ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻪ ,ﺑﻤﻌﻨﻰ أﻧﻪ أﻮ ﻟ إﺟﺮاء ﻳﻌﻤﻞ ﻣﻊ ﺑﺪأ اﻟﺒﺮﻧﺎﻣﺞ
ﺑﺎﻟﻌﻤﻞ .و ﻳﻨﺘﮫﻰ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺈﻧﺘﮫﺎء ھﺬا اﻹﺟﺮاء ﻛﻤﺎ ھﻮ ﻣﻌﺘﺎد.
ﻳﺘﻢ وﺿﻊ إﺳﻢ اﻹﺟﺮاء اﻟﺮﺋﯿﺴﻰ ﺑﺠﺎﻧﺐ أﻣﺮ اﻹﻧﺘﮫﺎء ENDﻓﻰ أﺳﻔﻞ اﻟﺒﺮﻧﺎﻣﺞ.
•
ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻹﺟﺮاءﺎ ﺗ ...؟ •
ﻳﺘﻢ إﻧﺸﺎء إﺟﺮاء ﺟﺪﻳﺪ ﻋﻦ ﻃﺮﻳﻖ ﻛﺘﺎﺑﺔ أﺳﻢ اﻹﺟﺮاء اﻟﺠﺪﻳﺪ ﻳﻠﯿﻪ ﻛﺘﺎﺑﺔ اﻷﻣﺮ o
PROC.
أﻛﺘﺐ ﺑﺎﻟﺪاﺧﻞ ﺟﻤﻞ اﻹﺟﺮاء أﻳًﺎ ﻛﺎﻧﺖ ﻋﻠﻰ ﺣﺴﺐ إﺧﺘﯿﺎﺮ ﻛ و ﻋﻠﻰ ﺣﺴﺐ o
ﻋﻤﻞ اﻹﺟﺮاء .
ﻻ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ إﺟﺮاء داﺧﻞ أﺟﺮاء آﺧﺮ .وإﻻ ﻓﻠﻦ ﻳﻌﻤﻞ ﺻﺤﯿﺤًﺎ وﺳﻮف ﻳﻌﻄﻰ o
اﻟﻤﺘﺮﺟﻢ Assemblerرﺳﺎﻟﺔ ﺧﻄﺄ Error .ﻟﺬﻟﻚ ﻓﺄﻧﻪ ﻳﺠﺐ ﻛﺘﺎﺑﺔ اﻹﺟﺮاء
اﻟﺠﺪﻳﺪ أﻣﺎ ﺑﻌﺪ إﻧﺘﮫﺎء إﺟﺮاء أو ﻗﺒﻞ ﺑﺪأ إﺟﺮاء.
ﻻ ﻳﺠﺐ ﺄ ﻧ ﻳﻜﻮن اﻹﺟﺮاء ﻓﻰ ﻧﻔﺲ اﻟﺒﺮﻧﺎﻣﺞ و ﻟﻜﻦ ﻳﻤﻜﻦ إﺿﺎﻓﺘﻪ إﻟﻰ o
اﻟﺒﺮﻧﺎﻣﺞ و ھﻮ ﻳﻜﻮن داﺧﻞ ﻣﻠﻒ آﺧﺮ ﻓﻰ اﻟﮫﺎرد أو ﻓﻰ اﻟﺬاﻛﺮه ﻣﺜﻞ إﺟﺮاءﺎ ﺗ
اﻟﻨﻈﺎم اﻟﺘﻰ ﻧﻌﻤﻞ ﻟﮫﺎ ﻧﺪاء ﻋﻦ ﻃﺮﻳﻖ INTﻮھﻰ ﻓﻰ ھﺬه اﻟﺤﺎﻟﻪ ﻳﻄﻠﻖ
ﻋﻠﯿﮫﺎ Software Interrupts .وﻟﻜﻦ اﻷﺧﺮى اﻟﺘﻰ ﻓﻰ ﻣﻠﻒ آﺧﺮ ﺗﺴﻤﻰ
Macros or Modules .وﻣﻦ اﻟﻤﻤﻜﻦ ﺄ ﻧ ﺗﻜﻮن ﻓﻰ ﺣﺎﻟﺘﮫﺎ اﻟﻤﺼﺪرﻳﻪ أو ﻓﻰ
ﺣﺎﻟﺘﮫﺎ اﻟﻘﺎﺑﻠﻪ ﻟﻠﺘﺸﻐﯿﻞ ﻣﺜﻞ(Dynamic link liberaries (DLL'S .
.٣ﻳﺸﻔﺮ اﻟﺒﯿﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﻋﻤﻞ XORﻟﻜﻞ ﺣﺮف ﻋﻠﻰ ﺣﺪه ﻣﻦ ھﺬه اﻟﺒﯿﺎﻧﺎت .
ﻛﻤﺎ إﺳﺘﻨﺘﺠﺘﻢ ﻓﺄن اﻟﺒﺮﻧﺎﻣﺞ ﻳﻘﻮم ﺑﻌﻤﻞ ﺗﺸﻔﯿﺮ ﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﺴﺘﺨﺪم وﻳﻌﺮض ﻟﻪ اﻟﺒﯿﺎﻧﺎت
ﻣﺸﻔﺮه .
اﻟﺒﺮﻧﺎﻣﺞ
;------------------------------------------------------------
;App_name : DECODER.EXE
;Author : mrezzuz
;web site : http://www.١t.٢t.٣t.٤t.com
;Date : ٢٠/٤/٢٠٠٣
;------------------------------------------------------------
Title decoder
.MODEL small
.STACK ١٠٠H
.DATA
LF EQU ٠AH
CR EQU ٠DH
MSG DB ١٠٠٠H DUP (٠) ;Encode up to ٤ kbytes
HR db LF,CR,'-----------------------------------------------------
--------$'
CODE_MSG db 'The code : $'
MSG_MSG db 'The message : $'
WELCOM DB CR,LF,'Type in a new message for working:',CR,LF,'$'
AGAIN DB CR,LF,'Play again ',١h,' ?[Y For agree]',LF,CR,'$'
CODE_VAL DB ٩BH
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
;---------------------------------
START:
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
LEA DX,HR
MOV AH,٩
INT ٢١H
LEA DX,WELCOM ;print the welcom message
INT ٢١H
;start to read the user input
LEA BX,MSG
READ_BYTE :
MOV AH,١ ;input one char
INT ٢١H
CMP AL,CR ;compare end of user inputs
JE END_READ
CMP AL,٠٨H ;compare backspace
JE BACK
MOV [BX],AL ;store input char into msg
INC CX ;increment counter
INC BX ;increment offset
JMP READ_BYTE
BACK:
MOV DL,٣٢ ;Print space and backspace to clear the backed char .
MOV AH,٢
INT ٢١H
MOV DL,٨
INT ٢١H
DEC CX ;if backspace then dec counter and offset
DEC BX
JMP READ_BYTE
END_READ:
;Not operate until user input at least one char or until cx > ٠٠h
and else ask for again
CMP CX,٠٠H
JLE ask_again
CALL DEC_INC ;calls xor function TO ENCODE.
MOV AH,٢ ;print new line
MOV DL,LF
INT ٢١H
MOV DL,CR
INT ٢١H
LEA DX,CODE_MSG
MOV AH,٩
INT ٢١H
CALL PRINT_MSG ;calls msg printting which was stored in msg
CALL DEC_INC ;call xor TO DECODE .
LEA DX,MSG_MSG
MOV AH,٩
INT ٢١H
CALL PRINT_MSG
ask_again:
LEA DX,AGAIN
MOV AH,٩
INT ٢١H
MOV AH,١ ;scan what's user replay . if Y or y then again else
exit
INT ٢١H
CMP AL,'Y'
JE START
CMP AL,'y'
JE START
MAIN ENDP
;__________________________________________________ _________________
PRINT_MSG PROC
;The procedure prints the bytes sequancly from the msg address CX
times.
;CX must > ٠٠h
;The procedure uses BX as an offset
PUSH CX ;store CX
MOV AH,٢ ;print new line
MOV DL,LF
INT ٢١H
MOV DL,CR
INT ٢١H
LEA BX,MSG
START١:
MOV DL,[BX] ;start print first char of msg address
INC BX ;icrement the offset
INT ٢١H
LOOP START١
MOV AH,٢ ;print new line
MOV DL,LF
INT ٢١H
MOV DL,CR
INT ٢١H
POP CX ;return CX
RET
PRINT_MSG ENDP
;____________________________________________________________________
DEC_INC PROC
;The procedure XOR the byte from address msg CX times .
;CX must > ٠٠H
;The procedure uses BX as an offset
PUSH CX
LEA BX,MSG
START٢:
MOV AH,CODE_VAL ;moves the code value into AH
XOR [BX],AH ;XOR with offset BX
INC BX
LOOP START٢
POP CX
RET ;return
DEC_INC ENDP
END MAIN ;start the program control from MAIN procedure