You are on page 1of 30

‫ﺍﻷﲰﺒﻠﻲ‬

‫ﻣﺎھﻲ اﻷﺳﻤﺒﻠﻲ ‪:‬‬


‫ﻓﻲ ﻗﺪﻳﻢ اﻟﺰﻣﺎن أﻳﺎم ﺑﺪاﻳﺎت اﻟﻜﻤﺒﯿﻮﺗﺮ ﻛﺎﻧﺖ ﺑﺮﻣﺠﺔ اﻟﻜﻤﺒﯿﻮﺗﺮ ﺗﺘﻢ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ اﻷﻟﻪ‬
‫‪ Machine Language‬أﺧﺘﺼﺎرًا ‪ ) ML‬ﻟﻐﺔ اﻵﻟﻪ ھﻲ اﻟﻠﻐﻪ اﻟﺘﻲ ﺗﻔﮫﻤﮫﺎ اﻵﻟﻪ ﻣﺒﺎﺷﺮة‬
‫دﻮ ﻧ اﻟﺤﺎﺟﺔ اﻟﻰ ﺗﻔﺴﯿﺮ ﻮھﻲ ﺗﺨﺰن ﺑﺼﻮرة ﺛﻨﺎﺋﺒﺔ ] ﺗﺮﻛﯿﺒﺔ ﻣﻦ اﻷﺻﻔﺎر واﻟﻮﺣﺎﻳﺪ[ ﻓﻲ‬
‫اﻟﺬاﻛﺮة ﻋﻠﻰ ﺷﻜﻞ ﺗﻌﻠﯿﻤﺎت ووﺳﺎﺋﻂ ﺗﺄﺧﺬ ﻛﻞ واﺣﺪ ﻣﻨﮫﺎ ﻋﺎدة ﻣﻘﺪار ‪٨‬ﺑﺖ=ا ﺑﺎﻳﺖ (‬
‫وﻛﺎن ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺒﺮﻣﺠﺔ ﺻﻌﺐ ﺟﺪًا ﻋﻨﺪھﺎ ﻃﻮر اﻟﻤﺒﺮﻣﺠﻮن أﻮ ﻟ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻮھﺬه‬
‫اﻟﻠﻐﻪ ﻓﻜﺮﺗﮫﺎ ﺑﺴﯿﻄﺔ ﺟﺪًا ﺣﯿﺚ أﻧﻪ ﺑﺪل ﺄ ﻧ ﺗﻜﺘﺐ رﻣﻮز اﻵﻟﻪ ﻳﺘﻢ ﻛﺘﺎﺑﺔ ﻛﻠﻤﺎت ﻣﺨﺘﺼﺮه‬
‫ﺗﺪل ﻋﻠﻰ ﻧﻮع اﻟﻌﻤﻠﯿﻪ ﻣﺜﺎل ) ‪ ( MOV,ADD,CMP‬ﺛﻢ ﺑﺒﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﻳﺘﻢ ﺗﺤﻮﻳﻞ ھﺬه‬
‫اﻟﺸﻔﺮة اﻟﻰ ﻟﻐﺔ اﻵﻟﻪ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﺗﺨﻄﯿﻂ واﺣﺪ‪-‬اﻟﻰ‪-‬واﺣﺪ ﺄ ﻳ ﺄ ﻧ ﻛﻞ ﺳﻄﺮ أو ﻋﺒﺎرة ﻓﻲ‬
‫اﻷﺳﻤﺒﻠﻲ ﺗﺤﻮل اﻟﻰ ﺗﻌﻠﯿﻤﺔ واﺣﺪة ﻣﻘﺎﺑﻠﻪ ﻓﻲ ﻟﻐﺔ اﻵﻟﻪ )ﻣﺜﺎل ﺑﺪل ﻛﺘﺎﺑﺔ‬
‫‪ ٠١١٠٠٠٠٠٠٠٠٠١٠١‬ﻳﺘﻢ ﻛﺘﺎﺑﺔ ‪ ( ٥mov al,‬ﻳﻌﺮف اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﻳﻘﻮم ﺑﻌﻤﻠﯿﺔ اﻟﺘﺤﻮﻳﻞ‬
‫ﺑﺎﻷﺳﻤﺒﻠﺮ ‪ ، Assembler‬ﻋﻠﻤًﺎ ﺑﺄن ھﻨﺎك ﻋﺪة أﻧﻮﺎﻋ ﻣﻦ اﻷﺳﻤﺒﻠﺮ ﻛﻞ ﻧﻮع ﻳﺨﺘﺺ‬
‫ﺑﺘﻘﻨﯿﺔ ﻣﻌﯿﻨﺔ وﺑﻌﺎﺋﻠﺔ ﻣﻌﯿﻨﻪ ﻣﻦ اﻟﻤﻌﺎﻟﺠﺎت‬
‫وﻧﺤﻦ ھﻨﺎ ﺑﺼﺪد ﺗﻌﻠﻢ اﻟﺒﺮﻣﺠﺔ ﺑﺎﻷﺳﻤﺒﻠﻲ ﻟﻠﻤﻌﺎﻟﺠﺎت اﻟﻤﺒﻨﯿﺔ ﻋﻠﻰ ﺗﻘﻨﯿﺔ ‪IBM-PC‬‬
‫واﻟﻤﻨﺘﺠﺔ ﻣﻦ ﺷﺮﻛﺔ أﻧﺘﻞ ﻮھﻲ اﻟﻌﺎﺋﻠﺔ ‪ ٨٠×٨٦‬وﻳﺮﻣﺰ ﻟﮫﺎ أﺧﺘﺼﺎرًا ‪ ٨٦X‬ﻮھﻲ ﺗﻀﻢ ‪:‬‬
‫) ‪ ( ٨٠٢٨٦ / ٨٠١٨٦ / ٨٠٨٨ / ٨٠٨٦‬ﻤﻟﻌﺎﻟﺠﺎتﻻ ‪ ١٦‬ﺑﺖ و ) ‪/ ٨٠٤٨٦ / ٨٠٣٨٦‬‬
‫‪=٨٠٥٨٦‬ﺑﻨﺘﻨﯿﻮم‪=٨٠٦٨٦ / ١‬ﺑﻨﺘﻨﯿﻮم‪=٨٠٧٨٦ / ٢‬ﺑﻨﺘﻨﯿﻮم‪=٨٠٨٨٦ / ٣‬ﺑﻨﺘﻨﯿﻮم‪( ٤‬‬
‫ﻤﻟﻌﺎﻟﺠﺎتﻻ ‪ ٣٢‬ﺑﺖ وﺳﻮف أﺗﻄﺮق ﻓﻲ درﻮ ﺳ ﻣﺘﻘﺪﻣﺔ اﻟﻰ اﻟﻤﻌﺎﻟﺞ أﺗﻨﯿﻮم ‪ ٦٤‬ﺑﺖ‬
‫اﻟﻤﺒﻨﻲ ﺑﺘﻘﻨﯿﺔ ﺟﺪﻳﺪه ﻛﻠﯿًﺎ ﻟﻤﻦ ﻳﺮﻏﺐ ﺑﻤﻌﺮﻓﺔ ﻣﺴﺒﻘﺔ ﻟﮫﺬا اﻟﻤﻌﺎﻟﺞ اﻟﺠﺪﻳﺪ ﻛﺬﻟﻚ ﺳﻮف‬
‫أﺗﻄﺮق ﺑﺄﺬ ﻧ اﷲ اﻟﻰ اﻟﻜﺮﻮ ﺳ أﺳﻤﺒﻠﺮ ﻮھﻲ ﻣﺠﻤﻮﻋﺔ ﺑﺮاﻣﺞ ﺧﺎﺻﺔ ﻣﺼﻤﻤﻪ ﻟﻠﺘﺤﻮﻳﻞ‬
‫ﻣﻦ ﻟﻐﺔ أﺳﻤﺒﻠﻲ ﻟﻌﺎﺋﻠﺔ ﻣﻌﺎﻟﺠﺎت ﻣﻌﯿﻨﺔ اﻟﻰ ﻋﺎﺋﻠﻪ أﺧﺮى ‪.‬‬

‫ﺗﻌﺮﻳﻒ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ‬


‫اﻷﺳﻤﺒﻠﻲ ھﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺗﺘﻜﻮن ﻣﻦ ﺳﻠﺴﻠﺔ ﻣﻦ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﺘﺘﺎﺑﻌﺔ ﻛﻞ ﺗﻌﻠﯿﻤﺔ ﻓﯿﮫﺎ ﺗﺤﻮل اﻟﻰ ﺗﻌﻠﯿﻤﺔ‬
‫ﻣﻘﺎﺑﻠﺔ ﺑﻠﻐﺔ اﻵﻟﻪ ‪.‬‬

‫ﺗﻌﺮﻳﻒ اﻷﺳﻤﺒﻠﺮ‬
‫اﻷﺳﻤﺒﻠﺮ ھﻮ ﺑﺮﻧﺎﻣﺞ ﻳﻘﻮم ﺑﺘﺤﻮﻳﻞ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻜﺘﻮﺑﺔ ﺑﻸﺳﻤﺒﻠﻲ اﻟﻰ ﻟﻐﺔ اﻵﻟﻪ ‪.‬‬

‫ﻟﻤﺎذا أرﻳﺪ أﺳﺘﺨﺪﺎ ﻣ اﻷﺳﻤﺒﻠﻲ ‪:‬‬


‫ﺑﺘﻌﻠﻤﻚ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻓﺄﻧﻚ ﺗﻜﺸﻒ اﻟﻨﻘﺎب ﻋﻦ اﻷﺳﺮار اﻟﻤﺨﺘﻔﯿﻪ وراء اﻟﻜﻤﺒﯿﻮﺗﺮ وﺗﺼﺒﺢ‬
‫ﻗﺎدرًا ﻋﻠﻰ اﻟﻔﮫﻢ ﺗﻤﺎﻣًﺎ ﻛﯿﻒ ﻳﻌﻤﻞ اﻟﻤﻌﺎﻟﺞ وﻛﯿﻒ ﻳﻌﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺑﺬﻟﻚ ﺗﺰﻳﺪ ﺧﺒﺮﺗﻚ‬
‫ﻛﻤﺒﺮﻣﺞ وﺑﺎﻟﻄﺒﻊ ﻓﺄن اﻷﺳﻤﺒﻠﻲ أﻗﻮى ﻣﻦ اﻟﻠﻐﺎت اﻟﻌﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ‬
‫اﻟﻌﺘﺎد وﺗﻌﻄﯿﻚ ﻣﺮوﻧﺔ ﻋﺎﻟﯿﺔ وﻗﺪرة وﺻﻮل اﻟﻰ أﺷﯿﺎء ﻟﻢ ﺗﻜﻦ ﺗﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل اﻟﯿﮫﺎ ﻣﻦ‬
‫ﻗﺒﻞ ‪ ،‬ﻛﺬﻟﻚ ھﻨﺎك ﻧﻮﻋﯿﺎت ﻣﻦ اﻟﺒﺮاﻣﺞ ﻻﻳﻤﻜﻦ اﻻ ﺑﺮﻣﺠﺘﮫﺎ ﺑﺎﻷﺳﻤﺒﻠﻲ ﻣﺜﻞ‬
‫اﻟﺪراﻳﻔﺎت)ﺳﻮاﻗﺎت( اﻷﺟﮫﺰه ‪ ،‬ﻛﺬﻟﻚ ﻓﺄن اﻷﺳﻤﺒﻠﻲ ﻳﻌﻄﯿﻂ ﺑﺮاﻣﺞ ﺳﺮﻳﻌﺔ ﺟﺪًا ‪ ،‬وﺑﺎﻟﻄﺒﻊ‬
‫ﻓﺄن ﺑﻨﺎء ﺑﺮﻧﺎﻣﺞ ﻣﺘﻄﻮر ﺑﺎﻷﺳﻤﺒﻠﻲ أﺷﺒﻪ ﺑﺤﻔﺮ ﺣﻔﺮة ﺑﻮاﺳﻄﺔ اﻟﻤﻠﻌﻘﻪ ﻓﺎﻟﺒﺮﻏﻢ أﻧﻚ ﺗﺤﻔﺮ‬
‫اﻻ أ ﻧﻚ أ ﻧﺘ ﺎﺟﯿ ﺘﻚ ﻗﻠﯿ ﻠﻪوﻟﻜﻦ ﻣﻦ اﻟﻤﺤﺒﺬ ﺟﺪًا ﺑﺮﻣﺠﺔ ﺑﻌﺾ اﻟﺪوﻻ و اﻷﺣ ﺰ اء ﻣﻦ اﻟﺒﺮ اﻣﺞ‬
‫ﺑﺎﻷﺳﻤﺒﻠﻲ وﺑﻘﯿﺔ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ﻣﺜﻞ اﻟﺴﻲ‪.++‬‬
‫اﻟﻌﻼﻗﺔ ﺑﯿﻦ اﻷﺳﻤﺒﻠﻲ واﻟﻠﻐﺎت اﻷﺧﺮى ‪:‬‬
‫ﺗﻌﺘﺒﺮ ﻛﻞ ﻣﻦ ﻟﻐﺔ اﻵﻟﻪ و اﻷﺳﻤﺒﻠﻲ ﻟﻐﺘﯿﻦ ﻣﻨﺨﻔﻀﺘﻲ اﻟﻤﺴﺘﻮى ‪Low-Level‬‬
‫‪ Language‬أﺧﺘﺼﺎرًا ‪ LLL‬ﻷﻧﮫﺎ ﺗﻜﺘﺐ ﺗﻌﻠﯿﻤﻪ ﺗﻌﻠﯿﻤﻪ ) ﺑﻌﺾ اﻟﻨﺎس ﻳﻌﺘﺒﺮ ﻟﻐﺔ اﻟﺴﻲ ﻟﻐﺔ‬
‫ﻣﻨﺨﻔﻀﺔ اﻟﻤﺴﺘﻮى ‪ ،‬ﻮھﺬا اﻟﻜﻼم أرﺟﺢ اﻟﻰ اﻟﺨﻄﺄ ﻣﻨﻪ اﻟﻰ اﻟﺼﻮﺎ ﺑ ( ﺑﯿﻨﻤﺎ ﺗﻌﺘﺒﺮ ﺑﺎﻗﻲ‬
‫اﻟﻠﻐﺎت ‪ High-Level Language‬أﺧﺘﺼﺎرًا ‪ HLL‬وﻓﻲ ھﺬه اﻟﻠﻐﺎت ﺗﺨﺘﻔﻲ ﺗﻘﻨﯿﺔ ﺗﺨﻄﯿﻂ‬
‫واﺣﺪ‪-‬اﻟﻰ‪-‬واﺣﺪ وﺗﻔﺴﺮ اﻟﺘﻌﻠﯿﻤﺔ اﻟﻮاﺣﺪة اﻟﻰ ﻋﺪد ﻛﺒﯿﺮ ﻣﻦ ﺗﻌﯿﻠﻤﺎت ﻟﻐﺔ اﻵﻟﻪ‬

‫ﻣﺨﻄﻂ ﻳﻮﺿﺢ اﻟﻌﻼﻗﺔ ﺑﯿﻦ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ وﻟﻐﺔ اﻵﻟﻪ وﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى وﻟﻐﺔ اﻵﻟﻪ‬

‫ﺗﻄﺒﯿﻘﺎت ﻟﻐﺔ اﻷﺳﻤﺒﻠﻲ ‪:‬‬

‫ﺗﺘﻄﻠﺐ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻣﻌﺮﻓﺔ ﺑﺎﻟﻌﺘﺎد وﻋﻨﺎﻳﺔ ﺧﺎﺻﺔ ﻣﻊ اﻷھﺘﻤﺎم ﺑﺄﺪ ﻗ‬
‫وأﻗﻞ اﻟﺘﻔﺎﺻﯿﻞ ‪ ،‬ﻓﻲ أﻳﺎم اﻟﺒﺮﻣﺠﺔ اﻟﻘﺪﻳﻤﺔ ﻛﺎن اﻟﻤﺒﺮﻣﺠﻮن ﻳﻜﺘﺒﻮن ﺑﺮاﻣﺠﮫﻢ ﺑﻠﻐﺔ‬
‫اﻷﺳﻤﺒﻠﻲ ﻷن ذاﻛﺮة اﻟﺮﺎ ﻣ وﻗﺘﮫﺎ ﻛﺎﻧﺖ ﺻﻐﯿﺮة )أﻗﻞ ﻣﻦ ‪٦٤‬ﻛﯿﻠﻮﺑﺎﻳﺖ( ﻮھﻢ ﺑﺤﺎﺟﺔ اﻟﻰ‬
‫ﺑﺮاﻣﺞ أﺻﻐﺮ وأﺳﺮع ﺧﺼﻮﺻًﺎ ﺄ ﻧ ﻣﻌﺎﻟﺠﺘﮫﻢ أﻳﻀًﺎ ﻛﺎﻧﺖ ﺑﻄﯿﺌﺔ ‪ ،‬ﻣﻊ ﺗﻄﻮر اﻟﺤﺎﺳﻮب وﺗﻮﺳﻊ‬
‫ﻻ وﺗﻌﻘﯿﺪًا ‪ ،‬ھﺬا اﻟﺘﻌﻘﯿﺪ أﺪى‬
‫ﺳﻌﺔ ذاﻛﺮة اﻟﺮﺎ ﻣ وزﻳﺎدة ﺳﺮﻋﺘﻪ أﺻﺒﺤﺖ اﻟﺒﺮاﻣﺞ أﻛﺜﺮ ﻃﻮ ً‬
‫اﻟﻰ أﺳﺘﺨﺪﺎ ﻣ اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ‪ HLL‬ﻣﺜﻞ اﻟﺴﻲ واﻟﻜﻮﺑﻮل واﻟﺒﯿﺴﻚ‬
‫واﻟﺒﺎﺳﻜﺎل واﻟﻔﻮرﺗﺮن ‪ ،‬ﻣﺮة أﺧﺮى ﺗﻄﻮر اﻟﺤﺎﺳﻮب ﻓﺄﺪى اﻟﻰ أﺳﺘﺨﺪﺎ ﻣ اﻟﻠﻐﺎت اﻟﻌﻠﯿﺎ‬
‫اﻟﻤﻮﺟﮫﺔ اﻟﮫﺪف ‪ OOP‬ﻣﺜﻞ اﻟﺴﻲ‪ ++‬واﻟﺠﺎﻓﺎ واﻟﺘﻲ ﻣﻜﻨﺖ ﻣﻦ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺞ ﻗﻮاﻣﮫﺎ آﻻف‬
‫اﻷﺳﻄﺮ واﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻌﻘﺪه واﻟﻤﺘﺪاﺧﻠﻪ ‪.‬‬

‫ﻣﻦ اﻟﺼﻌﺐ ﺄ ﻧ ﺗﻼﻗﻲ ﺑﺮاﻣﺞ ﻛﺒﯿﺮة ﻣﻜﺘﻮﺑﺔ ﻛﺎﻣﻠﺔ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻷن ﻛﺘﺎﺑﺘﮫﺎ ﺻﻌﺐ‬
‫واﻷھﻢ ﻣﻦ ذﻟﻚ ﺗﻄﻮﻳﺮھﺎ وﺻﯿﺎﻧﺘﮫﺎ أﺻﻌﺐ ﺑﻜﺜﯿﺮ ‪ ،‬ﺑﺪل ذﻟﻚ ﻳﻘﻮم اﻟﻤﺒﺮﻣﺠﯿﻦ ﺑﺒﺮﻣﺠﺔ‬
‫ﻣﻘﺎﻃﻊ ﻣﺒﺮﻣﺠﺔ ﺑﺮﻣﺠﺔ ﻣﺜﻠﻰ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ﻷﺳﺘﺨﺪﻣﮫﺎ ﻓﻲ ﺗﻨﻔﯿﺬ أﺳﺮع أو اﻟﻮﺻﻮل‬
‫اﻟﻰ اﻟﻌﺘﺎد ﻋﻦ ﻃﺮﻳﻘﮫﺎ وﺑﺎﻗﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ‪.‬‬

‫ﻳﻔﺾ اﻟﻤﺒﺮﻣﺠﯿﻦ ﻟﻐﺔ اﻟﺴﻲ‪ ++‬ﻛﻠﻐﺔ ﻗﯿﺎﺳﯿﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﻋﻠﯿﺎ ﻷن ﻟﮫﺎ ﻗﺪرة ﻋﺎﻟﯿﺔ‬
‫وﻗﻮﻳﺔ ﺟﺪًا وﻣﻮﺟﮫﺔ اﻟﮫﺪف ﻣﻊ اﻟﻘﺪرة ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﻣﻘﺎﻃﻊ اﻟﺴﻲ ﻓﯿﮫﺎ ﻮھﻲ ﻟﻐﺔ أﻗﻞ‬
‫أﻧﺨﻔﺎﺿًﺎ وأﻛﺜﺮ ﻣﺮوﻧﺔ ﻣﻊ أﺳﺘﺨﺪﺎ ﻣ اﻷﺳﻤﺒﻠﻲ ﻛﻌﻨﺼﺮ ﻣﮫﻢ ﻓﻲ اﻟﻮﺻﻮل اﻟﻰ اﻟﻌﺘﺎد‬
‫وﺑﺮﻣﺠﺔ اﻟﺠﺰﺋﯿﺎت اﻟﻤﺤﺘﺎﺟﺔ ﻟﻠﺴﺮﻋﺔ ‪.‬‬
‫ﻻ ﻳﺴﺘﺨﺪم اﻟﻤﺒﺮﻣﺠﻮن ﺷﻔﺮة اﻷﺳﻤﺒﻠﻲ وﺳﻂ ﺷﻔﺮة ﻟﻐﺔ ﻋﺎﻟﯿﺔ اﻟﻤﺴﺘﻮى ﻋﺎدة وأﻧﻤﺎ‬
‫ﻳﺴﺘﺨﺪﻣﻮﻧﮫﺎ ﻋﻦ ﻃﺮﻳﻖ واﺟﻪ ﻋﻠﻰ ﺷﻜﻞ داﻟﺔ أو ﻛﺎﺋﻦ وﺗﺤﺘﻮي ھﺬه اﻟﺪاﻟﺔ أو ھﺬا اﻟﻜﺎﺋﻦ‬
‫ﻋﻠﻰ ﺷﻔﺮة اﻷﺳﻤﺒﻠﻲ اﻟﻤﻄﻠﻮﺑﺔ ‪ ،‬وﻗﺪ ﺗﺴﺘﺨﺪم روﺗﯿﻨًﺎ ﻓﺮﻋﯿًﺎ أو داﻟﺔ ﻓﻲ ﻟﻐﺔ ﻋﺎﻟﯿﺔ‬
‫اﻟﻤﺴﺘﻮى وأﻧﺖ ﻻﺗﻌﻠﻢ ﺑﺄﻧﻚ ﺑﺎﺳﺘﺪﻋﺎء ھﺬه اﻟﺪاﻟﺔ أو اﻟﺮوﺗﯿﻦ اﻟﻔﺮﻋﻲ ﻗﺪ أﺳﺘﺪﻋﯿﺖ‬
‫ﺷﻔﺮة ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ‪.‬‬

‫ﻟﻐﺔ اﻵﻟﻪ ‪:‬‬

‫ﻟﻐﺔ اﻵﻟﻪ ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘًﺎ ھﻲ اﻟﻠﻐﺔ اﻟﺘﻲ ﺗﺴﻄﯿﻊ اﻵﻟﻪ أو اﻟﻤﻌﺎﻟﺞ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻣﺒﺎﺷﺮة‬
‫‪ ،‬ﻓﻲ اﻟﻌﺎﺋﻠﺔ ‪ ٨٦X‬ﻛﻞ ﻣﻌﺎﻟﺞ ﻳﺤﺘﻮي ﻳﺴﺘﻄﯿﻊ ﺗﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺎت اﻟﻤﻌﺎﻟﺞ اﻟﺬي ﻗﺒﻠﻪ وﻳﻤﻠﻚ‬
‫ﻣﺠﻤﻮﻋﺔ ﺗﻌﻠﯿﻤﺎت ﻣﻮﺳﻌﺔ وأ ﺿﺎﻓﯿﺔ ﻻ ﺗﺴﺘﻄﯿﻊ اﻟﻤﻌﺎﻟﺠﺎت اﻟﺘﻲ ﻗﺒﻠﻪ ﺗﻨﻔﯿﺬھﺎ وأﻣﺎ‬
‫اﻟﻤﻌﺎﻟﺞ اﻟﺬي ﻳﺄﺗﻲ ﺑﻌﺪ ھﺬا اﻟﻤﻌﺎﻟﺞ ﻓﺄﻧﻪ ﻳﺪﻋﻢ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻮﺳﻌﺔ ﻟﻠﻤﻌﺎﻟﺞ اﻟﺬي ﻗﺒﻠﻪ‬
‫ﺑﯿﻨﻤﺎ ﻳﺤﺘﻮي ھﻮ أﻳﻀًﺎ ﻋﻠﻰ ﺗﻌﻠﯿﻤﺎت ﺟﺪﻳﺪة وﻣﻮﺳﻌﺔ ‪ ،‬ﺑﺄﺧﺘﺼﺎر اذا ﺻﻤﻤﺖ ﺑﺮﻧﺎﻣﺞ‬
‫ﻟﻤﻌﺎﻟﺢ ﻣﺎ ﻓﺄن اﻟﻤﻌﺎﻟﺠﺎت ﻣﺎﻗﺒﻞ ھﺬا اﻟﻤﻌﺎﻟﺢ ﻟﻦ ﺗﺴﺘﻄﯿﻊ ﺗﺸﻐﯿﻠﻪ ﺑﯿﻨﻤﺎ اﻟﻤﻌﺎﻟﺞ ﻧﻔﺴﺔ‬
‫واﻟﻤﻌﺎﻟﺠﺎت اﻟﺘﻲ ﺑﻌﺪه )ﻣﻦ ﻧﻔﺲ اﻟﻌﺎﺋﻠﺔ( ﺗﺴﺘﻄﯿﻊ ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ‪.‬‬

‫ﻟﻔﺪ ﺣﺎﻓﻈﺖ ﺷﺮﻛﺔ أﻧﺘﻞ ﻋﻠﻰ اﻟﺘﻮاﻓﻘﯿﺔ ﻓﻲ اﻟﻌﺎﺋﻠﺔ ‪ ٨٦X‬أﺑﺘﺪاء ﻣﻦ اﻟﻤﻌﺎﻟﺞ ‪ ٨٠٨٦‬وﺻﻮ ً‬
‫ﻻ‬
‫اﻟﻰ ﺑﺎﻧﺘﻨﯿﻮم ‪ ٨٠٨٨٦=٤‬وﻟﻜﻦ اﻟﺤﻔﺎظ ﻋﻠﻰ اﻟﺘﻮاﻓﻘﯿﺔ ﻳﻔﺮض ﻗﯿﻮد ﻋﻠﻰ ﺗﺼﻤﯿﻢ اﻟﻤﻌﺎﻟﺞ‬
‫وأﺳﺘﺨﺪﺎ ﻣ ﺗﻘﻨﯿﺎت ﻗﺪﻳﻤﺔ ‪ ،‬وﻣﺆﺧﺮًا ﻗﺮﺮ ﺗ ﺷﺮﻛﺔ أﻧﺘﻞ اﻳﻘﺎف ﻋﺎﺋﻠﺔ اﻟﻤﻌﺎﻟﺢ ‪ ٨٦X‬ﻋﻨﺪ‬
‫ﺑﺎﻧﺘﻨﯿﻮم‪ ٤‬وﻗﺎﻣﺖ ﺑﺄﻧﺸﺎء ﻣﻌﺎﻟﺞ ﺟﺪﻳﺪ )ﻏﯿﺮ ﻣﺘﻮاﻓﻖ ﻣﻊ اﻟﻌﺎﺋﻠﺔ ‪ ( ٨٦X‬ﻣﺒﻨﻲ ﻋﻠﻰ ﺗﻘﻨﯿﺔ‬
‫ﻻ‪ ٦٤‬ﺑﺖ ﻮھﻮ اﻟﻤﻌﺎﻟﺞ اﺗﺎﻧﯿﻮم اﻟﺠﺪﻳﺪ ‪.‬‬

‫ﻣﺜﺎل ﻋﻠﻰ ﻟﻐﺔ اﻵﻟﻪ ‪:‬‬

‫اﻟﺘﻌﻠﯿﻤﯿﺔ ‪ ١٠١١٠٠٠٠٠٠٠٠٠١٠١‬ھﻲ ﺗﻌﻠﯿﻤﺔ ﺑﻠﻐﺔ اﻵﻟﻪ وﻣﻌﻨﺎھﺎ أﻧﻘﻞ اﻟﺮﻗﻢ ‪ ٥‬اﻟﻰ‬


‫اﻟﻤﺴﺠﻞ ‪ ah‬ﻳﻘﺎﺑﻠﮫﺎ ﺑﻠﻐﺔ اﻷﺳﻤﺒﻠﻲ ‪ ٥mov ah,‬ﻻ ‪ ٨‬ﺑﺖ اﻷوﻟﻰ ﻣﻦ اﻟﺘﻌﻠﯿﻤﺔ ﺗﺸﻜﻞ‬
‫ﺷﻔﺮة اﻟﺘﻌﻠﯿﻤﺔ ‪ operation code=OP-code‬ﻮھﻲ ﺗﻌﻨﻲ ﻧﻘﻞ ﻗﯿﻤﺔ ﺑﻄﻮل ‪ ٨‬ﺑﺖ اﻟﻰ‬
‫اﻟﻤﺴﺠﻞ ‪، AL‬ﻟاﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦﻻ ‪ ١٦‬ﺖﺑﻻ ‪٨‬ﺑﺖ اﻷﺧﺮى ﺗﺸﻜﻞ اﻟﺮﻗﻢ ‪ ٥‬ﺛﻨﺎﺋﯿًﺎ‬

‫ﻛﯿﺎن اﻟﺤﺎﺳﻮب اﻟﺼﻠﺐ ‪:‬‬

‫ﻳﺘﺄﻟﻒ اﻟﺤﺎﺳﻮب ﺑﺸﻜﻞ أﺳﺎﺳﻲ ﻣﻦ اﻟﻠﻮﺣﺔ اﻷم ‪ Mother Board‬واﻟﻤﻌﺎﻟﺞ‬


‫‪ Microprocessor‬وذاﻛﺮة اﻟﻘﺮأة‪-‬ﻓﻘﻂ ‪ Memory ROM=Read-Only‬وذاﻛﺮة اﻟﻮﺻﻞ‬
‫اﻟﻌﺸﻮاﺋﻲ=اﻟﺮﺎ ﻣ ‪ RAM=Random-Access Memory‬ووﺣﺪة اﻟﺘﻐﺬﻳﺔ ‪Supply Power‬‬
‫واﻟﻤﻨﺎﻓﺬ اﻟﺘﻮﺳﻌﯿﺔ ‪Expansion Slots‬‬

‫اﻟﻤﻌﺎﻟﺞ ‪:‬‬
‫ﻳﻤﺜﻞ اﻟﻤﻌﺎﻟﺞ ﻋﻘﻞ اﻟﺤﺎﺳﻮب ﻮھﻲ اﻟﻮﺣﺪة اﻟﻤﺴﺆﻟﻪ ﻋﻦ اﻟﻘﯿﺎم ﺑﺄدارة اﻟﺤﺎﺳﻮب واﻟﻘﯿﺎم‬
‫ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ واﻟﻤﻨﻄﻘﯿﺔ وﻧﺤﻦ ھﻨﺎ ﻛﻤﺎ أوﺿﺤﺖ ﻧﺪﺮ ﺳ ﻣﻌﺎﻟﺠﺎت أﻧﺘﻞ ﻣﻦ اﻟﻌﺎﺋﻠﺔ‬
‫‪ ٨٦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‬‬
‫ﻓﻲ وﻗﺖ واﺣﺪ اﻷﻣﺮ اﻟﺬي ﻳﺰﻳﺪ ﺑﺪورة ﻣﻦ ﺳﺮﻋﺔ اﻟﻤﻌﺎﻟﺞ ‪.‬‬

‫وﺣﺪة ﻣﻼءﻣﺔ اﻟﻤﻤﺮ ووﺣﺪة اﻟﺘﻨﻔﯿﺬ‬

‫ذاﻛﺮة اﻟﻘﺮأة‪-‬ﻓﻘﻂ ‪: ROM = Read-Only Memory‬‬


‫ﻮھﻲ ﻋﺒﺎرة ﻋﻦ ﺷﺮﻳﺤﺔ داﺋﺮة ﻣﺘﻜﺎﻣﻠﺔ ‪ IC‬ﺗﺤﻮي ﻋﻠﻰ ذاﻛﺮة ﻓﯿﮫﺎ ﺑﯿﺎﻧﺎت ﻏﯿﺮ ﻗﺎﺑﻠﺔ‬
‫ﺷاﺋﺢﻻ ‪ ROM‬اﻟﺤﺪﻳﺜﺔ ﻳﻤﻜﻦ إﻋﺎدة اﻟﻜﺘﺎﺑﺔ ﻋﻠﯿﮫﺎ‬ ‫ﻷﻋﺎدة اﻟﻜﺘﺎﺑﺔ ﻋﻠﯿﮫﺎ )أﻓﺘﺮاﺿﯿًﺎ ‪ -‬ﺮ‬
‫ﺑﻄﺮق ﻣﺨﺘﻠﻔﺔ ( ‪،‬ﺤﺗﺘﻮي ھﺬه اﻟﺬاﻛﺮة ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞﻻ ‪BIOS=Basic Input Output‬‬
‫‪ System‬أو ﻧﻈﺎم اﻷدﺧﺎل واﻷﺧﺮﺎﺟ اﻷﺳﺎﺳﻲ‪ ،‬وﻻﻳﻤﻜﻦ ﻟﻠﻤﻌﺎﻟﺞ اﻟﻘﺮأة ﻣﻦ ھﺬه اﻟﺬاﻛﺮة‬
‫ﻣﺒﺎﺷﺮة وﻟﻜﻦ أﻮ ﻟ ﺷﺊ ﻳﻔﻌﻞ اﻟﻤﻌﺎﻟﺞ ﻋﻨﺪ ﺗﺸﻐﯿﻠﻪ ﻓﻲ ﻋﻤﻠﯿﺔ اﻷﺳﺘﻨﮫﺎض ھﻲ ﺗﺤﻤﯿﻞ‬
‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺮﻮ ﻣ وﻧﻘﻠﮫﺎ ﻓﻲ اﻟﺮﺎ ﻣ أو ﺑﺎﻷﺣﺮى اﻟﻰ اﻟﻘﺴﻢ اﻷﺧﯿﺮ ﻣﻦ اﻟﺮﺎ ﻣ ذا‬
‫اﻟﻌﻨﻮﺎ ﻧ اﻷﻛﺒﺮ ‪ .‬ﺘﺗﺠﻠﻰ ﻓﺎﺋﺪةﻻ ‪ BIOS‬ﻓﻲ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﻔﺤﺺ اﻟﺬاﺗﻲ ﻋﻨﺪ‬
‫اﻷﺳﺘﻨﮫﺎض ‪ POST=Power On Self Test‬ﺑﺎﻷﺿﺎﻓﺔ اﻟﻰ ﺗﺤﻤﯿﻞ ﺑﺮﻧﺎﻣﺞ ﻣﺤﻤﻞ ﻧﻈﺎم‬
‫ﺴ ﺘﻄ ﯿﻊ ﺄﻧ‬
‫ﻲ ذ اﻛ ﺮة اﻟﺮ ﺎﻣ ﺗ‬
‫ﺳﺎ ﯿﺔ ﻓ‬
‫ﻰ ﺗﻮﻓ ﯿﺮ دو ﻻ وﻣﻘﺎﻃﻌﺎت ﻗﯿ‬
‫ﺸﻐ ﯿﻞ ﺑ ﺎ ﻷﺿ ﺎ ﻓﺔ ا ﻟ‬
‫اﻟ ﺘ‬
‫ﻼ أو اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ أو اﻟﻘﺮأة‬ ‫ﺗﺴﺘﺨﺪﻣﮫﺎ اﻟﺒﺮاﻣﺞ ﻟﻠﺮﺳﻢ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﻣﺜ ً‬
‫واﻟﻜﺘﺎﺑﺔ ﻣﻦ واﻟﻰ اﻟﻘﺮص اﻟﺼﻠﺐ ‪.‬‬

‫ذاﻛﺮة اﻟﻮﺻﻮل اﻟﻌﺸﻮاﺋﻲ ‪: Random Access Memory = RAM‬‬


‫ھﺬه اﻟﺬاﻛﺮة ﻣﮫﻤﺔ ﺟﺪًا ﺣﯿﺚ ﺄ ﻧ ﺄ ﻳ ﺑﺮﻧﺎﻣﺞ ﻻﻳﻤﻜﻦ ﺄ ﻧ ﻳﻌﻤﻞ اﻻ اذا ﺣﻤﻞ اﻟﻰ ھﺬه‬
‫اﻟﺬاﻛﺮة ﻛﺬﻟﻚ ﻓﮫﻲ ﺗﺴﺘﺨﺪم ﻟﺤﻔﻆ اﻟﻤﺘﻐﯿﺮﺎ ﺗ وﺣﻔﻆ ﺑﺮاﻣﺞ اﻟﻨﻈﺎم اﻷﺳﺎﺳﯿﺔ وﻣﻨﮫﺎ‬
‫ﺟﺪو ﻻ اﻟﻤﻘﺎﻃﻌﺎت واﻟﻤﻘﺎﻃﻌﺎت أﻧﻔﺴﮫﺎ واﻟﺮوﻳﺘﻨﺎت اﻟﻔﻋﺮ ﯿﺔ ‪ ......‬اﻟﺦ وﻻﻳﺘﻢ أﺳﺘﺨﺪﺎ ﻣ‬
‫اﻟﻘﺮص اﻟﺼﻠﺐ ﻟﺤﻔﻆ ﻣﺜﻞ ھﺬه اﻟﻤﻌﻠﻮﻣﺎت ﻷن وﻗﺖ اﻟﻮﺻﻮل ﻓﯿﻪ أﺑﻄﺄ ﺑﻜﺜﯿﺮ ﻣﻦ ذاﻛﺮة‬
‫اﻟﺮﺎ ﻣ )وﻟﻮ ﺄ ﻧ اﻟﻘﺮص اﻟﺼﻠﺐ ﻳﺴﺘﺨﺪم ﻓﻲ ﺗﻮﻓﯿﺮ ذاﻛﺮة أﻓﺘﺮاﺿﯿﺔ ﻋﻦ ﻃﺮﻳﻖ اﻟﻘﯿﺎم‬
‫ﺑﻌﻤﻠﯿﺎت ﻣﺒﺎدﻟﺔ ﻟﻠﺼﻔﺤﺎت ﻣﻊ ذاﻛﺮة اﻟﺮﺎ ﻣ( ‪ ،‬وﺑﺎﻟﻄﺒﻊ ﻓﺄن ھﺬه اﻟﺬاﻛﺮة ﻳﻤﻜﻦ اﻟﻜﺘﺎﺑﺔ اﻟﯿﮫﺎ‬
‫أو اﻟﻘﺮأة ﻣﻨﮫﺎ ﻋﻦ ﻃﺮﻳﻖ ﻋﻨﻮﻧﺘﮫﺎ ‪.‬‬
‫ﻓﺒﺄﺳﺘﺨﺪﺎ ﻣ اﻟﻌﻨﻮﺎ ﻧ ﻳﻤﻜﻨﻨﺎ ﺄ ﻧ ﻧﺼﻞ اﻟﻰ ﻣﻜﺎن ﻣﺤﺪد ﻓﻲ اﻟﺬاﻛﺮة ﻟﻨﻌﻤﻞ ﻋﻠﯿﻪ ﻛﻞ‬
‫ﻋﻤﻠﯿﺎت اﻟﺘﺤﺮﻳﺮ اﻟﻤﻄﻠﻮﺑﺔ‬

‫ﻗﺪ ﺗﺘﺴﺎﺋﻞ ﻣﺎ ﻋﻼﻗﺔ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت واﻟﻌﺪ اﻟﺜﻨﺎﺋﻲ ﺑﺎﻷﺳﻤﺒﻠﻲ ؟ ﺣﺴﻨًﺎ ﻛﻤﺎ‬
‫وﺿﺤﺖ ﻣﻦ ﻗﺒﻞ ﻓﺄن اﻷﺳﻤﺒﻠﻲ ھﻲ ﻟﻐﺔ ﻗﺮﻳﺒﺔ ﺟﺪًا ﻣﻦ ﻟﻐﺔ اﻵﻟﻪ ﻮھﻲ ﻟﻐﻪ‬
‫ﻣﻨﺨﻔﻀﺔ اﻟﻤﺴﺘﻮى ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﺘﺎد واﻟﻤﻌﺎﻟﺢ ﺑﺼﻮرة ﻣﺒﺎﺷﺮة وﻟﻜﻲ ﻧﺤﻘﻖ‬
‫ﻓﮫﻤًﺎ أوﺳﻊ ﻟﮫﺬه اﻟﻠﻐﻪ ﻳﺠﺐ ﺄ ﻧ ﻧﻔﮫﻢ ﺑﻌﺾ اﻷﺷﯿﺎء اﻟﻤﮫﻤﺔ ﺟﺪًا ﻓﻲ ﺑﻨﯿﺔ‬
‫اﻟﻤﻌﺎﻟﺞ ‪.‬‬

‫اﻟﻌﺪ اﻟﺜﻨﺎﺋﻲ ‪:‬‬


‫ﻳﺘﻢ ﺗﻤﺜﯿﻞ اﻟﺸﻔﺮﺎ ﺗ واﻟﺒﯿﺎﻧﺎت ﻓﻲ ذاﻛﺮة اﻟﻜﻤﺒﯿﻮﺗﺮ ﻛﺘﻮاﻟﯿﻒ ﻣﻦ اﻟﺸﺤﻨﺎت‬
‫اﻟﻜﮫﺮﺑﺎﺋﯿﺔ ﺗﺄﺧﺬ ﻗﯿﻤﺘﯿﻦ اﻷوﻟﻰ ﻮھﻲ وﺟﻮد اﻟﺸﺤﻨﺔ وﻳﺮﻣﺰ ﻟﮫﺎ ب ‪ ON‬أو ﺻﺤﯿﺢ‬
‫‪ TRUE‬أو ‘‪ ’١‬واﻷﺧﺮى ﻮھﻲ ﻏﯿﺎب اﻟﺸﺤﻨﻪ وﻳﺮﻛﺰ ﻟﮫﺎ ب ‪ OFF‬أو ﺧﻄﺄ ‪ FALSE‬أو‬
‫‘‪ ، ’٠‬ووﺟﻮد اﻟﺸﺤﻨﺔ ﻳﻜﻮن ﻋﺎدة ﺑﯿﻦ ‪ ٤٫٥‬اﻟﻰ ‪ ٥٫٥‬ﻓﻮﻟﺖ ) اﻟﻤﻌﺎﻟﺠﺎت اﻟﺤﺪﻳﺜﻪ‬
‫ﺑﯿﻦ ‪ ٢٫٥‬اﻟﻰ ‪ ٣٫٥‬ﻓﻮﻟﺖ ( وﻏﯿﺎب اﻟﺸﺤﻨﺔ ﻳﻜﻮن ﺑﯿﻦ ‪ ٠٫٥+‬ﻓﻮﻟﺖ و ‪٠٫٥-‬ﻓﻮﻟﺖ ‪.‬‬

‫وﺣﺪﺎ ﺗ اﻟﺬاﻛﺮه اﻷﺳﺎﺳﯿﻪ ﻓﻲ اﻟﺬاﻛﺮه واﻟﻮﺣﺪﺎ ﺗ اﻟﺘﻲ ﺳﻨﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻛﺜﯿﺮًا‬


‫ھﻲ ‪:‬‬

‫ﻣﺎﻳﻌﺎدﻟﮫﺎ‬ ‫اﻷﺣﺘﻤﺎﻻت‬ ‫أﺳﻢ اﻟﻮﺣﺪة‬


‫‪١‬ﺑﺖ‬ ‫أﺣﺘﻤﺎﻟﯿﻦ ‪ ٠‬و ‪١‬‬ ‫‪Bit‬‬ ‫اﻟﺒﺖ‬
‫‪٨‬ﺑﺖ‬ ‫‪ ٢٥٦‬أﺣﺘﻤﺎل‬ ‫‪Byte‬‬ ‫اﻟﺒﺎﻳﺖ‬
‫‪١٦‬ﺑﺖ=‪٢‬ﺑﺎﻳﺖ‬ ‫‪ ٦٥٥٣٦‬أﺣﺘﻤﺎل‬ ‫‪Word‬‬ ‫اﻟﻜﻠﻤﺔ‬
‫اﻟﻜﻠﻤﺔ‬
‫‪٣٢‬ﺑﺖ=‪٤‬ﺑﺎﻳﺖ=‪٢‬ﻛﻠﻤﺔ‬ ‫‪ ٤،٢٩٤،٩٦٧،٢٩٦‬أﺣﺘﻤﺎل‬ ‫‪DoubleWord=Dword‬‬
‫اﻟﻤﻀﺎﻋﻔﺔ‬
‫‪٦٤‬ﺑﺖ=‪٨‬ﺑﺎﻳﺖ=‪٤‬ﻛﻠﻤﺎت=‪٢‬ﻛﻠﻤﺔ‬ ‫‪١٨،٤٤٦،٧٤٤،٠٧٣،٧٠٩،٥٥١،٦١٦‬‬ ‫اﻟﻜﻠﻤﺔ‬
‫‪Quafword=Qword‬‬
‫ﻣﻀﺎﻋﻔﺔ‬ ‫أﺣﺘﻤﺎل‬ ‫اﻟﺮاﺑﻌﯿﺔ‬
‫ﺑﺎﻟﻄﺒﻊ ھﺬه اﻟﻮﺣﺪﺎ ﺗ اﻷﺳﺎﺳﯿﺔ واﻟﺼﻐﯿﺮه أﻣﺎ ﻣﻀﺎﻋﻔﺎﺗﮫﺎ ﻓﮫﻲ ‪:‬‬

‫ﻣﺎﻳﻌﺎدﻟﮫﺎ‬ ‫اﻟﺮﻣﺰ‬ ‫اﻟﻮﺣﺪه‬


‫‪ ١٠٢٤‬ﺑﺎﻳﺖ‬ ‫‪KB‬‬ ‫اﻟﻜﯿﻠﻮﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﻛﯿﻠﻮﺑﺎﻳﺖ‬ ‫‪MB‬‬ ‫اﻟﻤﯿﺠﺎﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﻣﯿﺠﺎﺑﺎﻳﺖ‬ ‫‪GB‬‬ ‫اﻟﺠﯿﺠﺎﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﺟﯿﺠﺎﺑﺎﻳﺖ‬ ‫‪TB‬‬ ‫اﻟﺘﯿﺮاﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﺗﯿﺮاﺑﺎﻳﺖ‬ ‫‪PB‬‬ ‫اﻟﺒﯿﺘﺎﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﺑﯿﺘﺎﺑﺎﻳﺖ‬ ‫‪EB‬‬ ‫اﻷﻛﺴﺎﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬أﻛﺴﺎﺑﺎﻳﺖ‬ ‫‪ZB‬‬ ‫اﻟﺰﻳﺘﺎﺑﺎﻳﺖ‬
‫‪ ١٠٢٤‬ﻳﻮﺗﺎﺑﺎﻳﺖ‬ ‫‪YB‬‬ ‫اﻟﯿﻮﺗﺎﺑﺎﻳﺖ‬

‫ﺗﺨﺰﻳﻦ اﻷرﻗﺎم ﺑﺪﻮ ﻧ أﺷﺎرة ﻳﺄﺧﺬ اﻟﻨﻄﺎق اﻵﺗﻲ ﻟﻜﻞ وﺣﺪه ﻣﻦ اﻟﻮﺣﺪﺎ ﺗ‬
‫اﻷﺳﺎﺳﯿﺔ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﻃﺮﻳﻘﺔ ﺑﺪﻮ ﻧ اﻷﺷﺎرة ‪:unsigned‬‬

‫اﻟﻤﺠﺎل‬ ‫أﺳﻢ‬
‫اﻟ ﻰ‬ ‫ﻣﻦ‬ ‫اﻟﻮﺣﺪة‬
‫‪٢٥٦‬‬ ‫‪٠‬‬ ‫اﻟﺒﺎﻳﺖ‬
‫‪٦٥٥٣٦‬‬ ‫‪٠‬‬ ‫اﻟﻜﻠﻤﺔ‬
‫اﻟﻜﻠﻤﺔ‬
‫‪٤،٢٩٤،٩٦٧،٢٩٦‬‬ ‫‪٠‬‬
‫اﻟﻤﻀﺎﻋﻔﺔ‬
‫اﻟﻜﻠﻤﺔ‬
‫‪١٨،٤٤٦،٧٤٤،٠٧٣،٧٠٩،٥٥١،٦١٦‬‬ ‫‪٠‬‬
‫اﻟﺮﺑﺎﻋﯿﺔ‬

‫اﻷﺳﻜﻲ ﻛﻮد ‪:ASCII‬‬

‫ﻳﺘﻢ ﻓﻲ اﻟﺤﺎﺳﻮب وﺑﻘﯿﺔ ﺗﻮﺣﯿﺪ أﺳﺘﺨﺪﺎ ﻣ اﻟﺮﻣﻮز أﺳﺘﺨﺪﺎ ﻣ ﺷﻔﺮة اﻵﺳﻜﻲ ﻛﻮد )ﺣﺎﻟﯿﺎً‬
‫ﻌﻳﻤﻞ ﻋﻠﻰ ﺗﺒﻨﻲ ﺷﻔﺮةﻻ ‪ 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‬‬
‫اﻟﻤﺨﻄﻂ ‪ : ١_٤‬رﺳﻢ ﺨﺗﻄﯿﻄﻲ ﻳﻮﺿﺢ اﻟﻤﺴﺠﻼت ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪ ١٦‬ﺑﺖ‬
‫ﻻ‪٣٢‬ﺑﺖ اﻟﻤﺨﻄﻂ ‪ : ٢_٤‬رﺳﻢ ﺗﺨﻄﯿﻄﻲ ﻳﻮﺿﺢ اﻟﻤﺴﺠﻼت ﺑﻌﺪ ﺗﻮﺳﻌﺘﮫﺎ ﻓﻲ ﻣﻌﺎﻟﺠﺎت‬

‫]‪ [١‬ﻣﺴﺠﻼت اﻷﻏﺮﺎ ﺿ اﻟﻌﺎﻣﺔ ‪: General-Purpose Registers‬‬


‫ﻮھﻲ ﻋﺒﺎرة ﻋﻦ ﻛﻞ ﻣﻦ اﻟﻤﺴﺠﻼت ‪ AX‬و ‪ BX‬و ‪ CX‬و ‪، DX‬ﻃﻮل ﻛﻞ ﻣﻨﮫﺎ ‪١٦‬ﺑﺖ ﺄ ﻳ ﻛﻠﻤﺔ‬
‫ﺄ ﻳ ‪٢‬ﺑﺎﻳﺖ اﻟﺒﺎﻳﺖ اﻟﯿﺴﺎﺮ ﻳ ﻓﯿﮫﻤﺎ ﻳﻌﺮف ﺑﺎﻟﻌﻠﻮي )‪ (High‬أﻣﺎ اﻟﺒﺎﻳﺖ اﻷﻳﻤﻦ ﻓﯿﮫﻤﺎ ﻓﯿﻌﺮف‬
‫ﻼ اﻟﻤﺴﺠﻞ ‪ AX‬ﻳﺘﺄﻟﻒ ﻣﻦ ﻣﺴﺠﻠﯿﻦ اﻟﻌﻠﻮي ﻮھﻮ ‪ AH‬واﻟﻤﻨﺨﻔﺾ‬ ‫ﺑﺎﻟﻤﻨﺨﻔﺾ)‪ (Low‬ﻓﻤﺜ ً‬
‫ﻮھﻮ ‪ ، AL‬ﺄ ﻧ ﺗﻌﺪﻳﻞ اﻟﻤﺴﺠﻞ اﻟﺠﺰﺋﻲ ﺳﻮف ﻳﺆﺛﺮ ﻓﻲ اﻟﻤﺴﺠﻞ اﻷم ﻷﻧﻪ ﺟﺰء ﻣﻨﮫﺎ وأﻳﻀًﺎ‬
‫اﻟﺘﻌﺪﻳﻞ ﻓﻲ اﻟﻤﺴﺠﻞ اﻷم ﺳﻮف ﻳﺆﺛﺮ ﻓﻲ اﻟﻤﺴﺠﻞ اﻟﺠﺰء ‪ ،‬ﺗﻢ ﺗﻮﺳﯿﻊ اﻟﻤﺴﺠﻼت ﻓﻲ‬
‫ﻣﺎﻟﺠﺎتﻻ ‪ ٣٢‬ﺑﺖ ﻣﻊ ﺑﻘﺎء اﻟﻤﺴﺠﻼت ﻧﻔﺴﮫﺎ وﻟﻜﻦ ﻛﻞ ﻣﻨﮫﺎ أﺻﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ‬ ‫ﻌ‬
‫ﻣﻮﺳﻊ ﺑﻄﻮل ‪٣٢‬ﺑﺖ ﻮھﻲ ‪ ، EAX,EBX,ECX,EDX‬ﺄ ﻳ ﺄ ﻧ اﻟﻤﺴﺠﻞ ‪ EAX‬ھﻮ ﺑﻄﻮل ‪٣٢‬ﺑﺖ‬
‫وﻛﺠﺰء ﻣﻨﻪ ھﻨﺎك اﻟﻤﺴﺠﻞ ‪ AX‬ﺑﻄﻮل ‪١٦‬ﺑﺖ واﻟﺬي ﻳﺘﺄﻟﻒ ھﻮ اﻵﺧﺮ ﻣﻦ ﻣﺴﺠﻠﯿﻦ ھﻤﺎ ‪AL‬‬
‫و ‪ AH‬ﺑﻄﻮل ‪٨‬ﺑﺖ ﻟﻜﻞ ﻣﻨﮫﻤﺎ‪.‬‬

‫اﻟﻤﺴﺠﻞ ‪) AX‬ﻣﺴﺠﻞ اﻟﻤﺮﻛﻢ‪: (Register Accumulator -‬‬


‫ھا اﻟﻤﺴﺠﻞ ﻛﺎن ﻣﻦ ﺄھﻢ اﻟﻤﺴﺠﻼت ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٨‬ﺑﺖ اﻟﻘﺪﻳﻤﺔ ﺟﺪًا ﺣﯿﺚ ﻛﺎﻧﺖ‬ ‫ﺬ‬
‫ﻛﻞ اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ واﻟﻤﻨﻄﻘﯿﻪ ﺗﺠﺮي ﻣﻦ ﺧﻼﻟﻪ وﻟﺬﻟﻚ ﻛﺎن ﻳﺴﻤﻰ ﺑﻤﺴﺠﻞ اﻟﻤﺮﻛﻢ‬
‫ﺘﻟﺮاﻛﻢ اﻟﻨﻮاﺗﺞ ﻓﯿﻪ ﻟﻜﻦ ﻣﻌﺎﻟﺠﺎتﻻ ‪ ١٦‬ﺑﺖ وﺳﻌﺖ اﻟﻤﺮوﻧﺔ وﺟﻌﻠﺖ ﻛﻞ ﻣﺴﺠﻼت‬
‫اﻷﻏﺮﺎ ﺿ اﻟﻌﺎﻣﺔ ﺗﺴﺘﻄﯿﻊ ﺄ ﻧ ﺗﺠﺮى ﻣﻦ ﺧﻼﻟﮫﺎ اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﻪ واﻟﻤﻨﻄﻘﯿﺔ اﻻ ﺄ ﻧ‬
‫ﻤ ﺠﻞ ‪ AX‬أو أﺣﺪ أﺟﺰاءه‬ ‫اﻟﻤﺴﺠﻞ ‪ AX‬ﻣ ﺎز ﻻ اﻟﻤﻔﻀﻞ ﻷﺟﺮاءھﺎ ﺣﯿﺚ ﺄ ﻧ أﺳﺘﺨﺪﺎ ﻣ اﻟﺴ‬
‫ﻳﺆﺪ ﻳ ﻣﻊ ﺑﻌﺾ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻰ ﺗﻮﻟﯿﺪ ﺷﻔﺮه أﻗﻞ أﺧﺘﺼﺎرًا )اﻟﻔﺮق ﺑﺎﻳﺖ واﺣﺪ ﻓﻘﻂ ﻟﻜﻞ‬
‫ﺣﺚ ﺗﻌﺮفﻻ ‪٨‬ﺑﺘﺎت‬ ‫ﺗﻌﻠﯿﻤﯿﺔ( ‪ ،‬ﻳﻤﻜﻦ اﺳﺘﺨﺪﺎ ﻣ اﻟﻤﺴﺠﻞ ‪ AX‬ﻛﻤﺴﺠﻠﯿﻦ ھﻤﺎ ‪ AL‬و ‪ AH‬ﯿ‬
‫اﻷوﻟﻰ اﻟﺘﻲ ﻓﻲ اﻟﯿﺴﺎر ﺑﺎﻟﻤﺴﺠﻞ ‪ AL‬ﻻو ‪٨‬ﺑﺘﺎت اﻷﺧﯿﺮه اﻟﺘﻲ ﻓﻲ اﻟﯿﻤﯿﻦ ﺑﺎﻟﻤﺴﺠﻞ‬
‫‪ ، AH‬أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ل ‪ EAX‬ﻮھﻮ اﻟﻤﺴﺠﻞ اﻟﻤﻮﺳﻊ ل ‪ AX‬ﻓﮫﻮ ﺑﻄﻮل ‪٣٢‬ﺑﺖ وﻳﻌﺘﺒﺮ‬
‫اﻟﻤﺴﺠﻞ ‪ AX‬ﻛﺠﺰء ﻣﻨﻪ‪.‬‬

‫اﻟﻤﺴﺠﻞ ‪) BX‬ﻣﺴﺠﻞ اﻟﻘﺎﻋﺪة‪: (Base Register-‬‬


‫ھﻮ اﻟﻤﺴﺠﻞ اﻟﻮﺣﯿﺪ ﻣﻦ ﺑﯿﻦ ﻣﺴﺠﻼت اﻷﻏﺮﺎ ﺿ اﻟﻌﺎﻣﺔ اﻟﺬي ﻳﻤﻜﻦ أﺳﺘﺨﺪاﻣﻪ‬
‫ﻛﺪﻟﯿﻞ)‪ ، (INDEX‬ﻳﻤﻜﻦ أﺳﺘﺨﺪﺎ ﻣ ھﺬا اﻟﻤﺴﺠﻞ ﻟﻠﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ واﻟﻤﻨﻄﻘﯿﺔ وﻛﻤﺎ‬
‫اﻟﻤﺴﺠﻼت اﻷﺧﺮى ﻳﻨﻘﺴﻢ ھﺬا اﻟﻤﺴﺠﻞ اﻟﻰ ﻗﺴﻤﯿﻦ ﺑﻄﻮل ‪ ٨‬ﺑﺖ ھﻤﺎ ‪ BL‬و ‪ BH‬ﻮھﻮ‬
‫ﺿﻤﻦ ﻣﺴﺠﻞ أوﺳﻊ ھﻮ ‪ EBX‬ﺑﻄﻮل ‪٣٢‬ﺑﺖ‪.‬‬

‫اﻟﻤﺴﺠﻞ ‪) CX‬ﻣﺴﺠﻞ اﻟﻌﺪاد‪: (Counter Register-‬‬


‫ﻳﺴﺘﺨﺪ ﻋﺎدة ﻛﻌﺪاد وﻳﺴﺘﺨﺪم ھﺬا اﻟﻤﺴﺠﻞ ﺑﺸﻜﻞ ﺧﺎص ﻣﻊ ﺗﻌﻠﯿﻤﺔ اﻟﺘﻜﺮار ‪LOOP‬‬
‫ﺣﯿﺚ ﻳﻌﻤﻞ ﻛﻌﺪاد ﻟﮫﺎ وﺑﺎﻟﻄﺒﻊ ﻳﻤﻜﻦ اﺳﺘﺨﺪاﻣﺔ ﻓﻲ اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ واﻟﻤﻨﻄﻘﯿﻪ ‪ ،‬وﻛﻤﺎ‬
‫اﻟﻤﺴﺠﻼت اﻷﺧﺮى ﻳﻨﻘﺴﻢ ھﺬا اﻟﻤﺴﺠﻞ اﻟﻰ ﻗﺴﻤﯿﻦ ﺑﻄﻮل ‪ ٨‬ﺑﺖ ھﻤﺎ ‪ CL‬و ‪ CH‬ﻮھﻮ‬
‫ﺿﻤﻦ ﻣﺴﺠﻞ أوﺳﻊ ھﻮ ‪ ECX‬ﺑﻄﻮل ‪٣٢‬ﺑﺖ‪.‬‬

‫اﻟﻤﺴﺠﻞ ‪) DX‬ﻣﺴﺠﻞ اﻟﻤﻌﻄﯿﺎت‪: (Data Register-‬‬


‫ﻳﻔﻀﻞ أﺳﺘﺨﺪﺎ ﻣ ھﺬا اﻟﻤﺴﺠﻞ ﻟﺘﺨﺰﻳﻦ اﻟﻤﻌﻄﯿﺎت ﻓﻲ ﻋﻤﻠﯿﺎت اﻟﺪﺧﻞ واﻟﺨﺮج‬
‫واﻟﻤﻘﺎﻃﻌﺎت وﺑﺎﻟﻄﺒﻊ ﻓﺄﻧﻪ ﻳﻤﻜﻦ أﺳﺘﺨﺪاﻣﻪ ﻛﺒﺎﻗﻲ اﻟﻤﺴﺠﻼت ﻓﻲ اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ‬
‫واﻟﻤﻨﻄﻘﯿﺔ وﻛﻤﺎ اﻟﻤﺴﺠﻼت اﻷﺧﺮى ﻳﻨﻘﺴﻢ ھﺬا اﻟﻤﺴﺠﻞ اﻟﻰ ﻗﺴﻤﯿﻦ ﺑﻄﻮل ‪ ٨‬ﺑﺖ‬
‫ھﻤﺎ ‪ DL‬و ‪ DH‬ﻮھﻮ ﺿﻤﻦ ﻣﺴﺠﻞ أوﺳﻊ ھﻮ ‪ EDX‬ﺑﻄﻮل ‪٣٢‬ﺑﺖ‪.‬‬

‫]‪[٢‬ﻣﺴﺠﻼت اﻷﻗﺴﺎم ‪: Segment Registers‬‬


‫ﺎﻛﻧﺖ اﻟﻌﻨﻮﻧﺔ اﻟﺤﻘﯿﻘﯿﺔ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪١٦‬ﺑﺖ ﺗﺘﻢ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﺧﻄﻮط ﻋﺮض ‪٢٠‬ﺑﺖ ﻮھﻲ‬
‫ﺗﻜﻔﻲ ﻟﻌﻨﻮﻧﺔ ‪١‬ﻣﯿﺠﺎﺑﺎﻳﺖ ﻣﻦ اﻟﺮﺎ ﻣ ﻓﻘﻂ وﻟﺼﻌﻮﺑﺔ اﻟﺘﺄﺷﯿﺮ ﻟﻠﺮﺎ ﻣ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ﻣﺴﺠﻼت ﻣﻦ‬
‫‪١٦‬ﺑﺖ ﻧﺸﺄت ﻓﻜﺮة اﻷﻗﺴﺎم واﻟﻌﻨﻮﻧﺔ اﻟﻤﻨﻄﻘﯿﺔ وﻗﺪ ﻗﺴﻤﺖ اﻟﺮﺎ ﻣ ﻟﻤﻘﺎﻃﻊ ﻛﻞ ﻣﻨﮫﺎ ﺑﻄﻮل‬
‫‪٦٤‬ﻛﯿﻠﻮﺑﺎﻳﺖ)اﻟﺤﺪ اﻷﻗﺼﻰ اﻟﺬي ﻳﻤﻜﻦ ﻋﻮﻧﺘﻪ ب ‪١٦‬ﺑﺖ( ﻮھﺬه اﻷﻗﺴﺎم ﻻﻳﺒﺪأ ﻛﻞ واﺣﺪ‬
‫ﻓﯿﮫﺎ ﺑﻌﺪ اﻵﺧﺮ وأﻧﻤﺎ ھﻲ ﻣﺘﺪاﺧﻠﺔ ﺣﯿﺚ ﻳﺒﺪأ ﻛﻞ ‪١٦‬ﺑﺖ ﻗﺴﻢ ﺟﺪﻳﺪ وﻟﻠﺘﺄﺷﯿﺮ ﻋﻠﻰ ﻣﻮﻗﻊ‬
‫ﻣﺎ ﻳﻠﺰﻣﻨﺎ ﻋﻨﻮﺎ ﻧ اﻟﻤﻘﻄﻊ واﻟﺬي ﺑﻄﻮل ‪١٦‬ﺑﺖ ﺑﺎﻷﺿﺎﻓﺔ اﻟﻰ ﻗﯿﻤﺔ اﻷزاﺣﺔ ﻣﻦ ﺑﺪاﻳﺔ ھﺬا‬
‫اﻟﻤﻘﻄﻊ ﻮھﻲ ﺑﻄﻮل ‪١٦‬ﺑﺖ أﻳﻀًﺎ ﻟﺬﻟﻚ ﻟﺠﺄ ﻣﺼﻤﻤﻮا اﻟﻤﻌﺎﻟﺢ ﻋﻠﻰ وﺿﻊ ﻣﺴﺠﻼت ﺧﺎﺻﺔ‬
‫ﺑﺎﻷﻗﺴﺎم اﻟﺸﺎﺋﻌﺔ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﻮھﻲ ﻗﺴﻢ اﻟﺸﻔﺮة ‪ Code Segment‬وﻗﺴﻢ اﻟﺒﯿﺎﻧﺎت‬
‫‪ Data segment‬وﻗﺴﻢ اﻟﻤﻜﺪﺳﻪ ‪ Stack Segment‬وﻗﺴﻢ اﻟﻤﻘﻄﻊ اﻷﺿﺎﻓﻲ ‪Extra‬‬
‫‪ Segment‬ﺑوﺎﻟﺮﻏﻢ أﻧﻪ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٣٢‬ﺑﺖ ﻳﻤﻜﻦ اﻟﻌﻨﻮﻧﺔ ﺑﺄﺳﺘﺨﺪﺎ ﻣ ‪٣٢‬ﺑﺖ ذاﻛﺮه‬
‫ﺣﻘﯿﻘﯿﺔ ﺄ ﻳ ﻣﺎﻳﺴﺎﻮ ﻳ ‪٤‬ﺟﯿﺠﺎﺑﺎﻳﺖ ﻣﻦ اﻟﺮﺎ ﻣ اﻻ ﺄ ﻧ ﻃﺮﻳﻘﺔ اﻷﻗﺴﺎم ﻣﺎزاﻟﺖ ﻣﻮﺟﻮدة ﺣﺘﻰ‬
‫ﻳﺘﻢ ﺧﺰن ﻋﻨﻮاﻳﻦ ﻛﺜﯿﺮة ﺑﺄﺳﺘﺨﺪﺎ ﻣ ‪٢‬ﺑﺎﻳﺖ ﺑﺪل ‪٤‬ﺑﺎﻳﺖ داﺧﻞ اﻟﻤﻘﻄﻊ اﻟﻮاﺣﺪ ﻣﻊ وﺟﻮد‬
‫ﻋﻨﻮﺎ ﻧ ﻣﻘﻄﻊ واﺣﺪ ﻓﻘﻂ ﻣﺨﺰن ﻗﻲ اﻟﻤﺴﺠﻞ اﻟﻤﻨﺎﺳﺐ ‪).‬ﻣﻼﺣﻈﺔ ‪ :‬ﺗﻢ ﻓﻲ ﻣﻌﺎﻟﺤﺎت‬
‫ﻻ‪٣٢‬ﺑﺖ أﺿﺎﻓﺔ ﻣﺴﺠﻠﯿﻦ أﻗﺴﺎم ﺟﺪﻳﺪﻳﻦ ﺑﻄﻮل ‪ ١٦‬ﺑﺖ أﺿﺎﻓﺔ اﻟﻰ ﻣﺴﺠﻼت اﻷﻗﺴﺎم‬
‫اﻟﺴﺎﺑﻘﺔ واﻟﻤﺴﺠﻠﯿﻦ ھﻤﺎ ‪ FS‬و ‪ GS‬ھﺬﺎ ﻧ اﻟﻘﺴﻤﺎن ﻳﻤﻜﻦ أﺳﺘﺨﺪﻣﮫﻤﺎ ﻛﻤﺎ اﻟﻤﺴﺠﻞ‬
‫‪ ES‬ﻛﻤﺴﺠﻞ ﻗﺴﻢ ﺑﯿﺎﻧﺎت أﺿﺎﻓﻲ (‬

‫ﻗﺴﻢ اﻟﺸﻔﺮة ‪:Code Segment -CS‬‬


‫ﻳﺤﻤﻞ ھﺬا اﻟﻤﺴﺠﻞ ﻋﻨﻮﺎ ﻧ ﺑﺪاﻳﺔ اﻟﻘﺴﻢ اﻟﺨﺎص ﺑﺎﻟﺸﻔﺮة ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ‪.‬‬

‫ﻗﺴﻢ اﻟﺒﯿﺎﻧﺎت ‪: Data Segment -DS‬‬


‫ﻳﺤﻤﻞ ھﺬا اﻟﻤﺴﺠﻞ ﻋﻨﻮﺎ ﻧ ﺑﺪاﻳﺔ ﻗﺴﻢ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ‪.‬‬

‫ﻗﺴﻢ اﻟﻤﻜﺪﺳﺔ ‪: Stack Segment -CS‬‬


‫ﻳﺤﻤﻞ ھﺬا اﻟﻤﺴﺠﻞ ﻋﻨﻮﺎ ﻧ ﺑﺪاﻳﺔ ﻗﺴﻢ اﻟﻤﻜﺪﺳﻪ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ‪.‬‬
‫ﻗﺴﻢ اﻷﺿﺎﻓﻲ ‪: Extra Segment -ES‬‬
‫ﻳﺤﻤﻞ ھﺬا اﻟﻤﺴﺠﻞ ﻋﻨﻮﺎ ﻧ ﺑﺪاﻳﺔ ﻗﺴﻢ أﺿﺎﻓﻲ ﻳﻤﻜﻦ ﺄ ﻧ ﻳﺴﺘﻌﻤﻞ ھﺬا اﻟﻘﺴﻢ اﻷﺿﺎﻓﻲ‬
‫ﻛﻘﺴﻢ ﺑﯿﺎﻧﺎت آﺧﺮ‪.‬‬

‫]‪[٣‬ﻣﺴﺠﻼت اﻟﺘﺄﺷﯿﺮ ‪: Pointer Registers‬‬


‫ﺗﺤﺘﻮي ﻣﺴﺠﻼت اﻟﺘﺄﺷﯿﺮ ﻮھﻲ ﺑﻄﻮل ‪١٦‬ﺑﺖ ﻋﻠﻰ ﻋﻨﻮﺎ ﻧ ﻣﻦ ‪ ١٦‬ﺑﺖ ﻮھﻲ ﺗﺴﺘﺨﺪم‬
‫ﺑﺸﻜﻞ ﺧﺎص ﻣﻊ اﻟﻌﻤﻠﯿﺎت اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﻜﺪﺳﻪ وﻋﺎدة ﺗﺸﻜﻞ اﻟﻌﻨﻮاﻳﻦ اﻟﺘﻲ ﺑﮫﺎ اﻷزاﺣﺔ‬
‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﺴﺠﻞ ﻗﺴﻢ اﻟﻤﻜﺪﺳﺔ ‪ SS‬وﻣﺴﺠﻼت اﻟﺘﺄﺷﯿﺮ ھﻲ ﻣﺴﺠﻼن ﻣﺴﺠﻞ ﻣﺆﺷﺮ‬
‫اﻟﻘﺎﻋﺪة ‪ Base Pointer BP‬و ﻣﺴﺠﻞ ﻣﺆﺷﺮ اﻟﻤﻜﺪﺳﻪ ‪. Pointer SP Stack‬‬

‫ﻣﺴﺠﻞ ﻣﺆﺷﺮ اﻟﻘﺎﻋﺪة ‪: Base Pointer -BP‬‬


‫ﻳﻌﻤﻞ ھﺬا اﻟﻤﺴﺠﻞ ﻋﻠﻰ ﺗﺴﮫﯿﻞ اﻟﻮﺻﻮل اﻟﻰ اﻟﻮﺳﯿﻄﺎت)اﻟﺒﺎرﻣﺘﺮﺎ ﺗ( واﻟﺘﻲ ﺗﺤﺘﻮي‬
‫ﻋﻠﻰ ﻋﻨﻮاﻳﻦ وﻣﻌﻄﯿﺎت واﻟﺘﻲ دﻓﻌﺖ ‪ PUSH‬ﺑﺸﻜﻞ ﻣﺆﻗﺖ اﻟﻰ اﻟﻤﻜﺪﺳﻪ ﻋﻨﺪ أﺳﺘﺪﻋﺎء‬
‫روﺗﯿﻤﺎت ﻓﺮﻋﯿﺔ ﻣﻦ اﻟﺒﺮاﻣﺞ ﻣﻊ وﺳﯿﻄﺎت ﻣﻤﺮة ‪ ،‬وﺳﻊ ھﺬا اﻟﻤﺴﺠﻞ ﻓﻲ ﻣﻌﺎﻟﺠﺎت‬
‫ﻻ‪٣٢‬ﺑﺖ وأﺻﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ أوﺳﻊ ﺑﻄﻮل ‪٣٢‬ﺑﺖ ھﻮ ‪.EBP‬‬

‫ﻣﺴﺠﻞ ﻣﺆﺷﺮ اﻟﻤﻜﺪﺳﻪ ‪: Stack Pointer -SP‬‬


‫ﻳﺤﺘﻮي اﻟﻤﺴﺠﻞ ‪ SP‬ﻋﻠﻰ ﻛﻠﻤﺔ اﻟﺬاﻛﺮة اﻟﺤﺎﻟﯿﻪ اﻟﺘﻲ ﺳﺘﻌﺎﻟﺞ ﻓﻲ اﻟﻤﻜﺪس ‪ ،‬وﺳﻊ ھﺬا‬
‫ﻟاﻤﺴﺠﻞ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٣٢‬ﺑﺖ ﻟﯿﺼﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ أوﺳﻊ ﺑﻄﻮل ‪٣٢‬ﺑﺖ ھﻮ ‪. ESP‬‬
‫ھﺬا اﻟﻤﺴﺠﻞ ﻳﻌﺪل آﻟﯿًﺎ ﺑﻮاﺳﻄﺔ اﻟﻤﻌﺎﻟﺞ ﻣﻊ ﻋﻤﻠﯿﺔ دﻓﻊ ‪ PUSH‬أو ﺳﺤﺐ ‪ POP‬ﻓﻲ‬
‫اﻟﻤﻜﺪس ﻟﯿﺸﯿﺮ دوﻣًﺎ اﻟﻰ ﻗﻤﺔ اﻟﻤﻜﺪس ‪.‬‬

‫]‪[٤‬اﻟﻤﺴﺠﻼت اﻟﺪﻟﯿﻠﯿﺔ ‪: Index Registers‬‬


‫ھﻲ ﻣﺴﺠﻼت ﺑﻄﻮل ‪١٦‬ﺑﺖ ﺗﺴﺘﺨﺪم ﻓﻲ ﻋﻨﻮﻧﺔ ﺑﯿﺘﺎت ﻣﻘﻄﻊ اﻟﺒﯿﺎﻧﺎت وﻛﺬﻟﻚ ﻓﻲ‬
‫ﻋﻤﻠﯿﺎت اﻟﺘﺄﺷﯿﺮ اﻟﻰ اﻟﺴﻼﺳﻞ اﻟﻨﺼﯿﺔ ‪ ، Strings‬ﻮھﻨﺎك ﻣﺴﺠﻼت دﻟﯿﻠﯿﺎن ھﻤﺎ ‪ SI‬و ‪DI‬‬
‫وﻋﺎدة ﻣﺎﻳﺴﺘﺨﺪﻣﺎن ﻣﻌًﺎ داﺋﻤًﺎ ﺑﻐﯿﻪ ﺗﻨﻔﯿﺬ ﻋﻤﻠﯿﺔ ﻣﺎ ‪.‬‬

‫اﻟﻤﺴﺠﻞ اﻟﺪﻟﯿﻠﻲ اﻟﻤﺼﺪﺮ ﻳ ‪: Source Index -SI‬‬


‫ﻳﺴﺘﺨﺪم ھﺬا اﻟﻤﺴﺠﻞ ﻓﻲ اﻟﺘﺄﺷﯿﺮ ﻋﻠﻰ اﻟﻨﺺ اﻟﻤﺼﺪر وذﻟﻚ ﻷﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ‬
‫ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻧﺼﻮص وﻛﺬﻟﻚ ﻳﺴﺘﺨﺪم ﻓﻲ ﻓﻲ ﻋﻨﻮﻧﺔ ﺑﯿﺘﺎت ﻣﻘﻄﻊ اﻟﺒﯿﺎﻧﺎت ‪،‬وﺳﻊ ھﺬا‬
‫ﻟاﻤﺴﺠﻞ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٣٢‬ﺑﺖ ﻟﯿﺼﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ أوﺳﻊ ﺑﻄﻮل ‪٣٢‬ﺑﺖ ھﻮ ‪. ESI‬‬

‫اﻟﻤﺴﺠﻞ اﻟﺪﻟﯿﻠﻲ اﻟﮫﺪﻓﻲ ‪: Destination Index -DI‬‬


‫ﻳﺴﺘﺨﺪم ھﺬا اﻟﻤﺴﺠﻞ ﻓﻲ اﻟﺘﺄﺷﯿﺮ ﻋﻠﻰ اﻟﻨﺺ اﻟﮫﺪف وذﻟﻚ ﻷﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ‬
‫ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻧﺼﻮص وﻛﺬﻟﻚ ﻳﺴﺘﺨﺪم ﻓﻲ ﻓﻲ ﻋﻨﻮﻧﺔ ﺑﯿﺘﺎت ﻣﻘﻄﻊ اﻟﺒﯿﺎﻧﺎت ‪،‬وﺳﻊ ھﺬا‬
‫ﻟاﻤﺴﺠﻞ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٣٢‬ﺑﺖ ﻟﯿﺼﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ أوﺳﻊ ﺑﻄﻮل ‪٣٢‬ﺑﺖ ھﻮ ‪. EDI‬‬

‫]‪[٥‬ﻣﺴﺠﻼت اﻟﺤﺎﻟﺔ واﻟﺘﺤﻜﻢ ‪: Control Registers Status and‬‬


‫ﺗﺘﻜﻮن ھﺬه اﻟﻤﺴﺠﻼت ﻣﻦ ﻣﺴﺠﻠﯿﻦ ﻛﻞ ﺑﻄﻮل ‪١٦‬ﺑﺖ ھﻤﺎ ﻣﺴﺠﻞ اﻷﻋﻼم ‪Flags‬‬
‫‪ Register‬وﻣﺴﺠﻞ ﻣﺆﺷﺮ اﻟﺘﻌﻠﯿﻤﯿﺔ ‪. Instruction Pointer - IP‬‬

‫ﻣﺴﺠﻞ ﻣﺆﺷﺮ اﻟﺘﻌﻠﯿﻤﯿﺔ ‪: Instruction Pointer - IP‬‬


‫ﻳﺤﺘﻮي اﻟﻤﺴﺠﻞ ‪ IP‬ﻋﻠﻰ أزاﺣﺔ اﻟﺘﻌﻠﯿﻤﯿﺔ اﻟﺘﺎﻟﯿﺔ اﻟﺘﻲ ﺳﺘﻨﻔﺬ ‪ ،‬ﺄ ﻳ ﺄ ﻧ اﻟﻤﺴﺠﻞ ﻋﺒﺎرة‬
‫ﻋﻦ ﻣﺆﺷﺮ اﻟﻰ اﻟﺘﻌﻠﯿﻤﯿﺔ اﻟﺘﺎﻟﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ ﻣﻘﻄﻊ اﻟﺸﻔﺮة ‪CS-Code Segment‬‬
‫ﻟاﻤﻨﻔﺬ ﺣﺎﻟﯿًﺎ ‪،‬وﺳﻊ ھﺬا اﻟﻤﺴﺠﻞ ﻓﻲ ﻣﻌﺎﻟﺠﺎتﻻ ‪٣٢‬ﺑﺖ ﻟﯿﺼﺒﺢ ﺟﺰء ﻣﻦ ﻣﺴﺠﻞ أوﺳﻊ‬
‫ﺑﻄﻮل ‪٣٢‬ﺑﺖ ھﻮ ‪.EIP‬‬
‫وﻣﺎ ﺗﻌﻠﯿﻤﺎت اﻟﻘﻔﺰ واﻟﺘﻜﺮار اﻟﻰ ﺗﻌﺪﻳﻞ ﻟﻠﻤﺴﺠﻞ ‪. IP‬‬

‫ﻣﺴﺠﻞ اﻷﻋﻼم ‪: Flags Register‬‬


‫ﻮھﻮ ﻣﺴﺠﻞ ﺑﻄﻮل ‪١٦‬ﺑﺖ ﻳﺤﺘﻮي ﻋﻠﻰ أﻋﻼم ﻃﻮل ﻛﻞ ﻣﻨﮫﺎ ‪١‬ﺑﺖ ﻓﻘﻂ وﺗﺴﺘﺨﺪم‬
‫ﺘﻟﻌﻜﺲ ﺣﺎﻟﺔ آﺧﺮ ﻋﻤﻠﯿﺔ أو ﻟﻠﺘﺤﻜﻢ ﺑﻌﻤﻠﯿﺎت ﻣﻌﯿﻨﻪ وﻛﻞ ﻋﻠﻢ ﻟﻪ ﻣﻮﻗﻊ ﻣﻌﯿﻦ ﻓﻲﻻ ‪١٦‬‬
‫ﺑﺖ ﻋﻠﻤًﺎ ﺑﺄن ‪ ٩‬ﻓﻘﻂ ﻣﻨﮫﺎ ﻣﺤﺠﻮزة واﻟﺒﺎﻗﻲ ﻏﯿﺮ ﻣﻌﺮﻓﺔ وﻟﯿﺲ ﻋﻠﯿﻚ ﺣﻔﻆ ﻣﻮاﻗﻊ ھﺬه‬
‫اﻷﻋﻼم ﻷﻧﻚ ﺳﺴﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﺑﺎﻟﺮﻣﺰ اﻟﺬي ﻳﺮﻣﺰ ﻟﮫﺎ وﻛﻞ ﻋﻠﻢ ﻟﻪ رﻣﺰ ﻣﻜﻮن ﻣﻦ ﺣﺮف‬
‫واﺣﺪ ﻓﻘﻂ ﻳﺪل ﻋﻠﯿﻪ وﻳﺘﺒﻌﻪ أﺣﯿﺎﻧًﺎ اﻟﺤﺮف ‪ F‬أﺧﺘﺼﺎر ‪ FLAG‬ﻟﻠﺘﻮﺿﯿﺢ أﻧﻪ ﻋﻠﻢ ‪ ،‬ﻛﻞ ﻋﻠﻢ أﻣﺎ‬
‫ﻳﻜﻮن واﺣﺪ ﺄ ﻳ ‪ SET‬أو ﺻﻔﺮ ﺄ ﻳ ‪. CLEAR‬‬

‫ﻷاﻋﻼم اﻟﺬي ﻃﻮﻟﺔﻻ ‪١٦‬ﺑﺖ ﻣﺨﻄﻂ ‪ : ٣_٤‬ھﺬا اﻟﻤﺨﻄﻂ ﻳﻮﺿﺢ ﻣﺴﺠﻞ‬


‫وأﺧﺘﺼﺎرﺗﮫﺎ ﻣوﻮﻗﻊ ﻛﻞ ﻋﻠﻢ ﻣﻦ اﻷﻋﻼمﻻ ‪ ٩‬اﻟﻤﺤﺠﻮزة‬

‫ﻮھﻨﺎك ﻧﻮﻋﯿﻦ ﻣﻦ اﻷﻋﻼم ھﻲ أﻋﻼم اﻟﺤﺎﻟﺔ ‪ Status Flags‬وأﻋﻼم اﻟﺘﺤﻜﻢ ‪Control Flags‬‬
‫‪.‬‬

‫‪#‬أﻋﻼم اﻟﺘﺤﻜﻢ ‪: Control Flags‬‬


‫ﻮھﻲ أﻋﻼم ﻣﺨﺼﺼﺔ ﻟﻀﺒﻂ ﻗﯿﻤﺘﮫﺎ ﻣﻦ ﻗﺒﻞ اﻟﻤﺒﺮﻣﺞ أو اﻟﻌﺘﺎد وﻳﺘﻢ ﺿﺒﻄﮫﺎ ﻋﻨﺪ اﻟﻘﯿﺎم‬
‫ﺑﺎﻟﻤﻘﺎﻃﻌﺎت أو أﺳﺘﺪﻋﺎء اﻟﺒﺮاﻣﺞ اﻟﻔﺮﻋﯿﺔ أو ﺑﻌﺾ اﻷواﻣﺮ ﺑﮫﺪف اﻟﺘﺤﻜﻢ ﺑﺸﺊ ﻣﺎ ﻮھﺬه‬
‫اﻷﻋﻼم ھﻲ ‪:‬‬

‫‪ .١‬ﻋﻠﻢ اﻷﺗﺠﺎه )‪: (DF=direction flag‬‬


‫ﻳﺆﺛﺮ ﻓﻲ اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﻲ ﺗﻘﻮم ﺑﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻣﺜﻞ ‪ .MOVS,CMPS,SCAS‬ﻋﻨﺪﻣﺎ ﻳﻜﻮن‬
‫اﻟﻌﻠﻢ ‪ UP=١‬ﻳﺄﺧﺬ اﻷﻧﺘﻘﺎل أﺗﺠﺎه اﻟﻄﺒﯿﻌﻲ أﻣﺎ ﻋﻨﺪﻣﺎ ﻳﻜﻮن ‪ DOWN=٠‬ﻳﺄﺧﺬ أﻧﺘﻘﺎل‬
‫اﻟﺒﯿﺎﻧﺎت أﺗﺠﺎه ﻣﻌﺎﻛﺴًﺎ ) ﻗﯿﻤﺔ اﻟﻌﻠﻢ ‪ DF‬ﻋﻨﺪ ﺑﺪاﻳﺔ اﻟﺒﺮﻧﺎﻣﺞ =‪ .(١‬ﻟﻀﺒﻂ اﻟﻌﻠﻢ ﺑﻮاﺣﺪ‬
‫ﻧﺴﺘﺨﺪم اﻟﺘﻌﻠﯿﻤﺔ ‪ std‬وﻟﻀﺒﻄﻪ ﺑﺼﻔﺮ ‪. cld‬‬

‫‪ .٢‬ﻋﻠﻢ اﻟﻤﻘﺎﻃﻌﻪ )‪: (if=intrreupt flag‬‬


‫ﻳﺤﺪد ھﺬا اﻟﻌﻠﻢ اذا ﻣﺎﻛﺎن ﺑﻤﻘﺪور اﻟﻨﻈﺎم أﺟﺮاء ﻣﻘﺎﻃﻌﺎت أو ﻻ ‪ ،‬وﻳﻀﺒﻂ ھﺬا اﻟﻌﻠﻢ‬
‫ﺑﻮاﺳﻄﺔ أﺟﮫﺰة اﻟﮫﺎردوﻳﺮ وﻛﺬﻟﻚ وﻗﺖ اﻟﻨﻈﺎم ‪ ،‬ﺗﺴﺘﻄﯿﻊ أﻧﺖ ﺿﺒﻄﻪ أو ﺗﺼﻔﯿﺮه اذا ﻛﻨﺖ‬
‫ﺗﺮﻳﺪ ﺣﺪﻮ ﺛ ﻣﻘﺎﻃﻌﺎت ﺧﺎرﺟﯿﺔ أو ﻻ ‪ ،‬اذا ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻌﻠﻢ=‪ ١‬ﻓﮫﺬا ﻳﻌﻨﻲ ﻣﻔﻌﻞ ‪enable‬‬
‫وﻳﻤﻜﻦ أﺟﺮاء اﻟﻤﻘﺎﻃﻌﺎت أﻣﺎ اذا ﻛﺎن ﺻﻔﺮ ﻓﺄﻧﻪ ﻏﯿﺮ‪-‬ﻣﻔﻌﻞ ‪ disabled‬وﻻﻳﻤﻜﻦ أﺟﺮاء‬
‫اﻟﻤﻘﺎﻃﻌﺎت ) ﻗﯿﻤﺔ اﻟﻌﻠﻢ ‪ IF‬ﻋﻨﺪ ﺑﺪاﻳﺔ اﻟﺒﺮﻧﺎﻣﺞ =‪ .(١‬ﻟﻀﺒﻂ اﻟﻌﻠﻢ ﺑﻮاﺣﺪ ﻧﺴﺘﺨﺪم ‪sti‬‬
‫ﺿﺒﻄﻪ ﺑﺼﻔﺮ ‪. CLI‬‬
‫‪ .٣‬ﻋﻠﻢ اﻟﻤﺼﯿﺪة )‪: (tf=trap flag‬‬
‫ﻳﺘﯿﺢ ھﺬا اﻟﻌﻠﻢ وﺿﻊ اﻟﻤﻌﺎﻟﺞ ﻓﻲ ﻧﻤﻂ اﻟﺨﻄﻮة اﻟﻮاﺣﺪة ﻓﻲ اﻟﻮﻗﺖ اﻟﻮﺣﺪ ) ‪single step‬‬
‫‪ (mode‬ﻣﻤﺎ ﻳﺴﻤﺢ ﻟﺒﺮاﻣﺞ ﻓﺤﺺ اﻷﺧﻄﺎء ﻛﺎﻟﺪﻳﺒﻐﺮ ﺑﺘﺘﺒﻊ اﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬اذا ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻌﻠﻢ‬
‫واﺣﺪ=‪ ON‬ﻓﺄن اﻟﻨﻤﻂ ﻳﻌﻤﻞ أﻣﺎ اذا ﻛﺎن ﺻﻔﺮ=‪ off‬ﻓﺄن اﻟﻨﻤﻂ ﻻﻳﻌﻤﻞ ) ﻗﯿﻤﺔ اﻟﻌﻠﻢ ‪ TF‬ﻋﻨﺪ‬
‫ﺑﺪاﻳﺔ اﻟﺒﺮﻧﺎﻣﺞ =‪. (٠‬‬

‫‪#‬أﻋﻼم اﻟﺤﺎﻟﺔ ‪: Status Flags‬‬


‫ھﺬه اﻷﻋﻼم ﺗﻀﺒﻂ آﻟﯿًﺎ ﺑﻌﺪ ﻛﻞ ﻋﻤﻠﯿﺔ رﻳﺎﺿﯿﺔ أو ﻣﻨﻄﻘﯿﺔ ﻮھﻲ ﺗﻌﻜﺲ ھﺬه اﻟﻌﻤﻠﯿﺔ ‪،‬‬
‫وﻳﻤﻜﻦ ﺑﻌﺪ اﻟﻌﻤﻠﯿﺔ اﻟﺘﺤﻘﻖ ﻣﻦ ﻗﯿﻢ ھﺬه اﻷﻋﻼم ﻟﺘﻨﻔﯿﺬ ﻋﻤﻠﯿﺎت ﻣﺜﻞ اﻟﺸﺮﻮﻃ واﻟﺤﻠﻘﺎت‬
‫ﻮھﺬه اﻷﻋﻼم ھﻲ ‪:‬‬

‫‪ .١‬ﻋﻠﻢ اﻟﺤﻤﻞ )‪: (flag cf=carry‬‬


‫ﻳﻀﺒﻂ ھﺬا اﻟﻌﻠﻢ=‪ ١‬اذا ﻛﺎن ﻧﺘﯿﺠﺔ آﺧﺮ ﻋﻤﻠﯿﺔ ﻛﺒﯿﺮة ﺟﺪًا ﻋﻠﻰ اﻟﮫﺪف أو اﻟﻤﻘﺼﺪ )ﻓﻲ‬
‫اﻷﻋﺪاد اﻟﺘﻲ ﺑﺪﻮ ﻧ أﺷﺎرة ﻓﻘﻂ ( ‪ ،‬ﻣﺜﺎل ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ‪:‬‬

‫‪mov ah,٢٠٠‬‬
‫‪add ah,١٠٠‬‬

‫ﺑﻤﺎ ﺄ ﻧ اﻟﻤﺴﺠﻞ ‪ AH‬ھﻮ ‪٨‬ﺑﺖ ﻓﺄن أﻗﺼﻰ ﻗﯿﻤﺔ ﻳﺘﺤﻤﻠﮫﺎ ھﻲ ‪ ٢٥٦‬وﺑﻤﺎ ﺄ ﻧ اﻟﻘﯿﻤﺔ ﻓﻲ‬
‫اﻟﻤﺴﺠﻞ ھﻲ ‪ ٢٠٠‬ﺛﻢ أﺿﻔﻨﺎ ﻟﮫﺎ ‪ ١٠٠‬ﻓﺄن اﻟﺠﻮﺎ ﺑ أﻛﺒﺮ ﻣﻦ اﻟﮫﺪف )‪ aH‬ھﻨﺎ( ﻟﺬﻟﻚ اﻟﻌﻠﻢ‬
‫‪ CF‬ﺳﻮف ﻳﻀﺒﻂ=‪ ١‬ﺑﻌﺪ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ‬
‫ﻟﻀﺒﻂ ﻟﻌﻠﻢ ﺑﺮﻣﺠﯿًﺎ ‪ stc‬وﻟﺘﺼﻔﯿﺮه ‪clc‬‬

‫‪ .٢‬ﻋﻠﻢ اﻟﻔﯿﺾ )‪: (OF=overflow flag‬‬


‫ھﻮ ﻧﻔﺲ ﻋﻠﻢ اﻟﺤﻤﻞ ﻟﻜﻦ ﻣﻊ اﻟﻌﻤﻠﯿﺎت ﺬ ﻳ اﻷﺷﺎرة ﺄ ﻳ أﻧﻪ ﻳﻀﺒﻂ اذا ﻛﺎن ﻧﺎﺗﺞ آﺧﺮ‬
‫ﻋﻤﻠﯿﺔ أﻛﺒﺮ أو أﺻﻐﺮ ﻣﻦ ﺣﺪود اﻟﮫﺪف ‪ ،‬ﻣﺜﺎل ‪:‬‬

‫‪mov ah,-١٠٠‬‬
‫‪add ah,-٥٠‬‬

‫ﺑﻤﺎ ﺄ ﻧ أﺻﻐﺮ ﻗﯿﻤﺔ ﻳﺘﺤﻤﻠﮫﺎ اﻟﻤﺴﺠﻞ ‪ AH‬ھﻲ ‪ ١٢٨-‬ﻟﻜﻦ ﻧﺎﺗﺞ اﻟﻌﻤﻠﯿﺔ ‪ ١٥٠-‬ﻓﺄن ﻋﻠﻢ‬
‫اﻟﻔﯿﺾ ﻳﻀﺒﻂ=‪١‬‬

‫‪ .٣‬ﻋﻠﻢ اﻷﺷﺎرة )‪: (sf=sign flag‬‬


‫ﻳﻀﺒﻂ ھﺬا اﻟﻌﻠﻢ اذا ﻛﺎن ﻧﺎﺗﺞ آﺧﺮ ﻋﻤﻠﯿﺔ رﻳﺎﺿﯿﺔ أو ﻣﻨﻄﻘﯿﺔ ﺳﺎﻟﺐ وﻳﺼﻔﺮ اذا ﻣﻮﺟﺐ )ﻓﻲ‬
‫اﻟﻮاﻗﻊ ﺄ ﻧ اﻟﻌﻠﻢ ﻧﺴﺨﺔ ﻣﻦ اﻟﺒﺖ اﻷﺧﯿﺮة ﻟﻠﺠﻮﺎ ﺑ) ﺑﺖ اﻷﺷﺎرة( ‪ -‬ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘًﺎ ﻓﺄن‬
‫اﻟﻌﺪد ﺳﺎﻟﺐ اذا اﻟﺒﺖ اﻷﺧﯿﺮة ‪ ١‬وﻣﻮﺟﺐ اذا ﺻﻔﺮ ( ‪.‬‬

‫‪ .٤‬ﻋﻠﻢ اﻟﺼﻔﺮ)‪: (zf=zero flag‬‬


‫ﻳﻀﺒﻂ ھﺬا اﻟﻌﻠﻢ=‪ ١‬اذا ﻛﺎﻧﺖ ﻧﺘﯿﺠﺔ آﺧﺮ ﻋﻤﻠﯿﺔ رﻳﺎﺿﯿﺔ أو ﻣﻨﻄﻘﯿﺔ ﺗﺴﺎﻮ ﻳ ﺻﻔﺮ ‪.‬‬

‫‪ .٥‬ﻋﻠﻢ اﻟﺤﻤﻞ اﻟﻤﺴﺎﻋﺪ)‪: (af=auxiliary carry flag‬‬


‫ﻳﻀﺒﻂ اﻟﻌﻠﻢ=‪ ١‬اذا ﺗﺴﺒﺒﺖ آﺧﺮ ﻋﻤﻠﯿﺔ رﻳﺎﺿﯿﺔ أو ﻣﻨﻄﻘﯿﺔ ﺣﻤﻞ ﻣﻦ اﻟﺒﺖ اﻟﺜﺎﻟﺜﺔ اﻟﻰ اﻟﺒﺖ‬
‫اﻟﺮاﺑﻌﺔ أو أﺳﺘﻼف ﻣﻦ اﻟﺒﺖ اﻟﺮاﺑﻌﻪ اﻟﻰ اﻟﺒﺖ اﻟﺜﺎﻟﺜﻪ ‪ .‬ھﺬا اﻟﻌﻠﻢ ﻻﺗﻮﺟﺪ ﻟﻪ ﻓﺎﺋﺪة‬
‫واﺿﺤﺔﻮھﻮ ﻗﻠﯿﻞ اﻷﺳﺘﺨﺪﺎ ﻣ ﺑﺮﻣﺠﯿًﺎ ‪.‬‬

‫‪ .٦‬ﻋﻠﻢ اﻷزدواﺟﯿﺔ ‪ -‬اﻟﺘﺤﻘﻖ )‪: (pf=parity flag‬‬


‫ﺑﺒﺴﺎﻃﺔ ﻳﻀﺒﻂ=‪ ١‬ھﺬا اﻟﻌﻠﻢ اذا ﻛﺎن ﻋﺪد اﻟﻮﺣﺎﻳﺪ ﻓﻲ ﻧﺎﺗﺞ آﺧﺮ ﻋﻤﻠﯿﺔ رﻳﺎﺿﯿﺔ أو ﻣﻨﻄﻘﯿﺔ‬
‫زوﺟﯿًﺎ وﺑﺼﻔﺮ اذا ﻛﺎن ﻓﺮدﻳًﺎ ‪ ،‬ﻣﺜﺎل ﻟﻮ ﻛﺎن ﺟﻮﺎ ﺑ آﺧﺮ ﻋﻤﻠﯿﺔ = ‪ ٠٠١٠٠٠١٠‬ﻓﺄن اﻟﻌﻠﻢ‬
‫ﺳﻮف ﻳﻀﺒﻂ=‪ ١‬ﻷن ﻋﺪد اﻟﺒﺘﺎت اﻟﺘﻲ ﺗﺤﺘﻮي وﺣﺎﻳﺪ =‪ ٢‬ﻮھﻮ ﻋﺪد زوﺟﻲ أﻣﺎ اذا ﻛﺎن‬
‫ﻼ = ‪ ١١١٠٠٠٠٠‬ﻓﺄن اﻟﻌﻠﻢ ﻳﺼﻔﺮ ﻷن ﻋﺪد اﻟﺒﺘﺎت اﻟﺘﻲ ﺗﺤﻮي وﺣﺎﻳﺪ=‪ ٣‬ﻮھﻮ‬ ‫اﻟﺠﻮﺎ ﺑ ﻣﺜ ً‬
‫ﻋﺪد ﻓﺮﺪ ﻳ ‪ .‬وﻛﻤﺎ ﻋﻠﻢ اﻟﺤﻤﻞ اﻟﻤﺴﺎﻋﺪ ‪ AF‬ﻓﺄن أﺳﺘﻌﻤﺎﻟﺔ ﻗﻠﯿﻞ ﺑﺮﻣﺠﯿًﺎ وﻳﺴﺘﺨﺪم ﻋﺎدة‬
‫ﻣﻦ ﻗﺒﻞ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ﻷدارة اﻟﺬاﻛﺮة وﻛﺬﻟﻚ ﺑﺮاﻣﺞ اﻷﺗﺼﺎل ﻟﺘﺤﻘﻖ ﻣﻦ ﺳﻼﻣﺔ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺮﺳﻠﺔ ‪.‬‬

‫ﻻﺣﻂ ﺄ ﻧ ﻛﻞ ﻣﻦ اﻷﻋﻼم ]ﻋﻠﻢ اﻟﻤﺼﯿﺪة )‪/(flag tf=trap‬ﻋﻠﻢ اﻟﻔﯿﺾ ) ‪OF=overflow‬‬


‫‪/(flag‬ﻋﻠﻢ اﻷﺷﺎرة )‪/(sf=sign flag‬ﻋﻠﻢ اﻟﺼﻔﺮ)‪/(flag zf=zero‬ﻋﻠﻢ اﻟﺤﻤﻞ‬
‫اﻟﻤﺴﺎﻋﺪ)‪/(af=auxiliary carry flag‬ﻋﻠﻢ اﻷزدواﺟﯿﺔ ‪ -‬اﻟﺘﺤﻘﻖ )‪ [(pf=parity flag‬ﻻﻳﻮﺟﺪ‬
‫ﻟﮫﻢ ﺗﻌﻠﯿﻤﺎت ﻣﺒﺎﺷﺮة ﻟﻀﺒﻄﮫﻢ أو ﺗﺼﻔﯿﺮھﻢ وﺗﺤﺘﺎج ﺄ ﻧ ﺗﺴﺘﺨﺪم ﻃﺮﻳﻖ ﻓﯿﮫﺎ أﻧﺤﻨﺎءة‬
‫ﺑﺴﯿﻄﺔ ﻟﺘﻌﺪﻳﻞ ﻗﯿﻢ ھﺬه اﻷﻋﻼم ﺳﻮف ﻳﺘﻢ ﺷﺮﺣﮫﺎ ﻓﻲ درﻮ ﺳ ﻗﺎدﻣﺔ ﻋﻠﻤًﺎ ﺑﺄن اﻟﺒﺮاﻣﺞ‬
‫اﻟﻌﺎدﻳﺔ ﻟﻦ ﺗﺤﺘﺎج ﻟﺘﻌﺪﻳﻞ ﻗﯿﻢ ھﺬه اﻷﻋﻼم وﻛﻞ ﻣﺎﺳﺘﺤﺘﺎﺟﻪ ھﻮ ﻗﺮآة اﻟﻘﯿﻢ اﻟﺘﻲ ﺑﮫﺎ ‪.‬‬

‫ﺗﻌﻠﯿﻤﺎت وأواﻣﺮ اﻷﺳﻤﺒﻠﻲ ‪:‬‬


‫ﺗﺘﻜﻮن اﻟﺘﻌﻠﯿﻤﻪ اﻟﻮاﺣﺪة ﻓﻲ اﻷﺳﻤﺒﻠﻲ ﻣﻦ ﺗﻤﺜﯿﻞ ﺑﺴﯿﻂ ﺑﺎﻷﺣﺮف اﻷﻧﺠﻠﯿﺰﻳﻪ ﻳﻘﺎﺑﻠﻪ‬
‫ﻻ ﺟﺰء اﻷﻣﺮ ﻮھﻮ أﻣﺮ ﻳﺪل‬
‫ﺑﺎﻷرﻗﺎم ﺗﻌﻠﯿﻤﺔ ﻟﻐﺔ آﻟﻪ ‪ ،‬ﺗﺘﻜﻮن ﻛﻞ ﺗﻌﻠﯿﻤﺔ ﻣﻦ ﻣﻤﺎﻳﻠﻲ ‪ :‬أو ُ‬
‫ﻋﻠﻰ ﻧﻮع اﻟﻌﻤﻠﯿﺔ اﻟﻤﻄﻠﻮﺑﺔ ﻣﺜﻞ ‪) ADD‬ﻟﻠﺠﻤﻊ( ‪ ،‬اﻟﺠﺰء اﻟﺜﺎﻧﻲ ھﻮ اﻟﻮﺳﺎﺋﻂ ﻋﻠﻤًﺎ ﺑﺄن‬
‫ﺑﻌﺾ اﻟﺘﻌﻠﯿﻤﺎت ﻻﻳﺄﺧﺬ وﺳﺎﺋﻂ واﻟﺠﺰء اﻵﺧﺮ وﺳﯿﻄﺔ واﺣﺪة ﻓﻘﻂ واﻟﺒﻌﺾ اﻵﺧﺮ أﻛﺜﺮ ﻣﻦ‬
‫ذﻟﻚ ‪ ،‬ﺗﺤﺪد ھﺬه اﻟﻮﺳﺎﺋﻂ اﻟﺸﺊ اﻟﺬي ﺳﯿﻌﻤﻞ ﻋﻠﯿﻪ اﻷﻣﺮ ‪،‬‬
‫ﻓﺎﻷﻣﺮ ‪ ADD‬ﻟﻮﺣﺪه ﻋﻘﯿﻢ ﻻﻳﺪل ﻋﻠﻰ ﺷﺊ ﻟﻜﻦ اﻷﻣﺮ ‪ ٥ADD AX,‬ﻳﺪل ﻋﻠﻰ ﺟﻤﻊ اﻟﺮﻗﻢ‬
‫‪ ٥‬ﻣﻊ اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﺴﺠﻞ ‪ AX‬وﻳﻮﺿﺢ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﺑﻌﺾ اﻷواﻣﺮ‬

‫‪clc‬‬ ‫وﺳﺎﺋﻂ ﻓﻘﻂ أﻣﺮ ﺑﺪﻮ ﻧ ;‬


‫‪dec ax‬‬ ‫وﺳﯿﻄﺔ واﺣﺪة ﻓﻘﻂ ;‬
‫وﺳﯿﻄﺘﯿﻦ ; ‪mov cx,dx‬‬

‫ﻻﺣﻆ ﺄ ﻧ ﺄ ﻳ ﻧﺺ ﻓﻲ ﺷﻔﺮة اﻷﺳﻤﺒﻠﻲ ﻳﺄﺗﻲ ﺑﻌﺪ اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ ھﻮ ﻣﺠﺮد ﺗﻌﻠﯿﻖ‬

‫اﻟﻮﺳﺎﺋﻂ ﻣﻤﻜﻦ ﺗﻜﻮن ﻋﺪة أﻧﻮﺎﻋ ‪:‬‬


‫‪ .١‬ﻣﻌﻠﻮﻣﺔ ﻓﻮرﻳﺔ )ﻣﺒﺎﺷﺮة( )ﺄ ﻳ ﺛﺎﺑﺘﻪ( ﻣﺜﺎل ‪'a' / ٣٠ / ١٠ :‬‬
‫‪ .٢‬ﻣﺴﺠﻞ )ﺳﻮف ﻳﺘﻢ ﺷﺮح اﻟﻤﺴﺠﻼت ﺑﺎﻟﺘﻔﺼﯿﻞ ﻓﻲ اﻟﺪرﻮ ﺳ اﻟﻘﺎدﻣﻪ ( ﻣﺜﺎل ‪AX / :‬‬
‫‪EAX / BL‬‬
‫‪ .٣‬ﻣﻮﻗﻊ ذاﻛﺮه )ﻳﺘﻢ ﺗﺤﺪﻳﺪه ﻋﻦ ﻃﺮﻳﻖ اﻟﻌﻨﻮﺎ ﻧ( ﻣﺜﺎل ‪[١٠٠bx] / [] / [٢٠٠] :‬‬
‫‪.٤‬ﻣﺘﻐﯿﺮ )ﻮھﻮ ﻧﻔﺲ اﻟﺴﺎﺑﻖ ﻟﻜﻦ ﺑﺪل ﺄ ﻧ ﺗﺤﻔﻆ أو ﺗﺤﺴﺐ اﻟﻌﻨﻮﺎ ﻧ ﻳﺪوﻳًﺎ ﻳﻘﻮم اﻷﺳﻤﺒﻠﺮ‬
‫ﺳﺘ ﺒﺪ ﻻ اﻟﻤﺘﻐﯿﺮ ﺑﺮﻗﻢ ﻳﺪل ﻋﻠﻰﻋ ﻨﻮ اﻧﻪ ( ﻣﺜﺎل ‪١/ INTVAL / STR ١count / VAR :‬‬ ‫ﺑ ﺄ‬

‫ﻣﺪﺧﻞ اﻟﻰ اﻟﺪﻳﺒﻐﺮ ‪: Debugge‬‬


‫ھﺎ ﻗﺪ وﺻﻠﻨﺎ اﻟﻰ واﺣﺪ ﻣﻦ أﻗﻮى اﻟﺒﺮاﻣﺞ اﻟﻤﺒﯿﺘﻪ ﻓﻲ اﻟﻨﻈﺎم ﻓﺒﻮاﺳﻄﺔ اﻟﯿﺒﻎ ﺗﺴﺘﻄﯿﻊ‬
‫ﻋﻤﻞ أﺷﯿﺎء ﻋﺠﯿﺒﻪ وﻏﺮﻳﺒﻪ ‪ ،‬ﺣﺴﻨًﺎ ﺷﻐﻞ اﻟﺪﻮ ﺳ وﻋﻨﺪ ﻣﺤﺚ اﻷواﻣﺮ أﻃﺒﻊ ‪ debug‬ﺛﻢ‬
‫أﻧﺘﺮ وﺳﺘﻈﮫﺮ ﻟﻚ ﻋﻼﻣﻪ '‪ '-‬ﻟﯿﻞ ﻋﻠﻰ أﺳﺘﻌﺪاد اﻟﺪﻳﺒﻐﺮ ﻋﻠﻰ أﺳﺘﻘﺒﺎل أواﻣﺮك ‪.‬‬
‫اﻷن دﻋﻨﺎ ﻧﻜﺘﺐ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﺼﻐﯿﺮ‬

‫ﻣﺒﺎﺷﺮة اﻟﻰ اﻟﻤﺴﺠﻞ ﺄ ﻳ‪-‬أﻛﺲ ﻧﻘﻞ اﻟﻌﺪد ‪ ٢‬ﻛﻤﻌﻠﻮﻣﺔ ; ‪mov ax,٢‬‬


‫اﻟﻤﺴﺠﻞ ﺑﻲ‪-‬اﻛﺲ ﻧﻘﻞ اﻟﻌﺪد ‪ ٣‬ﻛﻤﻌﻠﻮﻣﺔ ﻣﺒﺎﺷﺮة اﻟﻰ ; ‪mov bx,٣‬‬
‫ﺄ ﻳ‪-‬اﻛﺲ ‪ /‬ﺄ ﻳ‪-‬اﻛﺲ=ﺄ ﻳ‪-‬أﻛﺲ ‪ +‬ﺑﻲ‪ -‬ﺟﻤﻊ ﺄ ﻳ‪-‬اﻛﻲ ﻣﻊ ﺑﻲ‪-‬اﻛﺲ ﻣﻊ وﺿﻊ اﻟﺠﻮﺎ ﺑ ﻓﻲ ; ‪add ax,bx‬‬
‫أﻛﺲ‬

‫ﻛﯿﻒ ﺗﻘﻮم ﺑﺄذﺧﺎل ھﺬا اﻟﻜﻮد ‪:‬‬


‫‪ .١‬ﻋﻨﺪ اﻟﻤﺤﺚ '‪ '-‬أدﺧﻞ ‪ ١٠٠a‬ﺄ ﻳ أﻧﻨﺎ ﺳﻨﺒﺪأ ﻧﻜﺘﺐ اﻟﻜﻮد ﻣﻦ اﻟﻌﻨﻮﺎ ﻧ ‪ ١٠٠‬ﺛﻢ أﺿﻐﻂ أﻧﺘﺮ‬
‫ﺑﺎﻟﻄﺒﻊ‬
‫‪ .٢‬اﻵن أدﺧﻞ ﻛﻞ ﺗﻌﻠﯿﻤﯿﻪ ﺛﻢ أﺿﻐﻂ أﻧﺘﺮ وﻣﻊ ﻧﮫﺎﻳﺔ اﻟﺘﻌﻠﯿﻤﯿﺔ اﻷﺧﯿﺮة أﺿﻐﻂ أﻧﺘﺮ ﻣﺮﺗﯿﻦ‬

‫اﻷن ﻗﻢ ﺑﺄدﺧﺎل اﻟﺮﻣﺰ ‪ R‬ﺛﻢ أﻧﺘﺮ ﻟﺘﺮى ﺣﺎﻟﺔ اﻟﻤﺴﺠﻼت‬


‫ﻻﺣﻆ ﺄ ﻧ اﻟﻤﺴﺠﻞ ‪ AX‬ﻳﺴﺎﻮ ﻳ ﺻﻔﺮ وﺳﺘﺮى أﻳﻀَﺎ ﻇﮫﻮر اﻟﺘﻌﻠﯿﻤﯿﻪ ‪ ٠٠٠٢MOV ax,‬ﻮھﻲ‬
‫اﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﻋﻠﯿﮫﺎ اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ وﻟﯿﺲ اﻟﻤﻌﻠﻮﻣﺔ اﻟﻤﻨﻔﺬه ‪ ،‬اﻵن ﻗﻢ ﺑﻄﺒﺎﻋﺔ اﻟﺮﻣﺰ‬
‫‪ T‬ﺛﻢ أﻧﺘﺮ ﻟﺘﻨﻔﯿﺬ اﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﻋﻠﯿﮫﺎ اﻟﺪور ھﻨﺎ ھﻲ ‪ ٠٠٠٢MOV AX,‬ﺳﺘﺮى اﻵن ﺄ ﻧ‬
‫اﻟﻤﺴﺠﻞ ‪ AX‬أﺻﺒﺢ ﻳﺴﺎﻮ ﻳ ‪ ٢‬ﻮھﺬا ﻣﺎﻧﺘﻮﻗﻌﻪ ﺑﺎﻟﻀﺒﻂ وﺳﺘﺮى أﻳﻀًﺎ اﻟﺘﻌﻠﯿﻤﯿﻊ اﻟﺘﻲ ﻋﻠﯿﮫﺎ‬
‫دور اﻟﺘﻨﻔﯿﺬ ﻮھﻲ ‪ ٠٠٠٣MOV BX,‬أدﺧﻞ اﻟﺮﻣﺰ ‪ T‬ﺛﻢ أﻧﺘﺮ ﻟﺘﻨﻔﯿﺬھﺎ ﻟﺘﺮى ﺄ ﻧ اﻟﻤﺴﺠﻞ ‪BX‬‬
‫أﺻﺒﺢ ﻳﺴﺎﻮ ﻳ ‪ ٣‬وﺳﺘﺮى أﻳﻀًﺎ اﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﻋﻠﯿﮫﺎ اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ ﻮھﻲ ‪ADD AX,BX‬‬
‫ﻗﻢ ﺑﺄدﺧﺎل اﻟﺮﻣﺰ ‪ T‬ﻟﺘﻨﻔﯿﺬھﺎ وﻻﺣﻆ ﻛﯿﻒ ﺄ ﻧ اﻟﻤﺴﺠﻞ ‪ AX‬أﺻﺒﺤﺖ ﻗﯿﻤﺘﻪ ﻣﺠﻤﻮع اﻟﻌﺪدﻳﻦ‬
‫‪ ٣+٢‬ﻮھﻮ ﺧﻤﺴﺔ ﺑﯿﻨﻤﺎ ﺑﻘﻰ اﻟﻤﺴﺠﻞ ‪ BX‬ﻳﺴﺎﻮ ﻳ ‪. ٣‬‬

‫اﻵن ﺑﻌﺪﻣﺎ ﻋﺮﻓﺖ ﻛﯿﻒ ﺗﻜﺘﺐ ﻛﻮد ﺑﺴﯿﻂ أﺧﺮج ﻣﻦ اﻟﺪﻳﺒﻐﺮ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ ‪ Q‬ﺛﻢ أدﺧﻞ ﻣﺮة‬
‫أﺧﺮى ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ ‪ Debug‬ﺣﺘﻰ ﺗﺼﻔﺮ اﻟﻤﺴﺠﻼت ﻣﺮة أﺧﺮى أدﺧﻞ اﻟﺘﻌﻠﯿﻤﯿﻪ ‪ ١٠٠A‬ﺛﻢ‬
‫ﺟﺮب ﺗﻜﺘﺐ ﻛﻮد ﻣﻦ ﻋﻨﺪك وﻣﻊ ﻛﻞ ﻧﮫﺎﻳﺔ ﺗﻌﻠﯿﻤﯿﻪ أﺿﻐﻂ أﻧﺘﺮ وﻓﻲ ﻧﮫﺎﻳﺔ اﻟﺘﻌﻠﯿﻤﯿﻪ اﻷﺧﯿﺮة‬
‫أﺿﻐﻂ أﻧﺘﺮ ﻣﺮﺗﯿﻦ‬
‫) ﻣﻼﺣﻈﺔ ﻟﺘﺮى ﺷﻔﺮﺗﻚ ﺑﻠﻐﺔ اﻵﻟﻪ واﻷﺳﻤﺒﻠﻲ أدﺧﻞ اﻟﺮﻣﺰ ‪ U‬ﺛﻢ أﻧﺘﺮ ﻣﺒﺎﺷﺮة ﺑﻌﺪ إدﺧﺎل‬
‫اﻟﻜﻮد وﻗﺒﻞ إدﺧﺎل اﻟﺮﻣﺰ ‪( R‬‬
‫أﺿﻐﻂ ‪ R‬ﺛﻢ أﻧﺘﺮ ﻟﺘﺮى اﻟﻤﺴﺠﻼت ﻗﺒﻞ ﺗﻨﻔﯿﺬ ﺄ ﻳ ﻋﻤﻠﯿﺔ وﻟﺘﺮى اﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﻋﻠﯿﮫﺎ‬
‫اﻟﺪور ﻓﻲ اﻟﺘﻨﻔﯿﺬ أﺿﻐﻂ ‪ T‬ﺛﻢ أﻧﺘﺮ ﻟﺘﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﯿﻪ وﺗﺮى اﻟﻨﺘﺎﺋﺞ واﻟﺘﻌﻠﯿﻤﯿﻪ اﻟﺘﻲ ﺑﻌﺪھﺎ‬
‫ﻮھﻜﺬا وﻻﺗﻨﺴﻰ أذا أرﺪ ﺗ ﺄ ﻧ ﺗﺪﺧﻞ ﻛﻮد ﺟﺪﻳﺪ اﻟﺨﺮﻮﺟ واﻟﻌﻮدة ﻣﺮة أﺧﺮى اﻟﻰ اﻟﺪﻳﺒﻐﺮ‬
‫ﻟﺘﺼﻔﺮ اﻟﻤﺴﺠﻼت واﻟﺬاﻛﺮه‬

‫)اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﻪ اﻟﻤﺘﻘﺪﻣﻪ و ﺗﻨﻘﺴﻢ إﻟﻰ ﺿﺮب و ﻗﺴﻤﻪ ‪:-‬‬

‫اﻟﻀﺮب‪Multiplication :-‬‬

‫ﻳﺘﻢ ﺿﺮب ﺄى رﻗﻤﯿﻦ ﻓﻰ ﻟﻐﺔ اﻷﺳﻤﺒﻠﻰ ﻓﻰ ﺛﻼث أﻧﻈﻢ أﻟﻰ اﻵن ‪:-‬‬
‫•اﻷﻮ ﻟ ‪ :‬ﻻ‪-٨‬ﺑﺖ )اﻟﺒﺎﻳﺖ‪) :-‬‬
‫ﻳﺘﻢ وﺿﻊ إﺣﺪى ﻗﯿﻢ اﻟﻀﺮب ﻓﻰ ‪ AL‬و اﻵﺧﺮ ﻓﻰ ﺄى رﻳﺠﺴﺘﺮ آﺧﺮ ﻟﻪ ﻧﻔﺲ اﻟﺤﺠﻢ أو ﻣﻜﺎن‬
‫ﻓﻰ اﻟﺬاﻛﺮه ﺑﺠﺎﻧﺐ ﻛﻮد اﻟﻀﺮب اﻟﺬى ھﻮ ﻓﻰ ﺣﺎﻟﺘﻨﺎ ھﻨﺎ ]‪ [MUL‬ﻟﻸرﻗﺎم اﻟﻐﯿﺮ ﻣﺤﺪدة اﻹﺷﺎﺮھ‬
‫‪ .‬و ]‪ [IMUL‬ﻟﻸرﻗﺎم اﻟﻤﺤﺪدة اﻹﺷﺎﺮھ ‪ .‬ﺗوﻮﺿﻊ اﻟﻨﺘﯿﺠﻪ ﻓﻰﻻ ‪AX .‬‬
‫ﻣﺜﺎل ‪ :‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﺣﺎﺻﻞ ﺿﺮب ‪ ٣٠ * ١٢٠‬ﻧﻘﻮم ﺑﺎﻷﺗﻰ ‪:-‬‬
‫‪;----------------------------------‬‬
‫‪MOV CL,٣٠D‬‬
‫‪MOV AL,١٢٠D‬‬
‫‪MUL CL‬‬
‫‪MOV [١٠٠٠H] , AX‬‬ ‫ب‪ ١٠٠٠‬ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎﺪ ﺳ ﻟﺘﺨﺰﻳﻦ اﻟﻨﺎﺗﺞ ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮﻧﻪ ;‬
‫ﻋﺸﺮ‬
‫‪;----------------------------------‬‬

‫•اﻟﺜﺎﻧﻰ ‪ :‬ﻻ‪-١٦‬ﺑﺖ )اﻟﻜﻠﻤﻪ‪) :-‬‬


‫ﻳﺘﻢ وﺿﻊ إﺣﺪى اﻟﻘﯿﻢ ﻓﻰ ‪ AX‬و أﻵﺧﺮﻓﻰ ﺄى رﻳﺠﺴﺘﺮ آﺧﺮ ﻟﻪ ﻧﻔﺲ اﻟﺤﺠﻢ أو ﻣﻜﺎن ﻓﻰ‬
‫اﻟﺬاﻛﺮه ﺑﺠﺎﻧﺐ ﻛﻮد اﻟﻀﺮب و ﺗﻮﺿﻊ اﻟﻨﺘﯿﺠﻪ ﻓﻰ ‪ DX:AX .‬وھﺬا ﻣﻌﻨﺎه ﺄ ﻧ اﻟﺠﺰءﻻ ‪ Low‬ﻣﻦ‬
‫ﺳﻮﺿﻊ ﻓﻰﻻ ‪DX .‬‬ ‫ﺎﻧﺗﺞ اﻟﻘﺴﻤﻪ ﺳﯿﺨﺰن ﻓﻰﻻ ‪ AX‬و ﻟاﺠﺰءﻻ ‪ High‬ﯿ‬
‫ﻣﺜﺎل ‪ :‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﺣﺎﺻﻞ ﺿﺮب ‪ ٢٣٦٥ * ٢٠٠٠٠‬ﺳﻨﻘﻮم ﺑﺎﻵﺗﻰ‪:-‬‬
‫‪;----------------------------------‬‬
‫‪MOV CX,٢٣٦٥D‬‬
‫‪MOV AX,٢٠٠٠٠D MUL CX‬‬
‫‪MOV [١٠٠٠H],AX‬‬ ‫اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب ‪ ١٠٠٠‬ﺗﺨﺰﻳﻦ اﻟﺠﺰء اﻷﻮ ﻟ ﻓﻰ;‬
‫‪MOV [١٠٠١H],DX‬‬ ‫اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﺬى ﻳﻠﻰ اﻟﻤﻜﺎن ﺗﺨﺰﻳﻦ اﻟﺠﺰء اﻟﺜﺎﻧﻰ ﻓﻰ;‬
‫اﻟﺴﺎﺑﻖ‬
‫‪;----------------------------------‬‬

‫•اﻟﺜﺎﻟﺚ ‪ :‬ﻻ‪ ٣٢‬ﺑﺖ ‪:-‬‬


‫ﻳﺘﻢ وﺿﻊ إﺣﺪى اﻟﻘﯿﻢ ﻓﻰ ‪ EAX‬و أﻵﺧﺮﻓﻰ ﺄى رﻳﺠﺴﺘﺮ آﺧﺮ ﻟﻪ ﻧﻔﺲ اﻟﺤﺠﻢ أو ﻣﻜﺎن ﻓﻰ‬
‫اﻟﺬاﻛﺮه ﺑﺠﺎﻧﺐ ﻛﻮد اﻟﻀﺮب و ﺗﻮﺿﻊ اﻟﻨﺘﯿﺠﻪ)‪ ٦٤‬ﺑﺖ( ﻓﻰ ‪ EDX:EAX .‬وھﺬا ﻣﻌﻨﺎه ﺄ ﻧ اﻟﺠﺰءﻻ‬
‫ﺳﻮﺿﻊ ﻓﻰﻻ ‪EDX .‬‬ ‫ﻣ ﻧﺎﺗﺞ اﻟﻘﺴﻤﻪ ﺳﯿﺨﺰن ﻓﻰﻻ ‪ EAX‬واﻟﺠﺰءﻻ ‪ High‬ﯿ‬ ‫‪ Low‬ﻦ‬
‫اﻟﻘﺴﻤﻪ‪Division :-‬‬

‫أﻳﻀًﺎ ﺗﺘﻢ ﻓﻰ ﻧﻔﺲ اﻟﻨﻈﻢ اﻟﺴﺎﺑﻘﻪ‪:-‬‬


‫•اﻷﻮ ﻟ ‪ :‬ﻻ‪٨‬ﺑﺖ )ﺑﺎﻳﺖ ‪) :-‬‬
‫ﻳﺘﻢ و ﺿﻊ اﻟﻤﻘﺴﻮم ﻓﻰ ‪ AX‬و اﻟﻤﻘﺴﻮم ﻋﻠﯿﻪ ﻓﻰ ﺄى رﻳﺠﺴﺘﺮ ﺣﺠﻤﻪ ﺑﺎﻳﺖ ﻣﺜﻞ‬
‫‪BL,CL,DL,...‬أو ﻣﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه ﻟﮫﺎ ﺣﺠﻢ ﺑﺎﻳﺖ ﻣﺜﻞ ‪BYTE PTR [١٢٣٤H] , BYTE PTR‬‬
‫‪[BX] .‬و ﻳﻮﺿﻊ ﻧﺎﺗﺞ اﻟﻘﺴﻤﻪ ﻓﻰ ‪ AL‬و ﺑﺎﻗﻰ اﻟﻘﺴﻤﻪ ﻓﻰ ‪ AH‬ﺑﺈﺳﺘﺨﺪﺎ ﻣ‪[DIV] .‬‬
‫ﻻﺣﻆ ‪:-‬أﻧﻪ ﻓﻰ ﺣﺎﻟﺔ ﻗﺴﻤﺔ اﻷرﻗﺎم اﻟﻤﺤﺪدة اﻹﺷﺎﺮھ ﺑﺈﺳﺘﺨﺪﺎ ﻣ]‪ [IDIV‬ﺗﻜﻮن إﺷﺎرة ﻧﺎﺗﺞ‬
‫اﻟﻘﺴﻤﻪ ھﻰ اﻹﺷﺎﺮھ اﻟﻌﺎدﻳﻪ ﻓﻰ ھﺬه اﻟﺤﺎﻻت ‪ .‬وﺗﻜﻮن إﺷﺎرة ﺧﺎﺮﺟ اﻟﻘﺴﻤﻪ ‪Remender‬‬
‫داﺋﻤًﺎ ﻣﻮﺟﺒﻪ و ﺻﺤﯿﺤﻪ‪Integer.‬‬
‫ﻻﺪ ﻣﻦ ﺗﺤﻮﻳﻞ اﻟﻘﯿﻤﻪﻻ ‪-٨‬ﺑﺖ ﻟﻠﻤﻘﺴﻮم إﻟﻰ ‪-١٦‬ﺑﺖ‬ ‫ﻻﺣﻆ‪:-‬ﻛﻞ اﻟﻘﯿﻢ ھﻨﺎ ‪-٨‬ﺑﺖ إذًا ‪ ,‬ﺑ‬
‫ﻟﯿﻤﻜﻦ ﻧﻘﻠﮫﺎ أﻟﻰ ‪ AX‬وﻳﺘﻢ ذﻟﻚ ﻓﻰ ﺣﺎﻟﺔ اﻟﻘﯿﻢ ﻏﯿﺮ ﻣﺤﺪدة اﻹﺷﺎﺮھ ﻤﺑﺴﺢﻻ ‪ AH‬ﻟﯿﻜﻮن‬
‫ﻛﻠﻪ أﺻﻔﺎر و ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﻤﻘﺴﻮم ‪-١٦‬ﺑﺖ ‪ .‬أﻣﺎ ﻓﻰ ﺣﺎﻟﺔ اﻟﻘﯿﻢ ﻣﺤﺪدة اﻹﺷﺎﺮھ ﻳﺘﻢ ذﻟﻚ ﻋﻦ‬
‫ﻃﺮﻳﻖ ﻛﻮد ]‪ [CBW‬اﻟﻤﺴﺌﻮل ﻋﻦ ﺗﺤﻮﻳﻞ اﻟﺒﺎﻳﺖ)‪-٨‬ﺑﺖ( إﻟﻰ ﻛﻠﻤﻪ‪ (١٦-‬ﺑﺖ( ﻟﻞ ‪ AX‬ﻓﻘﻂ‪.‬‬
‫ﻣﺜﺎل ‪ :-‬ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻧﺎﺗﺞ ﻗﺴﻤﺔ)‪ (١٦+‬ﻋﻠﻰ )‪ (٥-‬ﻳﻤﻜﻨﻨﺎ ﻋﻤﻞ اﻷﺗﻰ‪:-‬‬
‫‪;----------------------------------‬‬
‫‪MOV AL,١٦D‬‬
‫‪CBW‬‬
‫‪MOV BL,٥D‬‬
‫‪NEG BL‬‬
‫‪IDIV BL‬‬
‫‪MOV PYTE PTR[١٠٠٠H] , AL‬‬
‫‪MOV PYTE PTR[٢٠٠٠H] , AH‬‬
‫‪;----------------------------------‬‬
‫ﻮھﻨﺎ ﺗﻢ ﻧﻘﻞ اﻟﻤﻘﺴﻮم إﻟﻰ ‪ AL‬وﺗﻢ ﻋﻤﻞ ﻣﺪ ﻟﻪ ﻋﻦ ﻃﺮﻳﻖ ‪ [CBW] .‬ﺛﻢ ﺗﻢ ﻧﻘﻞ ﻗﯿﻤﺔ‬
‫اﻟﻤﻘﺴﻮم ﻋﻠﯿﻪ إﻟﻰ ‪ BL‬ﺑﻌﺪ وﺿﻊ اﻹﺷﺎﺮھ اﻟﺴﺎﻟﺒﻪ ﻋﻦ ﻃﺮﻳﻖ ‪ [NEG].‬إذا اﻟﻘﯿﻢ ﺟﺎھﺰه‬
‫ﻟﻌﻤﻠﯿﺔ اﻟﻘﺴﻤﻪ وﻳﺘﻢ ﺣﻔﻆ اﻟﻨﺎﺗﺞ ﻓﻰ اﻟﺬاﻛﺮه ﺑﻌﺪھﺎ‪.‬‬

‫ﺑﺎﻗﻰ اﻟﻨﻈﻢ ﻛﻤﺎ ﺳﺒﻖ ﻣﻦ اﻟﻤﻤﻜﻦ ﺄ ﻧ ﺗﻘﻮم ﺑﺈﺳﺘﻨﺘﺎﺟﮫﺎ‪.‬‬

‫)‪(٢‬اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر اﻟﺒﺮﻧﺎﻣﺞ ‪:-‬‬

‫ﻳﻨﻘﺴﻢ اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر اﻟﺒﺮﻧﺎﻣﺞ إﻟﻰ ﻋﺪة ﻃﺮق و ﺗﻘﻨﯿﺎت و ﺗﻜﻮن ﻣﺜﻞ ﻣﺜﯿﻼﺗﮫﺎ ﻓﻰ اﻟﻠﻐﺎت‬
‫ﻼ ‪ .‬وﺳﻨﺘﻌﻠﻢ ﺳﻮﻳًﺎ ﺑﻌﺾ ﻣﻦ ھﺬه اﻟﺘﻘﻨﯿﺎت ‪:-‬‬ ‫اﻟﻌﻠﯿﻪ و ﻟﻜﻦ أﻛﺜﺮ ﺗﻔﺼﯿ ً‬
‫•أوﻻ ‪ :‬ﺟﻤﻞ اﻟﺸﺮط ‪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 :-‬‬

‫‪-‬ﻣﻦ ﺄھﻢ ﻗﺪرﺎ ﺗ اﻟﺤﺎﺳﺐ اﻷﻟﻰ ھﻰ ﻋﻤﻞ ﻧﻔﺲ اﻟﺸﻰء ﻣﺮﺎ ﺗ ﻋﺪه و ﻻ ﺗﺨﺘﻠﻒ ﻣﻌﻪ ﻋﺪد‬
‫ﻼ ‪ .‬ﻓﻼ ﻳﻤﻜﻦ ﻟﺒﺮﻧﺎﻣﺞ ﻣﻔﯿﺪ أﻻ ﻳﺤﺘﻮى ﻋﻠﻰ‬‫ھﺬه اﻟﻤﺮﺎ ﺗ و ھﻰ ﻣﻦ ﺄھﻢ ﺟﻮاﻧﺐ اﻟﺒﺮﻣﺠﻪ أﺻ ً‬
‫دوﺮھ أو ﻋﺪة دورﺎ ﺗ ﻟﺬا ﻛﺎن ﻣﻦ اﻟﻤﮫﻢ ﺄ ﻧ ﻧﺪرﺟﮫﺎ ھﻨﺎ و ﺗﻜﻮن ﺑﻌﺪ اﻟﺘﺤﻜﻢ ﻓﻰ ﻣﺴﺎر اﻟﺒﺮاﻣﺞ‬
‫ﻟﻤﺎ ﻟﮫﺎ ﻣﻦ إرﺗﺒﺎط وﺛﯿﻖ ﺑﻤﺎ ﺳﻮف ﻧﺘﺤﺪث ﻋﻠﯿﻪ‪.‬‬

‫ﻻ ﺛﻢ ﺗﺘﺒﻌﮫﺎ‬
‫‪-‬ھﻨﺎك ﺛﻼث أﻧﻮﺎﻋ ﻣﻦ اﻟﺪورﺎ ﺗ ﺗﺘﻢ ﺑﺜﻼث ﺗﻘﻨﯿﺎت ﻣﺨﺘﻠﻔﻪ ‪ .‬ﺳﯿﺘﻢ ذﻛﺮ اﻷﻧﻮﺎﻋ أو ً‬
‫ﻃﺮق ﻋﻤﻠﮫﺎ و ﺗﻘﻨﯿﺎﺗﮫﺎ‪:-‬‬

‫اﻷﻧﻮﺎﻋ‪:-‬‬
‫•اﻟﺪورﺎ ﺗ اﻟﻤﺴﺘﻤﺮه )إﻟﻰ ﻣﺎﻻﻧﮫﺎﻳﻪ‪) :-‬‬
‫ﻮھﻰ اﻟﺪورﺎ ﺗ اﻟﺘﻰ ﺗﻈﻞ ﻋﺎﻣﻠﻪ إﻟﻰ ﺄ ﻧ ﻳﺘﻢ ﻏﻠﻖ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺟﺎﻧﺐ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ أو ﻏﻠﻖ‬
‫اﻟﺠﮫﺎز ﻧﻔﺴﻪ ‪ .‬و ﻃﺒﻌًﺎ أﻧﺖ ﺗﺴﺄل ﻧﻔﺴﻚ ھﻞ ﻟﮫﺬا اﻟﻨﻮع ﻓﺎﺋﺪه ﻓﻰ اﻟﺒﺮﻣﺠﻪ ‪ .‬أرد ﻋﻠﯿﻚ ﺑﻨﻌﻢ‬
‫ﻛﻤﺎ ﺳﺘﺮى‪:-‬‬

‫‪-‬اﻟﺘﺎﺮﺧ و اﻟﺴﺎﻋﻪ ‪ ,‬ھﻞ ھﻤﺎ ﻳﺘﻮﻗﻔﺎن !!؟ ﺑﺎﻟﻄﺒﻊ ﻻ ‪.‬‬


‫ﻼ ﻮھﺬا ﻓﻰ اﻟﻠﻠﻐﺎت اﻟﺘﻰ ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻷواﻣﺮ‬
‫‪-‬ﻣﻦ اﻟﻤﻤﻜﻦ إﺳﺘﺨﺪاﻣﮫﺎ ﻓﻰ ﺗﺮك اﻟﺒﺮﻧﺎﻣﺞ ﻋﺎﻣ ً‬
‫اﻟﻤﺘﻮاﻟﯿﻪ ‪Squencial programming .‬‬
‫‪-‬أﻳﻀًﺎ ﻣﻦ اﻟﻤﻤﻜﻦ ﺄ ﻧ ﺗﺴﺘﺨﺪم ﻓﻰ ﻋﻤﻞ اﻟﻔﯿﺮوﺳﺎت ‪ .‬ﺗﻜﻔﻰ دوﺮھ ﺻﻐﯿﺮه ﻏﯿﺮ ﻣﻨﺘﮫﯿﻪ‬
‫ﻹﺳﺘﻐﻼل ﻣﻌﻈﻢ و ﻗﺖ اﻟﻤﻌﺎﻟﺞ ﻣﻦ ﻏﯿﺮ ﻓﺎﺋﺪه و اﻟﺘﺄﺛﯿﺮ ﻋﻠﻰ ﺑﺎﻗﻰ اﻟﺒﺮاﻣﺞ اﻷﺧﺮى ﻓﻰ اﻟﻨﻈﻢ‬
‫ﻣﺘﻌﺪدة اﻟﺒﺮاﻣﺞ ‪Multiprogramming and Time-sharing Operating systems .‬‬

‫•اﻟﺪورﺎ ﺗ ﻣﺤﺪدة اﻟﻤﺮﺎ ﺗ‪:-‬‬


‫ﻓﻰ ھﺬه اﻟﺪورﺎ ﺗ ﻳﻜﻮن ﻋﺪد ﻣﺮﺎ ﺗ ﺗﻨﻔﯿﺬ اﻟﺪوﺮھ ﻣﺤﺪد و ھﻰ ﻣﻦ أﻛﺜﺮ اﻷﻧﻮﺎﻋ إﻧﺘﺸﺎرًا و ﻟﮫﺎ‬
‫إﺳﺘﺨﺪاﻣﺎت ﻋﺪه ﺗﺘﻨﻮع ﺑﯿﻦ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﻪ واﻟﻤﻨﻄﻘﯿﻪ و ﺑﺎﻗﻰ اﻟﻌﻤﻠﯿﺎت اﻷﺧﺮى‪.‬‬
‫ﻣ أﻣﺜﻠﺘﮫﺎﻻ ‪FOR...NEXT) LOOP) .‬‬ ‫ﻦ‬

‫•اﻟﺪورﺎ ﺗ اﻟﻤﺤﺪﺪھ ﺑﺸﺮط ﻣﻌﯿﻦ‪:-‬‬


‫ﻳﻜﻮن ھﻨﺎك ﺷﺮط ﻳﺘﻢ إﺧﺘﺒﺎﺮھ ﻓﻰ أﻮ ﻟ اﻟﺪوﺮھ أو ﻓﻰ آﺧﺮھﺎ ‪ .‬وﻳﺘﻮﻗﻒ ﺗﻨﻔﯿﺬ اﻟﻤﺮه اﻟﺘﺎﻟﯿﻪ ﻓﻰ‬
‫اﻟﺪوﺮھ ﻋﻠﻰ إﺧﺘﺒﺎر ھﺬا اﻟﺸﺮط ‪ ,‬ﻮھﻨﺎ ﻳﺘﻢ إﺳﺘﺨﺪﺎ ﻣ إﺣﺪى اﻟﺸﺮﻮﻃ و ﻃﺮق إﺧﺘﺒﺎﺮھﺎ‬
‫اﻟﺴﺎﺑﻘﻪ‪.‬‬

‫اﻟﺘﻘﻨﯿﺎت و ﻃﺮق اﻟﻌﻤﻞ‪:-‬‬


‫•اﻟﻄﺮﻳﻘﻪ اﻟﯿﺪوﻳﻪ ‪:-‬‬
‫ﻋﻦ ﻃﺮﻳﻖ ﺗﺤﺪﻳﺪ ﻋﻨﻮﺎ ﻧ ﻓﻰ أﻮ ﻟ أﻣﺮ ﻓﻰ اﻟﺪوﺮھ ﺛﻢ ﻓﻰ ﻧﮫﺎﻳﺔ أواﻣﺮ اﻟﺪوﺮھ ﻳﺘﻢ إدرﺎﺟ أﻣﺮ ﻗﻔﺰ‬
‫ﻟﻠﻌﻨﻮﺎ ﻧ اﻟﺬى وﺿﻌﻨﺎه ﺳﺎﺑﻘًﺎ و ﻳﻜﻮن اﻟﻘﻔﺰ ﻣﺸﺮﻮﻃ أو ﻏﯿﺮ ﻣﺸﺮﻮﻃ ‪(Conditional /‬‬
‫‪Unconditional Jump) .‬‬
‫ﻣﺜﺎل ‪:-‬‬
‫‪;----------------------------------‬‬
‫‪MOV AL,٥‬‬
‫‪XOR CL,CL ;CL = ٠‬‬
‫ﺑﺪاﻳﺔ اﻟﺪوﺮھ; ‪START_LOOP :‬‬
‫‪ADD CL,AL‬‬
‫‪DEC AL‬‬
‫‪.‬واﻟﺼﻔﺮ ‪ AL‬ﺎﻗﺮ ﻧ اﻟﻘﯿﻤﻪ اﻟﻤﻮﺟﻮﺪھ ﻓﻰﻻ ; ‪CMP AL,٠٠H‬‬
‫‪JNE START_LOOP‬‬
‫ﻳﺴﺎﻮى ﺻﻔﺮ ‪ AL‬ﻳﺘﻢ اﻟﻘﻔﻆ ﻟﻮ ﻟﻢ ﻳﻜﻮن;‬
‫‪ .‬اﻟﻨﮫﺎﺋﻰ ﻓﻰ اﻟﺬاﻛﺮه ﺗﺨﺰﻳﻦ اﻟﻨﺎﺗﺞ; ‪MOV BYTE PTR [٠١٠٠H],AL‬‬
‫‪;----------------------------------‬‬
‫ﻓﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺗﻢ إﺳﺘﺨﺪﺎ ﻣ اﻟﺪوﺮھ اﻟﻤﺸﺮوﻃﻪ ‪ START_LOOP‬ﻓﻰ ﺟﻤﻊ اﻷرﻗﺎم ﻣﻦ ‪١‬‬
‫إﻟﻰ ‪ ٥‬و ﺗﺨﺰﻳﻨﮫﻢ ﻓﻰ اﻟﺬاﻛﺮه‪.‬‬

‫•اﻟﺪورﺎ ﺗ ﺑﺈﺳﺘﺨﺪﺎ ﻣ اﻷﻣﺮ ‪LOOP :-‬‬


‫ھﺬا اﻷﻣﺮ ﻟﻪ ﺻﻮر ﻋﺪه ﻣﻨﮫﺎ اﻟﻤﺸﺮﻮﻃ و ﻣﻨﮫﺎ اﻟﻐﯿﺮ ﻣﺸﺮﻮﻃ ﻛﻤﺎ ﻻﺑﺪ ﺄ ﻧ ﻧﺮى‪:-‬‬
‫‪[LOOP]:-‬ﻳﺘﻢ ﻛﺘﺎﺑﺔ أﺳﻢ أو ﻋﻨﻮﺎ ﻧ أﻮ ﻟ ﺟﻤﻠﻪ‪/‬أﻣﺮ ﻓﻰ اﻟﺪوﺮھ ‪ ,‬وﻳﺘﻢ وﺿﻊ ﻋﺪد ﻣﺮﺎ ﺗ اﻟﺪوﺮھ‬
‫ﻓﻰ ‪ CX ,‬وﺗﻘﻮم ﺑﺘﻘﻠﯿﻞ ﻻ ‪ CX‬ﺑﻮاﺣﺪ وﺗﺨﺘﺒﺮ ﻗﯿﻤﺘﻪ ﻟﻮ ﻛﺎﻧﺖ ﺻﻔﺮ ﺗﻨﮫﻰ اﻟﺪوﺮھ و ﻟﻮ ﻏﯿﺮ ذﻟﻚ‬
‫ﻳﺘﻢ اﻟﻘﻔﺰ أﻟﻰ اﻟﻌﻨﻮﺎ ﻧ اﻟﻤﻮﺟﻮد أﻣﺎﻣﮫﺎ‪.‬‬
‫ﻣﺜﺎل ‪:-‬‬
‫‪;----------------------------------‬‬
‫‪MOV CX,٥‬‬
‫‪XOR AX,AX‬‬
‫‪START_LOOP :‬‬
‫‪ADD AX,CX‬‬
‫‪LOOP START_LOOP‬‬
‫‪MOV [٠١٠٠H],AX‬‬
‫‪;----------------------------------‬‬
‫ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ‪.‬‬

‫‪Conditional LOOP:-‬‬

‫‪LOOPZ‬‬ ‫•‬
‫‪LOOPNZ‬‬ ‫•‬
‫‪LOOPE‬‬ ‫•‬
‫‪LOOPNE‬‬ ‫•‬

‫ﻮھﺬه اﻷﻧﻮﺎﻋ ﺗﺴﺘﺨﺪم ﺑﻌﺪ ‪ CMP/TEST Instructions ,‬وﻋﻠﻰ ﺣﺴﺐ اﻟﺸﺮط ﻳﺘﻢ اﻟﻘﻔﺰ ‪,‬‬
‫وﻳﻜﻮن إﺳﺘﺨﺪاﻣﮫﺎ ﻣﺜﻞ‪LOOP .‬‬

‫•اﻟﺪورﺎ ﺗ ﺑﺈﺳﺘﺨﺪﺎ ﻣ‪REP :-‬‬


‫ﻮھﻰ ﺗﺴﺘﺨﺪم ﻣﻊ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ‪. String Transfer Istructions‬‬
‫)‪(١‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺴﻼﺳﻞ اﻟﻨﺼﯿﻪ ‪Strings:-‬‬

‫اﻟﺴﻼﺳﻞ اﻟﻨﺼﯿﻪ ھﻰ ﻣﻦ ﺄھﻢ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻰ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻓﻰ ﻧﻈﻢ اﻟﺤﺎﺳﺐ ﻋﻤﻮﻣﺎً و ﻓﻰ‬
‫ﻟﻐﺎت اﻟﺒﺮﻣﺠﻪ ﺧﺼﻮﺻًﺎ ‪ .‬ﻣﻦ اﻟﻤﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻋﻠﻰ أﻧﮫﺎ ﺑﻌﺾ اﻷﺣﺮف اﻟﻤﺘﺘﺎﺑﻌﻪ و‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻛﻤﺎ ﺳﺒﻖ ﺑﺎﻟﺪورﺎ ﺗ و اﻟﺘﻜﺮار إﻋﺘﻤﺎدًا ﻋﻠﻰ ﺄ ﻧ ﺄى ﺳﻠﺴﻠﻪ ﺣﺮﻓﯿﺔ ﺗﺘﻜﻮن ﻣﻦ‬
‫ﺴ ﮫﻞ ﻋ ﻠﯿﻨ ﺎ‬ ‫ﻰ ﺗ‬ ‫ﻰ ﺗﻤﺪﺎﻧ ﺑﺒﻌﺾ اﻟﺪوﻻ اﻟﺘ‬
‫ﻋﺪة أﺣﺮف ﻣﻌﻠﻮﻣﺔ اﻟﻄﻮل وﻣﺘﺘﺎﺑﻌﻪ‪ .‬و ﻟ ﻜﻦ ا ﻷﺳﻤﺒ ﻠ‬
‫ھﺬا اﻟﺘﻌﺎﻣﻞ و ﺗﻘﻠﯿﻞ اﻟﺘﻌﻘﯿﺪ و ﻃﻮل اﻟﺒﺮاﻣﺞ ﻧﺴﺒﯿًﺎ‪.‬‬
‫ﻰ ‪:-‬‬ ‫ھه اﻟﺪوﻻ ﻣ ﺎ ﻳﻠ‬
‫ﻦ ﺄھﻢ ﺬ‬ ‫ﻣ‬
‫]‪[LODS],[STOS],[MOVS],[INS],[OUTS],[SCAS],[CMPS‬‬

‫ﻗﺒﻞ اﻟﺒﺪء ﺧﺬ إﻧﺘﺒﺎھﻚ ﻣﻦ اﻷﺗﻰ ‪:-‬‬


• DI ( Data Index/Distination Index ) is combined with the ES (Extra
Segment) to reach the data place in memory which the distenation od
data of the current string transfer instruction.
• SI ( Stack Index/Source Index ) is combined with the DS (Data
Segment) to reach the data place in memory which the source of data
of the current string transfer instruction.
• D (Direction Flag) which indecates the direction of the flow of the
strings in the memory .
o At D=٠ then Auto-Increment will occur to DI,SI According to
the size of the current data (Increment with ١ if byte,٢ if
word,٤ if double word).
o At D=١ then Auto-Decrement will occur to DI,SI According to
same previous charactaristics.
o [STD] Will Set the Direction Flag (D=١).
o [CLD] Will Clear the Direction Flag (D=٠).
• You can't move a Immediate Value to Any Segment Register , So you
Should First Move The Desired Value To AX and Hence,Move it Form
AX to THE Segment.

:- ‫ﺳﻨﺘﻨ ﺎ ﻮ ﻟ ھﺬه ا ﻟﺪو ﻻ ﺑﺎﻟﺘﻔﺼ ﯿﻞ ﻣﻊﺷ ﺮح أﻣﺜﻠﻪ‬

[LODS]

, ‫[ ﻟﻨﻘﻞ ﺑﺎﻳﺖ‬LODSB] ‫ﻼ‬ ً ‫ھﺬه اﻟﺪاﻟﻪ ﻳﻤﻜﻨﮫﺎ اﻟﺘﻌﺎﻣﻞ ﻣﻊ أﺣﺠﺎم ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻣﺨﺘﻠﻔﻪ ﻣﺜ‬
DOUBLE WORD .‫ ﻟﻨﻘﻞ ﻛﻠﻤﺘﺎن‬, [LODSD] ‫[ﻟﻨﻘﻞ ﻛﻠﻤﻪ‬LODSW]
‫[ ﺛﻢ ﺗﻘﻮم‬DS:[SI ‫ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬AL ‫ﺗﻨﻘﻞ إﻟﻰ‬- [LODSB] :-
: ‫ ﺑﻮاﺣﺪ ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ‬SI ‫ ﻻ‬D) ‫ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه‬/‫ﺑﺰﻳﺎدة‬
AL=DS:[SI] , SI = SI +- ١ .

‫[ ﺛﻢ ﺗﻘﻮم‬DS:[SI ‫ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬AX ‫ﺗﻨﻘﻞ إﻟﻰ‬- [LODSW] :-


: ‫ ﺑﺈﺛﻨﺎن ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ‬SI ‫ ﻻ‬D) ‫ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه‬/‫ﺑﺰﻳﺎدة‬
AX=DS:[SI] , SI = SI +- ٢ .

‫[ ﺛﻢ ﺗﻘﻮم‬DS:[SI ‫ ﻣﺤﺘﻮﻳﺎت اﻟﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬EAX ‫ﺗﻨﻘﻞ إﻟﻰ‬- [LODSD] :-


: ‫ ﺑﺄرﺑﻌﻪ ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ‬SI ‫ ﻻ‬D) ‫ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه‬/‫ﺑﺰﻳﺎدة‬
EAX=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 +- ١ .‬‬

‫‪ - [STOSW] :-‬ﻨﺗﻘﻞ ﻣﺤﺘﻮﻳﺎتﻻ ‪ AX‬إﻟﻰ اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب ‪ [ES:[DI‬ﺛﻢ ﺗﻘﻮم‬


‫ﺑﺰﻳﺎدة‪/‬ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه )‪ D‬ﻻ ‪ SI‬ﺑﺈﺛﻨﺎن ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ ‪:‬‬
‫‪ES:[DI]=AX , DI = DI +- ٢ .‬‬

‫‪ - [STOSD] :-‬ﻨﺗﻘﻞ ﻣﺤﺘﻮﻳﺎتﻻ ‪ EAX‬إﻟﻰ اﻟﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب ‪ [ES:[DI‬ﺛﻢ ﺗﻘﻮم‬


‫ﺑﺰﻳﺎدة‪/‬ﻧﻘﺼﺎن)ﻋﻠﻰ ﺣﺴﺐ ﻋﻠﻢ اﻹﺗﺠﺎه )‪ D‬ﻻ ‪ SI‬ﺑﺄرﺑﻌﻪ ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻟﺘﺎﻟﻰ ‪:‬‬
‫‪ES:[DI]=EAX , DI = DI +- ٤ .‬‬

‫ﻣﺜﺎل‪:-‬‬
‫‪;---------------------------------‬‬
‫‪CLD‬‬
‫‪MOV AX ,٠B٨٠٠H‬‬
‫‪MOV ES,AX‬‬ ‫ﻧﺤﺪد اﻟﻤﻘﻄﻊ اﻟﺬى ﻧﺘﻌﺎﻣﻞ ﻣﻌﻪ اﻷﻮ ﻟ;‬
‫‪MOV DI,٠‬‬ ‫اﻟﺒﺪأ ﻣﻦ أﻮ ﻟ ﻣﻜﺎن داﺧﻞ اﻟﻤﻘﻄﻊ;‬
‫‪MOV CX,٢٠*٨٠‬‬ ‫ﻣﺮﺎ ﺗ اﻟﻨﻘﻞ اﻟﺘﻰ ﺳﻮف ﺗﺘﻢ ﺗﺤﺪﻳﺪ ﻋﺪد;‬
‫‪MOV AX,٠٧٢٠H‬‬ ‫ﻧﺴﺨﮫﺎ إﻟﻰ اﻟﺬاﻛﺮه ﺗﺤﻤﯿﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻰ ﺳﺘﺘﻢ;‬

‫‪REB STOSW‬‬ ‫ﺗﻜﺮار ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ;‬

‫‪END:‬‬
‫‪;---------------------------------‬‬
‫ھﺬا اﻟﻤﺜﺎل ﻳﻘﻮم ﺑﻤﺴﺢ اﻟﺸﺎﺷﻪ )‪٢٠‬ﺳﻄﺮ *‪ ٨٠‬ﻋﻤﻮد ( ﻋﻦ ﻃﺮﻳﻖ ﻧﻘﻞ اﻟﻘﯿﻤﻪ ‪٠٧٢٠‬إﻟﻰ‬
‫ﻛﻞ اﻷﻣﺎﻛﻦ ﻓﻰ اﻟﺬاﻛﺮه اﻟﺘﻰ ﺗﺒﺪأ ﻋﻨﺪ )]‪ ([B٨٠٠H:٠٠٠٠H‬ﻮھﺬا اﻟﻤﻘﻄﻊ ھﻮ ﻣﻘﻄﻊ‬
‫اﻟﺸﺎﺷﻪ و ھﺬا ﻃﺒﻌﺎ ﻓﻰ ﻧﻈﺎم اﻟﺪﻮ ﺳ ﻓﻘﻂ ‪ .‬وﻣﻦ اﻟﺠﺪﻳﺮ ﺑﺎﻟﺬﻛﺮ ھﻨﺎ ﺄ ﻧ اﻟﻘﯿﻤﻪ ‪ ٠٧٢٠‬ھﻰ‬
‫ﻋﺒﺎﺮھ ﻋﻦ ﺟﺰأﻳﻦ ‪ ,‬اﻟﺠﺰء اﻷﻮ ﻟ ‪ ٠٧‬ھﻮ ﻛﻮد اﻟﻠﻮن اﻷﺑﯿﺾ ﻋﻠﻰ اﻟﺨﻠﻔﯿﻪ اﻟﺴﻮداء ﻓﻰ ﻧﻈﺎم‬
‫اﻟﺪﻮ ﺳ و اﻟﺠﺰء اﻵﺧﺮ ‪H ٢٠‬ھﻮ اﻷﺳﻜﻰ ﻛﻮد ﻟﻠﻤﺴﺎﻓﻪ اﻟﻔﺎرﻏﻪ ‪.‬‬
‫اﻟﺨﻼﺻﻪ ‪ :‬أﻧﻨﺎ ﻧﻄﺒﻊ ﻓﻰ ذاﻛﺮه اﻟﺸﺎﺷﻪ اﻟﻤﺴﺎﻓﻪ اﻟﻔﺎرﻏﻪ ﻓﻰ ﻛﻞ أﻣﺎﻛﻦ اﻟﺸﺎﺷﻪ و ذﻟﻚ‬
‫ﻟﻤﺴﺢ اﻟﺸﺎﺷﻪ ﺑﺎﻟﻜﺎﻣﻞ و ھﺬا اﻟﻤﺜﺎل ﻣﻜﺎﻓﻰء ﻷﻣﺮ اﻟﺪﻮ ﺳ‪CLS .‬‬

‫]‪[MOVS‬‬

‫ھﺬه اﻟﺪاﻟﻪ اﻟﻮﺣﯿﺪه ﻓﻰ ﺟﻤﯿﻊ اﻟﻤﻌﺎﻟﺠﺎت ﻣﻦ ‪ ٨٠٨٨‬إﻟﻰ ﺑﻨﺘﯿﻮم ‪ ٣‬اﻟﺘﻰ ﺗﺴﻤﺢ ﺑﻌﻤﻠﯿﺎت‬
‫اﻟﻨﻘﻞ ﻣﻦ ﻣﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه إﻟﻰ ﻣﻜﺎن آﺧﺮ ﻓﻰ اﻟﺬاﻛﺮه‪.‬‬
‫ﺧﺬ ﺣﺬﺮ ﻛ ﻣﻦ اﻵﺗﻰ‪: -‬‬

‫ﻻ ﻧﺴﺘﻄﯿﻊ ﻋﻤﻞ ﺄى ﻋﻤﻠﯿﺎت ﻧﻘﻞ أو ﻏﯿﺮه ﺑﺤﯿﺚ ﺗﺴﺘﻠﺰم ﻣﻦ اﻟﻤﻌﺎﻟﺞ اﻟﻨﻈﺮ أﻟﻰ اﻟﺬاﻛﺮﻪ‬
‫ﻣﺮﺗﯿﻦ ‪ .‬ﻳﻌﻨﻰ ‪...‬‬

‫) ]‪This is Not Allowed : ( MOV [١٠٠٠H],[٢٠٠٠H] ) ( ADD [٠٩٠٣H],[SI‬‬


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

‫ھﺬه اﻟﺪاﻟﻪ ﺗﻌﻤﻞ ﻣﺜﻞ ﺳﺎﺑﻘﺘﮫﺎ ﻣﻦ ﺣﯿﺚ ﻣﺴﺎﺣﺎت اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﻳﻠﻰ ‪:-‬‬

‫‪- [MOVSB] :-‬ﺗﺴﺘﺨﺪم ﻓﻰ ﻧﻘﻞ ﺑﺎﻳﺖ ﻣﻦ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬


‫‪[ES:[DI‬إﻟﻰ اﻟﻤﻜﺎن اﻟﻤﻌﻨﻮن ب ‪ [DS:[SI .‬ﻳوﺘﻢ ذﻳﺎدةﻻ ‪ DI,SI‬ﺑﻮاﺣﺪ أو ﻧﻘﺼﺎﻧﮫﻢ ﺑﻨﺎءًا‬
‫ﻋﻠﻰ ﻋﻠﻢ اﻹﺗﺠﺎه‪D FLAG .‬‬
‫ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻷﺗﻰ‪: ES:[DI] = DS:[SI] ; SI=SI +-٢ ; DI = DI +- ٢ .‬‬

‫‪- [MOVSW] :-‬ﺗﺴﺘﺨﺪم ﻓﻰ ﻧﻘﻞ ﻛﻠﻤﻪ ﻣﻦ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬


‫‪[ES:[DI‬إﻟﻰ اﻟﻤﻜﺎن اﻟﻤﻌﻨﻮن ب ‪ [DS:[SI .‬ﻳوﺘﻢ ذﻳﺎدةﻻ ‪ DI,SI‬ﺑﻮاﺣﺪ أو ﻧﻘﺼﺎﻧﮫﻢ ﺑﻨﺎءاً‬
‫ﻋﻠﻰ ﻋﻠﻢ اﻹﺗﺠﺎه‪D FLAG .‬‬
‫ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻷﺗﻰ‪: ES:[DI] = DS:[SI] ; SI=SI +-٢ ; DI = DI +- ٢ .‬‬

‫‪- [MOVSD] :-‬ﺗﺴﺘﺨﺪم ﻓﻰ ﻧﻘﻞ ﻛﻠﻤﺘﺎن ﻣﻦ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب‬


‫‪[ES:[DI‬إﻟﻰ اﻟﻤﻜﺎن اﻟﻤﻌﻨﻮن ب ‪ [DS:[SI .‬ﻳوﺘﻢ ذﻳﺎدةﻻ ‪ DI,SI‬ﺑﻮاﺣﺪ أو ﻧﻘﺼﺎﻧﮫﻢ ﺑﻨﺎءًا‬
‫ﻋﻠﻰ ﻋﻠﻢ اﻹﺗﺠﺎه‪D FLAG .‬‬
‫ﻣﻤﺎ ﻳﻌﻨﻰ أﻧﮫﺎ ﺗﻘﻮم ﺑﺎﻷﺗﻰ‪: ES:[DI] = DS:[SI] ; SI=SI +-٢ ; DI = DI +- ٢ .‬‬

‫ﻻﺣﻆ ‪ :‬أﻧﮫﺎ ﺗﻌﻤﻞ ﺑﺘﻜﺮار ﻣﻊ اﻷﻣﺮ‪REP.‬‬

‫ﻣﺜﺎل ‪:-‬‬
‫‪;---------------------------------‬‬
‫‪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] .‬‬

‫•اﻷﻮ ﻟ ﻳﻮﺿﻊ ﻓﻰ‪[ES:[DI.‬‬


‫•اﻟﺜﺎﻧﻰ ﻳﻮﺿﻊ ﻓﻰ‪[DS:[SI.‬‬

‫ﻣﺜﺎل‬
‫‪;---------------------------------‬‬
‫‪CLD‬‬
‫‪MOV DI,٠‬‬
‫‪MOV SI,٠‬‬
‫‪MOV CX,٢٠٠٠‬‬
‫‪XOR AX,AX‬‬
‫‪MOV ES,AX‬‬
‫‪MOV AX,١٠٠٠H‬‬
‫‪MOV DS,AX‬‬

‫‪REBE CMPSW‬‬

‫‪END :‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻹﺟﺮاءﺎ ﺗ‪Procedures :-‬‬

‫ﻣﺎ ھﻰ اﻹﺟﺮاءﺎ ﺗ ‪ Procedures‬؟‬ ‫•‬

‫اﻹﺟﺮاءﺎ ﺗ ھﻰ ﻣﺠﻤﻮﻋﻪ ﻣﻦ ﺳﻄﻮر اﻟﻜﻮد و اﻷواﻣﺮ اﻟﺒﺮﻣﺠﯿﻪ و اﻟﺠﻤﻞ اﻟﺒﺮﻣﺠﯿﻪ ﺗﻜﻮن‬


‫أﺟﺰاء ﻓﻰ داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻧﻔﺴﻪ أو ﺧﺎﺮﺟ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻌﻤﻞ ﻛﺒﺮﻧﺎﻣﺞ ﺻﻐﯿﺮ ﻟﮫﺎ ﻣﺘﻐﯿﺮاﺗﮫﺎ‬
‫اﻟﺨﺎﺻﻪ و ﻟﮫﺎ ﻣﺪﺧﻼﺗﮫﺎ وﻣﺨﺮﺟﺎﺗﮫﺎ اﻟﺨﺎﺻﻪ و ﺄھﻢ ﺷﻰء ‪ :‬ﻟﮫﺎ ﻋﻤﻠﮫﺎ اﻟﺨﺎص اﻟﺘﻰ‬
‫ﺗﺒﻨﻰ ﻣﻦ أﺟﻠﻪ‪.‬‬

‫ﻣﻤﯿﺰﺎ ﺗ اﻹﺟﺮاءﺎ ﺗ‪:-‬‬ ‫•‬

‫اﻹﺟﺮاءﺎ ﺗ ﻣﻦ أﻛﺜﺮ إﻣﻜﺎﻧﯿﺎت اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﻪ ﺗﺄﺛﯿﺮًا ﻓﻰ ﻧﻈﺎم اﻟﺒﺮﻧﺎﻣﺞ و ﻗﻮﺗﮫﺎ‬ ‫‪o‬‬
‫إﺳﺘﻘﺮاﺮھﺎ‪.‬‬

‫ﺗﻮﻓﺮ اﻟﻜﻮد و اﻟﻮﻗﺖ ﻋﻠﻰ اﻟﻤﺒﺮﻣﺞ ﻧﻔﺴﻪ و ﺗﻌﻄﻰ ﻟﻪ إﺣﺴﺎس ﺑﻘﯿﻤﺔ ﻣﺎ‬ ‫‪o‬‬
‫ﻳﻔﻌﻞ‪.‬‬

‫ﻮھﻰ ﺑﺪوﺮھﺎ ﺗﺴﺎﻋﺪ ﻓﻰ إﻧﺘﺸﺎر اﻟﺒﺮاﻣﺞ و ﺧﺼﻮﺻًﺎ اﻟﻜﺒﯿﺮه و اﻟﻀﺨﻤﻪ ﻣﻨﮫﺎ و‬ ‫‪o‬‬
‫ﺗﺒﺎﺪ ﻟ أﺟﺰاءھﺎ ﺑﯿﻦ أﻛﺜﺮ ﻣﻦ ﺷﺨﺺ أو ﻣﺒﺮﻣﺞ‪.‬‬

‫ﻳﺘﻢ ﺑﻨﺎء اﻟﺒﺮاﻣﺞ واﻟﺘﻄﺒﯿﻘﺎت اﻟﻜﺒﺮى ﻋﻠﯿﮫﺎ‪.‬‬ ‫‪o‬‬

‫ﺗﺴﺎﻋﺪ ﻓﻰ ﺳﺮﻋﺔ ﺗﺼﺤﯿﺢ اﻷﺧﻄﺎء ‪Error Handling .‬‬ ‫‪o‬‬

‫أﺳﺎس ﻋﻤﻞ اﻟﺒﺮﻣﺠﻪ اﻟﻜﺎﺋﻨﯿﻪ‪(Object Orianted Programming (OOP‬‬ ‫‪o‬‬

‫ﻛﯿﻔﯿﺔ ﻋﻤﻞ اﻹﺟﺮاءﺎ ﺗ ‪...‬؟‬ ‫•‬

‫ﻳﺘﻢ ﻋﻤﻞ ﻧﺪاء ﻟﻺﺟﺮاء اﻟﻤﺮاد اﻟﻮﺻﻮل إﻟﯿﻪ ﻋﻦ ﻃﺮﻳﻖ ]‪[CALL Procedure_name‬‬
‫ﻣﻦ داﺧﻞ اﻹﺧﺮاء اﻟﺮﺋﯿﺴﻰ ‪ Main Procedure‬أو ﻣﻦ ﺄى إﺟﺮاء آﺧﺮ ‪ .‬ھﺬا ﺑﻌﺪ ﺗﺠﮫﯿﺰ‬
‫ﻣﺪﺧﻼت اﻹﺟﺮاء إذا ﻛﺎن ﻳﻌﻤﻞ ﻋﻠﻰ ﻣﺪﺧﻼت ‪ .‬ﻓﯿﺘﻢ أﻧﺘﻘﺎل اﻟﻌﻤﻞ إﻟﻰ اﻹﺟﺮاء‬
‫اﻟﻔﺮﻋﻰ )ﻷﻧﻪ ﻳﺘﻔﺮع ﻣﻦ إﺟﺮاء آﺧﺮ ( ‪ .‬وﺑﻌﺪ إﻧﺘﮫﺎء ﻋﻤﻠﻪ ﺑﺎﻷﻣﺮ ]‪ [RET‬ﻳﺮﺟﻊ اﻹﺟﺮاء‬
‫ﻻ‪.‬‬
‫ﺛﺎﻧﯿًﺎ إﻟﻰ اﻟﺠﻤﻠﻪ اﻟﺒﺮﻣﺠﯿﻪ اﻟﺘﻰ ﺗﻠﻰ اﻷﻣﺮ ]‪ [CALL‬ﻓﻰ اإﺟﺮاء اﻟﺬى ﻗﺎم ﺑﺎﻟﻨﺪاء أو ً‬

‫ﺧﺬ إﻧﺘﺒﺎھﻚ ﻣﻦ اﻷﺗﻰ ‪:-‬‬


‫اﻹﺟﺮاء اﻟﺮﺋﯿﺴﻰ‪Main procedure :-‬‬

‫ھﻮ اﻹﺟﺮاء اﻟﺬى ﻳﺘﻢ ﺑﺪأ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻪ ‪ ,‬ﺑﻤﻌﻨﻰ أﻧﻪ أﻮ ﻟ إﺟﺮاء ﻳﻌﻤﻞ ﻣﻊ ﺑﺪأ اﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺑﺎﻟﻌﻤﻞ ‪ .‬و ﻳﻨﺘﮫﻰ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺈﻧﺘﮫﺎء ھﺬا اﻹﺟﺮاء ﻛﻤﺎ ھﻮ ﻣﻌﺘﺎد‪.‬‬
‫ﻳﺘﻢ وﺿﻊ إﺳﻢ اﻹﺟﺮاء اﻟﺮﺋﯿﺴﻰ ﺑﺠﺎﻧﺐ أﻣﺮ اﻹﻧﺘﮫﺎء ‪ END‬ﻓﻰ أﺳﻔﻞ اﻟﺒﺮﻧﺎﻣﺞ‪.‬‬

‫•‬
‫ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻹﺟﺮاءﺎ ﺗ ‪...‬؟‬ ‫•‬

‫ﻳﺘﻢ إﻧﺸﺎء إﺟﺮاء ﺟﺪﻳﺪ ﻋﻦ ﻃﺮﻳﻖ ﻛﺘﺎﺑﺔ أﺳﻢ اﻹﺟﺮاء اﻟﺠﺪﻳﺪ ﻳﻠﯿﻪ ﻛﺘﺎﺑﺔ اﻷﻣﺮ‬ ‫‪o‬‬
‫‪PROC.‬‬

‫أﻛﺘﺐ ﺑﺎﻟﺪاﺧﻞ ﺟﻤﻞ اﻹﺟﺮاء أﻳًﺎ ﻛﺎﻧﺖ ﻋﻠﻰ ﺣﺴﺐ إﺧﺘﯿﺎﺮ ﻛ و ﻋﻠﻰ ﺣﺴﺐ‬ ‫‪o‬‬
‫ﻋﻤﻞ اﻹﺟﺮاء ‪.‬‬

‫ﻳﻨﺘﮫﻰ اﻹﺟﺮاء ﺑﻜﺘﺎﺑﺔ أﺳﻢ اﻷﺟﺮاء ﻳﻠﯿﻪ اﻷﻣﺮ‪RET.‬‬ ‫‪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

END_MAIN: ;Exit to dos


MOV AH,٤CH
INT ٢١H

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

You might also like