; Assembly
Documents
Resources
Learning Center
Upload
Plans & pricing Sign in
Sign Out
Your Federal Quarterly Tax Payments are due April 15th Get Help Now >>

Assembly

VIEWS: 6 PAGES: 30

  • pg 1
									                                       ‫ﺍﻷﲰﺒﻠﻲ‬
                                                                      ‫ﻣﺎھﻲ اﻷﺳﻤﺒﻠﻲ :‬
    ‫ﻓﻲ ﻗﺪﻳﻢ اﻟﺰﻣﺎن أﻳﺎم ﺑﺪاﻳﺎت اﻟﻜﻤﺒﯿﻮﺗﺮ ﻛﺎﻧﺖ ﺑﺮﻣﺠﺔ اﻟﻜﻤﺒﯿﻮﺗﺮ ﺗﺘﻢ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ اﻷﻟﻪ‬
  ‫‪ 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‬أﻣﺎ اﻟﺒﺎﻳﺖ اﻷﻳﻤﻦ ﻓﯿﮫﻤﺎ ﻓﯿﻌﺮف‬
                                                             ‫ً‬
   ‫ﺑﺎﻟﻤﻨﺨﻔﺾ)‪ (Low‬ﻓﻤﺜﻼ اﻟﻤﺴﺠﻞ ‪ AX‬ﻳﺘﺄﻟﻒ ﻣﻦ ﻣﺴﺠﻠﯿﻦ اﻟﻌﻠﻮي ﻮھﻮ ‪ AH‬واﻟﻤﻨﺨﻔﺾ‬
 ‫ﻮھﻮ ‪ ، 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‬ﻣﻦ‬
                                      ‫ﯿ‬              ‫ﻟ‬
                       ‫ﻧﺗﺞ اﻟﻘﺴﻤﻪ ﺳﯿﺨﺰن ﻓﻰﻻ ‪ AX‬و اﺠﺰءﻻ ‪ High‬ﺳﻮﺿﻊ ﻓﻰﻻ . ‪DX‬‬          ‫ﺎ‬
                          ‫ﻣﺜﺎل : ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﺣﺎﺻﻞ ﺿﺮب ٠٠٠٠٢ * ٥٦٣٢ ﺳﻨﻘﻮم ﺑﺎﻵﺗﻰ-:‬
‫----------------------------------;‬
‫‪MOV CX,٢٣٦٥D‬‬
‫‪MOV AX,٢٠٠٠٠D MUL CX‬‬
‫‪MOV [١٠٠٠H],AX‬‬           ‫اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﻤﻌﻨﻮن ب ٠٠٠١ ﺗﺨﺰﻳﻦ اﻟﺠﺰء اﻷﻮ ﻟ ﻓﻰ;‬
‫‪MOV [١٠٠١H],DX‬‬           ‫اﻟﻤﻜﺎن ﻓﻰ اﻟﺬاﻛﺮه اﻟﺬى ﻳﻠﻰ اﻟﻤﻜﺎن ﺗﺨﺰﻳﻦ اﻟﺠﺰء اﻟﺜﺎﻧﻰ ﻓﻰ;‬
‫اﻟﺴﺎﺑﻖ‬
‫----------------------------------;‬


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

								
To top
;