You are on page 1of 179

‫‪ ‬‬

‫اﻟ ﻌﺎﻟ ﺎت اﻟ ﻐ ﺔ‬

‫‪2020-2021‬‬
‫ﺍﻟﻔﺼل ﺍﻷﻭل‪ :‬ﺍﻟﺒﻨﻴﺔ ﺍﻟﻌﺎﻤﺔ ﻟﻠﻤﻌﺎﻟﺠﺎﺕ‬

‫ﺍﻟﻬﺩﻑ ﻤﻥ ﻫﺫﺍ ﺍﻟﻔﺼل‬

‫™ ﺘﻌﺭﻴﻑ ﺍﻟﺒﺕ‪ ،‬ﺍﻟﺒﺎﻴﺕ‪ ،‬ﺍﻟﻜﻠﻤﺔ ‪..‬‬


‫™ ﻤﻘﺎﺭﻨﺔ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻅﻡ ﺤﻭل ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻭﺍﻟﺘﺼﻤﻴﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺍﺕ ﺘﻜﺎﻤﻠﻴﺔ‬
‫ﻤﺨﺘﻠﻔﺔ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺩﺍﺨﻠﻴﺔ ﺍﻟﺭﺌﻴﺴﺔ ﻟﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻭﻭﻅﻴﻔﺔ ﺍﻷﺠﺯﺍﺀ ﺍﻟﺭﺌﻴﺴﺔ ﻤﻨﻪ‬
‫ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻭﺍﻟﻤ‪‬ﺘﺤﻜﻡ ﺍﻟﺼﻐﺭﻱ‬ ‫™‬

‫™ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺼﻨﺩﻭﻗﻲ ﻟﻨﻅﺎﻡ ﻤﺒﻨﻲ ﺤﻭل ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻭﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺭﺌﻴﺴﺔ ﺍﻟﺘﻲ‬
‫ﺘﺩﺨل ﻓﻲ ﺘﻜﻭﻴﻨﻪ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻭﻅﻴﻔﺔ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ ﻭﺃﺠﺯﺍﺌﻪ ﺍﻟﺭﺌﻴﺴﺔ‬
‫™ ﺁﻟﻴﺔ ﻋﻤل ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻭﻟﻐﺔ ﺍﻵﻟﺔ ﻭﻜﻴﻔﻴﺔ ﺍﻟﺘﺤﻭﻴل ﺒﻴﻨﻬﻤﺎ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﻤﻜﻭﻨﺎﺕ ﺍﻟﺭﺌﻴﺴﺔ ﻟﺤﺎﺴﻭﺏ ﺸﺨﺼﻲ ﻨﻤﻭﺫﺠﻲ‬

‫ﺘﻌﺎﺭﻴﻑ‬

‫ﺃﻭ ‪.1‬‬ ‫‪0‬‬ ‫ﺍﻟﺒﺕ ‪ :bit‬ﺭﻗﻡ ﺍﺜﻨﺎﻨﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﺄﺨﺫ ﺃﺤﺩ ﺍﻟﻘﻴﻡ‬
‫ﺒﺘﺎﺕ‪.‬‬ ‫‪8‬‬ ‫ﺍﻟﺒﺎﻴﺕ ‪ :byte‬ﻭﺤﺩ ﹸﺓ ﻤﻌﻠﻭﻤﺎﺕٍ‪ ،‬ﺘﺘﺄﻟﱠ ﹸ‬
‫ﻑ ﻤﻥ‬
‫ﻑ ﺒﺎﻴﺕ )‪ 4‬ﺒﺘﹼﺎﺕ(‪.‬‬
‫ﺭﺒﺎﻋﻴﺔ ‪ :nibble‬ﻨﺼ ﹸ‬
‫ﺒﺎﻴﺕ‪ ،‬ﺘﺒﻌﹰﺎ‬ ‫‪4‬‬ ‫ﺒﺎﻴﺕ ﺃﻭ‬ ‫‪2‬‬ ‫ﺒﺎﻴﺕ ﺃﻭ‬ ‫‪1‬‬ ‫ﻜﻠﻤﺔ ‪ :word‬ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﻜﻠﻤﺔ ﺒﺤﺠﻡ‬
‫ﺒﺎﻴﺕ ﺇﻥ ﻟﻡ ﻴﺫﻜﺭ ﻏﻴﺭ ﺫﻟﻙ‪.‬‬ ‫‪2‬‬ ‫ﻟﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ‪ .CPU‬ﻭﻴﻌﺘﺒﺭ ﺤﺠﻤﻬﺎ‬

‫‪1‬‬
‫ﻜﻠﻤﺔ ﻤﺯﺩﻭﺠﺔ ‪ :double word‬ﻭﺤﺩ ﹲﺓ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻜﻭ‪‬ﻨ ﹲﺔ ﻤﻥ ﻜﻠﻤﺘﻴﻥ‬
‫ﺒﺎﻴﺕ ﺇﻥ ﻟﻡ ﻴﺫﻜﺭ ﻏﻴﺭ ﺫﻟﻙ‪.‬‬ ‫‪4‬‬ ‫ﻤﺘﻼﺼﻘﺘﻴﻥ‪ ،‬ﺤﺠﻤﻬﺎ‬
‫ﺒﺎﻴﺕ(‪.‬‬ ‫)‪1024‬‬ ‫ﺒﺎﻴﺕ‬ ‫‪210‬‬ ‫ﻜﻴﻠﻭﺒﺎﻴﺕ ‪ :kbyte‬ﻭﻴﺴﺎﻭﻱ‬
‫ﺒﺎﻴﺕ(‪.‬‬ ‫)‪1,048,576‬‬ ‫ﺒﺎﻴﺕ‬ ‫‪220‬‬ ‫ﻤﻴﻐﺎﺒﺎﻴﺕ ‪ :Mbyte‬ﻭﻴﺴﺎﻭﻱ‬
‫ﺒﺎﻴﺕ‪.‬‬ ‫‪230‬‬ ‫ﻏﻴﻐﺎﺒﺎﻴﺕ ‪ :Gbyte‬ﻭﻴﺴﺎﻭﻱ‬

‫ﺘﻤﻬﻴﺩ‬
‫ﺍﻋﺘﻤﺩ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻅﻡ ﺍﻹﻟﻜﺘﺭﻭﻨﻴﺔ ﺍﻟﺭﻗﻤﻴﺔ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻷﻤﺭ ﻋﻠﻰ ﺘﺠﻤﻴﻊ ﺍﻟﻌﺩﻴﺩ ﻤﻥ‬
‫ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ﻭﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﺘﺘﺎﺒﻌﻴﺔ ﻟﺘﺤﻘﻴﻕ ﺍﻟﻭﻅﻴﻔﺔ ﺍﻟﻤﻁﻠﻭﺒﺔ‪ .‬ﻨﺫﻜﺭ ﻋﻠﻰ ﺴﺒﻴل‬
‫ﺍﻟﻤﺜﺎل‪ ،‬ﻨﻅﺎﻡ ﺘﺤﻜﻡ ﺒﻌﻤل ﺍﻹﺸﺎﺭﺓ ﺍﻟﻀﻭﺌﻴﺔ )ﺇﺸﺎﺭﺍﺕ ﺍﻟﻤﺭﻭﺭ(‪ ،‬ﺍﻟﺫﻱ ﻴﻤﻜﻥ ﺒﻨﺎﺅﻩ‬
‫ﺒﺴﻬﻭﻟﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ‪ :‬ﻋﺩﺍﺩﺍﺕ ﻟﺘﺄﻤﻴﻥ ﺍﻷﺯﻤﻨﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻭﺴﺠل ﺇﺯﺍﺤﺔ ﻹﻀﺎﺀﺓ ﻟﻤﺒﺎﺕ‬
‫ﺍﻹﺸﺎﺭﺓ ﺍﻟﻀﻭﺌﻴﺔ )ﺍﻷﺤﻤﺭ‪ ،‬ﺍﻟﺒﺭﺘﻘﺎﻟﻲ‪ ،‬ﺍﻷﺨﻀﺭ( ﻋﻠﻰ ﻨﺤ ٍﻭ ﺘﺘﺎﺒﻌﻲ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻥ‬
‫ﻟﻠﻨﻅﺎﻡ ﺇﺫﺍ ﺭﻏﺒﻨﺎ ﺇﻀﺎﻓﺔ ﺇﻤﻜﺎﻥ ﻤﻘﺎﻁﻌﺔ ﺘﺘﺎﺒﻊ ﻋﻤل ﺍﻹﺸﺎﺭﺓ‬ ‫‪D‬‬ ‫ﺇﻀﺎﻓﺔ ﻗﻼﺏ‬
‫ﺍﻟﻀﻭﺌﻴﺔ ﻤﻥ ﻗﺒل ﺍﻟﻤﺸﺎﺓ ﺍﻟﺫﻴﻥ ﻴﺭﻏﺒﻭﻥ ﺒﻌﺒﻭﺭ ﺍﻟﺸﺎﺭﻉ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺯﺭ‬
‫ﻤﻨﺎﺴﺏ‪.‬‬

‫ﻟﻡ ﺘﻌﺩ ﻁﺭﻴﻘﺔ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻅﻡ ﺍﻟﺭﻗﻤﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻨﺎﺴﺏ ﺒﻨﺎﺀ ﺍﻟﻨﻅﻡ ﺍﻟﺘﺤﻜﻤﻴﺔ ﺍﻟﺭﻗﻤﻴﺔ‬
‫ﻼ ﻴﺤﺘﺎﺝ ﺍﻟﻨﻅﺎﻡ ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ﻓﻲ ﺍﻟﺴﻴﺎﺭﺍﺕ‬
‫ﺍﻟﺤﺎﻟﻴﺔ ﺍﻟﺘﻲ ﺃﺼﺒﺤﺕ ﺃﻜﺜﺭ ﺘﻌﻘﻴﺩﹰﺍ‪ .‬ﻓﻤﺜ ﹰ‬
‫ﺍﻟﺤﺩﻴﺜﺔ ﺇﻟﻰ ﻗﻴﺎﺱ ﻭﻤﺭﺍﻗﺒﺔ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﻘﺎﺩﻴﺭ ﺍﻟﺘﻤﺎﺜﻠﻴﺔ ﻤﺜل‪ :‬ﺴﺭﻋﺔ ﺍﻟﻤﺤﺭﻙ‬
‫ﻭﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺴﺎﺌل ﺍﻟﺘﺒﺭﻴﺩ‪ .‬ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺭﻗﻤﻲ ﺒﺎﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻨﻅﻡ‪ ،‬ﻤﺜل‪:‬‬
‫ﺍﻟﺘﺤﻜﻡ ﺒﺄﺯﻤﻨﺔ ﺇﺼﺩﺍﺭ ﺍﻟﺸﺭﺍﺭﺓ ﺍﻟﻜﻬﺭﺒﺎﺌﻴﺔ ﻭﺍﻟﺘﺤﻜﻡ ﺒﺩﻭﺭﺍﻥ ﺍﻟﺴﺎﺌل ﻓﻲ ﺍﻟﻤﺸﻊ‪.‬‬

‫‪2‬‬
‫ﻴﺯﺩﺍﺩ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺘﺤﻜﻤﻲ ﺘﻌﻘﻴﺩﹰﺍ ﺇﺫﺍ ﻜﺎﻥ ﻋﻠﻴﻪ ﺇﺠﺭﺍﺀ ﺤﺴﺎﺒﺎﺕ ﻭﺍﺘﺨﺎﺫ ﻗﺭﺍﺭﺍﺕ ﻋﻠﻰ‬
‫ﻨﺤﻭ ﻤﺴﺘﻤﺭ‪ .‬ﺇﻥ ﺍﻟﺤل ﺍﻷﻤﺜل‪ ،‬ﺒﻼ ﺸﻙ‪ ،‬ﻟﺒﻨﺎﺀ ﻫﻜﺫﺍ ﻨﻅﺎﻡ ﺘﺤﻜﻡ ﺍﻟﻴﻭﻡ‪ ،‬ﻫﻭ‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ )‪ .Microprocessors (µp‬ﻤﻥ ﺍﻟﺠﺩﻴﺭ ﺒﺎﻟﺫﻜﺭ‪ ،‬ﺃﻥ‬
‫ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ‪ ،‬ﺒﻴﻨﻤﺎ ﺘﺤﺘﻭﻱ ﺴﻴﺎﺭﺓ‬ ‫‪15‬‬ ‫ﺍﻟﺴﻴﺎﺭﺓ ﺍﻟﻌﺎﺩﻴﺔ ﺘﺤﺘﻭﻱ ﺍﻟﻴﻭﻡ ﺃﻜﺜﺭ ﻤﻥ‬
‫ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ‪.‬‬ ‫‪65‬‬ ‫ﺃﻭ ﻤﺭﺴﻴﺩﺱ ﺃﻜﺜﺭ ﻤﻥ‬ ‫‪BMW‬‬ ‫ﻤﻥ ﻨﻭﻉ‬
‫ﺃﺼﺒﺢ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﺍﻟﻴﻭﻡ ﺍﻟﻠﺒﻨﺔ ﺍﻷﺴﺎﺴﻴﺔ ﻓﻲ ﺒﻨﺎﺀ ﺃﻱ ﻨﻅﺎﻡ ﺭﻗﻤﻲ ﻴﺤﺘﺎﺝ‬
‫ﺇﻟﻰ ﺇﺠﺭﺍﺀ ﺤﺴﺎﺒﺎﺕ‪ ،‬ﻭﺍﺘﺨﺎﺫ ﻗﺭﺍﺭ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻤﺭﺍﻗﺒﺔ ﺃﺤﺩﺍﺙ ﺨﺎﺭﺠﻴﺔ‪ ،‬ﻭﻜﺫﻟﻙ‬
‫ﺍﻻﺤﺘﻔﺎﻅ ﺒﺄﺤﺩﺍﺙ ﺴﺎﺒﻘﺔ‪ .‬ﻴﺩﺨل ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﺍﻟﻴﻭﻡ ﻓﻲ ﺒﻨﻴﺔ ﺍﻟﺤﻭﺍﺴﻴﺏ‬
‫ﺍﻟﺸﺨﺼﻴﺔ ﻭﻏﻴﺭﻫﺎ‪ ،‬ﺍﻟﻬﻭﺍﺘﻑ ﺍﻟﺭﻗﻤﻴﺔ‪ ،‬ﺃﻓﺭﺍﻥ ﺍﻟﻤِﻜﺭﻭﻴﻑ‪ ،‬ﺍﻟﺘﻠﻔﺎﺯ‪ ،‬ﺒﻁﺎﻗﺎﺕ‬
‫ﺍﻻﻋﺘﻤﺎﺩ ﻭﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﺫﻜﻴﺔ‪ ،‬ﺃﻨﻅﻤﺔ ﺍﻟﺘﺤﻜﻡ ﻭﻨﻅﻡ ﺍﻷﺘﻤﺘﺔ ﺍﻟﺼﻨﺎﻋﻴﺔ‪... ،‬‬
‫ﺘﻌﻤل ﺍﻟﺸﺭﻜﺎﺕ‪ ،‬ﻜل ﻋﺎﻡ‪ ،‬ﻋﻠﻰ ﺘﺼﻤﻴﻡ ﻭﺇﻨﺘﺎﺝ ﻤﻌﺎﻟﺠﺎﺕ ﺠﺩﻴﺩﺓ ﺘﻠﺒﻲ ﺃﻜﺜﺭ ﻓﺄﻜﺜﺭ‬
‫ﺤﺎﺠﺔ ﻤﻬﻨﺩﺴﻲ ﺍﻟﺘﺼﻤﻴﻡ‪ .‬ﻭﻤﻊ ﺫﻟﻙ‪ ،‬ﺘﺒﻘﻰ ﺍﻟﻨﻅﺭﻴﺔ ﺍﻷﺴﺎﺴﻴﺔ ﺨﻠﻑ ﺘﻘﺎﻨﺔ‬
‫ﻋﺎﻟﻴﺔ ﺍﻟﺘﻜﺎﻤل‬ ‫‪(Integrated Circuit) IC‬‬ ‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻨﻔﺴﻬﺎ‪ ،‬ﻓﻬﻭ ﺩﺍﺭﺓ ﺭﻗﻤﻴﺔ‬
‫ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ‪ ،‬ﻴﻘﻭﺩ ﻋﻤﻠﻬﺎ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ‪ ،‬ﻭﻴﺘﺼل ﻤﻊ‬
‫ﺍﻟﺨﺎﺭﺠﻴﺔ ﻟﺘﻨﺠﻴﺯ ﻋﻤﻠﻴﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﺘﺒﻌﹰﺎ ﻟﻠﻤﻬﻤﺔ‬ ‫‪chips‬‬ ‫ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺭﻗﺎﻗﺎﺕ‬
‫ﺍﻟﻤﺤﺩﺩﺓ‪.‬‬
‫ﺃﻭ‬ ‫‪Intel‬‬ ‫ﻤﻥ‬ ‫‪8085‬‬ ‫ﺇﻥ ﺍﺴﺘﻁﻌﺕ ﻓﻬﻡ ﺒﻨﻴﺔ ﻭﻋﻤل ﺃﻱ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻘﺩﻴﻤﺔ ﻤﺜل‬
‫ﻤﻥ ‪ ،Motorola‬ﻓﻴﻤﻜﻨﻙ ﺫﺍﺘﻴﹰﺎ ﺍﺴﺘﺩﺭﺍﻙ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ‬ ‫‪6800‬‬ ‫ﺃﻭ‬ ‫‪Zilog‬‬ ‫ﻤﻥ‬ ‫‪Z80‬‬

‫ﺍﻟﻀﺭﻭﺭﻴﺔ ﻻﺴﺘﻴﻌﺎﺏ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﺍﻷﻜﺜﺭ ﺤﺩﺍﺜﺔ‪.‬‬


‫ﻟﻌﺩﺓ ﺃﺴﺒﺎﺏ‬ ‫‪Intel‬‬ ‫ﻤﻥ‬ ‫‪8086/8088‬‬ ‫ﻟﻘﺩ ﺍﺨﺘﺭﻨﺎ ﻓﻲ ﻤﻘﺭﺭﻨﺎ ﻫﺫﺍ ﺩﺭﺍﺴﺔ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﻤﻨﻬﺎ‪ :‬ﺍﻋﺘﻤﺩ ﺘﺼﻤﻴﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﺍﻷﻭل ﺤﻭل ﻫﺫﺍ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻭﺍﻋﺘﻤﺎﺩ‬
‫ﺘﺼﻤﻴﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻷﺤﺩﺙ ‪ ،80486 ،80386 ،80286‬ﻭﻜﺫﻟﻙ ﺴﻠﺴﻠﺔ ﺒﻨﺘﻴﻭﻡ ﻋﻠﻰ‬
‫ﺒﻨﻴﺔ ﻫﺫﺍ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬

‫‪3‬‬
‫ﺍﻟﺒﻨﻴﺔ ﺍﻟﻌﺎﻤﺔ ﻟﻨﻅﺎﻡ ﺼﻐﺭﻱ‬

‫ﻴ‪‬ﻌﺘﺒﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻤﺦ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﺤﻴﺙ ﻴﻘﻊ ﻋﻠﻰ ﻋﺎﺘﻘﻪ‬


‫ﺘﻨﻔﻴﺫﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﻴﺘﻜﻭﻥ ﻤﻨﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﻬﻭ ﻴﺸﻜل ﺍﻟﻤﻜﻭﻥ ﺍﻟﺭﺌﻴﺱ‬
‫ﻓﻲ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﺃﻭ ﺃﻱ ﻨﻅﺎﻡ ﻴﻌﺘﻤﺩ ﻓﻲ ﺘﺼﻤﻴﻤﻪ ﻋﻠﻰ ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ‬
‫)ﺍﺨﺘﺼﺎﺭﹰﺍ ﻨﻅﺎﻡ ﺼﻐﺭﻱ( ﺃﻭ ﻨﻅﺎﻡ ﺘﺤﻜﻡ‪.‬‬
‫ﻴﻀﻡ ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﺜﻼﺙ ﻜﺘل ﺭﺌﻴﺴﺔ‪:‬‬
‫‪ -‬ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ )‪.Arithmetic Logic Unit (ALU‬‬
‫‪ -‬ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ )‪..Control Unit (CU‬‬
‫‪Registers‬‬ ‫‪ -‬ﺴﺠﻼﺕ ﺩﺍﺨﻠﻴﺔ‬

‫‪1‬‬
‫‪Central Processing‬‬ ‫ﻴﺸﺒﻪ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻓﻲ ﺒﻨﻴﺘﻪ ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ‬
‫‪CPU‬‬ ‫)‪ ،Unit (CPU‬ﻭﻟﻜﻨﻪ ﻴﺠﻤﻊ ﻜل ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ﺍﻟﺘﻲ ﺘﺘﻜﻭﻥ ﻤﻨﻬﺎ ﺍﻟـ‬
‫ﻭﺍﺤﺩﺓ‪.‬‬ ‫ﺃﻭ ﺩﺍﺭﺓ ﻤﺘﻜﺎﻤﻠﺔ‬ ‫‪chip‬‬ ‫ﻀﻤﻥ ﺭﻗﺎﻗﺔ‬

‫ت ﻣﻠﻴﺌ ًﺔ‬ ‫‪ 1‬وهﻲ اﻟﺘﺠﻬﻴﺰ ُة اﻟﺘﻲ ُﺗﻔﺴﱢ ُﺮ وﺗُﻨ ﱢﻔ ُﺬ اﻟﺘﻌﻠﻴﻤﺎت‪ .‬ﺗﺘﻀﻤﱠﻦ اﻟﺤﻮاﺳﻴ ُ‬
‫ﺐ اﻟﺮﺋﻴﺴ ُﺔ واﻟﺼﻐﻴﺮ ُة اﻟﻘﺪﻳﻤ ُﺔ ﻟﻮﺣﺎ ٍ‬
‫ﺑﺎﻟﺪارات اﻟﻤﺘﻜﺎﻣﻠﺔ ﺗُﻜﻮﱢن ﺑﻤﺠﻤﻠِﻬﺎ وﺣﺪ َة اﻟﻤﻌﺎﻟﺠ ِﺔ اﻟﻤﺮآﺰﻳﺔ‪.‬‬

‫‪4‬‬
‫ﻴﺤﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺞ ﻹﻨﺠﺎﺯ ﻋﻤﻠﻪ ﺩﺍﺭﺍﺕ ﺇﻀﺎﻓﻴﺔ ﺘﹸﺭﺒﻁ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻥ ﻁﺭﻴﻕ‬
‫ﻤﺴﺎﺭﻱ ﺍﻟﻨﻅﺎﻡ‪ ،‬ﻭﻫﺫﻩ ﺍﻟﺩﺍﺭﺍﺕ ﻟﻴﺴﺕ ﺠﺯﺀﹰﺍ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻨﻔﺴﻪ ﻭﻟﻜﻨﻬﺎ ﻀﺭﻭﺭﻴﺔ‬
‫ﻟﺘﺨﺯﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻜﺫﻟﻙ ﻟﺘﻭﺍﺼل ﺍﻟﻤﻌﺎﻟﺞ ﻤﻊ ﺍﻟﻤﺤﻴﻁ‬
‫ﺍﻟﺨﺎﺭﺠﻲ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﻨﻤﻴﺯ ﻤﻥ ﻫﺫﻩ ﺍﻟﺩﺍﺭﺍﺕ‪ ،‬ﻋﻠﻰ ﻨﺤﻭ ﺃﺴﺎﺴﻲ‪ ،‬ﺩﺍﺭﺓ ﻤﻔﻜﻙ‬
‫ﺍﻟﻌﻨﻭﻨﺔ‪ ،‬ﻭﺍﻟﺫﻭﺍﻜﺭ ﻭﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪ .‬ﺘﹸﺸﻜل ﻫﺫﻩ ﺍﻟﻤﻜﻭﻨﺎﺕ ﻤﺠﺘﻤﻌ ﹰﺔ ﻤﻊ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻨﻅﺎﻡ ﺃﻭ ﻨﻅﺎﻡ ﺍﻟﻤﻌﺎﻟﺠﺔ ‪ ،microprocessor-based system‬ﻭﻴ‪‬ﺴﻤﻰ‬
‫ﺃﻴﻀﹰﺎ ﺤﺎﺴﻭﺏ ﺼﻐﺭﻱ ‪ .microcomputer‬ﻨﻁﻠﻕ ﻋﻠﻰ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺼﻐﺭﻱ‪ ،‬ﻋﻨﺩﻤﺎ‬
‫ﻴﻜﻭﻥ ﻤﺨﺼﺼﹰﺎ ﻹﻨﺠﺎﺯ ﻤﻬﺎﻡ ﻤﺘﻨﻭﻋﺔ ﻤﻥ ﻗﺒل ﻤﺴﺘﺨﺩﻡ ﻭﺍﺤﺩ ﺍﺴﻡ ﺤﺎﺴﻭﺏ‬
‫ﺸﺨﺼﻲ ‪ .PC‬ﻭﻤﻊ ﺘﻁﻭﺭ ﺘﻘﺎﻨﺔ ﺼﻨﺎﻋﺔ ﺍﻟﺭﻗﺎﺌﻕ ﻓﻘﺩ ﺃﺼﺒﺢ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﻭﻀﻊ‬
‫ﺠﻤﻴﻊ ﻤﻜﻭﻨﺎﺕ ﺍﻟﻨﻅﺎﻡ ﻀﻤﻥ ﺭﻗﺎﻗﺔ ﻭﺍﺤﺩﺓ‪ ،‬ﻭﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻜﺫﻟﻙ ﻨﺴﻤﻲ ﺍﻟﺤﺎﺴﻭﺏ‬
‫ﻭﻫﻭ ﻴﺴﺘﺨﺩﻡ ﻓﻲ ﻨﻅﻡ ﺍﻟﺘﺤﻜﻡ ﻤﺜل‬ ‫‪microcontroller‬‬ ‫ﺍﻟﺼﻐﺭﻱ ﻤﺘﺤﻜﻤﹰﺎ ﺼﻐﺭﻴﹰﺎ‬
‫ﺍﻹﺸﺎﺭﺓ ﺍﻟﻀﻭﺌﻴﺔ‪.‬‬

‫‪ALU‬‬ ‫ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ‬


‫ﻭﻫﻭ ﺍﻟﺠﺯﺀ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺫﻱ ﻴﻨﻔﺫ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻹﺜﻨﺎﻨﻴﺔ ﺃﻭ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ‪1‬ﻤﺜل‪ :‬ﺍﻟﺠﻤﻊ‪،‬‬ ‫‪ALU‬‬ ‫ﺍﻟﻤﻤﺜﻠﺔ ﺜﻨﺎﺌﻴ ﹰﺎ ‪ .binary data‬ﺘﻨﺠﺯ ﺍﻟـ‬
‫ﺍﻟﻁﺭﺡ‪ ،‬ﻭﺍﻟﻀﺭﺏ‪ ،‬ﻭﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ﻤﺜل‪ ،OR ،AND :‬ﺍﻹﺯﺍﺤﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ‬
‫ﺃﻭ ﺍﻟﻴﺴﺎﺭ ‪ .SHL‬ﺘﺴﺘﻘﺒل ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ ﺇﺸﺎﺭﺍﺕ ﺘﺤﻜﻡ ﻤﻥ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ‬ ‫‪SHR‬‬

‫ﺘﺨﺒﺭﻩ ﻋﻥ ﻨﻭﻉ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﻤﺭﺍﺩ ﺘﻨﻔﻴﺫﻫﺎ ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ‪.‬‬


‫ﻓﻲ ﻋﻤﻠﻬﺎ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ﻭﺨﺼﻴﺼﹰﺎ ﺍﻟﻤﺭﺍﻜﻡ‬ ‫‪ALU‬‬ ‫ﺘﺴﺘﺨﺩﻡ‬
‫‪Flag register‬‬ ‫ﺍﻟﺫﻱ ﻴﺤﺘﻭﻱ ﻨﺘﻴﺠﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﻤﻨﺠﺯﺓ ﻭﺴﺠل ﺍﻟﺭﺍﻴﺔ‬ ‫‪Accumulator‬‬

‫ﺍﻟﺫﻱ ﻴﺘﻜﻭﻥ ﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺒﺘﺎﺕ ﺘﹸﺴﺘﺨﺩﻡ ﻟﺘﺨﺯﻴﻥ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺁﺨﺭ ﻋﻤﻠﻴﺔ ﻨﻔﺫﺘﻬﺎ‬
‫ﺍﻟـ ‪.ALU‬‬

‫‪ 1‬اﻟﻤﻌﺎﻟﺠﺎت اﻷوﻟﻰ ﻣﺜﻞ ‪ 8085‬ﻻ ﺗﺤﺘﻮي هﺬﻩ اﻟﻌﻤﻠﻴﺔ‬

‫‪5‬‬
‫ﻼ‬
‫ﻋﻠﻰ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﻜﻭﻨﺎﺕ ﻟﻜل ﻤﻨﻬﺎ ﻭﻅﻴﻔﺔ ﻤﺤﺩﺩﺓ ﺘﻘﻭﻡ ﺒﻬﺎ‪ .‬ﻓﻤﺜ ﹰ‬ ‫‪ALU‬‬ ‫ﺘﺤﺘﻭﻱ‬
‫ﺘﺴﺘﺨﺩﻡ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ﻹﻨﺠﺎﺯ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺠﻤﻊ ﻭﺍﻟﻁﺭﺡ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻴ‪‬ﺴﺘﺨﺩﻡ‬
‫ﺴﺠل ﺇﺯﺍﺤﺔ ﻹﻨﺠﺎﺯ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺯﺍﺤﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ ﺃﻭ ﺍﻟﻴﺴﺎﺭ‪.‬‬

‫‪CU‬‬ ‫ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ‬


‫ﻭﺇﺸﺎﺭﺍﺕ‬ ‫‪timing‬‬ ‫ﻭﻫﻭ ﺍﻟﻤﻜﻭﻥ ﺍﻷﻜﺜﺭ ﺘﻌﻘﻴﺩﹰﺍ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻴﺅﻤﻥ ﺠﻤﻴﻊ ﺍﻟﺘﻭﺍﻗﻴﺕ‬
‫ﺍﻟﺘﺤﻜﻡ ﺍﻟﻼﺯﻤﺔ ﻟﻌﻤل ﺍﻟﻤﻜﻭﻨﺎﺕ ﺍﻷﺨﺭﻯ ﻟﻠﻤﻌﺎﻟﺞ ﻭﻤﻨﻬﺎ ‪ ،ALU‬ﻭﻫﻭ ﺃﻴﻀﹰﺎ‬
‫ﻤﺴﺅﻭل ﻋﻥ ﺘﻨﺠﻴﺯ ﺩﻭﺭﺓ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ، instruction execution cycle‬ﻜﻤﺎ‬
‫ﻴﺘﺤﻜﻡ ﺒﻌﻤﻠﻴﺎﺕ ﻨﻘل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ ﻭﺍﻟﻤﺤﻴﻁﻴﺎﺕ ‪.peripherals‬‬
‫ﺘﺤﺘﻭﻱ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ ﺜﻼﺙ ﻋﻨﺎﺼﺭ ﺃﺴﺎﺴﻴﺔ ﻭﻫﻲ‪:‬‬
‫ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ‪ :Decoder‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﺍﻟﺘﻲ ﺘﹸﺸﻜل‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻋﻨﺩ ﺘﻨﻔﻴﺫﻫﺎ‪ ،‬ﻭ ‪‬ﻴﺤﺩﺩ ﺍﻷﻓﻌﺎل ﺍﻟﻭﺍﺠﺏ ﺍﻟﻘﻴﺎﻡ ﺒﻬﺎ ﻹﻨﺠﺎﺯ ﻜل‬
‫‪1‬‬
‫ﻟﻠﺘﻌﻠﻴﻤﺔ ﻤﻊ ﺘﺤﺩﻴﺩ ﻨﻤﻁ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ ‪opcode‬‬ ‫ﺘﻌﻠﻴﻤﺔ ﺒﻌﺩ ﺘﻔﺤﺹ ِﺭﻤ‪‬ﺎ ‪‬ﺯ‬
‫ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤ‪‬ﺴﺘﺨﺩﻡ‪.‬‬
‫ﺍﻟﻤﺅﻗﺕ ﺃﻭ ﺍﻟﻤﻴﻘﺎﺘﻴﺔ ‪ :Timer or clock‬ﺘﻜﻔل ﺒﺘﻨﻔﻴﺫ ﻭﺇﻨﻬﺎﺀ ﺠﻤﻴﻊ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﻭﻗﺕ ﺍﻟﺼﺤﻴﺢ‪ .‬ﺘﻭﻟﺩ ﻨﺒﻀﺎﺕ ﻤﻨﺘﻅﻤﺔ ﺇﻟﻰ ﺍﻷﺠﺯﺍﺀ‬
‫ﺍﻷﺨﺭﻯ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻤﺎ ﻴﺅﻤﻥ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﻨﺤﻭ ﻤﺘﺯﺍﻤﻥ‪.‬‬
‫ﺩﺍﺭﺍﺕ ﺘﺤﻜﻡ ﻤﻨﻁﻘﻴﺔ ‪ :Control logic circuits‬ﺘﹸﺴﺘﺨﺩﻡ ﻟﺘﻭﻟﻴﺩ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ‬
‫ﻨﻔﺴﻬﺎ‪ ،‬ﺜﻡ ﺇﺭﺴﺎﻟﻬﺎ ﺇﻟﻰ ﺒﻘﻴﺔ ﺍﻷﺠﺯﺍﺀ‪ .‬ﺘﹸﻌﻠﻡ ﻫﺫﻩ ﺍﻹﺸﺎﺭﺍﺕ ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ‬
‫ﻭﺍﻟﻤﻨﻁﻕ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ ﺒﺎﻟﻌﻤﻠﻴﺎﺕ ﻭﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﻭﺍﺠﺏ ﺇﻨﺠﺎﺯﻫﺎ‪،‬‬

‫ﻉ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﺑﻨﻴﺔ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﺳﺘﻌﻤﻞ‬


‫‪ 1‬ﺍﺧﺘﺼﺎﺭ ﻟـ ‪.operation code‬ﺟﺰ ٌﺀ ﻣﻦ ﺗﻌﻠﻴﻤﺔ ﻟﻐﺔ ﺍﻵﻟﺔ ﻳ‪‬ﺤﺪ‪‬ﺩ ﻧﻮ ‪‬‬
‫ﻋﻠﻴﻬﺎ‪.‬‬

‫‪6‬‬
‫ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻭﺍﺠﺏ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻲ ﺘﻨﺠﻴﺯ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭﻤﺎ ﺍﻟﺫﻱ ﻴﺠﺏ ﻓﻌﻠﻪ‬
‫ﺒﺎﻟﻨﺘﺎﺌﺞ‪.‬‬

‫‪Registers‬‬ ‫ﺴﺠﻼﺕ ﺩﺍﺨﻠﻴﺔ‬


‫ﺍﻟﺴﺠل ﻋﺒﺎﺭﺓ ﻋﻥ ﺫﺍﻜﺭﺓ ﺘﻘﻊ ﻀﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻨﻔﺴﻪ‪ .‬ﺘﻀﻡ ﺠﻤﻴﻊ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‬
‫ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺴﺠﻼﺕ ﺘﺤﺘﻭﻱ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻼﺯﻡ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻬﺎ‬
‫ﺒﺴﺭﻋﺔ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ .‬ﺠﻤﻴﻊ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺘﺤﺘﻭﻱ ﺴﺠﻼﺕ ﻤﺸﺘﺭﻜﺔ‪ ،‬ﻴ‪‬ﺴﻨﺩ‬
‫ﻟﺒﻌﻀﻬﺎ ﻭﻅﻴﻔﺔ ﻤﺤﺩﺩﺓ ﻭﻴ‪‬ﺘﺭﻙ ﺍﻟﺒﺎﻗﻲ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ‪ .‬ﻴﺭﻤﺯ ﻟﻜل ﻤﻥ ﺍﻟﺴﺠﻼﺕ‬
‫ﺒﺤﺭﻑ ﺃﻭ ﺃﻜﺜﺭ ﻭﻴﺨﺘﻠﻑ ﺭﻤﺯﻫﺎ ﻤﻥ ﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺁﺨﺭ‪ ،‬ﻭﻤﻨﻬﺎ‪:‬‬
‫ﻋﺩﺍﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ )‪ :Program Counter (PC‬ﺃﻭ ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﻤﺴﻙ ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺘﻲ‬ ‫)‪Instruction Pointer (IP‬‬

‫ﺴﻴﻨﻔﺫﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﺴﺠل ﺍﻟﺘﻌﻠﻴﻤﺔ )‪ :Instruction Register (IR‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﻤﺴﻙ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ‬
‫ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻴﻨﻤﺎ ﻴﺠﺭﻱ ﻓﻙ ﺘﺭﻤﻴﺯﻫﺎ ﻭﺘﻨﻔﻴﺫﻫﺎ‪.‬‬
‫ﺍﻟﻤﺭﺍﻜﻡ ) ‪ A‬ﺃﻭ ‪ :Accumulator (ACC‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﺤﻔﻅ ﻨﺘﻴﺠﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ‬
‫ﺘﻨﻔﺫﻫﺎ ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ‪.‬‬
‫ﺴﺠل ﻋﻨﻭﺍﻥ ﺍﻟﺫﺍﻜﺭﺓ )‪ :Memory Address Register (MAR‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﺤﻔﻅ‬
‫ﻋﻨﻭﺍﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﺴﻴﺘﻡ ﻗﺭﺍﺀﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻨﻬﺎ ﺃﻭ ﻜﺘﺎﺒﺘﻬﺎ ﺇﻟﻴﻬﺎ‪.‬‬
‫ﺴﺠل ﺼﻭﺍﻥ‪ 1‬ﺍﻟﺫﺍﻜﺭﺓ )‪ :Memory Buffer Register (MBR‬ﹸﺘﻭﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻭ‬
‫ﻻ ﻓﻲ ﺴﺠل ﺼﻭﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻤﻥ ﺜﹸﻡ ﺘﻨﻘل ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺃﻭ ﹰ‬
‫ﺍﻟﻤﻨﺎﺴﺏ‪ ،‬ﻋﻨﺩ ﺠﻠﺏ ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫‪ 1‬ﺃﻭ ﻋﺎﺯﻝ‬

‫‪7‬‬
‫ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﺃﻭ ﺍﻟﺤﺎﻟﺔ ‪ :Flag register/status flags‬ﻴﺘﻜﻭﻥ ﻤﻥ ﻤﺠﻤﻭﻋﺔ‬
‫ﺒﺘﺎﺕ ﺘﺘﻐﻴﺭ ﻗﻴﻤﻬﺎ ﺘﺒﻌﹰﺎ ﻟﻨﺘﻴﺠﺔ ﺁﺨﺭ ﻋﻤﻠﻴﺔ ﺘﻨﻔﺫﻫﺎ ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ‪.‬‬
‫ﻤﺜل ﺍﻟﺴﺠل ‪،B‬‬ ‫‪:general purpose register‬‬ ‫ﺴﺠﻼﺕ ﻟﻼﺴﺘﺨﺩﺍﻤﺎﺕ ﺍﻟﻌﺎﻤﺔ‬
‫ﻟﻴﺱ ﻟﻬﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻭﻅﻴﻔﺔ ﻤﺤﺩﺩﺓ ﻭﺘﹸﺴﺘﺨﺩﻡ ﻋﺎﺩﺓ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ‬
‫ﻴﺤﺘﺎﺝ ﺇﻟﻴﻬﺎ ﻻﺤﻘﹰﺎ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬

‫‪System Bus‬‬ ‫ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ‬

‫ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﺴﻼﻙ ﻜﻬﺭﺒﺎﺌﻴﺔ ﺘﹸﺴﺘﺨﺩﻡ ﻟﺭﺒﻁ ﻜل ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ ﻭﺍﻟﻤﺤﻴﻁﻴﺎﺕ‬


‫ﻭﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻷﺠﺯﺍﺀ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﻠﻨﻅﺎﻡ‪ .‬ﻴﺘﻜﻭﻥ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ ﻤﻥ ﺜﻼﺙ ﺃﻨﻭﺍﻉ‬
‫ﺭﺌﻴﺴﺔ‪ ،‬ﻭﻫﻲ‪:‬‬
‫ﻤﺴﺭﻯ ﺍﻟﺘﺤﻜﻡ ‪ :Control Bus‬ﻴﺨﺘﻠﻑ ﻋﺭﻀﻪ )ﻋﺩﺩ ﺃﺴﻼﻜﻪ( ﻤﻥ ﻤﻌﺎﻟﺞ‬
‫ﺇﻟﻰ ﺁﺨﺭ‪ ،‬ﻭﻟﻜل ﺨﻁ ﺃﻭ ﺴﻠﻙ ﻭﻅﻴﻔﺔ ﻤﺤﺩﺩﺓ‪ .‬ﻴﺤﻤل ﻫﺫﺍ ﺍﻟﻤﺴﺭﻯ ﺇﺸﺎﺭﺍﺕ‬
‫ﺘﻌﺒﺭ ﻋﻥ ﻨﻭﻉ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻲ ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫﻫﺎ ﺤﺎﻟﻴ ﹰﺎ‪ .‬ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻫﺫﻩ‬
‫ﺍﻹﺸﺎﺭﺍﺕ‪ ،‬ﺘﺴﺘﻁﻴﻊ ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ ﺍﻟﻤﺭﺘﺒﻁﺔ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻌﺭﻓﺔ ﻜﻭﻥ‬
‫ﺍﻟﻌﻤﻠﻴﺔ ﻫﻲ ﻗﺭﺍﺀﺓ‪ ،‬ﻜﺘﺎﺒﺔ‪ ،‬ﻋﻤﻠﻴﺔ ﺩﺨل‪/‬ﺨﺭﺝ ‪ ،1I/O‬ﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺃﻭ‬
‫ﻋﻤﻠﻴﺔ ﺃﺨﺭﻯ‪.‬‬
‫ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ :Data Bus‬ﺘﹸﺴﺘﺨﺩﻡ ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ‪،‬‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﻭﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‪ ،‬ﻭﻫﻭ ﺜﻨﺎﺌﻲ ﺍﻻﺘﺠﺎﻩ ﻴﺴﻤﺢ ﺒﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫ﻓﻲ ﻜﻼ ﺍﻻﺘﺠﺎﻫﻴﻥ ﻋﺒﺭ ﺍﻷﺴﻼﻙ‪ .‬ﻴﺨﺘﻠﻑ ﺃﻴﻀﹰﺎ ﻋﺩﺩ ﺨﻁﻭﻁﻪ ﻤﻥ ﻤﻌﺎﻟﺞ‬
‫ﺇﻟﻰ ﺁﺨﺭ‪ .‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻜل ﺨﻁ ﻟﻨﻘل ﺇﺸﺎﺭﺓ ﺘﻌﺒﺭ ﻋﻥ ﺒﺕ ﻭﺍﺤﺩﺓ ﻤﻥ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻻﺜﻨﺎﻨﻴﺔ‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ‪ ،‬ﻜﻠﻤﺎ ﻜﺎﻥ ﻋﺩﺩ ﻫﺫﻩ ﺍﻟﺨﻁﻭﻁ ﺃﻜﺒﺭ ﺃﻤﻜﻨﻨﺎ‬
‫ﺘﺒﺎﺩل ﻜﻤﻴﺔ ﺃﻜﺒﺭ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻹﺜﻨﺎﻨﻴﺔ ﺒﺂﻥ ﻭﺍﺤﺩ‪.‬‬

‫‪Input/Output‬‬ ‫‪ 1‬ﺍﺧﺘﺼﺎﺭ ﻟـ‬

‫‪8‬‬
‫ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ ‪ :Address Bus‬ﻴ‪‬ﻭﻟﺩ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻹﺸﺎﺭﺍﺕ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻤﺴﺭﻯ‬
‫ﻤﻥ ﺃﺠل ِﻋﻨﻭﻨﺔ ﻤﻭﻗﻊ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﺍﺨﺘﻴﺎﺭ ﺇﺤﺩﻯ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‬
‫ﺍﻟﺘﻲ ﻴﻘﺭﺃ ﻤﻨﻬﺎ ﺃﻭ ﻴﻜﺘﺏ ﻓﻴﻬﺎ ﺤﺎﻟﻴﹰﺎ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﻴ‪‬ﺤﺩﺩ ﻋﺩﺩ ﺨﻁﻭﻁ ﻤﺴﺭﻯ‬
‫ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺴﻌﺔ ﺍﻟﻌﻅﻤﻰ ﻟﻠﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻨﻭﻨﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻴﺭﺴل‬
‫ﻭﻴﺤﻤل ﻜل ﺨﻁ ﺭﻗﻡ ﺍﺜﻨﺎﻨﻲ‬ ‫‪binary format‬‬ ‫ﺍﻟﻌﻨﻭﺍﻥ ﺒﺎﻟﺼﻴﺎﻏﺔ ﺍﻻﺜﻨﺎﻨﻴﺔ‬
‫ﻗﻭﺓ ﻋﺩﺩ‬ ‫‪2‬‬ ‫ﻭﺍﺤﺩ‪ ،‬ﻟﺫﻟﻙ ﺘﺴﺎﻭﻱ ﺴﻌﺔ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻌﻅﻤﻰ )ﻋﺩﺩ ﺍﻟﻤﻭﺍﻗﻊ(‬
‫ﺍﻟﺨﻁﻭﻁ‪.‬‬

‫ﻴﺴﺎﻭﻱ ‪ ،20‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ‬ ‫‪8088/8086‬‬ ‫ﻤﺜﺎل‪ :‬ﺇﻥ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﻤﻴﻐﺎ‬ ‫‪1‬‬ ‫ﺃﻭ‬ ‫‪220=1024576‬‬ ‫ﺴﻌﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻌﻅﻤﻰ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺘﻬﺎ ﻫﻭ‬
‫ﻤﻭﻗﻊ‪.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪:‬‬
‫ﻜﻴﻠﻭ ﺒﺎﻴﺕ‪ .‬ﻤﺎ ﻋﺩﺩ‬ ‫‪64‬‬ ‫ﺒﺎﻴﺕ ﺃﻭ‬ ‫‪65536‬‬ ‫ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺤﺠﻤﻬﺎ‬
‫ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﺍﻨﺔ ﺍﻟﻼﺯﻡ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻟﻌﻨﻭﻨﺔ ﻜﺎﻤل ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺍﻟﺤل‪ :‬ﻋﺩﺩ ﺍﻟﺨﻁﻭﻁ ﻴﺴﺎﻭﻱ ‪. log 2 65536 = 16‬‬

‫‪address decoder‬‬ ‫ﻤﻔﻜﻙ ﻋﻨﻭﻨﺔ‬

‫ﻭﻫﻭ ﺠﺯﺀ ﺃﺴﺎﺴﻲ ﻓﻲ ﺃﻱ ﻨﻅﺎﻡ ﻤﻌﺎﻟﺠﺔ‪ ،‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﺘﺄﻫﻴل ﺇﺤﺩﻯ ﺍﻟﺩﺍﺭﺍﺕ‬


‫ﺍﻟﺨﺎﺭﺠﻴﺔ ﺍﻟﻤﻭﺼﻭﻟﺔ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺘﻲ ﻴﺄﺨﺫﻫﺎ ﻤﻥ‬
‫‪ICs‬‬ ‫ﺍﻟﻤﻌﺎﻟﺞ ﻤﻥ ﻤﺴﺭﻯ ﺍﻟﺘﺤﻜﻡ ﻭﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ‪ .‬ﺒﻤﺎ ﺃﻨﻪ ﻴﻭﺠﺩ ﻋﺩﺓ ﺩﺍﺭﺍﺕ‬
‫ﻤﻭﺼﻭﻟﺔ ﻋﻠﻰ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻓﻴﻀﻤﻥ ﻤﻔﻜﻙ ﺍﻟﺘﺭﻤﻴﺯ ﺃﻥ ﺘﻜﻭﻥ ﺩﺍﺭﺓ ﻭﺍﺤﺩﺓ‬
‫ﻓﻘﻁ ﻤﺅﻫﻠﺔ ﺃﻭ ﻓﻌﺎﻟﺔ ﻓﻲ ﺁﻥ ﻭﺍﺤﺩ‪ ،‬ﺤﺘﻰ ﻻ ﻴﺤﺼل ﺘﻌﺎﺭﺽ ﻋﻠﻰ ﻤﺴﺭﻯ‬

‫‪9‬‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺄﻥ ﺘﻜﺘﺏ ﺃﻜﺜﺭ ﻤﻥ ﺩﺍﺭﺓ ﻤﻌﻁﻴﺎﺕ ﻤﺨﺘﻠﻔﺔ ﻋﻠﻰ ﺍﻟﻤﺴﺭﻯ ﻨﻔﺴﻪ ﺒﺂﻥ‬
‫ﻭﺍﺤﺩ‪.‬‬
‫‪memory‬‬ ‫ﺍﻟﺫﺍﻜﺭﺓ‬

‫ﺘﺘﻭﻀﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺠﻭﺍﺭ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺘﺸﻜل ﺠﺯﺀﹰﺍ ﺃﺴﺎﺴﻴﹰﺎ ﻤﻥ ﺍﻟﻨﻅﺎﻡ‪ .‬ﻴﺤﺘﻭﻱ ﺍﻟﻨﻅﺎﻡ‬
‫‪1‬‬
‫ﻟﺤﻔﻅ ﺩﺍﺌﻡ ﻟﻠﻤﻌﻁﻴﺎﺕ ﺃﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭ‬ ‫‪ROM‬‬ ‫ﻋﺎﺩﺓ ﻋﻠﻰ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬
‫‪2‬‬
‫ﻟﻠﺤﻔﻅ ﺍﻟﻤﺅﻗﺕ ﻟﻠﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻤﺘﺤﻭﻻﺕ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬ ‫‪RAM‬‬

‫‪input/output ports‬‬ ‫ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬

‫ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﺒﺎﺩل ﺍﻟﻁﺭﻓﻴﺎﺕ ‪ 3‬ﺃﻭ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻥ‬


‫ﻁﺭﻴﻕ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪.‬‬
‫ﺘﹸﺴﺘﺨﺩﻡ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل ﻹﺩﺨﺎل ﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻥ ﻁﺭﻴﻕ ﻤﺴﺭﻯ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﻭﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻋﺒﺎﺭﺓ ﻋﻥ ﺩﺍﺭﺓ ﺼﻭﺍﻥ ﻤﺨﺎﺭﺠﻬﺎ ﻤﻥ ﻨﻭﻉ ﺜﻼﺜﻲ‪-‬‬
‫ﺍﻟﺤﺎﻟﺔ ‪ .4three-state‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻭﺼل ﻤﻥ ﺍﻟﻁﺭﻑ ﺍﻵﺨﺭ ﻟﻠﺒﻭﺍﺒﺔ ﺃﻱ ﺘﺠﻬﻴﺯﺓ ﺃﻭ‬

‫‪ 1‬ﳐﺘﺼﺮ‪read-only memory :‬؛ ﺫﺍﻛﺮﺓ ﻟﻠﻘﺮﺍﺀﺓ ﻓﻘﻂ‪ .‬ﲢﺘﻮﻱ ﻋﻠﻰ ﺗﻌﻠﻴﻤﺎﺕ ﺃﻭ ﻣﻌﻄﻴﺎﺕ ﳝﻜِﻦ ﻗﺮﺍ َﺀﺗ‪‬ﻬﺎ ﻭﻻ‬
‫ﳝﻜِﻦ ﺗﻌﺪﻳﻠﹸﻬﺎ‪ ،‬ﻟﺬﻟﻚ ﺗﺴﻤﻰ ﺃﻳﻀﹰﺎ ﺑﺎﻟﺬﺍﻛﺮﺓ ﺍﳌﻴﺘﺔ‪.‬‬

‫‪CPU‬‬ ‫‪ 2‬ﳐﺘﺼﺮ‪random access memory :‬؛ ﺫﺍﻛﺮﺓ ﺫﺍﺕ ﻭﺻﻮﻝ ﻋﺸﻮﺍﺋﻲ‪ .‬ﺗﺴﺘﻄﻴﻊ ﻭﺣﺪ ﹸﺓ ﺍﳌﻌﺎﳉﺔ ﺍﳌﺮﻛﺰﻳﺔ‬
‫ﻱ ﺗﺮﺗﻴﺐ‪ .‬ﻭﺗﺴﻤﻰ‬‫)ﺃﻭ ﺃﻱ ﻋﺘﺎﺩﻳﺎﺕ ﺃﺧﺮﻯ( ﺃﻥ ﺗ‪‬ﻘﺮﺃﹶﻫﺎ ﻭﺗ‪‬ﻜﺘﺐ ﻓﻴﻬﺎ‪ .‬ﻭﳝﻜِﻦ ﺍﻟﻨﻔﺎ ﹸﺫ ﺇﱃ ﻣﻮﺍﺿ ِﻊ ﺍﻟﺘﺨﺰﻳﻦ ﻓﻴﻬﺎ ﺑﺄ ‪‬‬
‫ﺃﻳﻀﹰﺎ ﺑﺎﻟﺬﺍﻛﺮﺓ ﺍﳊﻴﺔ‪.‬‬

‫ﺴﻮ‪‬ﻕ ﺍﻟﻘﺮﺹ ‪ ،disk drive‬ﺃﻭ ﻃﺎﺑﻌﺔ‪ ،‬ﺃﻭ ﻣﻮﺩﻡ‪ ،‬ﺃﻭ ﻋﺼﺎ ﻗﻴﺎﺩﺓ ‪ (joystick‬ﺗ‪‬ﺮ‪‬ﺑﻂﹸ‬
‫‪ 3‬ﺍﻟﻄﺮﻓﻴﺔ ﻫﻲ ﲡﻬﻴﺰ ﹲﺓ )ﻣﺜﻞ ِﻣ ‪‬‬
‫ﰿ ﺍﻟﺼﻐﺮﻱ ﻟﻠﺤﺎﺳﻮﺏ‪.‬‬‫ﺑﺎﳊﺎﺳﻮﺏ ﻭﻳ‪‬ﺘﺤﻜﱠﻢ‪ ‬ﻓﻴﻬﺎ ﺍﳌﻌﺎ ﹸ‬

‫‪ 4‬ﺃﻱ ﺃﻥ ﺧﺮﺝ ﺍﻟﺪﺍﺭﺓ ﺃﻭ ﺍﻟﺮﻗﺎﻗﺔ ﻳﺴﺎﻭﻱ ﺇﻣﺎ "‪ 0‬ﻣﻨﻄﻘﻲ" ﺃﻭ "‪ 1‬ﻣﻨﻄﻘﻲ" ﺃﻭ ﺃﻥ ﻳﻜﻮﻥ ﰲ ﺍﳊﺎﻟﺔ ﺍﻟﻌﺎﺋﻤﺔ ﻭﻛﺄﻥ‬
‫ﺍﻟﺮﻗﺎﻗﺔ ﻏﲑ ﻣﻮﺟﻮﺩﺓ‪ .‬ﳚﺐ ﺃﻥ ﲤﺘﻠﻚ ﲨﻴﻊ ﳐﺎﺭﺝ ﺍﻟﺪﺍﺭﺍﺕ ﺃﻭ ﺍﻟﺮﻗﺎﺋﻖ ﺍﳌﻮﺻﻮﻟﺔ ﺇﱃ ﻣﺴﺮﻯ ﺍﳌﻌﻄﻴﺎﺕ ﻫﺬﻩ‬
‫ﺍﳋﺎﺻﻴﺔ‪.‬‬

‫‪10‬‬
‫ﻁﺭﻓﻴﺔ ﺩﺨل ﻤﺜل ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ .‬ﺘﻀﻊ ﺒﻭﺍﺒﺔ ﺍﻟﺩﺨل ﻤﻌﻁﻴﺎﺘﻬﺎ ﻋﻠﻰ ﻤﺴﺭﻯ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻨﺩﻤﺎ ﻴﻁﻠﺏ ﺍﻟﻤﻌﺎﻟﺞ ﺫﻟﻙ‪.‬‬

‫ﻜﻤﺎ ﺘﺴﻤﺢ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺨﺭﺝ ﻟﻠﻤﻌﺎﻟﺞ ﺒﺈﺭﺴﺎل ﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺍﻟﻭﺴﻁ ﺍﻟﺨﺎﺭﺠﻲ‪ ،‬ﻤﺜل‬
‫ﺍﻟﻁﺎﺒﻌﺔ ﺃﻭ ﺩﻴﻭﺩﺍﺕ ﻀﻭﺌﻴﺔ ‪ .1LEDs‬ﻏﺎﻟﺒﹰﺎ ﻤﺎ ﺘﻜﻭﻥ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺨﺭﺝ ﻤﻜﻭﻨﺔ ﻤﻥ‬
‫ﻟﻤﺴﻙ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﻀﻌﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﻤﺴﺭﻯ‬ ‫‪D‬‬ ‫ﻗﻼﺒﺎﺕ ﻤﻥ ﻨﻭﻉ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻤﻤﺎ ﻴﺴﻤﺢ ﻟﻠﻤﻌﺎﻟﺞ ﺒﻤﺘﺎﺒﻌﺔ ﺘﻨﻔﻴﺫ ﻤﻬﺎﻡ ﺃﺨﺭﻯ‪.‬‬

‫ﺁﻟﻴﺔ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ‬

‫ﻴﻌﻤل ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﹸﺘﻜﻭﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺘﻌﻠﻴﻤﺔ ﺘﻠﻭ ﺍﻷﺨﺭﻯ‪.‬‬
‫ﻭﺒﻤﺎ ﺃﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻴﺴﺘﻁﻴﻊ ﻓﻘﻁ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﻤﻌﻁﻴﺎﺕ ﻤﻤﺜﻠﺔ ﺇﺜﻨﺎﻨﻴﺎﹰ‪ ،‬ﻓﺈﻥ‬
‫ﺘﺭﻤﻴﺯ ﺇﺜﻨﺎﻨﻲ ﺃﻭ ﻗﻴﻤﺔ ﺇﺜﻨﺎﺌﻴﺔ ﹸﺘﻌﺒﺭ ﻋﻨﻬﺎ‪ ،‬ﻭﻴﺠﺏ ﺘﺯﻭﻴﺩ‬ ‫‪instruction‬‬ ‫ﻟﻜل ﺘﻌﻠﻴﻤﺔ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﺎﻟﻠﻐﺔ ﺍﻹﺜﻨﺎﻨﻴﺔ ﺃﻭ ﻟﻐﺔ ﺍﻵﻟﺔ ‪ .machine language‬ﻨﺴﻤﻲ ﺠﻤﻴﻊ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﻴﺘﻌ ‪‬ﺭﻓﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻭﻴﺴﺘﻁﻴﻊ ﺘﻨﻔﻴﺫﹶﻫﺎ ﺒﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫‪CPU‬‬ ‫‪ .instruction set‬ﻟﻜل ﻤﻌﺎﻟﺞ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﻤﺨﺘﻠﻔﺔ ﻭﺫﻟﻙ ﺘﺒﻌﹰﺎ ﻟﺒﻨﻴﺔ ﺍﻟـ‬
‫ﺃﻭ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﻻ ﺃﺤﺩ ﻋﻤﻠﻴﹰﺎ ﻴﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﺒﻠﻐﺔ ﺍﻵﻟﺔ‪ ،‬ﻷﻥ ﻋﻠﻴﻪ ﺤﻔﻅ ﺍﻟﻤﺌﺎﺕ ﻤﻥ ﺍﻷﺭﻤﺯﺓ‬
‫ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ ﺘﻁﺎﺒﻕ ﻜل ﻤﻨﻬﺎ ﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﻟﺤﺴﻥ ﺍﻟﺤﻅ‪ ،‬ﻓﺈﻥ‬
‫ﻤﺼﻤﻤﻭ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻴﺯﻭﺩﻨﺎ ﺒﻜﻠﻤﺎﺕ ﺇﻨﻜﻠﻴﺯﻴﺔ‪-‬ﻤﺨﺘﺼﺭﺓ ﺃﻭ َﺃ ‪‬ﺭﻤِﺯ‪‬ﺓﹰ ﺍﺴﺘﺫﻜﺎﺭﻴ ﹰﺔ‬
‫ل ﻋﺒﺎﺭ ٍﺓ ﻤﻨﻬﺎ ﺘﻌﻠﻴﻤ ﹶﺔ ﺁﻟ ٍﺔ ﻭﺍﺤﺩﺓ‪ ،‬ﺘﹸﺸﻜل ﻤﺠﻤﻭﻉ ﻫﺫﻩ‬
‫ﺘﻭﺍﻓﻕ ﻜ ﱡ‬ ‫‪mnemonic codes‬‬

‫ﺍﻟﻌﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ‪.assembly language‬‬

‫ﻒ ﻧﺎﻗﻞ‪ ،‬ﳛﻮ‪‬ﻝ ﺍﻟﻄﺎﻗ ﹶﺔ ﺍﻟﻜﻬﺮ‪‬ﺑﺎﺋﻴ ﹶﺔ ﺇﱃ ﺿﻮﺀ‪.‬‬


‫‪ 1‬ﺍﺧﺘﺼﺎﺭ ﻟﹻ ‪ .light-emitting diode‬ﻋﻨﺼ ‪‬ﺮ ﻧﺼ ‪‬‬

‫‪11‬‬
‫ﻻ ﺘﺤﻭﻴل‬
‫ﻟﻜل ﻤﻌﺎﻟﺞ ﺃﻴﻀﹰﺎ ﻟﻐﺔ ﺘﺠﻤﻴﻊ ﺨﺎﺼﺔ ﺒﻪ‪ ،‬ﻭﻗﺒل ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺠﺏ ﺃﻭ ﹰ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ‪ .‬ﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل ﺒﺎﺴﺘﺨﺩﺍﻡ‬
‫ﺍﻟﺫﻱ ﻴﺯﻭﺩﻨﺎ ﺒﻪ ﺼﺎﻨﻌﻭ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬ ‫‪assembler‬‬ ‫ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺠﻤ‪‬ﻊ‬
‫ﺒﻤﺎ ﺃﻥ ﻟﻜل ﻤﻌﺎﻟﺞ ﻟﻐﺔ ﺘﺠﻤﻴﻊ ﺨﺎﺼﺔ ﺒﻪ‪ ،‬ﻓﻼ ﻴﻤﻜﻥ ﺘﺒﺎﺩل ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ‬
‫ﺁﻟﺔ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ .‬ﻭﻟﻠﺘﻐﻠﺏ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻓﻘﺩ ﺠﺭﻯ ﺘﻁﻭﻴﺭ ﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ‬
‫ﻭ ‪ ،C‬ﻏﻴﺭ ﻤﻌﺘﻤﺩﺓ ﻋﻠﻰ ﻤﻌﺎﻟﺞ ﻤﺤﺩﺩ‪.‬‬ ‫‪Fortran‬‬ ‫ﻭ‬ ‫‪Basic‬‬ ‫ﺍﻟﻤﺴﺘﻭﻯ‪ ،‬ﻤﺜل‬
‫‪opcode‬‬ ‫ﻴﺘﺄﻟﻑ ﺭﻤﺎﺯ ﺁﻟﺔ ﻟﺘﻌﻠﻴﻤﺔ ﻤﺎ‪ ،‬ﻤﻥ ﺤﻘﻠﻴﻥ ﻤﻨﻔﺼﻠﻴﻥ‪ِ :‬ﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻟﻌﻤﻠﻴﺔ‬
‫ﺃﻭ ﺍﻟﻤﻌﺎﻤﻼﺕ‪ِ .‬ﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻟﻌﻤﻠﻴﺔ ﻋﺒﺎﺭﺓ ﻋﻥ ِﺭﻤ‪‬ﺎﺯ ﻤﻭﺠﺯ ﻴﺸﻴﺭ‬ ‫‪operand‬‬ ‫‪1‬ﻭﺍﻟﻤﻌﺎﻤل‬
‫ﺇﻟﻰ ﻨﻭﻉ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﻤﺘﻭﻗﻌﺔ‪ ،‬ﻭﻟﻜل ﺘﻌﻠﻴﻤﺔ ِﺭﻤ‪‬ﺎﺯ ﻭﺤﻴﺩ‪ .‬ﻴﺸﻴﺭ ﺍﻟﻤﻌﺎﻤل ﺃﻭ‬
‫‪3‬‬
‫ﺍﻟﻤﻌﺎﻤﻼﺕ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﻀﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪2‬ﻭﻜﻴﻔﻴﺔ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻴﻬﺎ )ﻨﻤﻁ ﺍﻟﻌﻨﻭﻨﺔ(‪.‬‬
‫ﻴﺨﺘﻠﻑ ﺤﺠﻡ ِﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻵﻟﺔ ﻤﻥ ﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺁﺨﺭ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺘﺭﺍﻭﺡ ﻤﻥ ﺒﺎﻴﺕ ﺇﻟﻰ‬
‫ﺒﺎﻴﺕ‪.‬‬ ‫‪12‬‬
‫‪Opcod‬‬ ‫)‪Opearnd(s‬‬

‫ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﺇﻥ ِﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻟﻌﻤﻠﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺘﺨﺯﻴﻥ ﻤﺤﺘﻭﻯ ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﻤﻜﺎﻥ‬
‫‪5‬‬ ‫‪4‬‬
‫ﻟﻠﻤﻌﺎﻟﺞ ‪ ،8085‬ﺘﹸﻜﺘﺏ ﻫﺫﻩ‬ ‫‪32h‬‬ ‫ﺃﻭ‬ ‫‪00110010b‬‬ ‫ﻤﻌﻴﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻴﺴﺎﻭﻱ‬
‫ﻭﻫﻲ ﻤﺨﺘﺼﺭﺓ ﻟﺨﺯﻥ ﺍﻟﻤﺭﺍﻜﻡ ‪.STore Accumulator‬‬ ‫‪STA‬‬ ‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‬

‫‪ 1‬ﻣﺨﺘﺼﺮ‪operation code :‬‬


‫‪ 2‬ﳝﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﺳﻴﺴﺘﺨﺪﻣﻬﺎ ﺍﳌﻌﺎﰿ ﰲ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻣﻮﺟﻮﺩﺓ ﰲ ﺳﺠﻞ ﺩﺍﺧﻠﻲ ﺃﻭ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﺃﻭ‬
‫ﺣﱴ ﳚﺮﻱ ﻗﺮﺍﺀ‪‬ﺎ ﻣﻦ ﺇﺣﺪﻯ ﺍﻟﺒﻮﺍﺑﺎﺕ ﺍﳌﻮﺻﻮﻟﺔ ﻣﻊ ﺍﳌﻌﺎﰿ‪.‬‬

‫‪ 3‬ﻳ‪‬ﺤﺪﺩ ﳕﻂ ﺍﻟﻌﻨﻮﻧﺔ ﻃﺮﻳﻘﺔ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺍﳌﻌﻄﻴﺎﺕ‪ :‬ﻣﺒﺎﺷﺮﺓ‪ ،‬ﻏﲑ ﻣﺒﺎﺷﺮﺓ ‪...‬‬
‫‪ 4‬ﻣﺨﺘﺼﺮ‪ :‬اﺛﻨﺎﻧﻲ ‪.binary‬‬
‫ﻋﺸﺮﻱ‪hexadecimal‬‬ ‫‪ 5‬ﳐﺘﺼﺮ‪ :‬ﺳﺖ‬

‫‪12‬‬
‫ﻴﺤﺩﺩ ﻁﻭل ِﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻟﻌﻤﻠﻴﺔ ﻋﺩﺩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﻨﻔﺫﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﻓﻤﺜﻼﹰ‪ ،‬ﺇﺫﺍ ﺠﺭﻯ ﺤﺠﺯ ﺒﺎﻴﺕ ﻟ ِﺭﻤ‪‬ﺎ ‪‬ﺯ ﺍﻟﻌﻤﻠﻴﺔ ﻓﺈﻥ ﻋﺩﺩ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﺘﺴﺎﻭﻱ ‪.28 = 256‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﻭﻤﺎ ﻴﻘﺎﺒﻠﻬﺎ‬ ‫‪8085‬‬ ‫ﻴﺒﻴﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎل ﻋﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺒﻠﻐﺔ ﺍﻟﻤ‪‬ﺠﻤﻊ ﻟﻠﻤﻌﺎﻟﺞ‬
‫ﻤﻥ ﺭﻤﺎﺯ ﺍﻵﻟﺔ‪:‬‬
‫ﻟﻐﺔ ﺍﻟﻤﺠﻤﻊ‬ ‫ﺭﻤﺎﺯ ﺍﻵﻟﺔ‬

‫‪MVI‬‬ ‫‪20h3‬‬ ‫‪3Eh‬‬ ‫‪1‬‬


‫‪20h2‬‬
‫‪ADI‬‬ ‫‪02h6‬‬ ‫‪C6h‬‬ ‫‪4‬‬
‫‪02h5‬‬
‫‪STA‬‬ ‫‪2050h9‬‬ ‫‪32h‬‬ ‫‪7‬‬
‫‪50h 20h8‬‬

‫ﺒﻤﺎ ﺃﻥ ﻜل ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻴﺤﻭﻱ ﻋﻠﻰ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8085‬ﻭﺒﻔﺭﺽ ﺃﻥ‬
‫ﺃﻭل ﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﺯﻨﺕ ﺒﺎﻟﻌﻨﻭﺍﻥ ‪ ،1000h‬ﻓﺈﻥ ﻤﺤﺘﻭﻯ ﺍﻟﺫﺍﻜﺭﺓ ﻴﻅﻬﺭ‬
‫ﻋﻠﻰ ﺍﻟﻨﺤﻭ ﺍﻟﺘﺎﻟﻲ ﺒﻌﺩ ﺸﺤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬

‫‪ 1‬رﻣﺎز ﺗﻌﻠﻴﻤﺔ ‪MVI‬‬


‫‪ 2‬ﻣﻌﺎﻣﻞ ﺗﻌﻠﻴﻤﺔ ‪MVI 20h‬‬
‫‪ 3‬اﺷﺤﻦ اﻟﻤﺮاآﻢ ‪ A‬ﺑﺎﻟﻘﻴﻤﺔ ‪20h‬‬
‫‪ADI‬‬ ‫‪ 4‬ﺭﻣﺎﺯ ﺗﻌﻠﻴﻤﺔ‬
‫‪ 5‬ﻣﻌﺎﻣﻞ ﺗﻌﻠﻴﻤﺔ ‪ADI 02h‬‬
‫‪ 6‬اﺟﻤﻊ اﻟﻘﻴﻤﺔ ‪ 02h‬إﻟﻰ ﻣﺤﺘﻮى اﻟﻤﺮاآﻢ وﺿَﻊ اﻟﻨﺎﺗﺞ ﻓﻲ اﻟﻤﺮاآﻢ‬
‫‪ 7‬رﻣﺎز ﺗﻌﻠﻴﻤﺔ ‪STI‬‬
‫‪ 8‬ﻣﻌﺎﻣﻞ ﺗﻌﻠﻴﻤﺔ ‪STA 2050h‬‬
‫‪ 9‬ﺧﺰن ﻧﺎﺗﺞ اﻟﺠﻤﻊ ﻓﻲ اﻟﻤﻮﻗﻊ ‪2050h‬‬

‫‪13‬‬
‫ﺍﻟﻌﻨﻭﺍﻥ‬ ‫ﻤﺤﺘﻭﻯ ﺍﻟﺫﺍﻜﺭﺓ‬
‫‪1‬‬
‫‪1000h‬‬ ‫‪3Eh‬‬
‫‪2‬‬
‫‪1001h‬‬ ‫‪20h‬‬
‫‪3‬‬
‫‪1002h‬‬ ‫‪C6h‬‬
‫‪4‬‬
‫‪1003h‬‬ ‫‪02h‬‬
‫‪5‬‬
‫‪1004h‬‬ ‫‪32h‬‬
‫‪6‬‬
‫‪1005h‬‬ ‫‪50h‬‬
‫‪7‬‬
‫‪1006h‬‬ ‫‪20h‬‬

‫ﻤﺴﺎﻭﻴﹰﺎ ‪.22h‬‬ ‫‪2050h‬‬ ‫ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﺼﺒﺢ ﻤﺤﺘﻭﻯ ﺍﻟﻤﻭﻗﻊ‬

‫‪Instruction Execution Cycle‬‬ ‫ﺩﻭﺭﺓ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ‬

‫ﻻ ﺘﺤﻤﻴﻠﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻴ‪‬ﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬


‫ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺠﺏ ﺃﻭ ﹰ‬
‫ﺘﻌﻠﻴﻤﺔ ﺘﻠﻭ ﺍﻷﺨﺭﻯ‪ ،‬ﺒﺩﺀﹰﺍ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ‪ ،‬ﺤﺘﻰ ﺍﻨﺘﻬﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ .‬ﻴﺘﻁﻠﺏ‬
‫ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﺁﻟﺔ ﻭﺍﺤﺩﺓ ﺜﻼﺙ ﺨﻁﻭﺍﺕ ﺃﺴﺎﺴﻴﺔ‪ :‬ﺠﻠﺏ‪ ،‬ﻓﻙ ﺘﺭﻤﻴﺯ ﻭﺘﻨﻔﻴﺫ‪ .‬ﻨﺤﺘﺎﺝ‬
‫ﺇﻟﻰ ﺨﻁﻭﺘﻴﻥ ﺇﻀﺎﻓﻴﺘﻴﻥ‪ ،‬ﻋﻨﺩﻤﺎ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻌﺎﻤل ﺫﺍﻜﺭﺓ‪ ،8‬ﻭﻫﻤﺎ‪ :‬ﺠﻠﺏ‬
‫ﺍﻟﻤﻌﺎﻤل ﻭﺤﻔﻅ ﻤﻌﺎﻤل ﺍﻟﺨﺭﺝ‪ .‬ﻨﺴﻤﻲ ﺍﻟﺯﻤﻥ ﺍﻟﻼﺯﻡ ﻹﺘﻤﺎﻡ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ‬
‫ﺒﺩﻭﺭﺓ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،instruction execution cycle‬ﻓﻲ ﺤﻴﻥ ﻨﺴﻤﻲ ﺩﻭﺭﺓ ﺁﻟﺔ‬

‫‪ 1‬رﻣﺎز ﺗﻌﻠﻴﻤﺔ ‪MVI 20h‬‬


‫‪ 2‬ﻣﻌﺎﻣﻞ ﺗﻌﻠﻴﻤﺔ ‪MVI 20h‬‬
‫‪ 3‬رﻣﺎز ﺗﻌﻠﻴﻤﺔ ‪ADI 02h‬‬
‫‪ 4‬ﻣﻌﺎﻣﻞ ﺗﻌﻠﻴﻤﺔ ‪ADI 02h‬‬
‫‪ 5‬رﻣﺎز ﺗﻌﻠﻴﻤﺔ ‪STA 2050h‬‬
‫‪ 6‬اﻟﺒﺎﻳﺖ اﻷﻗﻞ دﻻﻟﺔ ﻣﻦ اﻟﻌﻨﻮان ﻓﻲ ﺗﻌﻠﻴﻤﺔ ‪STA 2050h‬‬
‫‪STA 2050h‬‬ ‫‪ 7‬ﺍﻟﺒﺎﻳﺖ ﺍﻷﻛﺜﺮ ﺩﻻﻟﺔ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﰲ ﺗﻌﻠﻴﻤﺔ‬
‫‪ 8‬أي أن اﻟﻤﻌﺎﻣﻞ ﻓﻲ اﻟﺘﻌﻠﻴﻤﺔ ﻣﻮﺟﻮد ﻓﻲ اﻟﺬاآﺮة‬

‫‪14‬‬
‫ﺒﺎﻟﺯﻤﻥ ﺍﻟﻼﺯﻡ ﻹﺘﻤﺎﻡ ﻋﻤﻠﻴﺔ ﻗﺭﺍﺀﺓ ﺃﻭ ﻜﺘﺎﺒﺔ ﻤﻥ ﺫﺍﻜﺭﺓ ﺃﻭ ﻤﻥ‬ ‫‪machine cycle‬‬

‫ﺒﻭﺍﺒﺔ‪.‬‬
‫ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ‬ ‫‪clock‬‬ ‫ﻨﺴﺘﺨﺩﻡ ﺍﻟﺴﺎﻋﺔ ﺃﻭ ﺍﻟﻤﻴﻘﺎﺘﻴﺔ‬
‫ﻟﻤﺯﺍﻤﻨﺔ ﺠﻤﻴﻊ ﺍﻷﺤﺩﺍﺙ ﺍﻟﺴﺎﺒﻘﺔ‪ .‬ﺘﹸﻭﻟﺩ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ ﻨﺒﻀﺎﺕ ﻤﻨﺘﻅﻤﺔ ﻋﻠﻰ ﻤﺴﺭﻯ‬
‫ﺍﻟﻨﻅﺎﻡ ﺒﺘﺭﺩﺩ ﻤﺤﺩﺩ‪ ،‬ﻭﻜﻠﻤﺎ ﻜﺎﻥ ﺘﺭﺩﺩ ﺍﻟﻨﺒﻀﺎﺕ ﺃﻋﻠﻰ ﺍﺯﺩﺍﺩﺕ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬

‫ﺩﻭﺭﺓ ﺳﺎﻋﺔ‬

‫ﻭﻨﺴﻤﻲ‬ ‫‪clock's cycle‬‬ ‫ﻨﺴﻤﻲ ﺍﻟﺯﻤﻥ ﺍﻟﻼﺯﻡ ﻹﺘﻤﺎﻡ ﻨﺒﻀﺔ ﻜﺎﻤﻠﺔ ﺒﺩﻭﺭﺓ ﺴﺎﻋﺔ‬
‫ﻤﻘﻠﻭﺒﻬﺎ ﺴﺭﻋﺔ ﺃﻭ ﺘﺭﺩﺩ ﺍﻟﺴﺎﻋﺔ ﻭﺘﻘﺎﺱ ﺒﺎﻟﻬﺭﺘﺯ‪ ،1‬ﻭﻴﺘﺭﺍﻭﺡ ﺘﺭﺩﺩ ﺴﺎﻋﺔ ﺍﻟﻨﻅﺎﻡ‬
‫ﺇﻟﻰ ﻋﺩﺓ‬ ‫‪8088/8086‬‬ ‫ﻭ‬ ‫‪8085‬‬ ‫ﻤﻥ ﻋﺩﺓ ﻤﻴﻐﺎﻫﺭﺘﺯ ‪2‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻷﻭﻟﻰ ﻤﺜل‬
‫ﻏﻴﻐﺎﻫﺭﺘﺯ ‪3‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ ﻤﺜل ﺒﻨﺘﻴﻭﻡ ‪.4‬‬
‫ﻴﺨﺘﻠﻑ ﻋﺩﺩ ﺃﺩﻭﺍﺭ ﺍﻵﻟﺔ ﺍﻟﻼﺯﻡ ﻟﺘﻨﻔﻴﺫ ﻜل ﺘﻌﻠﻴﻤﺔ‪ .‬ﻭﺃﻜﺜﺭ ﻤﻥ ﺫﻟﻙ‪ ،‬ﻓﺈﻥ ﻋﺩﺩ‬
‫ﺃﺩﻭﺍﺭ ﺍﻟﺴﺎﻋﺔ ﺍﻟﻼﺯﻡ ﻹﻨﺠﺎﺯ ﺩﻭﺭﺓ ﺁﻟﺔ ﻴﺨﺘﻠﻑ ﺘﺒﻌﹰﺎ ﻟﻠﻌﻤﻠﻴﺔ‪ ،‬ﻫل ﻫﻲ ﻋﻤﻠﻴﺔ ﺠﻠﺏ‬
‫ﺃﻡ ﻗﺭﺍﺀﺓ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ‪ ..‬ﺍﻟﺦ‪ .‬ﻭﻨﺴﻤﻲ ﻜل ﺩﻭﺭﺓ ﺴﺎﻋﺔ ﻤﻥ ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﺒﺎﻟﺤﺎﻻﺕ‬
‫ﻼ ﺘﺤﺘﺎﺝ ﻋﻤﻠﻴﺔ ﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ‬
‫‪ ... ،T2 ،T1‬ﻓﻤﺜ ﹰ‬
‫ﺃﺩﻭﺍﺭ ﺴﺎﻋﺔ ﺃﻭ ﺤﺎﻻﺕ ﺒﻴﻨﻤﺎ ﺘﺤﺘﺎﺝ ﻋﻤﻠﻴﺔ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‬ ‫‪4‬‬ ‫ﺇﻟﻰ‬ ‫‪8088/8086‬‬

‫ﺤﺎﻻﺕ‪ .‬ﻭﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻤﺎ ﺴﺒﻕ ﻓﺈﻥ ﻋﺩﺩ ﺃﺩﻭﺍﺭ ﺍﻟﺴﺎﻋﺔ ﺍﻟﻼﺯﻡ ﻟﺘﻨﻔﻴﺫ‬ ‫‪3‬‬ ‫ﺇﻟﻰ‬
‫ﺘﻌﻠﻴﻤﺔ ﻴﺨﺘﻠﻑ ﻤﻥ ﻭﺍﺤﺩﺓ ﺇﻟﻰ ﺃﺨﺭﻯ‪ .‬ﻓﻌﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ﻴﺤﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺞ‬

‫‪ 106 1‬هﺮﺗﺰ‬
‫‪ 109 2‬هﺮﺗﺰ‬
‫‪ 3‬ﺍﳍﺮﺗﺰ ﻭﺣﺪﺓ ﻗﻴﺎﺱ ﺗﺮﺩﺩ‪ ،‬ﺗﺴﺎﻭﻱ ﻋﺪﺩ ﺃﺩﻭﺍﺭ ﺍﻹﺷﺎﺭﺓ ﺧﻼﻝ ﺛﺎﻧﻴﺔ‬

‫‪15‬‬
‫ﺩﻭﺭﺓ ﺴﺎﻋﺔ ﻟﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﻀﺭﺏ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻴﺤﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺞ‬ ‫‪70‬‬ ‫ﺇﻟﻰ‬ ‫‪8088/8086‬‬

‫ﺃﺩﻭﺍﺭ ﺴﺎﻋﺔ ﻟﺠﻤﻊ ﻤﺤﺘﻭﻯ ﺴﺠﻠﻴﻥ ﺩﺍﺨﻠﻴﻴﻥ‪.‬‬ ‫‪3‬‬ ‫ﻨﻔﺴﻪ ﻓﻘﻁ ﺇﻟﻰ‬

‫ﻨﺒﻴﻥ ﻓﻴﻤﺎ ﻴﻠﻲ ﺸﺭﺡ ﻤﺨﺘﺼﺭ ﻟﻠﺨﻁﻭﺍﺕ ﺍﻟﻼﺯﻤﺔ ﻟﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ‪:‬‬


‫ﺩﻭﺭﺓ ﺠﻠﺏ ‪ :fetch cycle‬ﻭﺨﻼﻟﻬﺎ ﻴﺠﺭﻱ ﻗﺭﺍﺀﺓ ِﺭﻤﺎﺯ ﺍﻟﻌﻤﻠﻴﺔ ﻭﻭﻀﻌﻬﺎ ﻓﻲ‬
‫ﺴﺠل ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﻤﻥ ﺜﻡ ‪‬ﻴﺯﺍﺩ ﻋﺩﺍﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻟﻴﺸﻴﺭ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.1‬‬

‫ﺩﻭﺭﺓ ﻓﻙ ﺘﺭﻤﻴﺯ ‪ :decoder cycle‬ﺘﻔﻙ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺴﺠل‬


‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﻟﺘﺤﺩﺩ ﻨﻭﻉ ﺍﻟﻌﻤﻠﻴﺔ ﻭﻁﺭﻴﻘﺔ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻭﻤﺎ ﻫﻲ‬
‫ﺍﻷﻓﻌﺎل ﺍﻟﻼﺯﻡ ﺇﻨﺠﺎﺯﻫﺎ ﻟﺘﻨﻔﻴﺫ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺤﺎﻟﻴﺔ‪.‬‬
‫ﻼ‬
‫ﺩﻭﺭﺓ ﺠﻠﺏ ﺍﻟﻤﻌﺎﻤﻼﺕ ‪ :fetch operands cycle‬ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﺴﺘﺨﺩﻡ ﻤﻌﺎﻤ ﹰ‬
‫ﻤﻭﺠﻭﺩﹰﺍ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻓﺈﻥ ﻭﺤﺩﺓ ﺍﻟﻤﻨﻁﻕ ﺘﻨﺠﺯ ﻋﻤﻠﻴﺔ ﻗﺭﺍﺀﺓ ﻤﻥ ﺃﺠل ﻗﺭﺍﺀﺓ‬
‫ﺍﻟﻤﻌﺎﻤل ﻭﻭﻀﻌﻪ ﻓﻲ ﺴﺠﻼﺕ ﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ﻏﻴﺭ ﻤﺭﺌﻴﺔ ﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺴﺘﺨﺩﻡ‪.‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﺴﺘﺨﺩﻤ ﹰﺔ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﺸﺎﺭ ﺇﻟﻴﻬﺎ‬ ‫‪ALU‬‬ ‫ﺩﻭﺭﺓ ﺘﻨﻔﻴﺫ ‪ :execute cycle‬ﺘﻨﻔﺫ‬
‫ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻜﻤﻌﺎﻤﻼﺕ‪ ،‬ﻭﺘﺭﺴل ﺨﺭﺝ ﺍﻟﻌﻤﻠﻴﺔ ﺇﻟﻰ ﺍﻟﺴﺠل‬
‫ﺭﺍﻴﺎﺕ ﺍﻟﺤﺎﻟﺔ ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ‬ ‫‪ALU‬‬ ‫ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺃﻭ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻜﻤﺎ ﺘﹸﺤ ‪‬ﺩﺙ‬
‫ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ‪.‬‬
‫ﺩﻭﺭﺓ ﺤﻔﻅ ﻤﻌﺎﻤل ﺍﻟﺨﺭﺝ ‪ :store output operand‬ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﺘﻁﻠﺏ ﺤﻔﻅ ﺃﻭ‬
‫ﺘﺨﺯﻴﻥ ﻤﻌﺎﻤل ﺍﻟﺨﺭﺝ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺘﹸﻨﻔﺫ ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ ﻋﻤﻠﻴﺔ ﻜﺘﺎﺒﺔ ﻟﺘﺨﺯﻴﻥ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪.‬‬

‫‪16‬‬
‫ﻋﻠﻰ‬ ‫‪IP‬‬ ‫ﹸﺘﺨﺯﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﻨﺤﻭ ﺘﺘﺎﺒﻌﻲ ﻭ ﻴﺸﻴﺭ ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‪ ،‬ﻴﻤﻜﻥ ﺒﻴﺎﻥ ﻜﻴﻑ ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﻨﺤﻭ‬
‫ﺘﺘﺎﺒﻌﻲ‪ ،‬ﺒﺎﺴﺘﺨﺩﺍﻡ ِﺭﻤ‪‬ﺎ ‪‬ﺯ ‪‬ﻤ ﹾﻔ ﹶﺘﺭ‪‬ﺽ ‪:pseudocode‬‬
‫ﺤﻠﻘﺔ‬
‫ﺍﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‬
‫‪IP‬‬ ‫ﺯﺩ ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﻓﻙ ﺘﺭﻤﻴﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﻌﺎﻤل ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺍﻗﺭﺃ ﺍﻟﻘﻴﻤﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‬
‫ﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﺇﺫﺍ ﻜﺎﻥ ﻤﻌﺎﻤل ﺍﻟﺨﺭﺝ ﺫﺍﻜﺭﺓ‪ ،‬ﺍﻜﺘﺏ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‬
‫ﺘﺎﺒﻊ ﺍﻟﺤﻠﻘﺔ‬

‫ﻨﻅﺎﻡ ﺘﺤﻜﻡ ﺒﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ‬

‫ﺴﻨﺘﻁﺭﻕ ﻫﻨﺎ ﺇﻟﻰ ﻨﻅﺎﻡ ﻨﻤﻭﺫﺠﻲ ﻴﺤﻭﻱ ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻭﻫﻭ ﻨﻅﺎﻡ ﺘﺤﻜﻡ ﺒﺩﺭﺠﺔ‬
‫ﺤﺭﺍﺭﺓ ﻏﺭﻓﺔ‪ .‬ﻴﺘﻜﻭﻥ ﺍﻟﻨﻅﺎﻡ ﻤﻥ ﺠﺯﺃﻴﻥ ﺃﺴﺎﺴﻴﻥ‪ :‬ﺍﻟﻜﻴﺎﻥ ﺍﻟﺠﺎﻤﺩ ﻭﺒﺭﻤﺠﻴﺎﺕ‬
‫ﺍﻟﻨﻅﺎﻡ‪.‬‬
‫‪Hardware‬‬ ‫ﺍﻟﻜﻴﺎﻥ ﺍﻟﺠﺎﻤﺩ‬

‫ﻴﺘﻜﻭﻥ ﻨﻅﺎﻡ ﺍﻟﺘﺤﻜﻡ ﺒﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ ﺍﻟﻤﺒﻨﻲ ﺤﻭل ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ‬
‫ﺍﻟﺭﺌﻴﺴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ROM‬‬ ‫ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ‪ :‬ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺜﻨﺎﻨﻴﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﻴﺘﺔ‬
‫ﻭﻴﻨﻔﺫﻫﺎ ﺘﺒﺎﻋﹰﺎ‪ .‬ﺨﻼل ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ ﻤﻥ ﺨﺭﺝ‬
‫ﻭﻴﻅﻬﺭ ﺍﻟﻨﺘﻴﺠﺔ ﻋﻠﻰ ﻤﻅﻬﺎﺭ ‪ ،1LCD‬ﻜﻤﺎ ﻴﺘﺤﻜﻡ‬ ‫‪A/D‬‬ ‫ﺍﻟﻤﺒﺩل ﺍﻟﺘﻤﺎﺜﻠﻲ‪/‬ﺍﻟﺭﻗﻤﻲ‬

‫‪ 1‬ﳐﺘﺼﺮ‪ Liquid Crystal Display :‬ﻣﻈﻬﺎﺭ ﺫﻭ ﺑﻠﻮﺭﺍﺕ ﺳﺎﺋﻠﺔ‬

‫‪17‬‬
‫ﺃﻴﻀﹰﺎ ﺒﻌﻤل ﻜل ﻤﻥ ﺍﻟﻤﺭﻭﺤﺔ ﻭﺍﻟﺴﺨﺎﻥ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ‬
‫ﺍﻟﻤﻘﺭﻭﺀﺓ‪.‬‬

‫ﻟﺘﺨﺯﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ‬ ‫‪ROM‬‬ ‫ﺍﻟﺫﺍﻜﺭﺓ‪ :‬ﻴﻀﻡ ﺍﻟﻨﻅﺎﻡ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻫﻤﺎ ﺍﻟﻤﻴﺘﺔ‬
‫ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﺅﻗﺘﺔ )ﻤﺜل ﺩﺭﺠﺔ‬ ‫‪RAM‬‬ ‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺤﻴﺔ‬
‫ﺍﻟﺤﺭﺍﺭﺓ ﺍﻟﻤﻘﺭﻭﺀﺓ( ﺨﻼل ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬
‫ﺒﻭﺍﺒﺔ ﺩﺨل‪ :‬ﻴﺤﻭل ﺤﺴﺎﺱ ﺍﻟﺤﺭﺍﺭﺓ ﺍﻟﺤﺭﺍﺭﺓ ﺇﻟﻰ ﺇﺸﺎﺭﺓ ﻜﻬﺭﺒﺎﺌﻴﺔ ﺍﻟﺘﻲ ﻴﻌﻤل‬
‫ﺇﻟﻰ ﺘﺤﻭﻴﻠﻬﺎ ﺇﻟﻰ ﺍﻟﺸﻜل ﺍﻟﺭﻗﻤﻲ‪ .‬ﺘﻌﻤل ﺒﻭﺍﺒﺔ ﺍﻟﺩﺨل ﻓﻲ ﺍﻟﻨﻅﺎﻡ‬ ‫‪A/D‬‬ ‫ﺍﻟﻤﺒﺩل‬
‫ﻜﺼﻭﺍﻥ ﻴﺨﺯﻥ ﺨﺭﺝ ﺍﻟﻤﺒﺩل ﺍﻟﺭﻗﻤﻲ ﺤﺘﻰ ﻴﺼﺒﺢ ﺍﻟﻤﻌﺎﻟﺞ ﺠﺎﻫﺯﹰﺍ ﻟﻘﺭﺍﺀﺘﻬﺎ‪.‬‬
‫ﺒﻭﺍﺒﺎﺕ ﺍﻟﺨﺭﺝ‪ :‬ﺘﻤﺴﻙ ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﻴﻭﻟﺩﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﻭﺘﻭﺼﻠﻬﺎ ﺇﻟﻰ ﺇﺤﺩﻯ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ )ﻤﺭﻭﺤﺔ‪ ،‬ﺴﺨﺎﻥ‪ ،‬ﻤﻅﻬﺭ ‪.(LCD‬‬
‫ﺒﺭﻤﺠﻴﺎﺕ ﺍﻟﻨﻅﺎﻡ )ﺍﻟﺒﺭﻨﺎﻤﺞ(‬

‫ﻴﺤﺘﺎﺝ ﺍﻟﻨﻅﺎﻡ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﺩ ﻋﻤﻠﻪ ﻨﺴﻤﻴﻪ ﺒﺭﻨﺎﻤﺞ ﺍﻟ ‪‬ﻤﺭﺍﻗﺏ ﺃﻭ ﺒﺭﻤﺠﻴﺎﺕ ﺍﻟﻨﻅﺎﻡ‬
‫ﺍﻟﺫﻱ ﻴﺠﺭﻱ ﺘﺨﺯﻴﻨﻪ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‬
‫‪ .ROM‬ﺒﻌﺩ ﺇﻋﺎﺩﺓ ﺘﺸﻐﻴل ﺍﻟﻨﻅﺎﻡ‬
‫ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﻴﻨﻔﺫﻫﺎ‬
‫ﺒﺎﺴﺘﻤﺭﺍﺭ ﺍﺒﺘﺩﺍ ‪‬ﺀ ﻤﻥ ﺍﻟﻤﻭﻗﻊ‬
‫ﺍﻷﻭل ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ‪.ROM‬‬

‫‪18‬‬
‫‪PC‬‬ ‫ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‬ ‫‪-5‬‬

‫ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺭﻗﻤﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺁﻟﺔ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺘﺩﺍﻭل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺭﻗﻤﻴﺔ ﺒﻬﺩﻑ‬
‫ﻤﻌﺎﻟﺠﺘﻬﺎ ﺃﻭ ﺘﻨﺴﻴﻘﻬﺎ ﺃﻭ ﺘﺨﺯﻴﻨﻬﺎ ﺃﻭ ﺤﺘﻰ ﻨﻘﻠﻬﺎ‪ ،‬ﻭﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﺘﻨﻔﻴﺫ ﺒﺭﻨﺎﻤﺞ‬
‫ﻴﺤﺩﺩ ﺒﺩﻗﺔ ﺨﻁﻭﺍﺕ ﺍﻟﻌﻤل ﺍﻟﻤﻁﻠﻭﺏ ﺇﻨﺠﺎﺯﻫﺎ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﺭﺍﻭﺡ ﺍﻟﺤﻭﺍﺴﻴﺏ ﺒﻴﻥ‬
‫ﺍﻟﻜﺒﻴﺭﺓ ﺍﻟﻤﺼﻤﻤﺔ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﻭﻟﻌﺩﺓ ﻤﺴﺘﺨﺩﻤﻴﻥ ﺒﺂﻥ ﻭﺍﺤﺩ‪ ،‬ﻤﺜل ﺍﻟﺤﺎﺴﻭﺏ‬
‫‪2‬ﺇﻟﻰ ﺍﻟﺤﻭﺍﺴﻴﺏ‬ ‫‪supercomputer‬‬ ‫‪1‬ﺃﻭﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﻔﺎﺌﻕ‬ ‫‪mainframe‬‬ ‫ﺍﻟﺭﺌﻴﺱ‬
‫ﻟﻤﺴﺘﺨﺩﻡ ﻭﺤﻴﺩ‪.‬‬ ‫)‪Personal Computer (PC‬‬ ‫ﺍﻟﺸﺨﺼﻴﺔ ﺍﻟﻤﺨﺼﺹ‬
‫َﺃ ﱠﺜﺭ ﺘﻁﻭﺭ ﺘﻘﻨﻴﺔ ﺃﻨﺼﺎﻑ ﺍﻟﻨﻭﺍﻗل ﺨﻼل ﺍﻟﻌﻘﻭﺩ ﺍﻟﻤﺎﻀﻴﺔ ﻭﺍﺒﺘﺩﺍﻉ ﻭﺘﻁﻭﺭ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﺒﺸﻜل ﻓﻌﺎل ﻋﻠﻰ ﺘﻁﻭﺭ ﺍﻟﺤﻭﺍﺴﻴﺏ‪ ،‬ﻓﺎﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﻀﺨﻤﺔ‬
‫ﺍﻟﺘﻲ ﻜﺎﻥ ﻴﺤﺘﺎﺝ ﺒﻨﺎﺅﻫﺎ ﺇﻟﻰ ﻤﺴﺎﺤﺔ ﻜﺒﻴﺭﺓ‪ ،‬ﺘﻘﻠﺼﺕ ﺇﻟﻰ ﺤﻭﺍﺴﻴﺏ ﻤﻜﺘﺒﻴﺔ ﺼﻐﻴﺭﺓ‬
‫ﻗﺎﺩﺭ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺤﺴﺎﺒﺎﺕ ﻀﺨﻤﺔ ﻜﺎﻨﺕ ﺤﻠﻤﹰﺎ ﻓﻲ ﺍﻟﺴﻨﻭﺍﺕ ﺍﻟﻤﺎﻀﻴﺔ‪ .‬ﻋﻠﻰ ﺴﺒﻴل‬
‫ﺍﻟﻤﺜﺎل‪ ،‬ﻓﺈﻥ ﺤﺎﺴﻭﺒﺎ ﺭﺌﻴﺴﺎ ﻤﻁﻭﺭﹰﺍ ﻓﻲ ﺍﻟﺜﻤﺎﻨﻴﻨﺎﺕ ﻭﻜﺎﻥ ﺜﻤﻨﻪ ﻴﺴﺎﻭﻱ ﺤﻭﺍﻟﻲ‬
‫ﻤﻠﻴﻭﻥ ﺩﻭﻻﺭ‪ ،‬ﻟﻴﺱ ﺒﻘﻭﺓ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﺍﻟﻤﺼﻤﻡ ﺍﻟﻴﻭﻡ ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ﺒﻨﺘﻴﻭﻡ‬
‫)‪.(P4‬‬ ‫‪4‬‬

‫ﻭﻴﺘﻜﻭﻥ ﻤﻥ‬ ‫‪IBM‬‬ ‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﻼﺤﻕ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻌﺎﻤﺔ ﻟﺤﺎﺴﻭﺏ ﺸﺨﺼﻲ ﻤﺘﻭﺍﻓﻕ ﻤﻊ‬
‫ﺜﻼﺙ ﻤﻜﻭﻨﺎﺕ ﺭﺌﻴﺴﺔ‪ :‬ﺘﺠﻬﻴﺯﺍﺕ ﻤﺤﻴﻁﻴﺔ‪ ،‬ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻭﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫ك ﻓ ﻲ اﻟﺤﻮاﺳ ﻴﺐ اﻟﺮﺋﻴ ﺴﺔ ﻏﺎﻟﺒ ًﺎ ﻋ ﺪ ُة‬ ‫‪ 1‬ﺣﺎﺳ ﻮ ٌ‬


‫ب ﻋ ﺎﻟﻲ اﻟﻤ ﺴﺘﻮى ﻣ ﺼ ﱠﻤ ٌﻢ ﻷآﺜ ﻒ اﻟﻤﻬﻤ ﺎت اﻟﺤ ﺴﺎﺑﻴﺔ‪ .‬ﻳﺘ ﺸﺎر ُ‬
‫ﻣﺴﺘﺨﺪِﻣﻴﻦ ﻣﻮﺻﻮﻟﻴﻦ إﻟﻰ اﻟﺤﺎﺳﻮب ﺑﻮاﺳﻄﺔ اﻟﻤﻄﺎرﻳﻒ‪.‬‬
‫ﺏ ﺿﺨﻢ‪ ،‬ﻭﺳﺮﻳ ‪‬ﻊ ﺟﺪﺍﹰ‪ ،‬ﻭﻏﺎﱄ ﺍﻟﺜﻤﻦ ﻳ‪‬ﺴﺘﺨ ‪‬ﺪﻡ‪ ‬ﻟﻠﺤﺴﺎﺑﺎﺕ ﺍﳌﻌﻘﺪﺓ ﺃﻭ ﺍﳌﺘﻘﺪﻣﺔ‪.‬‬
‫‪ 2‬ﺣﺎﺳﻮ ‪‬‬

‫‪19‬‬
‫ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‪ :‬ﻤﺜل ﺍﻟﻁﺎﺒﻌﺔ‪ ،‬ﺍﻟﻘﺭﺹ ﺍﻟﻤﺭﻥ‪ ،‬ﺍﻟﻘﺭﺹ ﺍﻟﺼﻠﺏ‪ ،‬ﺍﻟﻔﺄﺭﺓ‪،‬‬
‫ﻗﺎﺭﺉ ﺍﻷﻗﺭﺍﺹ ﺍﻟﻤﻀﻐﻭﻁﺔ ‪ ،CD‬ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ ،‬ﺒﻁﺎﻗﺔ ﻤﻭﺍﺀﻤﺔ ﻓﻴﺩﻴﻭﻴﺔ )ﻜﺭﺕ‬
‫ﺍﻟﺸﺎﺸﺔ(‪ ،‬ﺒﻁﺎﻗﺔ ﺼﻭﺕ‪ ،‬ﺍﻟﺸﺎﺸﺔ ﻭﺍﻟﻤﻭﺩِﻡ‪.‬‬
‫ﺍﻟﺘﻲ‬ ‫‪80x86‬‬ ‫‪ -‬ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ‪ :‬ﻭﻫﻭ ﻤﺦ ﺍﻟﺤﺎﺴﻭﺏ‪ ،‬ﻭﻫﻭ ﺃﺤﺩ ﺃﻓﺭﺍﺩ ﺍﻟﻌﺎﺌﻠﺔ‬
‫ﺇﻟﻰ ﺒﻨﺘﻴﻭﻡ ‪ ،4‬ﺃﻭ ﺃﺤﺩ‬ ‫‪8088/8086‬‬ ‫ﺘﻀﻡ ﺴﻠﺴﻠﺔ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻨﺘل ﻤﻥ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﺘﻭﺍﻓﻘﺔ ﻤﻌﻬﺎ‪.‬‬
‫‪ -‬ﺍﻟﺫﻭﺍﻜﺭ‪ :‬ﻭﻴﻤﻜﻥ ﺘﻘﺴﻴﻤﻬﺎ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﻴﺘﺔ‪ ،‬ﺍﻟﺘﻲ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻨﻅﺎﻡ‬
‫ﺍﻟﺘﺸﻐﻴل ‪ ،1BIOS‬ﻭﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﻭﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ‪ ،2cache‬ﻭﺘﺴﺘﺨﺩﻡ‬
‫ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﺅﻗﺘ ﹰﺎ‪.‬‬
‫ﺘﺭﺘﺒﻁ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺭ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺫﻱ ﺘﻁﻭﺭ ﻤﻊ‬
‫ﺍﺯﺩﻴﺎﺩ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺴﺭﻋﺎﺕ ﻋﺎﻟﻴﺔ‪ .‬ﻓﺒﻴﻨﻤﺎ ﺍﺴ‪‬ﺘﺨﺩﻡ ﺍﻟﻤﺴﺭﻯ‬

‫ت ‪routines‬‬‫‪ 1‬ﻣﺨﺘﺼﺮ‪ .basic input/output system :‬ﻓﻲ اﻟﺤﻮاﺳﻴﺐ اﻟﺸﺨﺼﻴﺔ‪ :‬ﻣﺠﻤﻮﻋ ُﺔ ﻣَﺴﺎﻗﺎ ٍ‬
‫ت‬
‫ﻞ اﻟﻤﻌﻄﻴﺎت ﻋﺒﺮ ﺗﺠﻬﻴﺰا ٍ‬ ‫ﺑﺮﻣﺠﻴ ٍﺔ أﺳﺎﺳﻴ ٍﺔ ﺗَﻔﺤﺺ اﻟﻌﺘﺎدﻳﺎت ﻋﻨﺪ اﻹﻗﻼع‪ ،‬وﺗُﻔﻌﱢﻞ ﻧﻈﺎ َم اﻟﺘﺸﻐﻴﻞ‪ ،‬وﺗﺘﺤﻤﱠﻞ ﻧ ْﻘ َ‬
‫ﻋﺘﺎدﻳﺔ‪ .‬ﻳُﺨﺰﱠن اﻟـ ‪ BIOS‬ﻓﻲ ذاآﺮة ‪.ROM‬‬
‫ﺕ ﺍﻟﻜﺜﲑﺓ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻧﺴﺨﹰﺎ ﻣﺘﻜﺮﺭﹰﺍ ﻟﺘﺤﻘﻴﻖ ﺍﻟﻮﺻﻮﻝ ﺍﻟﺴﺮﻳﻊ‬
‫ﺴﺦ‪ ‬ﻓﻴﻪ ﻗﻴ ‪‬ﻢ ﺍﳌﻌﻄﻴﺎ ِ‬
‫‪ 2‬ﻧﻈﺎ ‪‬ﻡ ﻓﺮﻋﻲ‪ ‬ﻟﻠﺬﺍﻛﺮ ِﺓ ﺧﺎﺹ‪ ‬ﺗ‪‬ﻨ ‪‬‬
‫ﺇﻟﻴﻬﺎ‪.‬‬

‫‪20‬‬
‫ﻤﻴﻐﺎﻫﺭﺘﺯ‪ ،‬ﻓﻲ‬ ‫‪8‬‬ ‫ﺒﺕ ﻭﻴﻌﻤل ﺒﺘﺭﺩﺩ‬ ‫‪8‬‬ ‫‪ ،1ISA‬ﺍﻟﺫﻱ ﻋﺩﺩ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺘﻪ ﻴﺴﺎﻭﻱ‬
‫ﺍﻟﻤﺒﻨﻴﺔ ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬؛ ﻨﺠﺩ ﻟﻴﻭﻡ ﻥ‬ ‫‪XT‬‬ ‫ﺍﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ ﺍﻷﻭﻟﻰ‬
‫ﺒﺕ ﻭﻴﻌﻤل‬ ‫‪64‬‬ ‫‪2‬ﺍﻟﺫﻱ ﻋﺭﻀﻪ‬ ‫‪PCI‬‬ ‫ﺍﻟﺤﻭﺍﺴﻴﺏ ﺒﻨﺘﻴﻭﻡ ﺘﺴﺘﺨﺩﻡ ﺒﻜﺜﺭﺓ ﺍﻟﻤﺴﺭﻯ‬
‫ﻤﻴﻐﺎﻫﺭﺘﺯ‪.‬‬ ‫‪33‬‬ ‫ﺒﺘﺭﺩﺩ‬
‫ﻨﺠﺩ ﺍﻟﻴﻭﻡ ﺃﻥ ﺃﻏﻠﺏ ﺍﻟﻤﻜﻭﻨﺎﺕ ﺍﻷﻭﻟﻴ‪‬ﺔ ﻓﻲ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‪ :‬ﺍﻟﻤﻌﺎﻟﺞ‪،‬‬
‫ﻭﺍﻟﺫﺍﻜﺭ ِﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ‪ ،‬ﻭﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺴﺎﻨﺩﺓ‪ ،‬ﻭﻤﺘﺤﻜﹼﻡ ﺍﻟﻤﺴﺭﻯ‪ ،‬ﻭﻤﺭﺒﻁ ‪،connector‬‬
‫ﺘﻘﻊ ﻀﻤﻥ ﺍﻟﻠﻭﺤﺔ ﺍﻷﻡ ﺃﻭ ﺍﻟﻠﻭﺤﺔ ﺍﻟﺭﺌﻴﺴﺔ ‪ .Motherboard‬ﻭﻴﻤﻜِﻥ ﻟﻠﺒﻁﺎﻗﺎﺕ‬
‫ﻁ‬
‫ﺍﻷﺨﺭﻯ )ﻤﺜل ﺒﻁﺎﻗﺎﺕ ﺘﻭﺴﻴﻊ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺒﻁﺎﻗﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ( ﺃﻥ ﺘﺭﺘﺒ ﹶ‬
‫ﺒﺎﻟﺒﻁﺎﻗﺔ ﺍﻷﻡ ﻋﺒﺭ ﻤﺭﺒﻁ ﺍﻟﻤﺴﺭﻯ‪ .‬ﻨﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺒﻨﻴﺔ ﻟﻭﺤﺔ ﺭﺌﻴﺴﺔ ﻟﻠﺤﺎﺴﻭﺏ‬
‫ﺍﻟﻤﺒﻨﻲ ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ‪.80486‬‬

‫ى‬ ‫‪ 1‬ﻣﺨﺘﺼﺮ‪ Industry Standard Architecture :‬اﻟﺒﻨﻴﺎن اﻟﺼﻨﺎﻋﻲ اﻟﻘﻴﺎﺳﻲ‪ .‬ﺗﻮﺻﻴ ٌ‬


‫ﻒ ﻟﺘﺼﻤﻴ ِﻢ ﻣﺴﺮ ً‬
‫ب ‪ slots‬اﻟﺘﻮﺳﻴ ِﻊ اﻟﻘﻴﺎﺳﻴﺔ ﻓﻲ ﺣﻮاﺳﻴﺐ ‪IBM‬‬
‫ت ﺗُﻮﺿَﻊ ﻓﻲ ﺷُﻘﻮ ِ‬
‫ﻳَﺴﻤﺢ ﺑﺈﺿﺎﻓﺔ اﻟﻤﻜﻮﱢﻧﺎت ﻋﻠﻰ ﺷﻜﻞ ﺑﻄﺎﻗﺎ ٍ‬
‫اﻟﺸﺨﺼﻴﺔ واﻟﻤﺘﻮاﻓﻘﺔ ﻣﻌﻬﺎ‪.‬‬
‫ﻯ ﳏﻠ ّﻲ‬
‫ﻒ ﻭﺿﻌ‪‬ﺘ ‪‬ﻪ ﺷﺮﻛ ﹸﺔ ‪ Intel‬ﻟﺘﻌﺮﻳﻒ ﻧﻈﺎ ِﻡ ﻣﺴﺮ ‪‬‬
‫‪ 2‬ﳐﺘﺼﺮ‪ .Peripheral Component Interconnect :‬ﺗﻮﺻﻴ ‪‬‬
‫ﻒ ﻟﻠﻤﺴﺮﻯ ﺍﶈﻠ ّﻲ ‪ PCI‬ﺑﺈﺭﺳﺎﺀ ﻋﺪ ٍﺩ ﻣﻦ ﺑﻄﺎﻗﺎﺕ ﺍﻟﺘﻮﺳﻴﻊ‬ ‫ﲏ ﻭﻓﻘﹰﺎ ﻟﻠﻤﻮﺍﺻﻔﺎﺕ ‪ .PCI‬ﻳ‪‬ﺴﻤﺢ‪ ‬ﺍﻟﺘﻮﺻﻴ ‪‬‬
‫ﺏ ﻣﺒ ‪‬‬
‫ﳊﺎﺳﻮ ٍ‬
‫ﺍﳌﺘﻮﺍﻓﻘﺔ ﻣﻊ ‪ PCI‬ﰲ ﺍﳊﺎﺳﻮﺏ‪.‬‬

‫‪21‬‬
‫ﺘﻤﺎﺭﻴﻥ‬
‫ﺃﻭ ﹰﻻ‪ :‬ﺃﺠﺏ ﺒﺼﺢ ﺃﻭ ﺨﻁﺄ‬

‫ﻫﻭ ﺤﺎﺴﻭﺏ ﺼﻐﺭﻱ ﻤﺨﺼﺹ ﻹﻨﺠﺎﺯ ﻤﻬﺎﻡ‬ ‫‪PC‬‬ ‫ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‬ ‫‪-1‬‬

‫ﻤﺘﻨﻭﻋﺔ ﻤﻥ ﻗﺒل ﻤﺴﺘﺨﺩﻡ ﻭﺍﺤﺩ‪.‬‬


‫ﻟﻜل ﻤﻌﺎﻟﺞ ﻟﻐﺔ ﺁﻟﺔ ﻭﻟﻐﺔ ﺘﺠﻤﻴﻊ ﺨﺎﺼﺔ ﺒﻪ‪.‬‬ ‫‪-2‬‬

‫ﻴﺨﺘﻠﻑ ﻋﺎﺩﺓ ﺍﻟﺯﻤﻥ ﺍﻟﻼﺯﻡ ﻟﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻓﻲ ﻤﻌﺎﻟﺞ ﻤﺎ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ﺃﺨﺭﻯ‪.‬‬ ‫‪-3‬‬

‫‪‬ﻴﺴﺘﺨﺩﻡ ﺴﺠل ﻋﺩﺍﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻤﺴﻙ ﻋﻨﻭﺍﻥ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺫﻱ ﺴﻴﻌﺎﻟﺞ ﻻﺤﻘﹰﺎ‪..‬‬ ‫‪-4‬‬

‫‪ -5‬ﻴﺘﻜﻭﻥ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ ﻤﻥ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻤﺴﺭﻯ ﻤﻨﻁﻘﻲ‪ ،‬ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬


‫‪ -6‬ﺘﹸﺴﺘﺨﺩﻡ ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ ﻤﻥ ﺃﺠل ﻨﻘل ﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫‪‬ﻴﺤﺩﺩ ﻋﺭﺽ ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ ﺴﻌﺔ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻌﻅﻤﻰ ﻟﻠﻤﻌﺎﻟﺞ‪.‬‬ ‫‪-7‬‬

‫‪22‬‬
‫ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﻫﻲ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺭﻤﺎﺯﺍﺕ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﻟﻭﺤﺩﺓ‬ ‫‪-8‬‬

‫ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ﺍﻟﺘﻌ‪‬ﺭﻑ ﻋﻠﻴﻬﺎ‪.‬‬


‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﺭﺍﻜﻡ ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻤﺭﺍﺩ ﺠﻠﺒﻬﺎ‪.‬‬ ‫‪-9‬‬

‫ﺘﻀﻡ ﺩﻭﻤﹰﺎ ﺩﻭﺭﺓ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺩﻭﺭﺓ ﺤﻔﻅ ﻤﻌﺎﻤل ﺍﻟﺨﺭﺝ‪.‬‬ ‫‪-10‬‬

‫ﺜﺎﻨﻴ ﹰﺎ‪ :‬ﺃﺠﺏ ﻋﻠﻰ ﺍﻷﺴﺌﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﻏﻴﻐﺎ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ‪ ،‬ﻓﻤﺎ ﻫﻭ‬ ‫‪4‬‬ ‫ﻴﺴﺘﻁﻴﻊ ﻋﻨﻭﻨﺔ‬ ‫‪4‬‬ ‫ﺇﺫﺍ ﻋﻠﻤﺕ ﺃﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻨﺘﻴﻭﻡ‬ ‫‪-1‬‬

‫ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﻌﺎﻟﺞ؟‬


‫ﻫﻭ ‪ ،C6h 02h‬ﻓﻤﺎ ﻫﻭ ﺭﻤﺎﺯ ﺍﻵﻟﺔ‬ ‫‪ADI 02h‬‬ ‫ﺇﺫﺍ ﻋﻠﻤﺕ ﺃﻥ ﺭﻤﺎﺯ ﺍﻵﻟﺔ ﻟﻠﺘﻌﻠﻴﻤﺔ‬ ‫‪-2‬‬

‫ﻟﻠﺘﻌﻠﻴﻤﺔ ‪.ADI 20h‬‬


‫ﻤﺎ ﺍﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻨﺴﺘﺨﺩﻤﻪ ﻟﺘﺤﻭﻴل ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﻱ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﻟﻐﺔ‬ ‫‪-3‬‬

‫ﺃﻭ ﺭﻤﺎﺯ ﺍﻵﻟﺔ؟‬


‫ﻫل ﻴﻤﻜﻥ ﺘﺒﺎﺩل ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺁﻟﺔ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ؟‬ ‫‪-4‬‬

‫ﻤﺎ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ﻭﺍﻟﻤ‪‬ﺘﺤﻜﻡ؟‬ ‫‪-5‬‬

‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﻴﺤﺘﻭﻱ ﺍﻟﻤ‪‬ﺘﺤﻜﻡ ﻋﻠﻰ ﺠﻤﻴﻊ ﻤﻜﻭﻨﺎﺕ ﺍﻟﻨﻅﺎﻡ ﻀﻤﻥ ﺭﻗﺎﻗﺔ ﻭﺍﺤﺩﺓ‪.‬‬
‫ﺒﺕ‪ ،‬ﻓﻤﺎ ﻫﻭ ﻋﺩﺩ‬ ‫‪5‬‬ ‫ﺒﻔﺭﺽ ﺃﻥ ﺤﻘل ﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﻤﻌﺎﻟﺞ ﻴﺴﺎﻭﻱ‬ ‫‪-6‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ؟‬

‫‪23‬‬
‫ﺍﻟﻔﺼل ﺍﻟﺜﺎﻨﻲ‬
‫ﻋﺎﺌﻼﺕ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‬

‫ﺍﻟﻬﺩﻑ ﻤﻥ ﻫﺫﺍ ﺍﻟﻔﺼل‬


‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﺎﺌﻼﺕ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﻭﺒﻌﺽ ﺍﻟﺸﺭﻜﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ ﻟﻬﺎ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﻤﻌﺎﻟﺠﺎﺕ ‪ CISC‬ﻭﻤﻌﺎﻟﺠﺎﺕ ‪RISC‬‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻤﺒﺩﺃ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﺘﻭﺍﺭﺩﻴﺔ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺒﻨﻴﺔ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺴ‪‬ﻠﻤﻴﺔ ﺍﻟﻔﺎﺌﻘﺔ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺒﻨﻴﺎﻥ ﭭﻭﻥ ﻨﻭﻤﺎﻥ ﻭﺒﻨﻴﺎﻥ ﻫﺎﺭﻓﺭﺩ‬
‫™ ﻤﻌﺭﻓﺔ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﻭﺍﻟﻤ‪‬ﺘﺤﻜﻤﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺍﺕ ﺍﻟﺭﻗﻤﻴﺔ‬

‫ﺘﻤﻬﻴﺩ‬
‫ﻗﺎﺩ ﺍﻹﻨﺠﺎﺯ ﺍﻟﻌﻠﻤﻲ ﺒﺎﺨﺘﺭﺍﻉ ﺍﻟﺘﺭﺍﻨﺯﻴﺴﺘﻭﺭ ﻓﻲ ﻋﺎﻡ ‪ ،1947‬ﻭﻤﻥ ﺜﹸﻡ ﺍﺨﺘﺭﺍﻉ ﺍﻟـﺩﺍﺭﺍﺕ ﺍﻟﻤﺘﻜﺎﻤﻠـﺔ‬
‫)‪ ،(Integrated Circuit IC‬ﺇﻟﻰ ﺘﺼﻨﻴﻊ ﺃﻭل ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ‪ 4004‬ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﻤﻥ ﻗﺒل ﺸﺭﻜﺔ‬
‫‪ Intel‬ﻋﺎﻡ ‪ .1971‬ﺍﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻤﻌﺎﻟﺞ ﺤﻴﻨﺌﺫ ﻓﻲ ﺼﻨﺎﻋﺔ ﺁﻻﺕ ﺍﻟﺤﻭﺴﺒﺔ ﻭﺃﻟﻌﺎﺏ ﺍﻟﻔﻴﺩﻴﻭ ﻭﻨﻅـﻡ‬
‫ﺍﻟﺘﺤﻜﻡ ﺍﻟﺒﺴﻴﻁﺔ‪.‬‬

‫ﻴﺒﻠﻎ ﻁﻭل ﻤﺭﺍﻜﻡ ﻫﺫﺍ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،4-bits‬ﻭﻗﺎﺩﺭ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ‪ .192 KIPS‬ﻭﺘﻀﻡ ﻤﺠﻤﻭﻋـﺔ ﺘﻌﻠﻴﻤﺎﺘـﻪ‬
‫ﺘﻌﻠﻴﻤﺔ‪ .‬ﻟﻘﺩ ﻜﺎﻥ ﻫﺫﺍ ﺍﻻﺨﺘﺭﺍﻉ ﺍﻟﺨﻁﻭﺓ ﺍﻷﻭﻟﻰ ﻨﺤﻭ ﺘﻁـﻭﻴﺭ ﺍﻷﺠﻴـﺎل ﺍﻟﻤﺨﺘﻠﻔـﺔ ﻤـﻥ‬ ‫ﻓﻘﻁ ‪46‬‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ‪.‬‬

‫‪ 1‬ﳐﺘﺼﺮ‪ ،Kilo-Instruction per Second :‬ﻛﻴﻠﻮ )‪ (1000‬ﺗﻌﻠﻴﻤﺔ ﰲ ﺍﻟﺜﺎﻧﻴﺔ‪.‬‬

‫‪1‬‬
‫ﺃﺼﺩﺭﺕ ‪ Intel‬ﻋﺎﻡ ‪ ،1972‬ﻜﺘﻁﻭﻴﺭ ﻟﻠﻤﻌﺎﻟﺞ ‪ ،4004‬ﺍﻟﻤﻌـﺎﻟﺞ ‪ ،8008‬ﺃﻭل ﻤﻌـﺎﻟﺞ ‪ 8-bits‬ﻓـﻲ‬
‫ﺍﻟﻌﺎﻟﻡ‪ ،‬ﻴﺴﻤﺢ ﺒﺈﻤﻜﺎﻥ ﻤﻌﺎﻟﺠﺔ ﻀﻌﻑ ﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﻌﺎﻟﺠﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ‪ .4004‬ﻭﺘﻀﻡ ﻤﺠﻤﻭﻋﺔ‬
‫ﺘﻌﻠﻴﻤﺎﺘﻪ ‪ 48‬ﺘﻌﻠﻴﻤﺔ‪.‬‬

‫ﻗﺎﻤﺕ ﺒﻌﺩ ﺫﻟﻙ ﺸﺭﻜﺔ ‪ Intel‬ﻋﺎﻡ ‪ 1974‬ﺒﻨﻘﻠﺔ ﻨﻭﻋﻴﺔ ﺒﺈﻨﺘﺎﺝ ﻤﻌﺎﻟﺞ ‪ 8-bit‬ﺫﺍﺌـﻊ ﺍﻟـﺼﻴﺕ ‪،8080‬‬
‫ﺍﻟﺫﻱ ﺘﺠﺎﻭﺯ ﻤﺸﺎﻜل ﺴﺎﺒﻘﻴﻪ ﺍﻟﻌﺩﻴﺩﺓ ﻤﺜل ﺍﻟﺴﺭﻋﺔ ﺍﻟﻤﻨﺨﻔﻀﺔ ﻭﺍﻟﺫﺍﻜﺭﺓ ﺍﻟـﺼﻐﻴﺭﺓ؛ ﻴـﺴﺘﻁﻴﻊ ﻫـﺫﺍ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﻴﺼل ﺤﺠﻤﻬﺎ ﺇﻟﻰ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺃﺴﺭﻉ ﺒـ ‪ 20‬ﻀﻌﻑ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪.4004‬‬

‫ﹶﻗﺩ‪‬ﻤﺕ ‪ Intel‬ﻓﻲ ﻋﺎﻡ ‪ 1977‬ﻨﺴﺨﺔ ﻤﺤﺴﻨﺔ ﻋﻥ ‪ 8080‬ﻭﻫﻭ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8085‬ﺁﺨﺭ ﻤﻌﺎﻟﺞ ﻤﻥ ﻨﻤﻁ‬
‫ل‬
‫‪ 8-bit‬ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﻤﻥ ‪ .Intel‬ﺘﻤﻴﺯ ‪ 8085‬ﺒﺎﺤﺘﻭﺍﺌﻪ ﻋﻠﻰ‪ :‬ﺴﺎﻋﺔ ﺩﺍﺨﻠﻴـﺔ‪ ،‬ﺫﺍﺕ ﺘـﺭﺩﺩ ﻋـﺎ ٍ‬
‫ﻨﺴﺒﻴﺎﹰ‪ ،‬ﻭﺘﻌﻠﻴﻤﺎﺕ ﻤﺭﻨﺔ ﻓﻲ ﺍﻟﺘﻌﺎﻤل‪ .‬ﺃﺩﻯ ﻜل ﺫﻟﻙ ﻟﺒﻴﻊ ﺍﻟﺸﺭﻜﺔ ﺃﻜﺜﺭ ﻤﻥ ‪ 100‬ﻤﻠﻴﻭﻥ ﻨﺴﺨﺔ ﻤﻥ ﻫﺫﺍ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬

‫‪2‬‬
‫ﺃﺼﺩﺭﺕ ‪ Intel‬ﻋﺎﻡ ‪ 1978‬ﻤﻌﺎﻟﺞ ‪ 16-bit‬ﻫﻭ ‪ ،8086‬ﺃﻭل ﺃﻓﺭﺍﺩ ﺍﻟﻌﺎﺌﻠﺔ ‪2 .x86‬ﻭﺒﻌﺩ ﺃﻜﺜﺭ ﻤـﻥ‬
‫ﺴﻨﺔ ﺃﺼﺩﺭﺕ ‪ Intel‬ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﺍﻟﺫﻱ ﻫﻭ ﺃﻴﻀﹰﺎ ‪ ،16-bit‬ﻨﺴﺨﺔ ﻤﻌﺩﻟﺔ ﻋﻥ ‪ .8086‬ﺠ‪‬ﻌل ﻋﺭﺽ‬
‫ﻤﺴﺭﻯ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻤﺴﺎﻭﻴﹰﺎ ‪ 8-bit‬ﻋﻭﻀﹰﺎ ﻋﻥ ‪ 16-bit‬ﻓﻲ ‪ ،8086‬ﺤﺘﻰ ﻴﺘﻭﺍﻓـﻕ ﻤـﻊ‬
‫ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺼﻤﻤﺔ ﺴﺎﺒﻘﹰﺎ ﻟﺘﻌﻤل ﻤﻊ ﻤﻌﺎﻟﺠﺎﺕ ‪ .8-bit‬ﺘﻌﺯﺯ ﻤﻭﻗﻑ ﺸﺭﻜﺔ ‪ Intel‬ﺒﻌـﺩ ﺃﻥ ﻗـﺭﺭﺕ‬
‫‪ IBM‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻓﻲ ﺘﺼﻤﻴﻡ ﺃﻭل ﺤﺎﺴﻭﺏ ﺸﺨﺼﻲ ﻟﻬﺎ‪ .‬ﺒﺎﻟﻤﻘﺎﺭﻨﺔ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪،8085‬‬
‫ﻓﺈﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻴﻨﻔﺫ ‪ ،32.5 MIPS‬ﺃﻜﺜﺭ ﺒﻌﺸﺭ ﻤﺭﺍﺕ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8085‬ﻭﻗﺎﺩﺭ ﻋﻠـﻰ‬
‫ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺤﺠﻤﻬﺎ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ ﺒﻴﻨﻤﺎ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8085‬ﻋﻨﻭﻨﺔ ﻓﻘﻁ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﺫﺍﻜـﺭﺓ‪،‬‬
‫ﻜﻤﺎ ﻴﺒﻠﻎ ﻋﺩﺩ ﺘﻌﻠﻴﻤﺎﺘﻪ ﺤﻭﺍﻟﻲ ‪ 20,000‬ﺘﻌﻠﻴﻤﺔ ﻤﻘﺎﺭﻨﺔ ﻤﻊ ‪ 246‬ﻴﻤﺘﻠﻜﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8085‬ﻤﻤﺎ ﻴﺯﻴـﺩ‬
‫ﻤﻥ ﻓﻌﺎﻟﻴﺘﻪ ﻭﺃﺩﺍﺌﻪ‪ .‬ﺴﻤﺤﺕ ﺴﺭﻋﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻟﻌﺎﻟﻴﺔ ﻭﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﻋﻨﻭﻨﺔ ﺫﺍﻜـﺭﺓ ﻜﺒﻴـﺭﺓ )ﺤﻴﻨـﺫﺍﻙ(‬
‫ﻟﻠﻤﻌﺎﻟﺠﺎﺕ ‪ 8088/8086‬ﺒﺎﻟﺴﻴﻁﺭﺓ ﻋﻠﻰ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ‪.‬‬

‫ﺍﺯﺩﺍﺩ ﺒﻌﺩ ﺫﻟﻙ ﺍﻟﻁﻠﺏ ﻋﻠﻰ ﺤﻭﺍﺴﻴﺏ ﺸﺨﺼﻴﺔ ﺃﻗﻭﻯ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺘﻨﺠﻴﺯ ﺤﺴﺎﺒﺎﺕ ﻭﺇﻅﻬﺎﺭﺍﺕ ﺒﻴﺎﻨﻴـﺔ‬
‫ﻭﺭﺴﻭﻤﺎﺕ ﺃﻜﺜﺭ ﺘﻌﻘﻴﺩﹰﺍ ﻭﻜﺫﻟﻙ ﺩﻋﻡ ﻨﻅﻡ ﺍﻟﺘﺸﻐﻴل ﺍﻟﺘﻲ ﺘﺯﺩﺍﺩ ﺇﻤﻜﺎﻨﺎﺘﻬﺎ ﺒﺎﺴﺘﻤﺭﺍﺭ‪ .‬ﺩﻓﻊ ﻜـل ﺫﻟـﻙ‬
‫‪ Intel‬ﺇﻟﻰ ﺘﻁﻭﻴﺭ ﺃﺠﻴﺎل ﻤﻥ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻌﺎﺌﻠﺔ ‪ x86‬ﺘﻠﺒﻲ ﺃﻜﺜﺭ ﺤﺎﺠﺔ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﺠﺩﻴﺩﺓ‪ ،‬ﻭﺘﺘـﻀﻤﻥ‬
‫ﻋﺩﺩﹰﺍ ﺃﻜﺒﺭ ﻤﻥ ﺍﻟﺘﺭﺍﻨﺯﺴﺘﻭﺭﺍﺕ ﻓﻲ ﺭﻗﺎﻗﺔ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﺡ ﻤﻨﻬﺎ‪:‬‬
‫ﺍﺘﺨﺫ ﺘﻁﻭﻴﺭ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻋﺩﺓ ﻤﻨﺎ ٍ‬
‫ƒ ﺯﻴﺎﺩﺓ ﻋﺭﺽ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻁﻭل ﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ‬
‫ƒ ﺇﻤﻜﺎﻥ ﻋﻨﻭﻨﺔ ﺫﻭﺍﻜﺭ ﺃﻜﺒﺭ ﺤﺠﻤﹰﺎ‬
‫ƒ ﺯﻴﺎﺩﺓ ﺴﺭﻋﺔ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‬
‫ƒ ﺯﻴﺎﺩﺓ ﻋﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺠﻌﻠﻬﺎ ﺃﻜﺜﺭ ﻗﻭﺓ ﻭﻤﺭﻭﻨﺔ‬
‫ƒ ﺘﻁﻭﻴﺭ ﺒﻨﻴﺔ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‬

‫‪ 2‬ﺗﺘﻀﻤﻦ ﻫﺬﻩ ﺍﻟﻌﺎﺋﻠﺔ ﺍﳌﻌﺎﳉﺎﺕ ‪ 8088/8086‬ﻭ ‪ 80286‬ﻭﻣﺎ ﺑﻌﺪﻫﺎ ﲟﺎ ﻓﻴﻬﺎ ﺳﻠﺴﻠﺔ ﺑﻨﺘﻴﻮﻡ‬
‫‪ 3‬ﳐﺘﺼﺮ‪ ،Million-Instruction per Second :‬ﻣﻠﻴﻮﻥ ﺗﻌﻠﻴﻤﺔ ﰲ ﺍﻟﺜﺎﻧﻴﺔ‪.‬‬

‫‪3‬‬
‫ﻨﺒﻴﻥ ﻓﻲ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﻗﺎﺌﻤﺔ ﺒﺄﻫﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﻨﺘﺠﺔ ﻤﻥ ﺸﺭﻜﺔ ‪ Intel‬ﻤﻊ ﺃﻫﻡ ﻤﻴﺯﺍﺕ ﻜل ﻤﻨﻬﺎ‪.‬‬

‫ﻋﺭﺽ‬ ‫ﻋﺭﺽ‬ ‫ﻋﺭﺽ‬


‫ﺤﺠﻡ ﺍﻟﺫﺍﻜﺭﺓ‬ ‫ﺴﺭﻋﺔ ﻋﻤل‬ ‫ﻋﺩﺩ‬
‫ﻤﺴﺭﻯ‬ ‫ﺍﻟﺴﺠﻼﺕ‬ ‫ﻤﺴﺭﻯ‬ ‫ﺍﻟﺘﺎﺭﻴﺦ‬ ‫ﺍﻻﺴﻡ‬
‫ﺍﻟﻤﻌﻨﻭﻨﺔ‬ ‫ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ‬ ‫ﺍﻟﺘﺭﺍﻨﺯﺴﺘﻭﺭﺍﺕ‬
‫ﺍﻟﻌﻨﻭﻨﺔ‬ ‫ﺍﻟﺩﺍﺨﻠﻴﺔ‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫‪640 byte‬‬ ‫‪12-bits‬‬ ‫‪8-bits‬‬ ‫‪4-bits‬‬ ‫‪0.108 MHz‬‬ ‫‪2,250‬‬ ‫‪1971‬‬ ‫‪4004‬‬
‫‪64 k‬‬ ‫‪16-bits‬‬ ‫‪8-bits‬‬ ‫‪8-bits‬‬ ‫‪2 MHz‬‬ ‫‪6,000‬‬ ‫‪1974‬‬ ‫‪8080‬‬
‫‪64 k‬‬ ‫‪16-bits‬‬ ‫‪8-bits‬‬ ‫‪8-bits‬‬ ‫‪5 MHz‬‬ ‫‪6,500‬‬ ‫‪1976‬‬ ‫‪8085‬‬
‫‪1M‬‬ ‫‪20-bits‬‬ ‫‪16-bits‬‬ ‫‪16-bits‬‬ ‫‪5 MHz‬‬ ‫‪29,000‬‬ ‫‪1978‬‬ ‫‪8086‬‬
‫‪1M‬‬ ‫‪20-bits‬‬ ‫‪16-bits‬‬ ‫‪8-bits‬‬ ‫‪5 MHz‬‬ ‫‪29,000‬‬ ‫‪1979‬‬ ‫‪8088‬‬
‫‪16 M‬‬ ‫‪24-bits‬‬ ‫‪16-bits‬‬ ‫‪16-bits‬‬ ‫‪8 MHz‬‬ ‫‪134,000‬‬ ‫‪1982‬‬ ‫‪80286‬‬
‫‪4G‬‬ ‫‪32-bits‬‬ ‫‪32-bits‬‬ ‫‪32-bits‬‬ ‫‪16 MHz‬‬ ‫‪275,000‬‬ ‫‪1985‬‬ ‫‪80386‬‬
‫‪4G‬‬ ‫‪32-bits‬‬ ‫‪32-bits‬‬ ‫‪32-bits‬‬ ‫‪25 MHz‬‬ ‫‪1,200,000‬‬ ‫‪1989‬‬ ‫‪80486‬‬
‫‪4G‬‬ ‫‪32-bits‬‬ ‫‪32-bits‬‬ ‫‪64-bits‬‬ ‫‪60 MHz‬‬ ‫‪3,100,000‬‬ ‫‪1993‬‬ ‫‪Pentium‬‬
‫‪64 G‬‬ ‫‪36-bits‬‬ ‫‪32-bits‬‬ ‫‪64-bits‬‬ ‫‪233 MHz‬‬ ‫‪8,800,000‬‬ ‫‪1997‬‬ ‫‪Pentium II‬‬
‫‪64 G‬‬ ‫‪36-bits‬‬ ‫‪32-bits‬‬ ‫‪64-bits‬‬ ‫‪650 MHz‬‬ ‫‪9,500,000‬‬ ‫‪1999‬‬ ‫‪Pentium III‬‬
‫‪64 G‬‬ ‫‪36-bits‬‬ ‫‪32-bits‬‬ ‫‪64-bits‬‬ ‫‪1.4 GHz‬‬ ‫‪42,000,000‬‬ ‫‪2000‬‬ ‫‪Pentium 4‬‬

‫ﻨﻅﺭﹰﺍ ﻟﺘﺒﻨﻲ ﺸﺭﻜﺔ ‪ IBM‬ﻤﻌﺎﻟﺠﺎﺕ ‪ Intel‬ﻓﻲ ﺘﺼﻤﻴﻡ ﺤﻭﺍﺴﻴﺒﻬﺎ ﺍﻟﺸﺨﺼﻴﺔ ﻓﻘﺩ ﺴﻴﻁﺭﺕ ‪ Intel‬ﻋﻠﻰ‬
‫ﻫﺫﺍ ﺍﻟﺴﻭﻕ‪ ،‬ﻭﻤﻊ ﺫﻟﻙ ﻴﺠﺏ ﺃﻥ ﻻ ﻨﻨﺴﻰ ﻭﺠﻭﺩ ﺸﺭﻜﺎﺕ ﺃﺨﺭﻯ ﺼﻨﻌﺕ ﻁﻴﻔـﹰﺎ ﻤـﻥ ﺍﻟﻤﻌﺎﻟﺠـﺎﺕ‪،‬‬
‫ﻻ ﺠﺩﻴﺩﺓ ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﻤـﻥ ﻫـﺫﻩ ﺍﻟـﺸﺭﻜﺎﺕ‪Zilog :‬‬
‫ﻭﺒﻌﻀﻬﺎ ﻻ ﻴﺯﺍل ﻴﻁﻭﺭ ﻭﻴﺼﻨﻊ ﺃﺠﻴﺎ ﹰ‬
‫ﻭ ‪ Motorola‬ﻭ ‪ Texas Instruments‬ﻭﻏﻴﺭﻫﺎ‪..‬‬
‫ﻟﻠﻤﺯﻴﺩ ﻤﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل ﺘﺎﺭﻴﺦ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻭﻋﺎﺌﻼﺘﻬﺎ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻴﺭﺠﻰ ﺍﻻﻁﻼﻉ ﻋﻠـﻰ ﺍﻟﻤﻠـﻑ‬
‫‪.Panorama.pdf‬‬

‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪ RISC‬ﻭﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪CISC‬‬

‫ﺨﻼل ﻋﻤﻠﻴﺔ ﺍﻟﺘﻁﻭﻴﺭ ﺍﻟﻤﺴﺘﻤﺭﺓ ﻟﻠﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﻭﺒﻬﺩﻑ ﺘﺤﺴﻴﻥ ﺃﺩﺍﺌﻬﺎ‪ ،‬ﺒﺭﺯﺕ ﺍﻟﺘﻘﻨﻴﺘـﺎﻥ ﺍﻟﻤﺘﻨﺎﻓـﺴﺘﺎﻥ‬
‫‪ RISC‬ﻭ ‪ .CISC‬ﺇﻥ ﻟﻜل ﻤﻥ ﻫﺎﺘﻴﻥ ﺍﻟﺘﻘﻨﻴﺘﻴﻥ ﻤﻴﺯﺍﺕ ﻭﻤﺴﺎﻭﺉ‪ ،‬ﻭﺘـﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺠـﺎﺕ ﺍﻟﺤﺎﻟﻴـﺔ‬
‫ﻤﺯﻴﺠﹰﺎ ﻤﻥ ﻫﺫﻴﻥ ﺍﻟﺒﻨﻴﺎﻨﻴﻥ ﻓﻲ ﺘﺼﻤﻴﻡ ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ‪ ،CPU‬ﻋﻭﻀﹰﺎ ﻋﻥ ﺍﻟﺘﺒﻨﻲ ﺍﻟﻤﻁﻠﻕ‬
‫ﻹﺤﺩﺍﻫﻤﺎ‪.‬‬

‫‪4‬‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺫﺍﺕ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺴّﻌﺔ ‪4CISC‬‬
‫ﻟﻡ ﺘﻜﻥ ﺘﻘﻨﻴﺔ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ‪ compiler‬ﻤﺘﻭﻓﺭﺓ ﺍﻟﺒﺘﺔ ﺨﻼل ﺍﻟﻔﺘﺭﺓ ﺍﻷﻭﻟﻰ ﻤﻥ ﺇﻨﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﻤﻤـﺎ‬
‫ﺤﺼﺭ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻤﺎ ﺒﺭﻤﺎﺯ ﺍﻵﻟﺔ ﺃﻭ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻭﻟﺘﺴﻬﻴل ﻋﻤﻠﻴﺔ ﺍﻟﺒﺭﻤﺠـﺔ ﻭﺘﺤـﺴﻴﻥ ﺃﺩﺍﺀ‬
‫َ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺃﻀﺎﻑ ﻤﺼﻤﻤﻭ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﻓﻲ ﻜل ﻤﺭﺓ‪ ،‬ﺘﻌﻠﻴﻤﺎﺕ ﻤﻌﻘﺩﺓ ﺘﺴﻤﺢ ﺒﺘﻨﻔﻴﺫ ﻭﻅـﺎﺌﻑ ﺘﹸﻤﺎﺜـل‬
‫ﺍﻟﻭﻅﺎﺌﻑ ﺍﻟﺘﻲ ﺘﻘﺩﻤﻬﺎ ﺍﻟﻴﻭﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻌﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪ .‬ﺴﺎﻋﺩ ﺍﻟﻤﻀﻲ ﻓﻲ ﻫﺫﺍ ﺍﻟﺘﻭﺠـﻪ‪ ،‬ﻓـﻲ‬
‫ﺘﻠﻙ ﺍﻟﻔﺘﺭﺓ‪ ،‬ﺴﻬﻭﻟﺔ ﺘﺼﻤﻴﻡ ﺍﻟﻜﻴﺎﻥ ﺍﻟﺠﺎﻤﺩ ‪ hardware‬ﻭﺼﻌﻭﺒﺔ ﺘﺼﻤﻴﻡ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ‪ ،‬ﻤﻤﺎ ﺩﻓﻊ ﺃﻜﺜﺭ‬
‫ﻨﺤﻭ ﺍﺯﺩﻴﺎﺩ ﺘﻌﻘﻴﺩ ﺍﻟﻜﻴﺎﻥ ﺍﻟﺠﺎﻤﺩ‪ .‬ﻜﺎﻨﺕ ﻫﺫﻩ ﺍﻟﻔﻜـﺭﺓ ﻭﺭﺍﺀ ﺘـﺼﻤﻴﻡ ﻤﻌﺎﻟﺠـﺎﺕ ﺫﺍﺕ "ﻤﺠﻤﻭﻋـﺔ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺴ‪‬ﻌﺔ" ﺃﻭ ‪ CISC‬ﻤﺜل ﻋﺎﺌﻠﺔ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪ x86‬ﻤﻥ ‪ Intel‬ﺍﻟﺘﻲ ﺘﻀﻡ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺘﻬﺎ‬
‫ﺃﻜﺜﺭ ﻤﻥ ‪ 300‬ﺘﻌﻠﻴﻤﺔ‪ .‬ﺘﺘﻤﻴﺯ ﻤﻌﺎﻟﺠﺎﺕ ‪ CISC‬ﺒﻜﺜﺭﺓ ﻋﺩﺩ ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻭﺍﻟﺴﺠﻼﺕ ﻭﻜﺫﻟﻙ ﺒﺎﻟﻁﻭل‬
‫ﺍﻟﻤﺘﻐﻴﺭ ﻟﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﺃﺩﻯ ﺍﺯﺩﻴﺎﺩ ﺘﻌﻘﻴﺩ ﺍﻟﻜﻴﺎﻥ ﺍﻟﺠﺎﻤﺩ ﻭﺒﻨﻴﺎﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟـﻰ ﺼـﻌﻭﺒﺔ ﻓﻬﻤـﻪ‬
‫ﻭﺒﺭﻤﺠﺘﻪ ﻭﺇﻟﻰ ﺍﺭﺘﻔﺎﻉ ﻜﻠﻔﺔ ﺇﻨﺘﺎﺠﻪ‪.‬‬
‫ﻨﺫﻜﺭ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪ CISC‬ﺍﻟﺸﺎﺌﻌﺔ‪ :‬ﺍﻟﻌﺎﺌﻠﺔ ‪ ، x86‬ﻭﺍﻟﻌﺎﺌﻠﺔ ‪ Motorola 68000‬ﻭ ‪.AMD‬‬

‫‪5‬‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺫﺍﺕ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﺯﺓ ‪RISC‬‬
‫ﺸﻬﺩ ﻤﻨﺘﺼﻑ ﺍﻟﺜﻤﺎﻨﻴﻨﺎﺕ ﺒﺩﺍﻴﺔ ﻅﻬﻭﺭ ﺍﻟﺒﻨﻴﺎﻥ ‪ .RISC‬ﺍﺴﺘﻭﺤﻴﺕ ﻫﺫﻩ ﺍﻟﻔﻠﺴﻔﺔ ﺒﻌﺩ ﺍﻟﺩﺭﺍﺴـﺔ ﺍﻟﺘـﻲ‬
‫ﹶ‬
‫ﺃﻅﻬﺭﺕ ﺃﻥ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﻴﺯﺍﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻭﺤﺩﺍﺕ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ‪ ،‬ﻭﺍﻟﻤـﺼﻤﻤﺔ ﻟﺘـﺴﻬﻴل‬
‫ﺒﺭﻤﺠﺘﻪ‪ ،‬ﻴﺠﺭﻱ ﺘﺠﺎﻫﻠﻬﺎ ﻤﻥ ﻗﺒل ﺍﻟﻤﺒﺭﻤﺞ ﻋﻨﺩ ﻜﺘﺎﺒﺘﻪ ﻟﻠﺒﺭﻨﺎﻤﺞ‪ .‬ﺃﻀﻑ ﻋﻠﻰ ﺫﻟﻙ‪ ،‬ﺍﻟﺯﻤﻥ ﺍﻟﻜﺒﻴـﺭ‬
‫ﺍﻟﺫﻱ ﻴﺄﺨﺫﻩ ﺍﻟﻤﻌﺎﻟﺞ ﻟﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﻘﺩﺓ‪ ،‬ﻭﺍﺘﺴﺎﻉ ﺍﻟﻔﺠﻭﺓ ﺒـﻴﻥ ﺴـﺭﻋﺔ ﺍﻟﻤﻌﺎﻟﺠـﺔ ﻭﺍﻟـﺫﺍﻜﺭﺓ‬
‫ﺍﻟﺭﺌﻴﺴﺔ‪ .‬ﻜل ﺫﻟﻙ ﺃﺩﻯ ﺇﻟﻰ ﺘﻁﻭﻴﺭ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺘﺠﻌل ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﺃﻜﺜـﺭ ﺍﻨـﺴﻴﺎﺒﻴﺔ‪ ،‬ﻤـﻊ‬
‫ﺍﻹﻗﻼل ﺒﺎﻟﻭﻗﺕ ﻨﻔﺴﻪ ﻤﻥ ﻋﺩﺩ ﻤﺭﺍﺕ ﺍﻟﻨﻔﻭﺫ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺘﻌﺘﻤﺩ ﻓﻜﺭﺓ ‪ RISC‬ﻋﻠﻰ ﺃﻥ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﻓﻀل ﻟﺘﺤﺴﻴﻥ ﺃﺩﺍﺀ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻜﻤﻥ ﻓﻲ ﺘﺒـﺴﻴﻁ ﻋﻤﻠـﻪ ﻤـﺎ‬
‫ﺃﻤﻜﻥ‪ .‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﺍﺨﺘﺯﻟﺕ ﻋﺩﺩ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،IBM PowerPC‬ﻭﻫﻭ ﻤﻥ ﻨﻭﻉ ‪،RISC‬‬
‫ﺇﻟﻰ ﺤﻭﺍﻟﻲ ‪ 100‬ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﺃﻗل‪ ،‬ﻭﺃﻋﻴﺩ ﺘﺒﺴﻴﻁ ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺇﻟﻰ ﺃﺭﺒﻌﺔ ﺃﻭ ﺃﻗل‪ ،‬ﻜﻤﺎ ﺠ‪‬ﻌل ﻁـﻭل‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺜﺎﺒﺘﹰﺎ ﻤﻥ ﺃﺠل ﺠﻌل ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﻌﻴﺎﺭﻴﺔ‪.‬‬

‫‪4‬‬
‫ﻣﺨﺘﺼﺮ‪Complex Instruction Set Computers :‬‬
‫‪Reduce Instruction Set Computers‬‬ ‫‪ 5‬ﳐﺘﺼﺮ‪:‬‬

‫‪5‬‬
‫ﻨﺫﻜﺭ ﻤـﻥ ﺍﻟﻤﻌﺎﻟﺠـﺎﺕ ‪ RISC‬ﺍﻟـﺸﺎﺌﻌﺔ‪،PIC ،PA-RISC ،MIPS ،AVR ،ARM ،Alpha :‬‬
‫‪ ،Power Architecture‬ﻭ ‪.SPARC‬‬
‫ﺃﺩﻯ ﺍﻟﺘﺤﻭل ﻨﺤﻭ ﺍﻟﺒﻨﻴﺎﻥ ‪ RISC‬ﺇﻟﻰ ﺍﺴﺘﺨﺩﺍﻡ ﻋﺩﺩ ﺃﻗل ﻤﻥ ﺍﻟﺘﺭﺍﻨﺯﺴﺘﻭﺭ ﻓﻲ ﺇﻨﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﻤﻤﺎ‬
‫ﻴﺠﻌل ﻜﻠﻔﺔ ﺇﻨﺘﺎﺝ ﺍﻟﺭﻗﺎﻗﺎﺕ ‪ RISC‬ﺃﻗل ﺒﻜﺜﻴﺭ ﻤﻥ ﻜﻠﻔﺔ ﺇﻨﺘﺎﺝ ﻨﻅﻴﺭﻫﺎ ‪ .CISC‬ﻜﺫﻟﻙ ﻓـﺈﻥ ﺍﺨﺘـﺯﺍل‬
‫ﻋﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻴﻤﻜﻨﻪ ﺃﻥ ﻴﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﺴﺭﻋﺔ ﺃﻋﻠﻰ‪ ،‬ﻭﻟﻜﻥ ﻨﻅﺭﹰﺍ ﻟﻘﻠـﺔ ﻋـﺩﺩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻤﻥ ﺍﻟﻀﺭﻭﺭﻱ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺘﺎﺤﺔ ﻋﻠﻰ ﻨﺤﻭ ﻓﻌﺎل‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺠﺩﻭل ﻤﻘﺎﺭﻨﺔ ﺒﻴﻥ ﺍﻟﺒﻨﻴﺎﻨﻴﻥ ‪ CISC‬ﻭ ‪.RISC‬‬
‫‪RISC‬‬ ‫‪CISC‬‬ ‫ﺍﻟﻤﻌﻴﺎﺭ‬
‫ﻗﻠﻴﻠﺔ )‪ 100‬ﺃﻭ ﺃﻗل(‬ ‫ﻜﺒﻴﺭﺓ )ﺒﻴﻥ ‪ 100‬ﻭ ‪(300‬‬ ‫ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺒﺴﻴﻁ )‪ 4‬ﺃﻭ ﺃﻗل(‬ ‫ﻤﻌﻘﺩﺓ )ﻤﻥ ‪ 8‬ﺇﻟﻰ ‪(20‬‬ ‫ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ‬
‫ﺜﺎﺒﺕ‬ ‫ﻤﺘﻐﻴﺭ‬ ‫ﻁﻭل ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﺜﺎﺒﺕ ﻷﻏﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬ ‫ﻤﺘﻐﻴﺭ‬ ‫ﺯﻤﻥ ﺍﻟﺘﻨﻔﻴﺫ‬
‫ﺃﻗل‬ ‫ﺃﻋﻠﻰ‬ ‫ﻜﻠﻔﺔ ﻭﺘﻌﻘﻴﺩ ﺍﻟـ ‪CPU‬‬
‫ﺃﻋﻠﻰ‬ ‫ﺃﻗل‬ ‫ﺤﺠﻡ ﺍﻟﺒﺭﺍﻤﺞ ﺒﻠﻐﺔ ﺍﻵﻟﺔ‬
‫ﺃﻜﺜﺭ‬ ‫ﺃﻗل‬ ‫ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ‬

‫ﺒﺎﻟﻨﻅﺭ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ‪ ،‬ﻨﺠﺩ ﺃﻥ ﺍﻟﻤﻨﺎﻓﺴﺔ ﺒﻴﻥ ‪ CISC‬ﻭ ‪ RISC‬ﻟﻴﺱ ﻟﻪ ﺍﻟﻴﻭﻡ ﺃﻫﻤﻴﺔ ﻜﺒﻴﺭﺓ‪،‬‬
‫ﻭﻫﺫﺍ ﺒﺴﺒﺏ ﺘﻘﺎﺭﺏ ﻫﺫﺍﻥ ﺍﻟﺒﻨﻴﺎﻨﺎﻥ ﻜل ﻤﻨﻬﻤﺎ ﺒﺎﺘﺠﺎﻩ ﺍﻷﺨﺭ‪ ،‬ﺤﻴﺙ ﺃﻥ ﻭﺤﺩﺍﺕ ﺍﻟﻤﻌﺎﻟﺠﺔ ‪ CPUs‬ﻤﻥ‬
‫ﻜل ﺒﻨﻴﺎﻥ ﺘﺘﺒﻨﻰ ﺃﻓﻜﺎﺭ ﺍﻟﺒﻨﻴﺎﻥ ﺍﻵﺨﺭ‪ .‬ﻓﺎﻟﻤﻌﺎﻟﺠﺎﺕ ‪ CISC‬ﺘﺴﺘﺨﺩﻡ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ‬
‫‪ ،RISC‬ﻜﻤﺎ ﺃﻥ ﻋﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﺯﺓ ﻟﻤﻌﺎﻟﺠﺎﺕ ‪ RISC‬ﻗﺭﻴﺒﺔ ﻤﻥ ﺘﻠﻙ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓـﻲ ﺒﻌـﺽ‬
‫ﻤﻌﺎﻟﺠﺎﺕ ‪.CISC‬‬

‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺘﻭﺍﺭﺩﻴﺔ ‪pipelining‬‬

‫ﺘﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺘﻘﻠﻴﺩﻴﺔ ﺘﻌﻠﻴﻤـﺔ ﻭﺍﺤـﺩﺓ ﺒـﺂﻥ ﻭﺍﺤـﺩ )ﻟـﺫﻟﻙ ﺘﹸـﺴﻤﻰ ﺒﺎﻟﻤﻌﺎﻟﺠـﺎﺕ ﺍﻟـﺴﻠﻤﻴﺔ‬
‫‪(scalar processor‬؛ ﺃﻱ ﻻ ﻴﺒﺩﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺇﻻ ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﺘﻤﺎﻤﹰﺎ ﻤـﻥ ﺘﻨﻔﻴـﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ‪ .‬ﺒﻔﺭﺽ ﺃﻥ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺃﺭﺒﻊ ﻋﻤﻠﻴﺎﺕ ﺃﺴﺎﺴﻴﺔ‪ :‬ﺠﻠﺏ‪ ،‬ﻓﻙ ﺘﺭﻤﻴﺯ‪ ،‬ﺘﻨﻔﻴﺫ‬
‫ﻭﺘﺨﺯﻴﻥ‪ ،‬ﻭﺒﻔﺭﺽ ﺃﻥ ﻜل ﻋﻤﻠﻴﺔ ﺘﻨﺠﺯ ﺨﻼل ﻭﺤﺩﺓ ﺯﻤﻨﻴﺔ‪ ،‬ﻓﻴﺤﺘﺎﺝ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ ﺇﻟﻰ ﺃﺭﺒﻌـﺔ‬

‫‪6‬‬
‫ﻭﺤﺩﺍﺕ ﺯﻤﻨﻴﺔ ﻭﻴﺤﺘﺎﺝ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺘﻴﻥ ﺇﻟﻰ ‪ 8‬ﻭﺤﺩﺍﺕ ﺯﻤﻨﻴﺔ‪ .‬ﻨﺫﻜﺭ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺒﻨﻰ ﻫـﺫﺍ‬
‫ﺍﻟﺒﻨﻴﺎﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪.8085‬‬

‫ﺇﺫﺍ ﺍﺤﺘﻭﻯ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﻋﺩﺓ ﻭﺤﺩﺍﺕ ﻤﺘﺨﺼﺼﺔ‪ :‬ﻭﺍﺤﺩﺓ ﻟﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭﺃﺨﺭﻯ ﻟﻔـﻙ ﺘﺭﻤﻴﺯﻫـﺎ‬
‫ﻭﺜﺎﻟﺜﺔ ﻟﺘﻨﻔﻴﺫﻫﺎ ﻭﺭﺍﺒﻌﺔ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻋﻨﺩﺌﺫ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺃﻜﺜﺭ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺒﺂﻥ ﻭﺍﺤـﺩ‪ .‬ﻓﺒﻴﻨﻤـﺎ‬
‫ﺘﻌﻤل ﻭﺤﺩﺓ ﺍﻟﺠﻠﺏ ﻋﻠﻰ ﺠﻠﺏ ﺘﻌﻠﻴﻤﺔ ﺠﺩﻴﺩﺓ ﺘﻌﻤل ﻭﺤﺩﺓ ﺍﻟﻔﻙ ﻋﻠﻰ ﻓﻙ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺃﻨﻬﺕ ﻭﺤـﺩﺓ‬
‫ﺍﻟﺠﻠﺏ ﺠﻠﺒﻬﺎ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻭﺘﻌﻤل ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺃﻨﻬﺕ ﻭﺤﺩﺓ ﻓﻙ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻥ‬
‫ﻓﻜﻬﺎ ﺃﻭ ﺘﺤﻠﻴﻠﻬﺎ‪ ،‬ﻭﺘﻌﻤل ﻭﺤﺩﺓ ﺍﻟﺘﺨﺯﻴﻥ ﻋﻠﻰ ﺘﺨﺯﻴﻥ ﻨﺎﺘﺞ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ‪ .‬ﺘـﺴﻤﻰ ﻫـﺫﻩ ﺍﻟﺘﻘﻨﻴـﺔ‬
‫ﺒﺎﻟﺘﻭﺍﺭﺩ ‪ Pipelining‬ﻷﻥ ﻜل ﻭﺤﺩﺓ ﺘﺨﺼﺼﻴﺔ ﺘﹸﻭﺭﺩ ﻨﺘﺎﺌﺠﻬﺎ ﺇﻟﻰ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺘﻲ ﺘﻠﻴﻬﺎ ﻋﻨـﺩ ﺇﻨﻬـﺎﺀ‬
‫ﻤﻬﻤﺘﻬﺎ ﻋﺒﺭ ﻗﻨﺎﺓ ﻨﹸﺴﻤﻴﻬﺎ ﻗﻨﺎﺓ ﺍﻟﻤﻭﺍﺭﺩﺓ ‪.Pipeline‬‬

‫ﻨﺠﺩ ﻤﻥ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺴﺎﺒﻕ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻗﺩ ﺍﺤﺘﺎﺠﺕ ﺇﻟﻰ ﺃﺭﺒﻌﺔ ﻭﺤﺩﺍﺕ ﺯﻤﻨﻴﺔ ﻹﻨﻬﺎﺀ ﺘﻨﻔﻴﺫﻫﺎ‪،‬‬
‫ﻜﻤﺎ ﻫﻭ ﺍﻟﺤﺎل ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻘﻠﻴﺩﻱ‪ ،‬ﻓﻲ ﺤﻴﻥ ﺍﺤﺘﺎﺝ ﺘﻨﻔﻴﺫ ﺍﻟﺜﺎﻨﻴﺔ ﻓﻘﻁ ﺇﻟﻰ ﻭﺤـﺩﺓ ﺯﻤﻨﻴـﺔ ﻭﺍﺤـﺩﺓ‬
‫ﻭﻜﺫﻟﻙ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺜﺎﻟﺜﺔ ﻭﻫﻜﺫﺍ ‪ ..‬ﻨﺴﺘﻨﺘﺞ ﺃﻥ ﻭﺠﻭﺩ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﺘﺨﺼﺼﻴﺔ ﺃﺩﻯ ﺇﻟﻰ ﺇﻨﻘـﺎﺹ ﺯﻤـﻥ‬

‫‪7‬‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔ ﺘﻘﺭﻴﺒﹰﺎ ﺇﻟﻰ ﺍﻟﺭﺒﻊ‪ ،‬ﻤﺎ ﻋﺩﺍ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺒﻘﻲ ﺯﻤﻥ ﺘﻨﻔﻴﺫﻫﺎ ﺒﺩﻭﻥ ﺘﻐﻴﻴﺭ‪ .‬ﻨﺫﻜﺭ ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻓﻲ ﺘﺼﻤﻴﻤﻬﺎ ﻤﺒﺩﺃ ﺍﻟﺘﻭﺍﺭﺩ ﻤﻌﺎﻟﺠﺎﺕ ‪ AVR‬ﻭﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟـﺼﻐﺭﻴﺔ ﻤـﻥ‬
‫‪ PIC‬ﻭﻤﻌﺎﻟﺞ ﺒﻨﺘﻴﻭﻡ ‪.4‬‬
‫ﻤﻊ ﺃﻥ ﻤﺒﺩﺃ ﺍﻟﺘﻭﺍﺭﺩ ﻴﺴﻤﺢ ﺒﺈﻨﻘﺎﺹ ﺯﻤﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻓﺈﻥ ﻭﺠﻭﺩ ﺒﻌﺽ ﺍﻟﺼﻌﻭﺒﺎﺕ ﺘﺠﻌل ﺃﺩﺍﺀﻩ‬
‫ﺃﻗل ﻤﻥ ﺍﻟﻨﺤﻭ ﺍﻟﻤﺭﻏﻭﺏ ﻓﻴﻪ‪ .‬ﻓﻤﻥ ﻨﺎﺤﻴﺔ‪ ،‬ﻨﺠﺩ ﺃﻥ ﻤﺯﺍﻤﻨﺔ ﻋﻤل ﺍﻟﻭﺤﺩﺍﺕ ﻟﻴﺱ ﺒﺎﻷﻤﺭ ﺍﻟﺴﻬل ﺒﺴﺒﺏ‬
‫ﻼ ﻨﺠﺩ ﺃﻥ ﺍﻟﺯﻤﻥ ﺍﻟﻼﺯﻡ ﻟﺘﻨﻔﻴﺫ‬
‫ﻋﺩﻡ ﺍﺴﺘﻐﺭﺍﻕ ﺠﻤﻴﻊ ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﻤﺩﺓ ﻨﻔﺴﻬﺎ ﻹﻨﻬﺎﺀ ﻋﻤل ﻜل ﻤﻨﻬﺎ‪ ،‬ﻓﻤﺜ ﹰ‬
‫ﺘﻌﻠﻴﻤﺔ ﻴﻜﻭﻥ ﻋﺎﺩﺓ ﺃﻜﺒﺭ ﻤﻥ ﺯﻤﻥ ﺠﻠﺏ ﺘﻌﻠﻴﻤﺔ‪ .‬ﻭﻤﻥ ﻨﺎﺤﻴﺔ ﺃﺨﺭﻯ‪ ،‬ﹸﺘﻐﻴﺭ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﻤﻥ ﺘﺘـﺎﺒﻊ‬
‫ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻤﻤﺎ ﻴﺴﺘﺩﻋﻲ ﺇﻓﺭﺍﻍ ﻗﻨﺎﺓ ﺍﻟﻤﻭﺍﺭﺩﺓ ﺜﻡ ﻤﻸﻫﺎ ﻤﺠﺩﺩﹰﺍ ﺒﻌﺩ ﺇﻨﺠﺎﺯ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺯ‪ ،‬ﻭﻫـﺫﺍ‬
‫ﻴﺒﻁﺊ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬

‫ﻤﻌﺎﻟﺠﺎﺕ ﺴﱡﻠﻤﻴﺔ ﻓﺎﺌﻘﺔ ‪Superscalar‬‬

‫ﺇﻥ ﺘﻁﺒﻴﻕ ﻤﺒﺩﺃ ﺍﻟﺘﻭﺍﺭﺩ ‪ Pipelining‬ﻴﺯﻴﺩ ﻤﻥ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﺘﻌﻠﻴﻤﺎﺕ؛ ﻓﺒﻴﻨﻤﺎ ﺘﹸﺤ ﱢﻤل ﻭﺤـﺩﺓ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ﺘﻌﻠﻴﻤﺔ ﺠﺩﻴﺩﺓ ﻓﺈﻨﻬﺎ ﺘﻨﻔﺫ ﺤﺴﺎﺒﺎﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺴﺒﻘﺘﻬﺎ ﻭﺘﺨﺯﻥ ﻨﺘﻴﺠﺔ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﺍﻟﺘﻲ ﺴﺒﻘﺕ ﺴﺎﺒﻘﺘﻬﺎ‪ .‬ﺼﺤﻴﺢ ﺃﻥ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺘﻌﺘﺒﺭ ﺘﻔﺭﻋﻴﺔ ﺇﻻ ﺃﻨﻬﺎ ﻻ ﺘﻌﺘﺒﺭ ﻤﻌﺎﻟﺠﺔ ﺴﻠﻤﻴﺔ ﻓﺎﺌﻘـﺔ‬
‫‪ superscalar processing‬ﻟﻜﻭﻨﻬﺎ ﹸﺘﻨﻬﻲ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ ﺨﻼل ﻜل ﺩﻭﺭﺓ ﺁﻟﺔ‪.‬‬
‫ﻟﺯﻴﺎﺩﺓ ﻤﻌﺩل ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻤﺩﺕ ﺒﻌﺽ ﺍﻟﺸﺭﻜﺎﺕ ﺇﻟﻰ ﺘﺼﻨﻴﻊ ﻤﻌﺎﻟﺠﺎﺕ ﻋﺎﻟﻴـﺔ ﺍﻷﺩﺍﺀ ﺘﺤﺘـﻭﻱ‬
‫ﻋﻠﻰ ﻋﺩﺓ ﻭﺤﺩﺍﺕ ﺤﺴﺎﺒﻴﺔ ﻭﻤﻨﻁﻘﻴﺔ ‪ ALU‬ﺘﻌﻤل ﻤﻌﹰﺎ ﻋﻠﻰ ﺍﻟﺘﻭﺍﺯﻱ‪ .‬ﺘﺴﺘﻁﻴﻊ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺠﻠـﺏ‬
‫ﻋﺩﺓ ﺘﻌﻠﻴﻤﺎﺕ ﺒﺂﻥ ﻭﺍﺤﺩ ﻭﻓﻙ ﺘﺭﻤﻴﺯ ﻋﺩﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻭﺘﻨﻔﻴﺫ ﻋﺩﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﺘـﻲ‬
‫ﻼ ‪ 96‬ﺒـﺕ(‪،‬‬
‫ﺴﺒﻘﺕ ﺴﺎﺒﻘﺘﻬﺎ‪ .‬ﺘﹸﺒﺭﻤﺞ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺍﺕ ﺒﺘﻌﻠﻴﻤﺎﺕ ﻤﺭﻤﺯﺓ ﻋﻠﻰ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻟﺒﺘﺎﺕ )ﻤﺜ ﹰ‬
‫ﺘﺴﻤﻰ ﺒﺎﻟﺘﻌﻠﻴﻤﺎﺕ ﺫﺍﺕ ﺍﻟﻜﻠﻤـﺎﺕ ﺍﻟﻌﺭﻴـﻀﺔ ﺠـﺩﹰﺍ )‪.Very Large Instruction Word (VLIW‬‬
‫ﺘﹸﻭﺼﻑ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺒﺄﻨﻬﺎ ﻤﻌﺎﻟﺠﺎﺕ ﺴ‪‬ﻠﻤﻴﺔ ﻓﺎﺌﻘﺔ ‪.Superscalar‬‬

‫ﺘﺯﺩﺍﺩ ﺴﺭﻋﺔ ﺍﻟﻤﻌﺎﻟﺠﺔ ﻤﻊ ﺍﺯﺩﻴﺎﺩ ﻋﺩﺩ ﺍﻟﻭﺤﺩﺍﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻓﺒﻴﻨﻤﺎ ﺘﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺠـﺎﺕ ﺍﻟـﺴﻠﻤﻴﺔ‬
‫ﺍﻟﻔﺎﺌﻘﺔ ﺍﻷﻭﻟﻰ ﻋﻠﻰ ﻭﺤﺩﺘﻲ ﺤﺴﺎﺏ ﻤﻨﻁﻘﻴﺔ ‪ ALU‬ﻭﻭﺤﺩﺓ ﺤـﺴﺎﺏ ﺒﺎﻟﻔﺎﺼـﻠﺔ ﺍﻟﻌﺎﺌﻤـﺔ‪ ،‬ﻨﺠـﺩ ﺃﻥ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ‪ ،‬ﻤﺜل ‪ ،PowerPC 970‬ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺃﺭﺒﻊ ﻭﺤﺩﺍﺕ ﺤﺴﺎﺏ ﻤﻨﻁﻘﻴﺔ ﻭﻭﺤـﺩﺘﻲ‬
‫ﺤﺴﺎﺏ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ‪.‬‬

‫‪8‬‬
‫ﻴ‪‬ﺸﺎﺭ ﻋﺎﺩﺓ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ ‪ CDC 6600‬ﻤﻥ ‪ Seymour Cray‬ﻋﻠﻰ ﺃﻨﻪ ﺃﻭل ﺘﺼﻤﻴﻡ ﻟﻤﻌﺎﻟﺞ ﺴ‪‬ـﻠﻤﻲ‬
‫ﻓﺎﺌﻕ‪ ،‬ﺒﻴﻨﻤﺎ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪ i960‬ﻤﻥ ‪) Intel‬ﻋﺎﻡ ‪ (1988‬ﻭﺴﻠﺴﻠﺔ ‪) AMD 29000‬ﻋﺎﻡ ‪ (1990‬ﻫـﻲ‬
‫ﺃﻭل ﻤﻌﺎﻟﺞ ﺘﺠﺎﺭﻱ ﻤﻥ ﻨﻭﻉ ‪ .Superscalar‬ﻭﻤﻨﺫ ﺍﻟﻌﺎﻡ ‪ 1988‬ﻓﺈﻥ ﺃﻏﻠﺏ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻟﻼﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟﻌﺎﻡ ﻫﻲ ﻤﻥ ﻨﻭﻉ ‪ ،Superscalar‬ﻤﻨﻬﺎ ﻤﻌﺎﻟﺠﺎﺕ ﺒﻨﺘﻴﻭﻡ ﺍﻟﺘﻲ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻭﺤﺩﺘﻲ ﺤﺴﺎﺏ ﻟﻸﻋﺩﺍﺩ‬
‫ﺍﻟﺼﺤﻴﺤﺔ‪ ،‬ﻴﻤﻜﻨﻬﻤﺎ ﺍﻟﻌﻤل ﻤﻌﹰﺎ ﺇﺫﺍ ﺘﻭﺍﻓﺭﺕ ﺍﻟﺸﺭﻭﻁ ﺍﻟﻤﻼﺌﻤﺔ ﻟﺫﻟﻙ‪.‬‬

‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺫﺍﺕ ﺒﻨﻴﺎﻥ ﻫﺎﺭﭭﺭﺩ ‪Harvard‬‬

‫ﺍﻋﺘﻤﺩ ﺘﺼﻤﻴﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻓﻲ ﺍﻟﺒﺩﺀ ﻋﻠﻰ ﺍﺴﺘﺨﺩﺍﻡ ﺒﻨﻴﺎﻥ ﺫﺍﻜﺭﺓ ﻨﻔﺴﻪ ﻟﺘﺨﺯﻴﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﻤﻌﻁﻴـﺎﺕ‬
‫ﻭﻜﺫﻟﻙ ﺍﻟﻤﺴﺎﺭﻱ ﻨﻔﺴﻬﺎ ﻤﻥ ﺃﺠل ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﺘﻌﺭﻑ ﻫﺫﻩ ﺍﻟﺘﻘﺎﻨـﺔ‬
‫ﺒﺒﻨﻴﺎﻥ ﭭﻭﻥ ﻨﻭﻤﺎﻥ ‪ .von Neumann‬ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﻨﻴﺎﻥ ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﻓﻲ ﺁ ٍ‬
‫ﻥ ﻭﺍﺤﺩ ﺇﻤـﺎ ﺃﻥ ﻴﻘـﺭﺃ‬
‫ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﻴﻘﺭﺃ‪/‬ﻴﻜﺘﺏ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻜﻤﺎ ﻴﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﻌﻠﻴﻤﺔ ﺘﻠﻭ ﺍﻷﺨـﺭﻯ ﻋﻠـﻰ ﻨﺤـﻭ‬
‫ﺘﻐﻴﻴﺭ ﻫﺫﺍ ﺍﻟﺘﺘﺎﺒﻊ ﻤﻥ‬ ‫ﻣﺴﺮﻯ ﻋﻨﻮﻧﺔ‬ ‫ﺘﺘﺎﺒﻌﻲ ﺇﻻ ﺇﺫﺍ ﺠﺭﻯ‬
‫ﺍﻟﺒﺭﻨــﺎﻤﺞ‪ ،‬ﻤﺜــل‬ ‫ﻗﺒـــل ﺘﻌﻠﻴﻤـــﺎﺕ‬
‫‪CPU‬‬ ‫ﺫﺍﻜﺭﺓ ﺒﺭﻨﺎﻤﺞ‬ ‫ﺫﺍﻜﺭﺓ ﻤﻌﻁﻴﺎﺕ‬ ‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ‪.‬‬

‫ﻣﺴﺮﻯ ﻣﻌﻄﻴﺎﺕ‬

‫‪9‬‬
‫ﺒﻨﻴﺎﻥ ﭭﻭﻥ ﻨﻭﻤﺎﻥ‬

‫ﻭﻟﺘﺤﺴﻴﻥ ﺃﺩﺍﺀ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ‪ ،‬ﺍﻋﺘﻤﺩﺕ ﺒﻌﺽ ﺍﻟﺸﺭﻜﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ ﺒﻨﻴﺎﻨﹰﺎ ﺫﻭ ﻤﺴﺭﻴﻴﻥ ﻤﺴﺘﻘﻠﻴﻥ‪:‬‬
‫ﺍﻟﻤﺴﺭﻯ ﺍﻷﻭل‪ :‬ﻴﺘﺼل ﺒﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻭﻴﺠﺭﻱ ﻤﻥ ﺨﻼﻟﻪ ﻗﺭﺍﺀﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺇﻟـﻰ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﺍﻟﻤﺴﺭﻯ ﺍﻟﺜﺎﻨﻲ‪ :‬ﻴﺘﺼل ﺒﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻭﻴﺴﻤﺢ ﺒﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺤﻴﺔ ‪RAM‬‬
‫ﻭﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﻣﺴﺮﻯ ﻋﻨﻮﻧﺔ ﺫﺍﻛﺮﺓ ﺍﳌﻌﻄﻴﺎﺕ‬ ‫ﻣﺴﺮﻯ ﻋﻨﻮﻧﺔ ﺫﺍﻛﺮﺓ ﺍﻟﱪﻧﺎﻣﺞ‬

‫ﺫﺍﻜﺭﺓ ﻤﻌﻁﻴﺎﺕ‬ ‫‪CPU‬‬ ‫ﺫﺍﻜﺭﺓ ﺒﺭﻨﺎﻤﺞ‬

‫ﻣﺴﺮﻯ ﻣﻌﻄﻴﺎﺕ ﺫﺍﻛﺮﺓ ﺍﳌﻌﻄﻴﺎﺕ‬ ‫ﻣﺴﺮﻯ ﻣﻌﻄﻴﺎﺕ ﺫﺍﻛﺮﺓ ﺍﻟﱪﻧﺎﻣﺞ‬

‫ﺒﻨﻴﺎﻥ ﻫﺎﺭﭭﺭﺩ‬

‫ﻴﺴﻤﺢ ﺍﻟﻔﺼل ﺒﻴﻥ ﻤﺴﺭﻯ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻤﺴﺭﻯ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺘﺴﺭﻴﻊ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺤﻴـﺙ‬
‫ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺎﺩﻤﺔ ﺒﻴﻨﻤﺎ ﻴﻨﻬﻲ ﺘﺨﺯﻴﻥ ﻨﺎﺘﺞ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ‪ ،‬ﺒﺎﻟﻁﺒﻊ ﻫﻨﺎﻙ ﺜﻤـﻥ‬
‫ﻟﻬﺫﺍ ﺍﻟﺘﺴﺭﻴﻊ ﻭﻫﻭ ﺯﻴﺎﺩﺓ ﻋﺩﺩ ﻤﻐﺎﺭﺯ ﺍﻟﺭﻗﺎﻗﺔ ‪ IC‬ﻤﻤﺎ ﻴﺠﻌل ﺘﻭﺼﻴل ﺍﻟﻤﻌﺎﻟﺞ ﺩﺍﺨل ﺍﻟﻨﻅﺎﻡ ﻤﻌﻘـﺩﹰﺍ‪.‬‬
‫ﻜﻤﺎ ﺘﺴﻤﺢ ﻋﻤﻠﻴﺔ ﺍﻟﻔﺼل ﺃﻴﻀﹰﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﻨﻴﺔ ﻤﺨﺘﻠﻔﺔ ﻟﻜل ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴـﺎﺕ؛‬
‫ﻼ ﺃﻥ ﺤﺠﻡ ﻜﻠﻤﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ ﺃﻜﺒﺭ ﻤﻥ ﺤﺠﻡ ﻜﻠﻤﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻜﻤـﺎ ﺃﻥ‬
‫ﻓﻨﺠﺩ ﻤﺜ ﹰ‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻏﺎﻟﺒﹰﺎ ﻤﺎ ﺘﻜﻭﻥ ﻤﻥ ﻨﻭﻉ ﺍﻟﻤﻴﺘﺔ )ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ( ﺒﻴﻨﻤﺎ ﻨﺴﺘﺨﺩﻡ ﺫﺍﻜﺭﺓ ﺤﻴـﺔ )ﻟﻠﻘـﺭﺍﺀﺓ‬
‫ﻭﺍﻟﻜﺘﺎﺒﺔ( ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺅﻗﺘﺔ‪.‬‬
‫ﻴ‪‬ﺴﺘﺨﺩﻡ ﺒﻨﻴﺎﻥ ﻫﺎﺭﻓﺭﺩ ﻜﺜﻴﺭﹰﺍ ﻓﻲ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ‪ ،‬ﻭﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ‪.‬‬

‫‪10‬‬
‫ﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ‪Microcontroller‬‬

‫ﻻ ﺘﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﻀﻤﻥ ﺍﻟﺭﻗﺎﻗﺔ ﻨﻔﺴﻬﺎ ﻋﻠﻰ ﺫﺍﻜﺭﺓ ‪ ROM‬ﺃﻭ ‪ RAM‬ﻭﻻ ﺤﺘﻰ‬
‫ﻋﻠﻰ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺤﺘﺎﺝ ﺒﻨﺎﺀ ﻨﻅﺎﻡ ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺇﻀﺎﻓﺔ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟـﺩﺍﺭﺍﺕ‬
‫ﺍﻟﺨﺎﺭﺠﻴﺔ‪ ،‬ﺫﻭﺍﻜﺭ ﻭﻏﻴﺭﻫﺎ‪ ،‬ﺘﺯﻴﺩ ﻤﻥ ﻜﻠﻔﺔ ﺍﻟﻨﻅﺎﻡ ﻭﺤﺠﻤﻪ‪ ،‬ﻤﻤﺎ ﻴﺠﻌﻠﻪ ﻏﻴﺭ ﻤﻨﺎﺴـﺏ ﻟﻜﺜﻴـﺭ ﻤـﻥ‬
‫ﺍﻟﺘﻁﺒﻴﻘﺎﺕ‪ .‬ﻨﺫﻜﺭ ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻌﺎﺌﻠﺔ ‪ x86‬ﻤﻥ ‪ Intel‬ﻭﺍﻟﻌﺎﺌﻠﺔ ‪ 680x0‬ﻤﻥ ‪.Motorola‬‬

‫ﻣﺴﺮﻯ ﺍﳌﻌﻄﻴﺎﺕ‬

‫ﻣﺴﺮﻯ ﺍﻟﻌﻨﻮﻧﺔ‬
‫ﺍﻟﺸﻜﻞ ﺍﻟﻨﻤﻄﻲ ﻟﻨﻈﺎﻡ ﺻﻐﺮﻱ‬

‫ﺍﻟﻤﺘﺤﻜﻡ ﺍﻟﺼﻐﺭﻱ ‪ Microcontroller‬ﻋﺒﺎﺭﺓ ﻋﻥ ﺤﺎﺴﻭﺏ ﻋﻠﻰ ﺭﻗﺎﻗﺔ ﻭﺍﺤـﺩﺓ‪ ،‬ﺘﺤﺘـﻭﻱ ﺍﻟﺭﻗﺎﻗـﺔ‬


‫ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ‪ CPU‬ﻜﻤﻴﺔ ﺜﺎﺒﺘﺔ ﻤـﻥ ﺍﻟـﺫﺍﻜﺭﺓ ‪ ROM‬ﻭ ‪ RAM‬ﻭﺒﻭﺍﺒـﺎﺕ‬
‫ﺩﺨل‪/‬ﺨﺭﺝ‪ ،‬ﻤﻤﺎ ﻴﺠﻌﻠﻪ ﻤﺜﺎﻟﻴﹰﺎ ﻟﻠﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﺘﻜﻭﻥ ﻓﻴﻬﺎ ﺍﻟﻜﻠﻔﺔ ﻭﺍﻟﻤﺴﺎﺤﺔ ﺫﺍﺕ ﺃﻫﻤﻴﺔ ﺨﺎﺼﺔ‪ ،‬ﻤﺜل‬
‫ﻨﻅﺎﻡ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﺘﻠﻔﺎﺯ ﻋﻥ ﺒﻌﺩ‪ ،‬ﻓﺈﻥ ﻫﺫﺍ ﺍﻟﺘﻁﺒﻴﻕ ﻻ ﻴﺤﺘﺎﺝ ﺇﻟﻰ ﻗﻭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪!486‬‬

‫ﺒﻌﺽ ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺘﻀﻤﻨﺔ‬


‫ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ‬

‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﺘﺤﻜﻡ ﺍﻟﺼﻐﺭﻱ ﻋﻠﻰ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺩﺍﺭﺍﺕ ﻨﺫﻜﺭ ﻤﻨﻬﺎ‪:‬‬


‫‪ -‬ﻭﺤﺩﺓ ﻤﻌﺎﻟﺠﺔ ﻤﺭﻜﺯﻴﺔ‪ ،‬ﺘﺘﺭﺍﻭﺡ ﺒﻴﻥ ﺍﻟﺼﻐﻴﺭﺓ ‪ 4-bit‬ﺇﻟﻰ ﺍﻟﻤﺘﻁﻭﺭﺓ ‪ 32-bit‬ﺃﻭ ‪.64-bit‬‬
‫‪ -‬ﻭﺤﺩﺍﺕ ﺘﻭﺍﺠﻪ ‪ interface‬ﺩﺨل‪/‬ﺨﺭﺝ ﻤﺜل ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﺴﻠﺴﻠﻴﺔ ‪.serial ports‬‬

‫‪11‬‬
‫‪ -‬ﺩﺍﺭﺍﺕ ﻤﺤﻴﻁﻴﺔ ‪ peripherals‬ﻤﺜل ﺍﻟﻤﺅﻗﺘﺎﺕ ﻭﺩﺍﺭﺍﺕ ﺍﻟﻤﺭﺍﻗﺒـﺔ ‪watchdog circuits‬‬
‫ﻭﻤﺒﺩﻻﺕ ﺘﻤﺎﺜﻠﻴﺔ‪/‬ﺭﻗﻤﻴﺔ ‪.A/D‬‬
‫‪ -‬ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ‪.RAM‬‬
‫‪ -‬ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ‪ EEPROM ،EPROM ،ROM‬ﺃﻭ ﺫﺍﻜﺭﺓ ﺴﺭﻴﻌﺔ ‪.Flash memory‬‬
‫‪ -‬ﻤﻭﻟﺩ ﺴﺎﻋﺔ ‪.clock generator‬‬

‫ﺇﻥ ﻭﻀﻊ ﺠﻤﻴﻊ ﻫﺫﻩ ﺍﻟﻤﻜﻭﻨﺎﺕ ﻀﻤﻥ ﺩﺍﺭﺓ ﻤﺘﻜﺎﻤﻠﺔ ﻭﺍﺤﺩﺓ ‪ IC‬ﻴﻘﻠل ﻜﺜﻴﺭﹰﺍ ﻤﻥ ﻋﺩﺩ ﺍﻟﺭﻗﺎﻗﺎﺕ ﻭﻜﻤﻴﺔ‬
‫ﺍﻷﺴﻼﻙ ﻭﻤﺴﺎﺤﺔ ﺍﻟﺩﺍﺭﺓ ﺍﻟﻤﻁﺒﻭﻋﺔ ﺍﻟﻼﺯﻤﻴﻥ ﻟﺒﻨﺎﺀ ﺍﻟﻨﻅﺎﻡ‪ ،‬ﻤﻘﺎﺭﻨﺔ ﺒﺎﻟﻨﻅﻡ ﺍﻟﻤﺒﻨﻴﺔ ﺤـﻭل ﺍﻟﻤﻌـﺎﻟﺞ‬
‫ﺍﻟﺼﻐﺭﻱ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﺭﻗﺎﻗﺎﺕ ﻤﻨﻔﺼﻠﺔ ﺨﺎﺭﺠﻴﺔ ﻟﻜل ﻤﻜﻭﻥ ﻤﻥ ﻤﻜﻭﻨﺎﺕ ﺍﻟﻨﻅـﺎﻡ‪ .‬ﻭﻫـﺫﺍ ﻴﺠﻌـل‬
‫ﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﻤﻨﺎﺴﺒﺔ ﻟﻠﻨﻅﻡ ﺍﻟﻤﻀﻤ‪‬ﻨﺔ ‪ embedded systems‬ﻤﻨﺫ ﻨـﺸﺄﺘﻬﺎ ﺍﻷﻭﻟـﻰ ﻓـﻲ‬
‫ﺍﻟﺴﺒﻌﻴﻨﺎﺕ‪ .‬ﹸﺘﺴﺘﺨﺩﻡ ﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﺍﻟﻴﻭﻡ ﻓﻲ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻜﻬﺭﺒﺎﺌﻴﺔ ﺍﻟﻤﻨﺯﻟﻴـﺔ )ﻤﺜـل‪ :‬ﺁﻻﺕ‬
‫ﺍﻟﻐﺴﻴل ﻭﺃﻓﺭﺍﻥ ﻤﻴﻜﺭﻭﻴﻑ ﻭﺍﻟﻬﻭﺍﺘﻑ(‪ ،‬ﻭﺍﻟﺒﻁﺎﻗﺎﺕ ﺍﻟﺫﻜﻴﺔ ‪ Smart cards‬ﻭﻓﻲ ﺍﻟﺴﻴﺎﺭﺍﺕ )ﺘﺤﺘـﻭﻱ‬
‫ﺴﻴﺎﺭﺓ ﻤﺭﺴﻴﺩﺱ ﻤﻭﺩﻴل ‪ 1999‬ﻤﻥ ﻓﺌﺔ ‪ S‬ﻋﻠﻰ ‪ 63‬ﻤﺘﺤﻜﻡ ﻭﺴﻴﺎﺭﺓ ‪ BMW‬ﻤﻭﺩﻴل ‪ 1999‬ﻋﻠﻰ ‪65‬‬
‫ﻤﺘﺤﻜﻡ!(‪.‬‬
‫ﺘﺘﺠﻪ ﺍﻟﻤﺘﺤﻜﻤﺎﺕ ﺍﻟﻴﻭﻡ ﺇﻟﻰ ﺍﺴﺘﺨﺩﺍﻡ ﺒﻨﻴﺎﻥ ﻫﺎﺭﭭﺭﺩ ﻭﺒﻨﻴﺎﻥ ‪ RISC‬ﻓﻲ ﺘﺼﻤﻴﻤﻬﺎ‪ ،‬ﻤﺜﺎل ﻋﻠـﻰ ﺫﻟـﻙ‬
‫ﻋﺎﺌﻠﺔ ‪ AVR‬ﻭ ‪.PIC‬‬
‫ﻤﻥ ﺍﻟﺸﺭﻜﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ ﻟﻠﻤﺘﺤﻜﻤﺎﺕ ﻨﺫﻜﺭ‪،Intel ،Dallas Semiconductor ،Atmel ،Altera :‬‬
‫‪،NEC ،National‬‬ ‫‪Semiconductor ،Microchip‬‬ ‫‪Technology‬‬
‫‪.ZiLOG ،Texas Instruments ،Philips Semiconductors‬‬

‫‪PIC‬‬ ‫ﺍﳌﺘﺤﻜﻢ ‪ 18F8720‬ﻣﻦ ﺷﺮﻛﺔ‬

‫‪12‬‬
‫ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ ‪Digital Signal Processor‬‬

‫ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ ‪ DSP‬ﻫﻲ ﻤﻌﺎﻟﺠﺎﺕ ﺼﻐﺭﻴﺔ ﻤﺘﺨﺼﺼﺔ‪ ،‬ﻤـﺼﻤﻤﺔ ﺨﺼﻴـﺼﹰﺎ ﻟﺘﻨﻔﻴـﺫ‬
‫‪‬ﻤﻌَﺎﹶﻟﺠَﺎﺕ ﺭﻗﻤﻴﺔ ‪ .digital processing‬ﺘﺄﺨﺫ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺭﻗﻤﻴﺔ ﻤﻥ ﺨﺭﺝ ﺍﻟﻤﺒـﺩل‬
‫ﺍﻟﺘﻤﺎﺜﻠﻲ ﺍﻟﺭﻗﻤﻲ ‪ A/D‬ﻭﺘﹸﺨﺭﺝ ﻤﻌﻁﻴﺎﺕ ﺭﻗﻤﻴﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺒﺩل ﺍﻟﺭﻗﻤﻲ ﺍﻟﺘﻤﺎﺜﻠﻲ ‪ ،D/A‬ﺒﻌـﺩ ﺇﺠـﺭﺍﺀ‬
‫ﺒﻌﺽ ﺍﻟ ‪‬ﻤﻌَﺎﹶﻟﺠَﺎﺕ ﺍﻟﺭﻗﻤﻴﺔ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﻴ‪‬ﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺇﺸﺎﺭﺓ ﺩﺨل ﺍﻟﻤﺒـﺩل ‪ A/D‬ﺇﺸـﺎﺭﺓ‬
‫ﺼﻭﺕ ﺃﻭ ﻓﻴﺩﻴﻭ ﺃﻭ ﺇﺸﺎﺭﺍﺕ ﺍﺘﺼﺎﻻﺕ ﺃﻭ ﻏﻴﺭ ﺫﻟﻙ‪ .‬ﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻓﻲ ﺍﻟﺘﻁﺒﻴﻘـﺎﺕ ﻤﺜـل‬
‫ﺘﻌﺭﻑ ﺍﻟﻜﻼﻡ ﻭﻀﻐﻁ ﺍﻟﻜﻼﻡ ﺍﻟﺭﻗﻤﻲ ﻭﻀﻐﻁ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ ﻭﻓﻲ ﺘﻌﺩﻴل ﻭﻓﻙ ﺘﻌﺩﻴل ﺍﻹﺸـﺎﺭﺍﺕ‬
‫ﻼ ﻴ‪‬ﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ‪ TMS320C54xx‬ﻓﻲ ﺃﺠﻬﺯﺓ ﺍﻟﻬﻭﺍﺘﻑ ﺍﻟﻨﻘﺎﻟﺔ ﻨﻅـﺭﹰﺍ‬
‫ﻓﻲ ﻨﻅﻡ ﺍﻻﺘﺼﺎﻻﺕ‪ .‬ﻓﻤﺜ ﹰ‬
‫ﻟﻘﻭﺘﻬﺎ ﻭﺍﺴﺘﻬﻼﻜﻬﺎ ﺍﻟﻘﻠﻴل ﻟﻠﻁﺎﻗﺔ‪.‬‬

‫‪11001110‬‬ ‫‪11001000‬‬
‫‪DSP‬‬
‫ﺇﺷﺎﺭﺓ‬ ‫ﻣﻌﺎﳉﺔ ﺭﻗﻤﻴﺔ‬ ‫ﺇﺷﺎﺭﺓ‬
‫ﻣﺪﺧﻞ ﲤﺎﺛﻠﻴﺔ‬ ‫‪A/D‬‬
‫ﻟﻠﻤﻌﻄﻴﺎﺕ‬
‫‪D/A‬‬ ‫ﳐﺮﺝ ﲤﺎﺛﻠﻴﺔ‬

‫ﺘﺴﺘﺨﺩﻡ ‪ DSP‬ﺒﻨﻴﺎﻥ ﻫﺎﺭﻓﺭﺩ ﻓﻲ ﺘﺼﻤﻴﻤﻬﺎ‪ ،‬ﺃﻱ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻨﻔﺼﻠﺔ ﻋﻥ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻜﻤﺎ‬
‫ﺘﻁﺒﻕ ﻤﺒﺩﺃ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﺘﻭﺍﺭﺩﻴﺔ ﻤﻥ ﺃﺠل ﺘﺴﺭﻴﻊ ﺘﻨﻔﻴﺫ ﺍﻟﻌﻤﻠﻴﺎﺕ‪ ،‬ﻭﻫﻲ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﻋﺩﺓ ﻋﻤﻠﻴﺎﺕ‬
‫ﺤﺴﺎﺒﻴﺔ ﻋﻠﻰ ﺍﻟﺘﻔﺭﻉ ﻷﻥ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﺘﺘﻜﻭﻥ ﻋﺎﺩ ﹰﺓ ﻤﻥ ﻀﺎﺭﺏ ﻭﻭﺤﺩﺓ ﺤـﺴﺎﺏ ﻤﻨﻁﻘﻴـﺔ ﻭﺩﺍﺭﺍﺕ‬
‫ﻟﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺯﺍﺤﺔ‪ .‬ﺇﻥ ﺒﻨﻴﺎﻥ ﺒﻌﺽ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻤﻭﺠﻪ ﺃﻜﺜﺭ ﻨﺤﻭ ﺘﻨﻔﻴﺫ ‪‬ﻤﻌَﺎﹶﻟﺠَﺎﺕ ﺭﻗﻤﻴﺔ ﻤﺤﺩﺩﺓ‪،‬‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﹶﺘﻀِﻡ ﺘﻌﻠﻴﻤﺎﺕ ﺨﺎﺼﺔ ﹸﺘﺴﱢﺭﻉ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪.‬‬

‫ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﻤﻄﻴﺔ ﳌﻌﺎﰿ ﺇﺷﺎﺭﺓ ﺭﻗﻤﻲ‬


‫‪13‬‬
‫ﻴﻤﻜﻥ ﺍﻟﺘﻤﻴﻴﺯ ﺒﻴﻥ ﻨﻭﻋﻴﻥ ﻤﻥ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ‪ :‬ﻤﻌﺎﻟﺠﺎﺕ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤـﺔ ﻭﻤﻌﺎﻟﺠـﺎﺕ‬
‫ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﺜﺎﺒﺘﺔ‪ .‬ﺘﺤﺘﺎﺝ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﺘﺠﺭﻱ ﺤﺴﺎﺒﺎﺕ ﻋﻠﻤﻴﺔ ﺇﻟﻰ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺒﺎﻟﻔﺎﺼـﻠﺔ‬
‫ﺍﻟﻌﺎﺌﻤﺔ‪ ،‬ﺒﻴﻨﻤﺎ ﻨﺠﺩ ﺃﻥ ﺃﻏﻠﺏ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﻻ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﻗﻭﺓ ﺍﻟﺤﺴﺎﺏ ﺒﺎﻟﻔﺎﺼـﻠﺔ ﺍﻟﻌﺎﺌﻤـﺔ ﻭﺒﺎﻟﺘـﺎﻟﻲ‬
‫ﺘﺴﺘﺨﺩﻡ ﻤﻌﺎﻟﺠﺎﺕ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﺜﺎﺒﺘﺔ ﻤﺴﺘﻔﻴﺩﺓ ﻤﻥ ﺴﺭﻋﺔ ﻤﻌﺎﻟﺠﺘﻬﺎ ﺍﻷﻋﻠﻰ‪ .‬ﺘﻘﺎﺱ ﺴﺭﻋﺔ ﺍﻟﻤﻌﺎﻟﺠـﺎﺕ‬
‫ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﺜﺎﺒﺘﺔ ﺒﺎﻟـ ‪6 MIPS‬ﻋﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﺎﺩﺭﺓ ﻋﻠﻰ ﺘﻨﻔﻴﺫﻫﺎ ﻓﻲ ﺍﻟﺜﺎﻨﻴﺔ‪ ،‬ﺒﻴﻨﻤﺎ ﺘﻘﺎﺱ ﺴـﺭﻋﺔ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺒﺎﻟـ ‪.7MFLOPS‬‬
‫ﹸﺘﻌﺘﺒﺭ ﺸﺭﻜﺔ ‪ Texas instrument‬ﺭﺍﺌﺩﺓ ﻓﻲ ﺼﻨﺎﻋﺔ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ‪ ،‬ﻭﻤﻥ ﻤﻌﺎﻟﺠﺎﺘﻬـﺎ‬
‫ﺍﻟﺤﺩﻴﺜﺔ ﻨﺫﻜﺭ ﺍﻟﻌﺎﺌﻠﺔ ‪ TMS320c54xx‬ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﺜﺎﺒﺘـﺔ ﻭﺍﻟﻌﺎﺌﻠـﺔ ‪ TMS320c67xx‬ﺒﺎﻟﻔﺎﺼـﻠﺔ‬
‫ﺍﻟﻌﺎﺌﻤﺔ‪ .‬ﻜﻤﺎ ﺘﻨﺘﺞ ﺸﺭﻜﺎﺕ ﺃﺨﺭﻯ ﻤﺜل ‪ Motorola‬ﻭ ‪ Analog Devices‬ﻤﻌﺎﻟﺠﺎﺕ ﺭﻗﻤﻴﺔ ﺃﻴﻀﹰﺎ‪.‬‬
‫ﺘﺘﺒﻨﻰ ﺒﻌﺽ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﺒﻌﺽ ﺃﻓﻜﺎﺭ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ‪ ،‬ﻭﻴـﺸﺎﺭ‬
‫ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺒﺈﻀﺎﻓﺔ ﺍﻟﻼﺤﻘﺔ ‪ MMX‬ﺒﻌﺩ ﺍﺴﻤﻬﺎ‪ ،‬ﻤﺜل ﺍﻟﻤﻌﺎﻟﺞ ‪ Pentium MMX‬ﻤﻥ ‪.Intel‬‬

‫ﺘﻤﺎﺭﻴﻥ‬
‫ﺃﺠﺏ ﺒﺼﺢ ﺃﻭ ﺨﻁﺄ‬
‫ﻁﻭل ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 4004‬ﻴﺴﺎﻭﻱ ‪8-bit‬؟‬ ‫‪-1‬‬

‫ﻁﻭل ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8085‬ﻴﺴﺎﻭﻱ ‪16-bit‬؟‬ ‫‪-2‬‬

‫ﺇﻥ ﻋﺩﺩ ﺨﻁﻭﻁ ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻴﺴﺎﻭﻱ ﺩﻭﻤـﹰﺎ ﻋـﺩﺩ ﺨﻁـﻭﻁ ﻤـﺴﺭﻯ‬ ‫‪-3‬‬

‫ﺍﻟﻤﻌﻁﻴﺎﺕ؟‬
‫ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻴﺴﺎﻭﻱ ‪32-bit‬؟‬ ‫‪-4‬‬

‫ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪ CISC‬ﺃﻜﺜﺭ ﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪RISC‬؟‬ ‫‪-5‬‬

‫ﻻ ﻴﺴﻤﺢ ﺒﻨﻴﺎﻥ ‪ CISC‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺎﺕ ﻟﻬﺎ ﺃﻁﻭﺍل ﻤﺨﺘﻠﻔﺔ؟‬ ‫‪-6‬‬

‫ﻻ ﻴﺴﻤﺢ ﺍﻟﺒﻨﻴﺎﻥ ‪ RISC‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﻨﻤﺎﻁ ﻋﻨﻭﻨﺔ ﻤﻌﻘﺩﺓ؟‬ ‫‪-7‬‬

‫ﻜﻠﻔﺔ ﻤﻌﺎﻟﺠﺎﺕ ‪ RISC‬ﻋﺎﺩﺓ ﺃﻗل ﻤﻥ ﻜﻠﻔﺔ ﻤﻌﺎﻟﺠﺎﺕ ‪CISC‬؟‬ ‫‪-8‬‬

‫ﺯﻤﻥ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ‪ CISC‬ﺜﺎﺒﺕ؟‬ ‫‪-9‬‬

‫‪ 6‬ﻣﺨﺘﺼﺮ‪،Million Instruction Per Second :‬ﻣﻠﻴﻮن ﺗﻌﻠﻴﻤﺔ ﻓﻲ اﻟﺜﺎﻧﻴﺔ‬


‫‪ 7‬ﳐﺘﺼﺮ‪،Million Floating-Point Operations Per Second :‬ﻣﻠﻴﻮﻥ ﻋﻤﻠﻴﺔ ﻓﺎﺻﻠﺔ ﻋﺎﺋﻤﺔ ﰲ ﺍﻟﺜﺎﻧﻴﺔ‬

‫‪14‬‬
‫ﻴﺴﺘﺨﺩﻡ ﺒﻨﻴﺎﻥ ﭭﻭﻥ ﻨﻭﻤﺎﻥ ﻤﺴﺭﻴﻴﻥ ﻤﺴﺘﻘﻠﻴﻥ ﻟﻜل ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴـﺎﺕ‬ ‫‪-10‬‬

‫ﺍﻟﻤﺅﻗﺘﺔ؟‬
‫ﻴﺠﺭﻱ ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺅﻗﺘﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪ROM‬؟‬ ‫‪-11‬‬

‫ﺍﻟﺫﺍﻜﺭﺓ ‪ RAM‬ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ؟‬ ‫‪-12‬‬

‫ﻴﺴﻤﺢ ﺒﻨﻴﺎﻥ ﻫﺎﺭﭭﺭﺩ ﺒﺘﻨﻔﻴﺫ ﺃﻜﺜﺭ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺒﺂﻥ ﻭﺍﺤﺩ؟‬ ‫‪-13‬‬

‫ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺼﻐﺭﻴﺔ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺫﺍﻜﺭﺓ ‪ROM‬؟‬ ‫‪-14‬‬

‫ﺍﻟﻤﺘﺤﻜﻡ ﺍﻟﺼﻐﺭﻱ ﻻ ﻴﺤﺘﻭﻱ ﻋﺎﺩﺓ ﻋﻠﻰ ﺫﺍﻜﺭﺓ ‪RAM‬؟‬ ‫‪-15‬‬

‫ﺘﺴﺘﺨﺩﻡ ﺍﻟﻤﺘﺤﻜﻤﺎﺕ ‪ AVR‬ﺒﻨﻴﺎﻥ ﻫﺎﺭﭭﺭﺩ؟‬ ‫‪-16‬‬

‫ﺘﺴﺘﺨﺩﻡ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ ﻋﺎﺩﺓ ﺒﻨﻴﺎﻥ ﭭﻭﻥ ﻨﻭﻤﺎﻥ؟‬ ‫‪-17‬‬

‫ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺴ‪‬ﻠﻤﻴﺔ ﺍﻟﻔﺎﺌﻘﺔ ﺘﻨﻔﻴﺫ ﺃﻜﺜﺭ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﺘﻔﺭﻉ؟‬ ‫‪-18‬‬

‫ﺘﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺴ‪‬ﻠﻤﻴﺔ ﺍﻟﻔﺎﺌﻘﺔ ﻋﻠﻰ ﻋﺩﺓ ﻭﺤﺩﺍﺕ ﺤﺴﺎﺒﻴﺔ ﻭﻤﻨﻁﻘﻴﺔ ‪ ALU‬ﺘﻌﻤل ﻤﻌـﹰﺎ‬ ‫‪-19‬‬

‫ﻋﻠﻰ ﺍﻟﺘﺴﻠﺴل؟‬
‫ﺘﻌﺘﺒﺭ ﻤﻌﺎﻟﺠﺎﺕ ﺒﻨﺘﻴﻭﻡ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺴ‪‬ﻠﻤﻴﺔ ﺍﻟﻔﺎﺌﻘﺔ؟‬ ‫‪-20‬‬

‫ﻴﺠﺏ ﺇﻓﺭﺍﻍ ﻗﻨﺎﺓ ﺍﻟﻤﻭﺍﺭﺩﺓ ﺜﻡ ﻤﻠﺅﻫﺎ ﻤﺠﺩﺩﹰﺍ ﺒﻌﺩ ﺇﻨﺠﺎﺯ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺯ؟‬ ‫‪-21‬‬

‫ﹸﺘ ﹶﻨ ِﻔﺫ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺴﻠﻤﻴﺔ ﺃﻜﺜﺭ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺒﺂﻥ ﻭﺍﺤﺩ؟‬ ‫‪-22‬‬

‫ﺘﻘﺎﺱ ﺴﺭﻋﺔ ﻤﻌﺎﻟﺠﺎﺕ ﺍﻹﺸﺎﺭﺓ ﺍﻟﺭﻗﻤﻴﺔ ﺒﺎﻟﻔﺎﺼﻠﺔ ﺍﻟﻌﺎﺌﻤﺔ ﺒـ ‪MIPS‬؟‬ ‫‪-23‬‬

‫‪15‬‬
‫ﺒﻨﻴﺎﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﺍﻟﻬﺩﻑ ﻤﻥ ﻫﺫﺍ ﺍﻟﻔﺼل‬


‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ‪8088/8086‬‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻁﺭﻴﻘﺔ ﺘﻨﻅﻴﻡ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻤﻔﻬﻭﻡ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻭﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻋﻤل ﺍﻟﻤﻜﺩﺱ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻁﺭﻴﻘﺔ ﺘﻨﻅﻴﻡ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻁﺭﻕ ﻋﻨﻭﻨﺔ ﻤﻌﺎﻤﻼﺕ ﺫﺍﻜﺭﺓ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻁﺭﻕ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺘﻨﻅﻴﻡ ﺫﺍﻜﺭﺓ ﺃﻭل ﺤﺎﺴﻭﺏ ﺸﺨﺼﻲ‬

‫‪1‬‬
‫ﺘﻤﻬﻴﺩ‬
‫ﻴﻌﺘﺒﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺼﻐﺭﻱ ‪ 8086‬ﺃﻭل ﻤﻌﺎﻟﺞ ‪ 16-bit‬ﻤﻥ ‪ ،Intel‬ﻭﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﺘﻁـﻭﻴﺭ ﻟﻠﻤﻌـﺎﻟﺞ‬
‫‪ 8080/8085‬ﻤﻥ ‪ Intel‬ﺩﻭﻥ ﺃﻥ ﻴﻜﻭﻥ ﻤﺘﻭﺍﻓﻘﹰﺎ ﻤﻌﻪ‪ .‬ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻋﻠﻰ ‪ 20‬ﺨﻁ ﻋﻨﻭﻨﺔ‪،‬‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﻬﻭ ﻗﺎﺩﺭ ﻋﻠﻰ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺒﺤﺠﻡ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ‪ ،‬ﺒﻴﻨﻤﺎ ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8085‬ﻓﻘﻁ ‪ 16‬ﺨﻁ‬
‫ﻋﻨﻭﻨﺔ‪ .‬ﻤﻥ ﺠﻬﺔ ﺃﺨﺭﻯ‪ ،‬ﻓﺈﻥ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﻜﺫﻟﻙ ﻋﺭﺽ ﻜﻠﻤﺔ ﺍﻟﻤﺭﺍﻜﻡ ﻓـﻲ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ 8086‬ﻴﺴﺎﻭﻱ ‪ 16‬ﺒﻴﻨﻤﺎ ﻫﻲ ‪ 8‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ .8085‬ﻴﺴﻤﺢ ﺯﻴﺎﺩﺓ ﻁﻭل ﺍﻟﻤﺭﺍﻜﻡ ﺇﻟﻰ ‪ 16‬ﺒﻤﻌﺎﻟﺠـﺔ‬
‫ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 2-byte‬ﺩﻓﻌﺔ ﻭﺍﺤﺩﺓ‪.‬‬
‫ﺘﺘﻀﻤﻥ ﻋﺎﺌﻠﺔ ‪ x86‬ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺒـ ‪ 8086 :16-bit‬ﻭ ‪ .8088‬ﻭﻴﻜﻤﻥ ﺍﻟﻔﺭﻕ ﺍﻟـﺭﺌﻴﺱ‬
‫ﺒﻴﻨﻬﻤﺎ ﻓﻲ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ ﺤﻴﺙ ﺘﺴﺎﻭﻱ ‪ 8‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088‬ﻭﻟﺫﻟﻙ ﻴﺤﺘﺎﺝ ﻫﺫﺍ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟﻰ ﻋﻤﻠﻴﺘﻲ ﻭﺼﻭل ﻟﻠﺫﺍﻜﺭﺓ ﻤﻥ ﺃﺠل ﻗﺭﺍﺀﺓ ﺃﻭ ﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺒـ ‪ 16‬ﺒﺕ‪.‬‬
‫ﺒﺩﺍﻴ ﹰﺔ‪ ،‬ﻅﻬﺭ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8086‬ﻭﻟﻜﻥ ﻨﻅﺭﹰﺍ ﻟﻜﻭﻥ ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ )ﺫﻭﺍﻜﺭ ﻭﻏﻴﺭﻫﺎ(‪ ،‬ﺍﻟﺘﻲ ﻜﺎﻨـﺕ‬
‫ﻤﺘﻭﺍﻓﺭﺓ ﺤﻴﻨﺫﺍﻙ ﻓﻲ ﺍﻷﺴﻭﺍﻕ‪ ،‬ﻤﺼﻤﻤﺔ ﻟﺘﻌﻤل ﻤﻊ ﻤﻌﺎﻟﺠﺎﺕ ‪8-bit‬؛ ﻓﻘﺩ ﺃﻨﺘﺠﺕ ‪ Intel‬ﺇﺼﺩﺍﺭﹰﺍ ‪‬ﻤ ‪‬ﻌ ‪‬ﺩ ﹰ‬
‫ﻻ‬
‫ﻋﻥ ‪ 8086‬ﻭﻫﻭ ‪ ،8088‬ﺍﺴ ﹸﺘﺨﺩﻡ ﻓﻲ ﺘﺼﻤﻴﻡ ﺃﻭل ﺤﺎﺴﻭﺏ ﺸﺨﺼﻲ‪.‬‬

‫ﺍﻟﺒﻨﻴﺔ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﻤﻥ ﺍﻟﻀﺭﻭﺭﻱ ﻤﻌﺭﻓﺔ ﺍﻟﺒﻨﻴﺎﻥ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻷﻱ ﻤﻌﺎﻟﺞ ﻗﺒل ﺍﻟﺒﺩﺀ ﺒﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺞ ﺒﻠﻐﺔ ﺍﻵﻟﺔ ﺃﻭ‬
‫ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ ،‬ﻟﻜﻭﻥ ﻫﺫﻩ ﺍﻟﻠﻐﺎﺕ ﺘﺘﻌﺎﻤل ﻤﺒﺎﺸﺭﺓ ﻤﻊ ﺍﻟﺒﻨﻴﺎﻥ ﺍﻟﺩﺍﺨﻠﻲ ﻟﻠﻤﻌﺎﻟﺞ‪.‬‬
‫ﺘﺘﻜﻭﻥ ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻤﻥ ﻭﺤﺩﺘﻴﻥ ﺃﺴﺎﺴﻴﺘﻴﻥ ﺘﻌﻤﻼﻥ ﻋﻠﻰ ﻨﺤـﻭ‬
‫ﻤﺴﺘﻘل‪ ،‬ﻭﻫﻤﺎ‪ :‬ﻭﺤـﺩﺓ ﺍﻟﺘﻭﺍﺠـﻪ ﻤـﻊ ﺍﻟﻤـﺴﺭﻯ ‪ (Bus Interface Unit) BIU‬ﻭﻭﺤـﺩﺓ ﺍﻟﺘﻨﻔﻴـﺫ‬
‫‪.(Execution Unit) EU‬‬

‫‪2‬‬
‫ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﻤﻊ ﺍﻟﻤﺴﺭﻯ‬
‫ﺘﺘﺼل ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ ﻤﻊ ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ ﻟﻠﻤﻌﺎﻟﺞ )ﺫﻭﺍﻜﺭ ﻭﺒﻭﺍﺒﺎﺕ( ﻋﺒﺭ ﻤﺴﺭﻯ ﺍﻟﻨﻅـﺎﻡ ) ﻭﻫـﻭ‬
‫ﺍﻟﻤﺴﺭﻯ ﺍﻟﺫﻱ ﻴﺭﺒﻁ ﺠﻤﻴﻊ ﺩﺍﺭﺍﺕ ﺍﻟﻨﻅﺎﻡ ﻤﻥ ﻤﻌﺎﻟﺞ ﻭﺫﻭﺍﻜﺭ ﻭﺒﻭﺍﺒﺎﺕ ﻭﻏﻴﺭﻫﺎ( ‪ ،‬ﻭﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ‬
‫ﺍﻟﻤﻬﺎﻡ ﺍﻟﺭﺌﻴﺴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ƒ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﻤﻌﻁﻴﺎﺕ‬
‫ƒ ﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‬
‫ƒ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ ﻭﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ‬
‫ƒ ﺘﻭﻟﻴﺩ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ﻟﻌﻤﻠﻴﺎﺕ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ‬

‫ﻭﺘﻀﻡ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﻤﻊ ﺍﻟﻤﺴﺭﻯ ﺍﻟﺩﺍﺭﺍﺕ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪3‬‬
‫ﺭﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪instruction queue‬‬ ‫ƒ‬
‫ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ‪segment registers‬‬ ‫ƒ‬
‫ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ )‪Instruction Pointer (IP‬‬ ‫ƒ‬
‫ﺩﺍﺭﺓ ﺘﻭﻟﻴﺩ ﺍﻟﻌﻨﺎﻭﻴﻥ ‪address generation circuitry‬‬ ‫ƒ‬
‫ﺩﺍﺭﺍﺕ ﺘﻭﻟﻴﺩ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﺴﺭﻯ ‪bus control circuitry‬‬ ‫ƒ‬

‫ﺭﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪:‬‬

‫ﻴﺴﻤﺢ ﺭﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﺯﻴﺎﺩﺓ ﺴﺭﻋﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﺍﻤﺞ‪ ،‬ﻓﺒﻴﻨﻤﺎ ﺘﻜﻭﻥ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴـﺫ ﻤـﺸﻐﻭﻟﺔ ﻓـﻲ‬
‫ﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺘﻌﻤل ‪ BIU‬ﻋﻠﻰ ﺠﻠﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺠﺩﻴﺩﺓ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺘﻭﻀﻊ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ‬
‫ﻀﻤﻥ ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺫﺍﻜﺭﺓ ‪ RAM‬ﺩﺍﺨﻠﻴﺔ‪ ،‬ﹸﺘﺴﻤﻰ ﺭﺘل ﺩﻓﻕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﻴﻤﻜﻥ ﻟﻬﺫﺍ ﺍﻟﺭﺘل ﺘﺨﺯﻴﻥ‬
‫ﺃﺭﺒﻊ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻭﺨﺯﻥ ‪ 6‬ﺒﺎﻴﺘﺎﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪8086‬‬
‫ﻋﻠﻰ ﺍﻷﻜﺜﺭ‪.‬‬
‫ﻻ‬
‫ﻻ ﻴﺨـﺭﺝ ﺃﻭ ﹰ‬
‫ﹸﺘﻨﻔﺫ ‪ EU‬ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻘﺭﺅﻫﺎ ﻤﻥ ﺍﻟﺭﺘل‪ ،‬ﺍﻟﺫﻱ ﻴﻌﻤل ﺒﻁﺭﻴﻘـﺔ "ﺍﻟـﺩﺍﺨل ﺃﻭ ﹰ‬
‫‪ ."FIFO‬ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺒﺤﺙ ﻋﻨﻬﺎ ‪ EU‬ﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ﻤﺴﺒﻘﹰﺎ ﻓﻲ ﺍﻟﺭﺘـل ﻓﺈﻨﻬـﺎ‬
‫ﺘﻨﺘﻅﺭ ﺤﺘﻰ ﺘﻌﻤل ‪ BIU‬ﻋﻠﻰ ﺠﻠﺒﻬﺎ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻭﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺭﺘل‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﻴﺤـﺩﺙ ﺫﻟـﻙ‬
‫ﻼ‪:‬‬
‫ﻤﺜ ﹰ‬
‫ƒ ﻋﻨﺩﻤﺎ ﺘﺤﺘﺎﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ ﺇﻟﻰ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺍﻟﺭﺘل‪.‬‬
‫ƒ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻗﻔﺯ ﺃﻭ ﺍﺴﺘﺩﻋﺎﺀ ‪ ،JUMP/CALL‬ﺇﺫ ﻴﺠﺭﻱ ‪-‬ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪-‬‬
‫ﺇﻓﺭﺍﻍ ﻤﺤﺘﻭﻯ ﺍﻟﺭﺘل ﻭﺸﺤﻨﻪ ﻤﻥ ﺠﺩﻴﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﺒﺘﺩﺍ ‪‬ﺀ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻗﻔﺯﺕ ﺇﻟﻴـﻪ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ‪.‬‬

‫ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ‪Segment Registers‬‬

‫ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺘﺼل ﺴﻌﺘﻬﺎ ﺤﺘﻰ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴـﺕ‪ .‬ﻭﺘﺤﺘـل ﻫـﺫﻩ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺤﻘﻴﻘﺔ ﺃﻭ ﺍﻟﻔﻴﺯﻴﺎﺌﻴﺔ ﻤﻥ ‪ 00000h‬ﺤﺘﻰ ‪.FFFFFh‬‬
‫ﻨﺤﺘﺎﺝ ﻟﻌﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺒﺤﺠﻡ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ ﺇﻟﻰ ‪ 20‬ﺨﻁ ﻋﻨﻭﻨﺔ‪ ،‬ﻭﻟ ‪‬ﻤﺎ ﻜﺎﻥ ﻁﻭل ﺍﻟﺴﺠﻼﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ‬
‫ﻟﻠﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻫﻭ ‪ 16‬ﺒﺘﺎﹰ‪ ،‬ﻓﻘﺩ ﻗﺴﻤﺕ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺇﻟـﻰ ﻤﻘﺘﻁﻌـﺎﺕ‬
‫ﻤﻨﻁﻘﻴﺔ )ﺴﻭﻑ ﻨﺸﺭﺡ ﻤﻔﻬﻭﻡ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻭﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻗﺭﻴﺒﹰﺎ( ‪ logical segments‬ﻁـﻭل‬

‫‪4‬‬
‫ﻜل ﻤﻨﻬﺎ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ .‬ﺘﺤﺘﻭﻱ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﺃﺭﺒﻌﺔ ﺴـﺠﻼﺕ ﻤﻘﺘﻁﻌـﺎﺕ ‪ DS ،SS ،CS‬ﻭ‬
‫‪ ES‬ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 16‬ﺒﺕ‪ ،‬ﻭﻴ‪‬ﺅﺸﺭ ﻜل ﺴﺠل ﻋﻠﻰ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﻤﺤﺩﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﻼ ﻋﻠﻰ ‪ 20‬ﺒﺕ‪ ،‬ﺘﻘﻭﻡ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﺒﺈﺯﺍﺤـﺔ ﻤﺤﺘـﻭﻯ‬
‫ﻭﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻤﻤﺜ ﹰ‬
‫ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﻤ‪‬ﺴﺘﺨﺩﻡ ﺃﺭﺒﻊ ﺒﺘﺎﺕ ﻨﺤﻭ ﺍﻟﻴﺴﺎﺭ )ﻓﺘﺼﺒﺢ ﻗﻴﻤﺔ ﺍﻟﻌﻨﻭﺍﻥ ‪‬ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 20‬ﺒﺕ( ﺜﻡ‬
‫ﻴ‪‬ﻀﺎﻑ ﺇﻟﻴﻬﺎ ﻗﻴﻤﺔ ﺍﻨﺯﻴﺎﺡ ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 16‬ﺒﺕ‪ .‬ﻭﺒﺫﻟﻙ‪ ،‬ﻴﻤﻜﻥ ﻟﻠﻤﻘﺘﻁﻌﺎﺕ ﺃﻥ ﺘﺒﺩﺃ ﻤﻥ ﺃﻱ ﻤﻭﻗﻊ‬
‫ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺸﺭﻴﻁﺔ ﺃﻥ ﻴﻨﺘﻬﻲ ﻋﻨﻭﺍﻥ ﻫﺫﺍ ﺍﻟﻤﻭﻗﻊ ﺒﺄﺭﺒﻌﺔ ﺃﺼﻔﺎﺭ‪ .‬ﺘﺴﻤﺢ ﺒﻌﺽ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﺒﻘﺭﺍﺀﺓ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻭﺘﻐﻴﻴﺭ ﻤﺤﺘﻭﺍﻫﺎ‪ ،‬ﻤﻤﺎ ﻴ‪‬ﻤﻜﻨﻨﺎ ﻤﻥ ﻋﻨﻭﻨﺔ ﻜﺎﻤل ﻓﻀﺎﺀ ﺫﺍﻜـﺭﺓ ﺍﻟﻤﻌـﺎﻟﺞ‪.‬‬
‫ﺘﺤﺘﻭﻱ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﻋﻠﻰ ﺠﺎﻤﻊ ‪ adder‬ﻴﺴﺘﺨﺩﻡ ﺨﺼﻴﺼﹰﺎ ﻟﺘﺸﻜﻴل ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﺒﻁـﻭل‬
‫‪ 20‬ﺒﺕ‪.‬‬
‫‪15‬‬ ‫‪0‬‬
‫‪Code Segment‬‬ ‫‪CS‬‬ ‫ﻗﻄﺎﻉ ﺍﻟﱪﻧﺎﻣﺞ‬
‫‪Data segment‬‬
‫‪DS‬‬ ‫ﻗﻄﺎﻉ ﺍﳌﻌﻄﻴﺎﺕ‬
‫‪Stack Segment‬‬ ‫‪SS‬‬ ‫ﻗﻄﺎﻉ ﺍﳌﻜﺪﺱ‬
‫‪Extra Data Segment‬‬ ‫‪ES‬‬ ‫ﻗﻄﺎﻉ ﺍﳌﻌﻄﻴﺎﺕ‬

‫‪ CS‬ﺴﺠل ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪ :Code Segment‬ﻴ‪‬ﺅﺸﺭ ﻫﺫﺍ ﺍﻟﺴﺠل ﺇﻟـﻰ ﺒﺩﺍﻴـﺔ ﻤﻘﺘﻁـﻊ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻭﻴﺠﺏ ﺃﻥ ﺘﻘﻊ ﺠﻤﻴﻊ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻀﻤﻥ ﻫﺫﺍ ﺍﻟﻤﻘﺘﻁﻊ‪.‬‬
‫‪ SS‬ﺴﺠل ﻤﻘﺘﻁﻊ ﺍﻟﻤﻜﺩﺱ ‪ :Stack Segment‬ﻴ‪‬ﺅﺸﺭ ﻫﺫﺍ ﺍﻟﺴﺠل ﺇﻟـﻰ ﺒﺩﺍﻴـﺔ ﻤﻘﺘﻁـﻊ‬
‫ﺍﻟ ‪‬ﻤ ﹶﻜ ‪‬ﺩﺱ ﺍﻟﺤﺎﻟﻲ‪.‬‬
‫‪ DS‬ﺴﺠل ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ :Data Segment‬ﻴ‪‬ﺅﺸﺭ ﻫﺫﺍ ﺍﻟﺴﺠل ﺇﻟـﻰ ﺒﺩﺍﻴـﺔ ﻤﻘﺘﻁـﻊ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺤﺎﻟﻲ‪ ،‬ﺘﻘﻊ ﻤﻌﻅﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﺤﺘﺎﺠﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴـﺫﻩ ﻟﻠﺘﻌﻠﻴﻤـﺎﺕ‬
‫ﻀﻤﻥ ﻫﺫﺍ ﺍﻟﻤﻘﺘﻁﻊ‪.‬‬
‫‪ ES‬ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻹﻀﺎﻓﻲ ‪ :Extra Segment‬ﻴ‪‬ﺅﺸﺭ ﻫﺫﺍ ﺍﻟﺴﺠل ﺇﻟﻰ ﺒﺩﺍﻴـﺔ ﻤﻘﺘﻁـﻊ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻹﻀﺎﻓﻲ‪.‬‬

‫ﺴﺠل ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪IP‬‬


‫ﻴﺠﺭﻱ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺴﺠل ‪ IP‬ﻭﺴﺠل ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨـﺎﻤﺞ ‪.CS‬‬
‫ﻴﺠﺭﻱ ﺁﻟﻴﹰﺎ ﺯﻴﺎﺩﺓ ﻗﻴﻤﺔ ﺍﻟﺴﺠل ‪ IP‬ﺒﻭﺍﺤﺩ ﺃﻭ ﺃﻜﺜﺭ ﺒﻌﺩ ﻗﺭﺍﺀﺓ ﻜل ﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺫﻟﻙ ﻤـﻥ‬
‫ﺃﺠل ﻋﻨﻭﻨﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺴﺘﺠﻠﺏ ﺘﺎﻟﻴﹰﺎ‪.‬‬

‫‪5‬‬
‫ﺩﺍﺭﺍﺕ ﺘﻭﻟﻴﺩ ﺇﺸﺎﺭﺍﺕ ﺘﺤﻜﻡ ﺍﻟﻤﺴﺭﻯ‬
‫ﺘﻭﻟﺩ ﻫﺫﻩ ﺍﻟﺩﺍﺭﺍﺕ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻤﺴﺭﻯ ﻤﺜل ﺇﺸﺎﺭﺍﺕ ﺍﻟﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﻤﻥ‪/‬ﻓـﻲ ﺍﻟـﺫﺍﻜﺭﺓ‬
‫ﻭﺍﻟﺒﻭﺍﺒﺎﺕ‪.‬‬

‫ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ‬
‫ﺘﺤﻠل ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﻗﺎﻤﺕ ‪ BIU‬ﺒﺠﻠﺒﻬﺎ ﻤﺴﺒﻘﹰﺎ ﻭﺘﻨﻔﺫﻫﺎ‪ ،‬ﻭﻫﻲ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺍﻷﺠـﺯﺍﺀ‬
‫ﺍﻟﺭﺌﻴﺴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﺩﺍﺭﺍﺕ ﺘﻔﻜﻴﻙ ِﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ‪:‬‬
‫ﹸﺘﺘﺭﺠﻡ ﻫﺫﻩ ﺍﻟﺩﺍﺭﺍﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻌﺩ ﻗﺭﺍﺀﺘﻬﺎ ﻤﻥ ﺍﻟﺭﺘل ﺇﻟﻰ ﺴﻠﺴﻠﺔ ﺃﻓﻌﺎل ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫﻫﺎ ﻻﺤﻘﹰﺎ‬
‫ﻤﻥ ﻗﺒل ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ‪.‬‬
‫ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭﺍﻟﻤﻨﻁﻕ ‪:ALU‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﻭﺤﺩﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﺍﻷﺴﺎﺴﻴﺔ ﻤﺜل ﺍﻟﺠﻤﻊ ﻭﺍﻟﻁﺭﺡ ﻭﺍﻟﻌﻤﻠﻴـﺎﺕ ﺍﻟﻤﻨﻁﻘﻴـﺔ‬
‫ﺍﻟﺒﺴﻴﻁﺔ ﻤﺜل ‪ AND‬ﻭ ‪ OR‬ﻭﺍﻹﺯﺍﺤﺔ‪.‬‬
‫ﺴﺠﻼﺕ ﻋﺎﻤﺔ ‪:general registers‬‬
‫ﺘﺤﺘﻭﻱ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﻋﻠﻰ ‪ 8‬ﺴﺠﻼﺕ ﻋﺎﻤﺔ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 16‬ﺒﺕ ﻭﻫﻲ‪،CX ،BX ،AX :‬‬
‫‪ SI ،BP ،SP ،DX‬ﻭ ‪.DI‬‬
‫ﺇﻥ ﺍﻟﺴﺠﻼﺕ ‪ DX ،CX ،BX ،AX‬ﻫﻲ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ‪ ،‬ﻭﺘﹸﺴﺘﺨﺩﻡ ﻋﺎﺩﺓ ﻟﻠﺘﺨﺯﻴﻥ ﺍﻟﻤﺅﻗﺕ‬
‫ﻟﻠﻤﻌﻁﻴﺎﺕ ﺃﻭ ﻟﻠﻨﺘﺎﺌﺞ‪ .‬ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻟﺘﺨﺯﻴﻥ ﻤﻌﻁﻴﺎﺕ ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 16‬ﺒـﺕ‬
‫ﺃﻭ ﺘﻘﺴﻴﻡ ﻜل ﻤﻨﻬﺎ ﺇﻟﻰ ﺴﺠﻠﻴﻥ‪ :‬ﺃﻋﻠﻰ ﻭﺃﺩﻨﻰ ﻭﺨﺯﻥ ﻓﻲ ﻜل ﻤﻨﻬﺎ ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 8‬ﺒﺕ‪.‬‬
‫ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﻴﻤﻜﻥ ﺍﻋﺘﺒﺎﺭ ﺍﻟﺴﺠل ‪ DX‬ﺴﺠﻠﻴﻥ ﻜل ﻤﻨﻬﺎ ﺒﺜﻤـﺎﻨﻲ ﺒﺘـﺎﺕ ﻫﻤـﺎ ‪DH‬‬
‫)ﺍﻟﺒﺎﻴﺕ ﺍﻷﻋﻠﻰ ﻤﻥ ‪ (DX‬ﻭ ‪) DL‬ﺍﻟﺒﺎﻴﺕ ﺍﻷﺩﻨﻰ ﻤﻥ ‪.(DX‬‬
‫ﺃﻤﺎ ﺍﻟﺴﺠﻼﺕ ‪ SI ،BP ،SP‬ﻭ ‪ DI‬ﻓﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 16‬ﺒﺕ‪ ،‬ﻭﻻ ﻴﻤﻜﻥ ﺘﻘﺴﻴﻡ ﺃﻱ ﻤﻨﻬﺎ ﺇﻟﻰ‬
‫ﺴﺠﻠﻴﻥ‪.‬‬

‫‪6‬‬
‫‪AH‬‬ ‫‪AX‬‬ ‫‪AL‬‬ ‫اﻟﻤﺮاآﻢ‬

‫‪BH‬‬ ‫‪BX‬‬ ‫‪BL‬‬ ‫ﺳﺠﻞ اﻟﻘﺎﻋﺪة‬

‫‪CH CX‬‬ ‫‪CL‬‬ ‫ﺳﺠﻞ اﻟﻌﺪاد‬

‫‪DH‬‬ ‫‪DX‬‬ ‫‪DL‬‬ ‫ﺳﺠﻞ اﻟﻤﻜﺪس‬

‫‪SP‬‬ ‫ﺳﺠﻞ ﻣﺆﺷﺮ اﻟﻘﺎﻋﺪة‬


‫‪BP‬‬ ‫ﺳﺠﻞ دﻟﻴﻞ اﻟﻮﺟﻬﺔ‬
‫‪DI‬‬ ‫ﺳﺠﻞ دﻟﻴﻞ اﻟﻮﺟﻬﺔ‬
‫‪SI‬‬ ‫ﺳﺠﻞ دﻟﻴﻞ اﻟﻤﺼﺪر‬

‫‪IP‬‬ ‫ﻣﺆﺷﺮ اﻟﺘﻌﻠﻴﻤﺔ‬


‫‪FLAGS‬‬ ‫ﺳﺠﻞ اﻟﺮاﻳﺔ‬

‫‪ :AX‬ﻴﻘﻭﻡ ‪ AX‬ﺒﺩﻭﺭ ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻤﻌﺎﻤل ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 16‬ﺒـﺕ‪،‬‬
‫ﺒﻴﻨﻤﺎ ﻴﻘﻭﻡ ‪ AL‬ﺒﺩﻭﺭ ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺜﻤﺎﻨﻲ ﺒﺘﺎﺕ ﻓﻘﻁ‪.‬‬
‫‪ :BX‬ﺴﺠل ﺍﻟﻘﺎﻋﺩﺓ ‪ ،Base register‬ﻭﻫﻭ ﺴﺠل ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺎﻡ ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺴﺘﺨﺩﻡ ﻓـﻲ‬
‫ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﻲ ﻜﺫﻟﻙ ﻷﻥ ﺒﻌﺽ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﺜل ﺍﻹﺯﺍﺤـﺔ‬
‫ﺴﻤ ّ‬
‫‪ :CX‬ﺴﺠل ﺍﻟﻌﺩﺍﺩ ‪ ،Counter register‬ﻭ ‪‬‬
‫ﻭﺍﻟﺤﻠﻘﺎﺕ ﺘﺴﺘﺨﺩﻤﻪ ﻜﻌﺩﺍﺩ‪.‬‬
‫‪ :DX‬ﺴﺠل ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ ،Data register‬ﻭﺘﺴﺘﺨﺩﻡ‪ ،‬ﻀﻤﻨﻴﺎﹰ‪ ،‬ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺠﺩﺍﺀ ﻭﺍﻟﻘـﺴﻤﺔ‪،‬‬
‫ﻭﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﻏﻴﺭ ﺍﻟﻤﺒﺎﺸﺭﺓ ﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺨﺭﺝ‪.‬‬
‫‪ :SP‬ﺴﺠل ﻤﺅﺸﺭ ﺍﻟﻤﻜﺩﺱ ‪ ،Stack pointer‬ﻴﺴﺘﺨﺩﻡ ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻤﻜﺩﺱ‪ .‬ﻴﺤﺘﻭﻱ ‪ SP‬ﻤﻘﺩﺍﺭ ﺍﻻﻨﺯﻴﺎﺡ ﻋﻥ ﺒﺩﺍﻴﺔ ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴ‪‬ـﺸﻴﺭ ﺇﻟﻴـﻪ‬
‫ﺍﻟﺴﺠل ‪.SS‬‬
‫ﺘﺴﺘﺨﺩﻡ ﺍﻟﺴﺠﻼﺕ‪ BP :‬ﻤﺅﺸﺭ ﺍﻟﻘﺎﻋﺩﺓ ‪ Base pointer‬ﻭ ‪ SI‬ﺩﻟﻴل ﺍﻟﻤﺼﺩﺭ ‪ Source index‬ﻭ ‪DI‬‬
‫ﺩﻟﻴل ﺍﻟﻭﺠﻬﺔ‪ ،‬ﻋﻠﻰ ﻨﺤﻭ ﺭﺌﻴﺱ ﻓﻲ ﺘﺨﺯﻴﻥ ﻗﻴﻤﺔ ﺍﻨﺯﻴﺎﺡ ﻤﻭﻗﻊ ﻋﻥ ﺒﺩﺍﻴﺔ ﺃﺤﺩ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﺍﻟﺘﻲ ﻴ‪‬ﺸﻴﺭ‬
‫ﺇﻟﻴﻬﺎ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‪.‬‬

‫ﹸﺘﺴﺘﺨﺩﻡ ﺴﺠﻼﺕ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﻭﺍﻟﻤﻨﻁﻘﻴﺔ ﺍﻟﻤﺨﺘﻠﻔـﺔ‪ ،‬ﻜﻤـﺎ ﺘﹶـﺴﺘﺨﺩﻡ ﺒﻌـﺽ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻀﻤﻨﻴﹰﺎ ﺒﻌﺽ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻌﺎﻤﺔ ﻓﻲ ﺘﻨﺠﻴﺯﻴﻬﺎ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺠﺩﻭل‪:‬‬

‫ﺍﻟﻌﻤﻠﻴﺎﺕ‬ ‫ﺍﻟﺴﺠل‬
‫ﻀﺭﺏ ﻜﻠﻤﺔ‪ ،‬ﺘﻘﺴﻴﻡ ﻜﻠﻤﺔ‪ ،‬ﺇﺩﺨﺎل‪/‬ﺇﺨﺭﺍﺝ ﻜﻠﻤﺔ‬ ‫‪AX‬‬

‫ﻀﺭﺏ ﺒﺎﻴﺕ‪ ،‬ﺘﻘﺴﻴﻡ ﺒﺎﻴﺕ‪ ،‬ﺇﺩﺨﺎل‪/‬ﺇﺨﺭﺍﺝ ﺒﺎﻴﺕ‪ ،‬ﺍﻟﺤﺴﺎﺒﺎﺕ ﺍﻟﻌﺸﺭﻴﺔ‪.‬‬ ‫‪AL‬‬

‫ﻀﺭﺏ ﺒﺎﻴﺕ‪ ،‬ﺘﻘﺴﻴﻡ ﺒﺎﻴﺕ‬ ‫‪AH‬‬

‫‪7‬‬
‫ﺘﺨﺯﻴﻥ ﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﻌﻨﺎﻭﻴﻥ‬ ‫‪BX‬‬

‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‪ ،‬ﺍﻟﺤﻠﻘﺎﺕ‬ ‫‪CX‬‬

‫ﺇﺯﺍﺤﺔ ﻭﺩﻭﺭﺍﻥ ﻤﻌﻁﻴﺎﺕ‬ ‫‪CL‬‬

‫ﻀﺭﺏ ﻜﻠﻤﺔ‪ ،‬ﺘﻘﺴﻴﻡ ﻜﻠﻤﺔ‪ ،‬ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﻟﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬ ‫‪DX‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﻜﺩﺱ‬ ‫‪SP‬‬

‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‬ ‫‪SI‬‬

‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‬ ‫‪DI‬‬

‫ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﺃﻭ ﺍﻟﺤﺎﻟﺔ ‪Flag register‬‬


‫ﻴﺤﺘﻭﻱ ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ﺴﺘﺔ ﺭﺍﻴﺎﺕ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 1‬ﺒﺕ ﻫـﻲ‪،AF :‬‬
‫‪ PF ،SF ،OF ،CF‬ﻭ ‪ ،ZF‬ﺘﺘﻐﻴﺭ ﺤﺎﻟﺔ )ﻗﻴﻤﺔ( ﻜل ﻤﻨﻬﺎ ﺘﺒﻌﹰﺎ ﻟﻨﺎﺘﺞ ﺘﻨﻔﻴﺫ ﺒﻌﺽ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ‬
‫ﺃﻭ ﺍﻟﻤﻨﻁﻘﻴﺔ ﺍﻟﺤﺎﻟﻴﺔ‪ .‬ﻴﻭﻓﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻌﻠﻴﻤﺎﺕ ﺘﺴﻤﺢ ﺒﺘﻐﻴﻴﺭ ﺘﺘﺎﺒﻊ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺒﻌـﹰﺎ ﻟﺤﺎﻟـﺔ ﻫـﺫﻩ‬
‫ﺍﻟﺭﺍﻴﺎﺕ‪ ،‬ﻤﺜل ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،JZ new‬ﻭﺍﻟﺘﻲ ﺘﻌﻨﻲ ﺍﻗﻔﺯ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺫﻱ ﺍﻟِﻠﺼﺎﻗﺔ ‪ new‬ﺇﺫﺍ ﻜـﺎﻥ ﻨـﺎﺘﺞ‬
‫ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺤﺴﺎﺒﻴﺔ ﺃﻭ ﺍﻟﻤﻨﻁﻘﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ‪ .‬ﻴﺤﺘﻭﻱ ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﺃﻴﻀﹰﺎ ﻋﻠﻰ ﺜﻼﺙ ﺒﺘـﺎﺕ‬
‫ﺘﺤﻜﻡ ﻫﻲ‪ IF ،DF :‬ﻭ ‪ ،TF‬ﺘﺅﺜﺭ ﺤﺎﻟﺔ ﻫﺫﻩ ﺍﻟﺒﺘﺎﺕ ﻓﻲ ﺘﻨﻔﻴﺫ ﺒﻌﺽ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺃﻤﺎﻜﻥ ﺘﻭﻀﻊ ﺍﻟﺭﺍﻴﺎﺕ‪ IF ،DF ،ZF ،PF ،SF ،OF ،CF ،AF :‬ﻭ ‪ TF‬ﻓـﻲ‬
‫ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬

‫ﺍﻟﺒﺎﻳﺖ ﺍﻷﻛﺜﺮ ﺩﻻﻟﺔ‬ ‫ﺍﻟﺒﺎﻳﺖ ﺍﻷﻗﻞ ﺩﻻﻟﺔ‬

‫‪ :AF‬ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل ﺍﻟﻤﺴﺎﻋﺩ ‪ ،Auxiliary Flag‬ﻴﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤـﺴﺎﺒﻴﺔ ﺍﻟﻌـﺸﺭﻴﺔ‬


‫ﺍﻟﻤﺭﻤ‪‬ﺯﺓ ﺍﺜﻨﺎﻨﻴﹰﺎ ‪ ،BCD‬ﻭﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎل ﹶﻨﺘﺞ ﺤﺎﻤل ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺠﻤﻊ‪ ،‬ﺃﻭ ﺍﺴﺘﻌﺎﺭﺓ ﺒﻌـﺩ‬
‫ﻋﻤﻠﻴﺔ ﻁﺭﺡ‪ ،‬ﻭﺫﻟﻙ ﺒﻴﻥ ﻨﺼﻑ ﺍﻟﺒﺎﻴﺕ )‪ (nibble‬ﺍﻷﺩﻨﻰ ﻭﻨﺼﻑ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻋﻠﻰ‪.‬‬
‫‪ :CF‬ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل ‪ ،Carry Flage‬ﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎﻟﺔ ﻭﺠﻭﺩ ﺤﺎﻤل ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺠﻤـﻊ ﺃﻭ‬
‫ﺍﺴﺘﻌﺎﺭﺓ ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﻁﺭﺡ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻐﻴﺭ ﺤﺎﻟﺘﻪ ﺃﻴﻀﹰﺎ ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺯﺍﺤﺔ‪.‬‬
‫‪ :OF‬ﺭﺍﻴﺔ ﺍﻟﻔﺎﺌﺽ ‪ ،Overflow Flag‬ﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎل ﺘﺠﺎﻭﺯ ﺤﺠـﻡ ﻨـﺎﺘﺞ ﺍﻟﻌﻤﻠﻴـﺔ‬
‫ﺍﻟﺤﺴﺎﺒﻴﺔ ﺴﻌﺔ ﺘﺨﺯﻴﻥ ﺍﻟﻭﺠﻬﺔ‪.‬‬
‫‪ :SF‬ﺭﺍﻴﺔ ﺍﻹﺸﺎﺭﺓ ‪ ،Sign Flag‬ﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺍﻟﺒﺕ ﺍﻷﻋﻠﻰ ﻤﻥ ﻨﺎﺘﺞ ﺍﻟﻌﻤﻠﻴـﺔ‬

‫‪8‬‬
‫ﻴﺴﺎﻭﻱ ‪) 1‬ﺃﻱ ﻜﺎﻥ ﺍﻟﻨﺎﺘﺞ ﺴﺎﻟﺒ ﹰﺎ(‪.‬‬
‫‪ :PF‬ﺭﺍﻴﺔ ﺍﻟﻨﺩﻴﺔ ‪ ،Parity Flag‬ﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎل ﻜﺎﻥ ﻋﺩﺩ ﺍﻟﻭﺤﺩﺍﻥ ﻓﻲ ﻨﺎﺘﺞ ﺍﻟﻌﻤﻠﻴـﺔ‬
‫ﻴﺴﺎﻭﻱ ﻋﺩﺩﹰﺍ ﺯﻭﺠﻴﹰﺎ‪.‬‬
‫‪ :ZF‬ﺭﺍﻴﺔ ﺍﻟﺼﻔﺭ ‪ ،Zero Flag‬ﻴﺴﺎﻭﻱ ‪ 1‬ﻓﻲ ﺤﺎل ﻜﺎﻥ ﻨﺎﺘﺞ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺤﺴﺎﺒﻴﺔ ﺃﻭ ﺍﻟﻤﻨﻁﻘﻴﺔ‬
‫ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ‪.‬‬
‫‪ :DF‬ﺭﺍﻴﺔ ﺍﻻﺘﺠﺎﻩ ‪ ،Direction Flag‬ﺘﺴﺒﺏ‪ ،‬ﻋﻨﺩﻤﺎ ﺘﺴﺎﻭﻱ ‪ ،1‬ﺇﻨﻘﺎﺼﹰﺎ ﺁﻟﻴﹰﺎ ﻟﻤﺤﺘﻭﻯ ﻜـل‬
‫ﻤﻥ ﺍﻟﺴﺠﻠﻴﻥ ‪ DI‬ﻭ ‪ SI‬ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﺃﻤﺎ ﺤﻴﻥ ﺘﺴﺎﻭﻱ ‪ 0‬ﻓﺘـﺴﺒﺏ ﺯﻴـﺎﺩﺓ‬
‫ﺁﻟﻴﺔ ﻟﻬﺫﺍ ﺍﻟﻤﺤﺘﻭﻯ‪.‬‬
‫‪ IF‬ﺭﺍﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ ،Interrupt Flag‬ﺘﺴﻤﺢ‪ ،‬ﻋﻨﺩﻤﺎ ﺘﺴﺎﻭﻱ ‪ ،1‬ﺒﺤﺩﻭﺙ ﻤﻘﺎﻁﻌﺔ ﺨﺎﺭﺠﻴـﺔ‬
‫ﻗﺎﺒﻠﺔ ﻟﻠﺤﺠﺏ‪ .‬ﺃﻤﺎ ﻋﻨﺩﻤﺎ ﺘﺴﺎﻭﻱ ‪ 0‬ﻓﻬﻲ ﺘﺤﺠﺏ )ﺘﻤﻨﻊ( ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‪.‬‬
‫‪ TF‬ﺭﺍﻴﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻟﺨﻁﻭﻱ ‪ .Trace Flag‬ﺘﺴﻤﺢ‪ ،‬ﻋﻨﺩﻤﺎ ﺘﺴﺎﻭﻱ ‪ ،1‬ﺒﺈﻤﻜﺎﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ‬
‫ﺨﻁﻭﺓ ﻓﺨﻁﻭﺓ‪.‬‬

‫ﺘﻨﻅﻴﻡ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪8086‬‬

‫ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻨﻭﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺫﺍﻜﺭﺓ ﻴﺼل ﺤﺠﻤﻬﺎ ﺇﻟﻰ ‪ 1,048,576‬ﺒﺎﻴﺕ )‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ(‪ .‬ﹸﻨﻅﻤﺕ ﺫﺍﻜﺭﺓ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﻜﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﺒﺎﻴﺘﺎﺕ‪ ،‬ﻴﺄﺨﺫ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭل ﺍﻟﻌﻨﻭﺍﻥ ‪ 00000h‬ﻭﺍﻟﺜﺎﻨﻲ ‪ 00001h‬ﻭﺍﻷﺨﻴـﺭ‬
‫‪ .FFFFFh‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل‪:‬‬
‫ﺫﺍﻛﺮﺓ ﺣﺠﻤﻬﺎ ‪ 1‬ﻣﻴﻐﺎﺑﺎﻳﺖ‬
‫‪FFFFFh‬‬
‫‪FFFFEh‬‬

‫‪00001h‬‬
‫‪00000h‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ‪‬ﻴﺸﻜل ﺃﻱ ﺒﺎﻴﺘﻴﻥ ﻤﺘﺘﺎﻟﻴﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻜﻠﻤﺔ‬
‫ﺒﻁﻭل ‪ 2‬ﺒﺎﻴﺕ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﻘﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ﺒﺎﻴﺕ ﺃﻭ ﺒﺎﻴﺘﻴﻥ ﻓـﻲ ﺃﻱ ﻤﻜـﺎﻥ ﻓـﻲ‬
‫ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺤﻴﻥ ﻴﻜﻭﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﺃﻭ ﻭﺯﻨﹰﺎ ﻟﻜﻠﻤﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺯﻭﺠﻴﹰﺎ ﻨﻘﻭل ﺃﻥ ﺍﻟﻜﻠﻤﺔ ﺘﻘﻊ‬
‫ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﻨﺤﻭ ﻤﺘﺤﺎ ٍﺫ ‪ .alignment‬ﺃﻤﺎ ﺤﻴﻥ ﻴﻜﻭﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻟﻜﻠﻤﺔ ﻤﻌﻁﻴﺎﺕ‬
‫ﻓﺭﺩﻴﹰﺎ ﻨﻘﻭل ﺃﻥ ﺍﻟﻜﻠﻤﺔ ﺘﻘﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﻨﺤﻭ ﻏﻴﺭ ﻤﺘﺤﺎ ٍﺫ ‪.unaligned‬‬

‫‪9‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﻟﺘﺨﺯﻴﻥ ﺍﻟﻜﻠﻤﺔ ‪ 5502H‬ﻀﻤﻥ ﻤﻭﻗﻌﻴﻥ ﻤﺘﺘـﺎﻟﻴﻴﻥ‪ ،‬ﻋﻨـﻭﺍﻥ ﺍﻟﻤﻭﻗـﻊ ﺍﻷﻭل ‪، 00724H‬ﻭﺍﻟﺜـﺎﻨﻲ‬
‫ل ﺩﻻﻟ ﹰﺔ ‪ 02H‬ﻓﻲ ﺍﻟﻤﻭﻗﻊ ‪ ،00724H‬ﻭﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ ‪55H‬‬
‫‪ ،00725H‬ﻴﺘﻡ ﺘﺨﺯﻴﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗ ُ‬
‫‪00724H‬‬ ‫‪00725H‬‬ ‫ﻓﻲ ﺍﻟﻤﻭﻗﻊ ‪.00725H‬‬
‫‪0‬‬ ‫‪2‬‬ ‫‪5‬‬ ‫‪5‬‬ ‫ﺗﺮﻣﻴﺰ ﺳﺖ ﻋﺸﺮ‬
‫‪0000 0010‬‬ ‫‪0101 0101‬‬ ‫ﺗﺮﻣﻴﺰ ﺍﺛﻨﺎﱐ‬

‫ﻴ‪‬ﻌﺘﺒﺭ ﺍﻟﺘﺨﺯﻴﻥ ﺍﻟﺴﺎﺒﻕ ﻋﻠﻰ ﻨﺤﻭ ﻤﺘﺤﺎ ٍﺫ ﻷﻨﻪ ﺠﺭﻯ ﺘﺨﺯﻴﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻓﻲ ﻤﻭﻗﻊ ﺯﻭﺠﻲ‪.‬‬
‫ﺕ ﺍﻟﺼﻐﺭﻴ ﹸﺔ ﻟﺸﺭﻜﺔ ‪ Intel‬ﻜﻠﻤﺔ ﻤﻥ ‪ 2‬ﺒﺎﻴﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟـﺔ ﺃﻭ ﹰ‬
‫ﻻ‬ ‫ﹸﺘﺨﺯﻥ‪ ،‬ﺍﻟﻤﻌﺎِﻟﺠﺎ ﹸ‬
‫ﺜﻡ ﻴﻠﻴﻬﺎ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ‪ ،‬ﻭﺘﺴﻤﻰ ﻁﺭﻴﻘﺔ ﺍﻟﺘﺨﺯﻴﻥ ﻫﺫﻩ ﺒﺎﻟ ﹸﻨﻬ‪‬ﻭﻱ ﺍﻟﺼﻐﻴﺭ ‪ ،little-endian‬ﺒﻴﻨﻤـﺎ‬
‫ﻕ ﻤﻥ ﺭﺤﻼﺕ ‪ Gulliver‬ﺍﻟﺫﻱ ‪‬‬
‫ﺴﻤّﻰ ﺒـ‬ ‫ﺘﹸﺴﺘﺨﺩﻡ ﻁﺭﻴﻘ ﹸﺔ ﺍﻟﻨﻬﻭﻱ ﺍﻟﻜﺒﻴﺭ )ﻤﺼﻁﻠﺢ "ﻨﻬﻭﻱ ﻜﺒﻴﺭ" ﻤﺸﺘ ﹲ‬
‫ﺽ ﻴﺠـﺏ ﺃﻥ‬
‫ﻥ ﺍﻟ ‪‬ﺒ ‪‬ﻴ ‪‬‬
‫"ﺍﻟﻨﻬﻭﻴﻴﻥ ﺍﻟﻜﺒﺎﺭ" ﺯﻤﺭ ﹰﺓ ﻤﻥ ﺍﻟﻨﺎﺱ ﻋﺎﺭﻀﻭﺍ ﻤﺭﺴﻭ ‪‬ﻡ ﺍﻻﻤﺒﺭﺍﻁﻭﺭ ﺍﻟﺫﻱ ﻴﻘﻭل ﺇ ّ‬
‫ﻼ ﻓﻲ ﺍﻟﻤﻌﺎﻟِﺠﺎﺕ ﺍﻟﺼﻐﺭﻴ ِﺔ ﻟـﺸﺭﻜ ِﺔ ‪Motorola‬‬
‫‪‬ﻴ ﹾﻜﺴ‪‬ﺭ ﻤﻥ ﺍﻟﻁﺭﻑ )ﺍﻟ ﱡﻨ ‪‬ﻬﻴ‪‬ﺔ( ﺍﻟﺼﻐﻴ ِﺭ ﻗﺒل ﺃﻜﻠِﻪ( ﻤﺜ ﹰ‬
‫ﻻ ﺜﹸﻡ ﻴﻠﻴﻬﺎ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ‪.‬‬
‫ﺤﻴﺙ ﺘﺨﺯﻴﻥ ﻫﺫﻩ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ ﺃﻭ ﹰ‬

‫ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‬
‫ﺠﺭﻯ ﺘﻘﺴﻴﻡ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺇﻟﻰ ﻤﻘﺘﻁﻌﺎﺕ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ .‬ﻴﺴﻨﺩ‬
‫ﻟﻜل ﻤﻘﺘﻁﻊ ﻋﻨﻭﺍﻥ ﻗﺎﻋﺩﻱ ‪ Base address‬ﻴ‪‬ﺸﻴﺭ ﺇﻟﻰ ﻋﻨﻭﺍﻥ ﺃﻭل ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﻤﻘﺘﻁﻊ‪ .‬ﻴﻤﻜـﻥ ﺃﻥ‬
‫ﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﻤﻨﻔﺼﻠﺔ ﺘﻤﺎﻤﹰﺎ ﺃﻭ ﻤﺘﺩﺍﺨﻠﺔ ﺠﺯﺌﻴﹰﺎ ﺃﻭ ﻜﻠﻴﹰﺎ‪.‬‬
‫‪‬ﻴﺨﺯﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻓﻲ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌـﺎﺕ ﺍﻷﺭﺒﻌـﺔ ‪ ES ،DS ،CS‬ﻭ ‪ ،SS‬ﻭﺒـﺫﻟﻙ‬
‫ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺔ ﺃﺭﺒﻊ ﻤﻘﺘﻁﻌﺎﺕ ﺒﺂﻥ ﻭﺍﺤﺩ‪ .‬ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﻤﻨﻔﺼﻠﺔ ﻜﻠﻴﹰﺎ ﻴ‪‬ﻤﻜﻥ‬
‫‪ 256‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﺒﺂﻥ ﻭﺍﺤﺩ‪ .‬ﻭﻴ‪‬ﻤﻜﻥ‪ ،‬ﺒﺘﻐﻴﻴﺭ ﻤﺤﺘﻭﻯ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‪ ،‬ﻋﻨﻭﻨﺔ‬ ‫ﻟﻠﻤﻌﺎﻟﺞ ﺃﻥ ﻴ‪‬ﻌﻨﻭﻥ‬
‫ﻜﺎﻤل ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺫﻱ ﻴﺴﺎﻭﻱ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ‪.‬‬
‫ﻴﺤﻭﻱ ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴ‪‬ﺸﻴﺭ ﺇﻟﻴﻪ ﺍﻟﺴﺠل ‪ CS‬ﺘﻌﻠﻴﻤﺎﺕ ﺃﻭ ِﺭﻤﺎﺯ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺃﻤﺎ ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴ‪‬ـﺸﻴﺭ‬
‫ـﺎﺕ‪،‬‬
‫ـﺯﻴﻥ ﺍﻟﻤﻌﻁﻴــ‬
‫ـﺎ ﻟﺘﺨــ‬
‫ـﻪ ‪ ES‬ﻓﻬﻤــ‬
‫ـﺸﻴﺭ ﺇﻟﻴــ‬
‫ـﺫﻱ ﻴ‪‬ــ‬ ‫ـﻪ ‪ DS‬ﻭﺍﻟﻤﻘﺘﻁــ‬
‫ـﻊ ﺍﻟــ‬ ‫ﺇﻟﻴــ‬
‫ﻭﻴﺨﺼﺹ ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴﺸﻴﺭ ﺇﻟﻴﻪ ‪ SS‬ﻟﻌﻤل ﺍﻟﻤ‪‬ﻜﺩﺱ ‪.Stack‬‬
‫ﻻ ﻋﻥ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﺍﻷﺭﺒﻌﺔ ﺍﻟﻤﺤﺩﺩﺓ ﺒﺎﻟﺴﺠﻼﺕ ‪ DS ،SS ،CS‬ﻭ ‪،ES‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ﻭﻜﻤﺎ ﻫﻭ ﻭﺍﻀﺢ ﻤﻥ ﺍﻟﺸﻜل ﻓﺈﻨﻪ ﻻ ﻴ‪‬ﻭﺠﺩ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﺃﻱ ﺘﻘﺎﻁﻊ ﺒﻴﻥ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﺍﻷﺭﺒﻌﺔ‪.‬‬

‫‪10‬‬
‫ﻣﻘﺘﻄﻊ ﺍﻟﱪﻧﺎﻣﺞ‬ ‫‪CODE‬‬
‫‪SEGMENT‬‬
‫‪CS‬‬
‫‪SS‬‬
‫ﻣﻘﺘﻄﻊ ﺍﳌﻜﺪﺱ‬ ‫‪STACK‬‬ ‫‪DS‬‬
‫‪SEGMENT‬‬
‫‪ES‬‬

‫ﻣﻘﺘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ‬ ‫‪DATA‬‬


‫‪SEGMENT‬‬

‫ﻣﻘﺘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ‬ ‫‪EXTRA‬‬


‫‪SEGMENT‬‬
‫ﺍﻹﺿﺎﰲ‬

‫ﺘﻭﻟﻴﺩ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‬


‫ﻤﻥ ﺍﻟﻤﻔﻴﺩ ﺍﻟﺘﻔﻜﻴﺭ ﺒﺄﻥ ﻟﻜل ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻨﻭﺍﻨﻴﻥ‪ :‬ﻋﻨﻭﺍﻥ ﻓﻴﺯﻴـﺎﺌﻲ )ﺃﻭ ﺤﻘﻴﻘـﻲ( ﻭﻋﻨـﻭﺍﻥ‬
‫ﻤﻨﻁﻘﻲ‪ .‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻫﻭ ﻗﻴﻤﺔ ﻤﻥ ‪ 20‬ﺒﺘﹰﺎ‪ ،‬ﹸﺘﻌﻨﻭﻥ ﻭﺒﺸﻜل ﻭﺤﻴﺩ ﻤﻭﻗﻌﹰﺎ ﻤﺤﺩﺩﹰﺍ ﻤﻥ ﺍﻟـﺫﺍﻜﺭﺓ‪.‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ﺘﻘﻊ ﻗﻴﻤﺔ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻓﻲ ﺍﻟﻤﺠﺎل ﻤﻥ ‪ 00000h‬ﺇﻟﻰ ‪ .FFFFFh‬ﻴﺠـﺭﻱ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻓﻲ ﺠﻤﻴﻊ ﺍﻟﺘﺒﺎﺩﻻﺕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻭﻴﺠﺭﻱ ﺤﺴﺎﺒﻪ ﺍﻨﻁﻼﻗﹰﺎ ﻤﻥ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫ﺍﻟﻤﻨﻁﻘﻲ‪ .‬ﻻ ﻴﺘﻌﺎﻤل ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻻ ﻤﻊ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻤﻨﻁﻘﻴﺔ‪ ،‬ﻭﻴﺘﻜﻭﻥ ﻜل ﻋﻨﻭﺍﻥ ﻤﻨﻁﻘـﻲ ﻤـﻥ‪:‬‬
‫ﻤﺤﺘﻭﻯ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ )ﺍﻟﺫﻱ ﻴﺤﺩﺩ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﻤﻌﻴﻥ ﻤﻥ ﺍﻟـﺫﺍﻜﺭﺓ( ﻭﻗﻴﻤـﺔ ﺍﻻﻨﺯﻴـﺎﺡ‬
‫‪ offset‬ﻋﻥ ﺒﺩﺍﻴﺔ ﺍﻟﻤﻘﺘﻁﻊ‪ .‬ﺇﻥ ﻤﺤﺘﻭﻯ ﻜل ﻤﻥ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﻭﺴﺠﻼﺕ ﺍﻻﻨﺯﻴﺎﺡ ﻫﻲ ﻗﻴﻡ ﻤﻥ‬
‫‪ 16‬ﺒﺕ ﺒﻼ ﺇﺸﺎﺭﺓ ‪ .unsigned‬ﻨﻜﺘﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻋﻠﻰ ﺍﻟﺸﻜل ‪.segment:offset‬‬
‫ﻋﻨﺩﻤﺎ ﺘﺤﺘﺎﺝ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﻤﻊ ﺍﻟﻤﺴﺭﻯ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻓﺈﻨﻬﺎ ﺘﻭﻟـﺩ‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻤﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ‪ .‬ﺘﺤﺴﺏ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﺒﻁﺭﻕ ﻤﺨﺘﻠﻔﺔ‪ ،‬ﻜﻤﺎ‬
‫ﺴﻨﺒﻴﻥ ﺫﻟﻙ ﻋﻨﺩ ﺸﺭﺡ ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ‪ ،‬ﻭﺘﺯﻭﺩ ﺒﻪ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ‪.‬‬
‫ﻻ ﻤﺤﺘﻭﻯ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺃﺭﺒﻊ ﺒﺘﺎﺕ ﻴـﺴﺎﺭﹰﺍ )ﻭﺍﻟـﺫﻱ ﻴﻜـﺎﻓﺊ‬
‫ﻟﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻨﺯﻴﺢ ﺃﻭ ﹰ‬
‫ﻀﺭﺒﻪ ﺒـ ‪ ،(16‬ﺜﻡ ‪‬ﻴﺠﻤﻊ ﻟﻠﻨﺎﺘﺞ ﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ‪ .‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻜﻴﻑ ﻴﺠﺭﻱ ﺤﺴﺎﺏ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﺒﻔﺭﺽ ﺃﻥ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﻴﺤﻭﻱ ‪ 1234h‬ﻭﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﻫﻲ ‪.0022h‬‬

‫‪11‬‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪ :‬ﻤﺤﺘﻭﻯ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ × ‪ + 16‬ﺍﻻﻨﺯﻴﺎﺡ‬

‫ﻤﺜﺎل‪:‬‬
‫ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺴﺠل ‪ CS‬ﻴﺤﺘﻭﻱ ﺍﻟﻘﻴﻤﺔ ‪ 07A0h‬ﻭﺍﻟﺴﺠل ‪ IP‬ﻴﺤﺘﻭﻱ ﺍﻟﻘﻴﻤـﺔ ‪ 0100h‬ﻓـﺈﻥ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﺴﺎﻭﻱ ‪07A00h + 0100h = 07B00h‬‬
‫ﻻﺤﻅ ﺃﻨﻪ ﻴﻤﻜﻥ ﻷﻜﺜﺭ ﻤﻥ ﻋﻨﻭﺍﻥ ﻤﻨﻁﻘﻲ ﺃﻥ ﻴﺸﻴﺭ ﺇﻟﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻨﻔﺴﻪ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ‪ 07B00h‬ﻴﺴﺎﻭﻱ ‪ 97A0:0100‬ﻭﻴﺴﺎﻭﻱ ﺃﻴﻀﹰﺎ ‪.07B0:0000‬‬

‫ﻴﻭﻀﺢ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﺒﺩﺍﻴﺔ ﻭﻟﻨﻬﺎﻴﺔ ﻜـل ﻤـﻥ ﺍﻟﻤﻘﺘﻁﻌـﺎﺕ ﺍﻷﺭﺒﻌـﺔ ﻋﻨـﺩﻤﺎ‬
‫‪ SS=5D27 ،DE=E000h ،CS=B3FFh‬ﻭ ‪ .ES=52B8‬ﻭﻜﻤﺎ ﻫﻭ ﺒﻴ‪‬ﻥ ﻤﻥ ﺍﻟﺸﻜل ﻓﺈﻨﻪ ﻴﻭﺠـﺩ‬
‫ﺘﻘﺎﻁﻊ ﺒﻴﻥ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻜﺩﺱ ﻭﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻹﻀﺎﻓﻲ‪.‬‬

‫‪12‬‬
‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﻜﻴﻑ ﻨﺤﺴﺏ ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴﺔ ﻤﻘﺘﻁﻊ ﻤﺎ؟‬
‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﺇﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﺒﺩﺍﻴﺔ ﺍﻟﻤﻘﺘﻁﻊ ‪ DS‬ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟـﺴﺎﺒﻕ ﻫـﻭ ﺍﻟﻌﻨـﻭﺍﻥ ﺍﻟﻔﻴﺯﻴـﺎﺌﻲ‬
‫‪ E000:0000h‬ﻭﺍﻟﺫﻱ ﻴﺴﺎﻭﻱ ‪ ،E0000h‬ﻭﺒﻤﺎ ﺃﻥ ﻁﻭل ﺃﻱ ﻤﻘﺘﻁـﻊ‬ ‫ﺍﻟﻤ‪‬ﻌﻁﻰ ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ‬
‫ﻴﺴﺎﻭﻱ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﻓﺈﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻨﻬﺎﻴـﺔ ﺍﻟﻤﻘﺘﻁـﻊ ‪ DS‬ﻴﻌﻁـﻰ ﺒـﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘـﻲ‬
‫‪ E000:FFFFh‬ﻭﺍﻟﺫﻱ ﻴﺴﺎﻭﻱ ‪.EFFFFh‬‬

‫‪13‬‬
‫ﻤﻭﺍﻗﻊ ﺫﺍﻜﺭﺓ ﻤﺤﺠﻭﺯﺓ‬

‫ﺠﺭﻯ ﺤﺠﺯ ﺍﻟﻤﺠﺎل ﺍﻟﻌﻠﻭﻱ ﻭﺍﻟﺴﻔﻠﻲ ﻤﻥ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﻟﺘﺤﻘﻴـﻕ ﻭﻅـﺎﺌﻑ‬
‫ﻤﺤﺩﺩﺓ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻭ ﻤﻥ ﻗﺒل ﺍﻟﺸﺭﻜﺔ ﺍﻟﻤﺼﻨﻌﺔ ﻟﻠﺘﻁﻭﻴﺭ ﺍﻟﻤﺴﺘﻘﺒﻠﻲ‪ ،‬ﻭﻫﺫﻩ ﺍﻟﻤﻭﺍﻗـﻊ ﺘﻘـﻊ ﻀـﻤﻥ‬
‫ﺍﻟﻤﺠﺎﻟﻴﻥ ‪ 00000h-0007Fh‬ﻭ ‪.FFFF0-FFFFFh‬‬

‫ﺘﻐﻴﻴﺭ ﻤﻭﻀﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺩﻴﻨﺎﻤﻴﻜﻴ ﹰﺎ ‪Dynamic Relocatable Code‬‬

‫ﺘﺴﻤﺢ ﻁﺭﻴﻘﺔ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﻨﻁﻘﻴﺔ ﻟﻠﺫﺍﻜﺭﺓ‪ ،‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﺒﺘﺤﺭﻴﻙ ﻜﺎﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻜﻜﺘﻠﺔ‬
‫ﻭﺍﺤﺩﺓ‪ ،‬ﺇﻟﻰ ﺃﻱ ﻤﻜﺎﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺩﻭﻥ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﻀﺭﻭﺭﺓ ﺇﺠﺭﺍﺀ ﺘﻌﺩﻴﻼﺕ ﻋﻠﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻭ ﻋﻠﻰ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﺇﻥ ﻜل ﻤﺎ ﻨﺤﺘﺎﺠﻪ ﻹﺠﺭﺍﺀ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﺭﻴﻙ ﻫﻭ ﻓﻘﻁ ﺘﻐﻴﻴﺭ ﻤﺤﺘﻭﻯ ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‪،‬‬
‫ﻼ ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ﺘﻌﻠﻴﻤﺔ ﺘﻘﻊ ﺒﻌﺩ ‪ 4‬ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺃﻱ ﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﺘـﺴﺎﻭﻱ‬
‫ﻓﻤﺜ ﹰ‬
‫‪ ،4‬ﻓﺈﻥ ﺘﺤﺭﻴﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﺃﻱ ﻤﻜﺎﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪‬ﻴﺒﻘﻰ ﺍﻨﺯﻴﺎﺡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻥ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‬
‫ﻴﺴﺎﻭﻱ ﺃﻴﻀﹰﺎ ‪.4‬‬
‫ﺘﻌﻁﻲ ﻫﺫﻩ ﺍﻹﻤﻜﺎﻨﻴﺔ ﻨﻅﻡ ﺍﻟﺘﺸﻐﻴل ﻓﻲ ﺍﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ ﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﻹﺩﺍﺭﺓ ﻤﻭﺍﺭﺩ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠـﻰ‬
‫ﻨﺤﻭ ﻓﻌﺎل‪ ،‬ﻭﺫﻟﻙ ﺒﻭﻀﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻊ ﻤﻌﻁﻴﺎﺘﻪ ﻓﻲ ﺃﻱ ﻤﻜﺎﻥ ﻤﺘﺎﺡ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫ﺍﻟﻤﻜﺩ‪‬ﺱ‬

‫ﻴ‪‬ﺴﺘﺨﺩﻡ ﺍﻟﻤﻜﺩﺱ ‪ stack‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻌﻨﺎﻭﻴﻥ ﻤﺅﻗﺘﹰﺎ ﻋﻨـﺩ ﺘﻨﻔﻴـﺫ ﺍﻟﺒـﺭﺍﻤﺞ‬
‫ﺍﻟﻔﺭﻋﻴﺔ‪ ،‬ﻜﻤﺎ ﻴ‪‬ﺴﺘﺨﺩﻡ ﻟﺘﻤﺭﻴﺭ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺱ ﺇﻟﻰ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻔﺭﻋﻴﺔ‪ .‬ﻴﺠـﺭﻱ‪ ،‬ﻓـﻲ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﺤﺠﺯ ﺤﻴﺯ ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻌﻤل ﺍﻟﻤﻜ ‪‬ﺩﺱ‪.‬‬
‫ﻴﺤﻭﻱ ﺍﻟﺴﺠل ‪ SS‬ﻋﻠﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻟﻠﻤﻜﺩﺱ ﺒﻴﻨﻤﺎ ﻴﺅﺸﺭ ﺍﻟﺴﺠل ‪ SP‬ﺇﻟﻰ ﻗﻤﺔ ﺍﻟﻤﻜـﺩﺱ )ﺃﻱ‬
‫ﺨﺯﻥ ﻓﻴﻪ ﺁﺨﺭ ﺒﺎﻴﺕ(‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺤﺘﻭﻱ ‪ SP‬ﺍﻨﺯﻴﺎﺡ ﻗﻤﺔ ﺍﻟﻤﻜﺩﺱ ﻋﻥ‬
‫ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﺍﻟﺫﻱ ﹸ‬

‫‪14‬‬
‫ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻜﺩﺱ‪ .‬ﺘﺴﺘﻁﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻜﺩﺱ ﺘﺨﺯﻴﻥ ﺃﻭ ﻗﺭﺍﺀﺓ ﻜﻠﻤﺔ ﻭﺍﺤـﺩﺓ‬
‫ﻓﻲ ﻭﻗﺕ ﻭﺍﺤﺩ‪ ،‬ﻻ ﻴﻤﻜﻥ ﺘﺨﺯﻴﻥ ﺃﻭ ﻗﺭﺍﺀﺓ ﺒﺎﻴﺕ ﻭﺍﺤﺩ‪ .‬ﻴﻤﻜﻥ ﺩﻓﻊ )ﻜﺘﺎﺒﺔ( ﻜﻠﻤـﺔ ﻓـﻲ ﺍﻟﻤﻜـﺩﺱ‬
‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ‪ ،PUSH‬ﻋﻨﺩﻫﺎ ﻴﺠﺭﻱ ﺘﺨﺯﻴﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ ﻟﻠﻜﻠﻤﺔ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ‬
‫‪ SP-1‬ﻭﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ ‪ SP-2‬ﺜﹸﻡ ﻴﺠﺭﻱ ﺇﻨﻘﺎﺹ ‪ SP‬ﺒﻤﻘﺩﺍﺭ ‪ .2‬ﻭﻴﻤﻜﻥ‬
‫ﺴﺤﺏ )ﻨﺴﺦ( ﻜﻠﻤﺔ ﻤﻥ ﺍﻟﻤﻜﺩﺱ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،POP‬ﻋﻨﺩﻫﺎ ﹸﺘﻨﺴﺦ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻗﻤـﺔ‬
‫ﺍﻟﻤﻜﺩﺱ‪ ،‬ﻴﺠﺭﻱ ﻨﺴﺦ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ ‪ SP‬ﻭﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟـﺔ ﻤـﻥ‬
‫ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﺅﺸﺭ ﺇﻟﻴﻪ ‪ SP-1‬ﺜﻡ ﻴﺠﺭﻱ ﺯﻴﺎﺩﺓ ‪ SP‬ﺒﻤﻘﺩﺍﺭ ‪.2‬‬

‫ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬
‫ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻭﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻴﻤﻜـﻥ ﺃﻥ ﺘﻘـﻊ ﻋﻨـﺎﻭﻴﻥ‬
‫ﺍﻟﺒﻭﺍﺒﺎﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺇﻤﺎ ﻀﻤﻥ ﻓﻀﺎﺀ ﻤﺴﺘﻘل ﻟﻌﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺩﺨـل‪/‬ﺨـﺭﺝ ‪ I/O‬ﺃﻭ‬
‫ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺠﺯ ‪‬ﺀﺍ ﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬

‫ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ‬

‫ﻴﻤﻜﻥ ﺃﻥ ‪‬ﻴ ‪‬ﻌﻨ ِﻭﻥ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺇﻤﺎ ‪ 64‬ﻜﻴﻠﻭ )ﻋﻨﺩﻤﺎ ﻨﺫﻜﺭ ﺤﺠﻡ ﺫﺍﻜﺭﺓ ﺃﻭ ﺒﻭﺍﺒﺎﺕ ﻓﺈﻥ‬
‫ﺍﻟﻜﻴﻠﻭ ﻴﺴﺎﻭﻱ ‪ 1024‬ﻭﻟﻴﺱ ‪ (1000‬ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 8‬ﺒﺕ‪،‬‬

‫ﺃﻭ ‪ 32‬ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 16‬ﺒﺕ‪،‬‬

‫‪15‬‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻨﻨﺎ ﻨﺤﺘﺎﺝ ﻓﻘﻁ ﺇﻟﻰ ‪ 16‬ﺨﻁ ﻋﻨﻭﻨﺔ ﻟﻌﻨﻭﻨﺔ ﻜﺎﻤل ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ‪.‬‬
‫ﺘﺴﻤﺢ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ IN‬ﻭ ‪ OUT‬ﺒﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﻤﺭﺍﻜﻡ )‪ AL‬ﻟﻠﻌﻤﻠﻴـﺎﺕ ﻋﻠـﻰ ﺒﺎﻴـﺕ ﻭ ‪AX‬‬
‫ﻟﻠﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ‪ 2‬ﺒﺎﻴﺕ( ﻭﺒﻭﺍﺒﺔ ﺘﻘﻊ ﻀﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻻ ‪‬ﻴﺴﺘﺨﺩﻡ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ‬
‫ﺍﻟﺩﺨل‪/‬ﺨﺭﺝ ﻨﻅﺎﻡ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‪ ،‬ﺍﻟﻤ‪‬ﺴﺘﺨﺩﻡ ﻓﻲ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﺒﻭﺍﺒـﺎﺕ‪ .‬ﻭﺒﺎﻟﺘـﺎﻟﻲ‬
‫ﺘﻀﻊ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﻤﻊ ﺍﻟﻤﺴﺭﻯ ﺍﻟﺨﺎﺭﺠﻲ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﺒﻭﺍﺒﺔ ) ﺍﻟﻤﻜـﻭﻥ ﻤـﻥ ‪ 16‬ﺒـﺕ(‬
‫ﻤﺒﺎﺸﺭﺓ ﻋﻠﻰ ﺍﻟﺨﻁﻭﻁ ﺍﻟﺴﺕ ﻋﺸﺭﺓ ﺍﻷﻭﻟﻰ ﻤﻥ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬
‫ﺠﺭﻯ ﺤﺠﺯ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﻲ ﺘﻘﻊ ﻋﻨﺎﻭﻴﻨﻬﺎ ﺒﻴﻥ ‪ 00F8H‬ﻭ ‪ ،00FFH‬ﻤﻥ ﻗﺒل ﺍﻟـﺸﺭﻜﺔ ﺍﻟﻤـﺼﻨﻌﺔ‪،‬‬
‫ﻷﻫﺩﺍﻑ ﺍﻟﺘﻁﻭﻴﺭ ﺍﻟﻤﺴﺘﻘﺒﻠﻴﺔ‪.‬‬
‫‪FFFFH‬‬

‫ﻣﺘﺎﺣﺔ ﻟﻠﻤﺴﺘﺨﺪﻡ‬

‫‪0100H‬‬
‫ﳏﺠﻮﺯﺓ‬ ‫‪00FFH‬‬
‫‪00F8H‬‬
‫‪00F7H‬‬
‫ﻣﺘﺎﺣﺔ ﻟﻠﻤﺴﺘﺨﺪﻡ‬
‫‪0000H‬‬

‫ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻜﺠﺯﺀ ﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‬

‫ﺇﺫﺍ ﻜﺎﻥ ﹶﺘﺼﺭﻑ ﻭﺍﺴﺘﺠﺎﺒﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ‪‬ﻴﻤﺎﺜل ﺘﺼﺭﻑ ﻭﺍﺴﺘﺠﺎﺒﺔ ﺫﻭﺍﻜﺭ ﺍﻟﻤﻌﺎﻟﺞ ﻓـﻴﻤﻜﻥ‬
‫ﺃﻥ ﻨﺠﻌل ﺍﻟﺒﻭﺍﺒﺎﺕ ﺘﺤﺘل ﺠﺯ ‪‬ﺀﺍ ﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻴﻤﻜﻨﻨﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺍﻻﺴـﺘﻔﺎﺩﺓ ﻤـﻥ ﻜﺎﻤـل‬
‫ﺇﻤﻜﺎﻨﺎﺕ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ‪ MOV‬ﻟﺘﺒﺎﺩل ﻤﻌﻁﻴﺎﺕ ﻤـﻊ‬
‫ﺒﻭﺍﺒﺎﺕ ﺘﻘﻊ ﻀﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺘﺴﺘﻔﻴﺩ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻴﻀﹰﺎ ﻤﻥ ﺃﻨﻤـﺎﻁ‬
‫ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺘﻨﻭﻋﺔ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻋﻨﻭﻨﺔ ﺃﻜﺜﺭ ﻤﻥ ‪ 64‬ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ‪.‬‬

‫ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ‬
‫ﹸﺘﻨﻔﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻤﻠﻴﺎﺕ ﻤﺤﺩﺩﺓ ﻋﻠﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘﹸﺴﻤﻰ ﺒﻤﻌﺎﻤﻼﺕ ‪ Operands‬ﺍﻟﺘﻌﻠﻴﻤﺔ‪.‬‬
‫ﻴﺤﺘﺎﺝ ﺘﻨﻔﻴﺫ ﺒﻌﺽ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺇﻟﻰ ﻤﻌﺎﻤﻠﻴﻥ‪ :‬ﻤﻌﺎﻤل ﻤﺼﺩﺭ ‪ source‬ﻭﻤﻌﺎﻤل ﻭﺠﻬﺔ ‪،destination‬‬
‫ﻼ ﻭﺍﺤﺩﹰﺍ‪ .‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻫﻭ ﺍﻟﻤﻜـﺎﻥ ﺍﻟـﺫﻱ ﻴﻘـﺭﺃ ﻤﻨـﻪ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫ﻭﻴﺘﻁﻠﺏ ﺒﻌﻀﻬﺎ ﺍﻵﺨﺭ ﻤﻌﺎﻤ ﹰ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﺒﻴﻨﻤﺎ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻫﻭ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﻴﺨﺯﻥ ﻓﻴﻪ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﻟﺩﻴﻨﺎ ﻋﺩﺓ ﺤـﺎﻻﺕ‬

‫‪16‬‬
‫ﻟﻠﻤﻌﺎﻤل‪:‬‬
‫‪ -‬ﻤﻀ ‪‬ﻤﻨﹰﺎ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ‬
‫‪ -‬ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺩﺍﺨﻠﻴﺔ‬
‫‪ -‬ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ‬
‫ﻨﻌﺭﺽ ﻓﻴﻤﺎ ﻴﻠﻲ ﺍﻟﻁﺭﻕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ ﺘﻤﻜﻨﻨﺎ ﻤﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻤﻌﺎﻤﻼﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﺘﻌـﺭﻑ ﻫـﺫﻩ‬
‫ﺍﻟﻁﺭﻕ ﺒﺄﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬

‫ﻋﻨﻭﻨﺔ ﺒﺎﻟﺴﺠل ‪Register Addressing‬‬

‫ﻴ‪‬ﻜﻭﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﺃﻭ ﺍﻟﻭﺠﻬﺔ ﺃﻭ ﻜﻠﻴﻬﻤﺎ ﻤﻌﹰﺎ ﻤﻭﺠﻭﺩﻴﻥ ﻀﻤﻥ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺩﺍﺨﻠﻴﺔ‪ ،‬ﻭﻴﺠﺏ‬
‫ﺃﻥ ﻴﻜﻭﻥ ﻁﻭل ﺴﺠل ﺍﻟﻤﺼﺩﺭ ﻤﻁﺎﺒﻘﹰﺎ ﻟﻁﻭل ﺴﺠل ﺍﻟﻭﺠﻬﺔ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﻌﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪ AX‬ﺇﻟﻰ ﺍﻟﺴﺠل ‪.DX‬‬

‫ﻋﻨﻭﻨﺔ ﻓﻭﺭﻴﺔ ‪Immediate Addressing‬‬


‫ﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻔﻭﺭﻴﺔ ﺘﺤﺘﻭﻱ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ ﻗﻴﻤﺔ ﺜﺎﺒﺘﺔ ﹸﺘﻤﺜل ‪‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ ،‬ﻻ ﻴﻤﻜـﻥ ﺃﻥ ﻴﻜـﻭﻥ‬
‫ﻼ ﺃﻭ ﻤﻭﻗﻌﹰﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ‪.‬‬
‫ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻗﻴﻤﺔ ﺜﺎﺒﺘﺔ ﺒل ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﺴﺠ ﹰ‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﻌﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺜﺎﺒﺘﺔ ‪ 03h‬ﻓﻲ ﺍﻟﺴﺠل ‪.CL‬‬
‫‪MOV CL, 03h‬‬

‫‪17‬‬
‫ﻋﻨﻭﻨﺔ ﻤﺒﺎﺸﺭﺓ ‪Direct Addressing‬‬
‫ﺘﻭﻟﺞ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ‪ EU‬ﻤﺒﺎﺸﺭﺓ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻤﻼﺕ ﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﺒﺎﻟﺴﺠل ﻭﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻔﻭﺭﻴـﺔ‪ .‬ﻭﻟﻜـﻥ‬
‫ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺃﺤﺩ ﻤﻌﺎﻤﻠﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﺘﻤﺭﺭ ‪ EU‬ﺇﻟﻰ ‪ BIU‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﺍﻟﻤﻜﻭﻥ ﻤـﻥ‬
‫ﺍﻨﺯﻴﺎﺡ ﻭﻋﻨﻭﺍﻥ ﻗﺎﻋﺩﻱ ﻭﺘﺤﺴﺏ ‪ BIU‬ﺒﻨﺎ ‪‬ﺀ ﻋﻠﻰ ﺫﻟﻙ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﻤﻌﺎﻤل‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﺴﺏ‬
‫‪ EU‬ﺍﻻﻨﺯﻴﺎﺡ ﺒﻌﺩﺓ ﻁﺭﻕ ﺒﺤﺴﺏ ﻨﻤﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻨﺴﻤﻲ ﻫﺫﺍ ﺍﻻﻨﺯﻴﺎﺡ ﺒﺎﻟﻌﻨﻭﺍﻥ‬
‫ﺍﻟﻔﻌﺎل )‪.effective address (EA‬‬
‫ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪) MOV AX, [address‬ﻴﻤﺜل ‪ address‬ﺍﻻﻨﺯﻴﺎﺡ ﻋﻥ ﺒﺩﺍﻴﺔ ﺍﻟﻘﻁﺎﻉ ﺍﻟﻤﺤﺩﺩ ﺒﺴﺠل‬
‫ﺍﻟﻘﻁﺎﻉ ‪ .DX‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻴﺴﺎﻭﻱ ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ ‪ (address‬ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓـﻲ ﺍﻟﻤﻭﻗـﻊ‬
‫‪ address‬ﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ‪ .AX‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ‪ ،DX‬ﺍﻓﺘﺭﺍﻀﻴﹰﺎ‪ ،‬ﻓـﻲ ﺤـﺴﺎﺏ‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﺒﻌﹰﺎ ﻟﻠﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻓﺈﻨﻪ ﻭﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪ MOV CX, [1234h‬ﻴﺠﺭﻱ ﻨﺴﺦ ﻤﺤﺘـﻭﻯ ﺍﻟﻤﻭﻗـﻊ‬

‫‪18‬‬
‫‪ 1234h‬ﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺴﺠل ‪ ،CX‬ﺃﻱ ﻴﺠﺭﻱ ﻨـﺴﺦ ﻤﺤﺘـﻭﻯ ﺍﻟﻤﻭﻗـﻊ ﺍﻟﻔﻴﺯﻴـﺎﺌﻲ‬
‫‪ 02000+1234h = 03234h‬ﻓﻲ ‪ .CX‬ﻭﺒﻤﺎ ﺃﻥ ﻁﻭل ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻴﺴﺎﻭﻱ ‪ 2‬ﺒﺎﻴﺕ ﻓﺈﻨﻪ ﻴﺠﺭﻱ‬
‫ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﻤﻭﻗﻌﻴﻥ ‪ 03234h‬ﻭ ‪ 03235h‬ﻓﻲ ‪ .CX‬ﻭﺒﺎﻟﻨﺘﻴﺠﺔ ﻴﺤﺘﻭﻱ ‪ CX‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﺍﻟﺴﺎﺒﻘﺔ ﺍﻟﻘﻴﻤﺔ ‪.BEEDh‬‬

‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﺒﺎﻟﺴﺠل ‪Register Indirect Addressing‬‬


‫ﺘﺴﻤﺢ ﺍﻟﻌﻨﻭﻨﺔ ﻏﻴﺭ ﺍﻟﻤﺒﺎﺸﺭﺓ ﺒﺎﻟﺴﺠل ﺒﻌﻨﻭﻨﺔ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺃﻱ ﻤﻜﺎﻥ ﻤﻥ ﺍﻟـﺫﺍﻜﺭﺓ ﻋﺒـﺭ ﺍﻨﺯﻴـﺎﺡ‬
‫ﻤﻭﺠﻭﺩ ﻓﻲ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ SI ،BP ،BX :‬ﺃﻭ ‪) DI‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟـﺔ ﻴـﺴﺎﻭﻱ‬
‫ﻤﺤﺘﻭﻯ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ‪ SI ،BP ،BX‬ﺃﻭ ‪ .(DI‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻓﻲ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪ ،‬ﺍﻓﺘﺭﺍﻀـﻴﹰﺎ‪،‬‬
‫ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ‪:‬‬
‫‪ DS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ‪ SI ،BX‬ﺃﻭ ‪.DI‬‬
‫‪ SS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺴﺠل ‪.BP‬‬

‫‪19‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﺒﻌ ﹰﺎ ﻟﻠﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻓﺈﻨﻪ ﻭﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪ MOV AX, [SI‬ﻴﺠﺭﻱ ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﻤﻭﻗﻊ ‪1234h‬‬
‫ﻤﻥ ﻤﻘﺘﻁـﻊ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻓـﻲ ﺍﻟـﺴﺠل ‪ ،AX‬ﺃﻱ ﻴﺠـﺭﻱ ﻨـﺴﺦ ﻤﺤﺘـﻭﻯ ﺍﻟﻤﻭﻗـﻊ ﺍﻟﻔﻴﺯﻴـﺎﺌﻲ‬
‫‪ 02000+1234h = 03234h‬ﻓﻲ ‪ .AX‬ﻭﺒﺎﻟﻨﺘﻴﺠﺔ ﻴﺤﺘﻭﻱ ‪ AX‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟـﺴﺎﺒﻘﺔ ﺍﻟﻘﻴﻤـﺔ‬
‫‪.BEEDh‬‬

‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﺒﺎﻟﺴﺠل ﻤﻊ ﺇﺯﺍﺤﺔ ‪Register relative Addressing‬‬


‫ﻴﺠﺭﻱ ﻋﻨﻭﻨﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﻤﻘﺘﻁﻊ ﺫﺍﻜﺭﺓ ﺒﺠﻤﻊ ﺇﺯﺍﺤـﺔ )ﺴﻨـﺴﺘﺨﺩﻡ ﺍﻹﺯﺍﺤـﺔ ﻜﺘﺭﺠﻤـﺔ ﻟــ‬
‫‪ displacement‬ﻭﺍﻻﻨﺯﻴﺎﺡ ﻜﺘﺭﺠﻤﺔ ﻟـ ‪ displacement (offset‬ﻤﻊ ﺃﺤـﺩ ﺴـﺠﻼﺕ ﺍﻟﻘﺎﻋـﺩﺓ‬
‫)‪ (BX ،BP‬ﺃﻭ ﻤﻊ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﺩﻟﻴل )‪ DI‬ﺃﻭ ‪) (SI‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻴﺴﺎﻭﻱ ﻨـﺎﺘﺞ ﺠﻤـﻊ ﺇﺯﺍﺤـﺔ‬
‫ﻤﺘﻀﻤﻨﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻊ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ‪ SI ،BP ،BX‬ﺃﻭ ‪.(DI‬‬

‫‪20‬‬
‫ﺘﺘﻀﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻗﻴﻤﺔ ﺍﻹﺯﺍﺤﺔ ﺍﻟﺘﻲ ﹸﺘﻜﻭﻥ ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 16‬ﺒﺕ ﻤﻊ ﺇﺸﺎﺭﺓ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴ‪‬ﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ‬
‫ﻗﻴﻤﺔ ﺍﻹﺯﺍﺤﺔ ﺒﻴﻥ ‪ -32,768‬ﻭ ‪ .32,767‬ﻴﺴﺘﺨﺩﻡ ﻓﻲ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪ ،‬ﺍﻓﺘﺭﺍﻀﻴﹰﺎ‪ ،‬ﺴـﺠل‬
‫ﺍﻟﻤﻘﺘﻁﻊ‪:‬‬
‫‪ DS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪ SI ،BX‬ﺃﻭ ‪.DI‬‬
‫‪ SS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪.BP‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﺒﻌﹰﺎ ﻟﻠﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻓﺈﻨﻪ ﻭﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOV AL, [SI] + 1234h‬ﻴﺠﺭﻱ ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﻤﻭﻗﻊ‬
‫ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ‪ 02000+2000+1234h = 05234h‬ﻓﻲ ‪ .AX‬ﻭﺒﺎﻟﻨﺘﻴﺠﺔ ﻴﺤﺘﻭﻱ ‪ AL‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫ﺍﻟﺴﺎﺒﻘﺔ ﺍﻟﻘﻴﻤﺔ ‪.BEh‬‬

‫‪21‬‬
‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺴﺠل ﻗﺎﻋﺩﺓ ﻭﺴﺠل ﺩﻟﻴل ‪Base-Plus-Index Addressing‬‬

‫ﺘﺸﺒﻪ ﻁﺭﻴﻘﺔ ﺍﻟﻌﻨﻭﻨﺔ ﻫﺫﻩ ﻨﻤﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻏﻴﺭ ﺍﻟﻤﺒﺎﺸﺭﺓ ﺒﺎﻟﺴﺠل‪ .‬ﻴﺠﺭﻱ ﺍﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻘﺎﻋﺩﺓ‬
‫)‪ BP‬ﺃﻭ ‪ (BX‬ﻤﻊ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﺩﻟﻴل )‪ DI‬ﺃﻭ ‪ (SI‬ﻟﻌﻨﻭﻨﺔ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﺒﻁﺭﻴﻘـﺔ ﻏﻴـﺭ ﻤﺒﺎﺸـﺭﺓ‬
‫)ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻴﺴﺎﻭﻱ ﻨﺎﺘﺞ ﺠﻤﻊ ﺃﺤﺩ ﺍﻟﺴﺠﻠﻴﻥ ‪ BP ،BX‬ﻤﻊ ﺃﺤﺩ ﺍﻟﺴﺠﻠﻴﻥ ‪ .(DI ،SI‬ﻴ‪‬ـﺴﺘﺨﺩﻡ‬
‫ﻓﻲ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪ ،‬ﺍﻓﺘﺭﺍﻀﻴﹰﺎ‪ ،‬ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ‪:‬‬
‫‪ DS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪.BX‬‬
‫‪ SS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪.BP‬‬

‫ﻤﺜﺎل‪:‬‬
‫ﺒﻔــﺭﺽ ﺃﻥ ‪ DS=0100h‬ﻭ ‪ DI=0010‬ﻭ ‪ ،BX=1000h‬ﻓﺈﻨــﻪ ﻭﺒﻌــﺩ ﺘﻨﻔﻴــﺫ ﺍﻟﺘﻌﻠﻴﻤــﺔ‬
‫]‪ MOV DX, [BX+DI‬ﻴﺠـــﺭﻱ ﻨـــﺴﺦ ﺍﻟﻜﻠﻤـــﺔ ﻤـــﻥ ﺍﻟﻤﻭﻗـــﻊ ﺍﻟﻔﻴﺯﻴـــﺎﺌﻲ‬
‫‪ 01000h+1000h+0010h= 02010h‬ﻓﻲ ‪.DX‬‬

‫‪22‬‬
‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺴﺠل ﻗﺎﻋﺩﺓ ﻭﺴﺠل ﺩﻟﻴل ﻤﻊ ﺇﺯﺍﺤﺔ‬
‫‪Based-Plus-Indexed relative Addressing‬‬
‫ﺇﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﻌﻨﻭﻨﺔ ﻫﻭ ﺃﻗل ﺃﻨﻤﺎﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﺴﺘﺨﺩﻤﹰﺎ‪ ،‬ﻴﺠﺭﻱ ﻓﻴﻪ ﺤﺴﺎﺏ ﺍﻨﺯﻴﺎﺡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻥ‬
‫ﺴﺠل ﻤﻘﺘﻁﻊ ﺒﺠﻤﻊ ﺇﺯﺍﺤﺔ ﻤﻊ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻘﺎﻋﺩﺓ ‪ BP‬ﺃﻭ ‪ BX‬ﻭﻤﻊ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﺩﻟﻴل ‪ DI‬ﺃﻭ ‪SI‬‬
‫)ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻴﺴﺎﻭﻱ ﻨﺎﺘﺞ ﺠﻤﻊ ﺇﺯﺍﺤﺔ ﻤﺘﻀﻤﻨﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻊ ﺃﺤﺩ ﺍﻟﺴﺠﻠﻴﻥ ‪ BP‬ﺃﻭ ‪ BX‬ﻭﻤﻊ‬
‫ﺃﺤﺩ ﺍﻟﺴﺠﻠﻴﻥ ‪ DI‬ﺃﻭ ‪.(SI‬‬
‫ﻴ‪‬ﺴﺘﺨﺩﻡ ﻓﻲ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‪ ،‬ﺍﻓﺘﺭﺍﻀﻴﹰﺎ‪ ،‬ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ‪:‬‬
‫‪ DS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪.BX‬‬
‫‪ SS -‬ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ‪.BP‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺒﻔــﺭﺽ ﺃﻥ ‪ DS=1000h‬ﻭ ‪ SI=0100‬ﻭ ‪ ،BX=0020h‬ﻓﺈﻨــﻪ ﻭﺒﻌــﺩ ﺘﻨﻔﻴــﺫ ﺍﻟﺘﻌﻠﻴﻤــﺔ‬
‫]‪ MOV AL, [BX+SI+ 100h‬ﻴﺠـــﺭﻱ ﻨـــﺴﺦ ﻤﺤﺘـــﻭﻯ ﺍﻟﻤﻭﻗـــﻊ ﺍﻟﻔﻴﺯﻴـــﺎﺌﻲ‬
‫‪ 10000h+0020h+0100h+100h = 10220h‬ﻓﻲ ‪.AL‬‬

‫‪23‬‬
‫ﺇﻥ ﺘﺭﺘﻴﺏ ﺍﻟﺴﺠﻼﺕ ﻏﻴﺭ ﻤﻬﻡ ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫]‪MOV AL, [SI+100h +BX‬‬
‫‪MOV AL, [SI][BX]+100h‬‬

‫ﺘﻠﺨﻴﺹ ﻷﻨﻤﺎﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ‬


‫ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻓﺘﺭﺍﻀﻴ ﹰﺎ‬ ‫ﺍﻟﻤﻌﺎﻤل‬ ‫ﻨﻤﻁ ﺍﻟﻌﻨﻭﻨﺔ‬
‫ﻻ ﻴﻭﺠﺩ‬ ‫ﺴﺠل‬ ‫ﺒﺎﻟﺴﺠل‬
‫ﻻ ﻴﻭﺠﺩ‬ ‫ﻗﻴﻤﺔ‬ ‫ﻓﻭﺭﻴﺔ‬
‫‪DS‬‬ ‫ﺍﻨﺯﻴﺎﺡ‬ ‫ﻤﺒﺎﺸﺭﺓ‬
‫‪SS‬‬ ‫]‪[BP‬‬ ‫ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ ﺒﺎﻟﺴﺠل‬
‫‪DS‬‬ ‫]‪[BX‬‬
‫‪DS‬‬ ‫]‪[SI‬‬
‫‪DS‬‬ ‫]‪[DI‬‬
‫‪DS‬‬ ‫ﺇﺯﺍﺤﺔ ‪[BX] +‬‬ ‫‪Based Addressing‬‬

‫‪SS‬‬ ‫ﺇﺯﺍﺤﺔ ‪[BP] +‬‬


‫‪DS‬‬ ‫ﺇﺯﺍﺤﺔ ‪[DI] +‬‬ ‫‪Indexed Addressing‬‬

‫‪DS‬‬ ‫ﺇﺯﺍﺤﺔ ‪[SI] +‬‬


‫‪DS‬‬ ‫]‪ SI] + [BX‬ﺃﻭ ‪[DI‬‬ ‫‪Based-plus-Indexed‬‬
‫‪Addressing‬‬
‫‪SS‬‬ ‫]‪ SI] + [BP‬ﺃﻭ ‪[DI‬‬
‫‪DS‬‬ ‫ﺇﺯﺍﺤﺔ ‪ SI] + [BX] +‬ﺃﻭ ‪[DI‬‬ ‫‪Based-plus-Indexed‬‬
‫‪relative Addressing‬‬
‫‪SS‬‬ ‫ﺇﺯﺍﺤﺔ ‪ SI] + [BP] +‬ﺃﻭ ‪[DI‬‬

‫‪ 8-5‬ﻋﻨﻭﻨﺔ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ‪String Addressing‬‬


‫ﺘﻔﻴﺩ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻓﻲ ﻨﺴﺦ ﻜﺘﻠﺔ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺃﻭ ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻟﻤﺤﺎﺭﻑ ﻤﻥ ﻤﻜﺎﻥ ﺇﻟﻰ‬
‫ﺁﺨﺭ‪ .‬ﺘﻔﺘﺭﺽ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻥ ﺍﻟﺴﺠل ‪ SI‬ﻴﺸﻴﺭ ﺇﻟﻰ ﺍﻟﺒﺎﻴﺕ ﺃﻭ ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‬
‫ﻭ ‪‬ﻴﺸﻴﺭ ﺍﻟﺴﺠل ‪ DI‬ﺇﻟﻰ ﺍﻟﺒﺎﻴﺕ ﺃﻭ ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪ .‬ﻴﺠﺭﻱ‪ ،‬ﺒﻌﺩ ﻜل ﻋﻤﻠﻴﺔ ﻨـﺴﺦ‪،‬‬
‫ﺯﻴﺎﺩﺓ ‪ SI‬ﻭ ‪ DI‬ﺁﻟﻴﹰﺎ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺭﺍﻴﺔ ‪ DF‬ﺘﺴﺎﻭﻱ ‪ 0‬ﻭﻴﺠﺭﻱ ﺇﻨﻘﺎﺹ ‪ SI‬ﻭ ‪ DI‬ﺁﻟﻴﹰﺎ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺭﺍﻴﺔ‬
‫‪ DF‬ﺘﺴﺎﻭﻱ ‪.1‬‬
‫ﻴ‪‬ﺴﺘﺨﺩﻡ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ‪ ES‬ﻓﻲ ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻠﻭﺠﻬﺔ‪ ،‬ﻭﻻ ﻴﻤﻜﻨﻨﺎ ﺘﻌﻴﻥ ﺴﺠل ﻤﻘﺘﻁـﻊ‬

‫‪24‬‬
‫ﺁﺨﺭ ﻋﻭﻀﹰﺎ ﻋﻨﻪ‪ ،‬ﻓﻲ ﺤﻴﻥ ‪‬ﻴﺴﺘﺨﺩﻡ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ‪ DS‬ﻟﻠﻤﺼﺩﺭ ﻤﻊ ﺇﻤﻜﺎﻥ ﺘﻌﻴﻴﻥ ﺴـﺠل ﻤﻘﺘﻁـﻊ‬
‫ﺁﺨﺭ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫=]‪[DI‬‬ ‫ـﺎﻥ ‪ [DF]=0‬ﻭ ‪ [DS]=2000h‬ﻭ ‪ [SI]=500h‬ﻭ ‪ [ES]=4000h‬ﻭ ‪0300h‬‬
‫ﺇﺫﺍ ﻜــــ‬
‫ﻭ ‪ [20500]=38h‬ﻭ ‪ [40300]=45‬ﻓﺈﻨﻪ ﺒﻌـﺩ ﺘﻨﻔﻴـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪ MOVS BYTE‬ﻴـﺼﺒﺢ ﻟـﺩﻴﻨﺎ‬
‫‪ [40300h]=38‬ﻭ ‪ [SI]=0501h‬ﻭ ‪ .[DI]=0301h‬ﻭﻻ ﺘﺘﻐﻴــﺭ ﻤﺤﺘــﻭﻯ ﺍﻟــﺴﺠﻼﺕ ﺍﻷﺨــﺭﻯ‬
‫ﻭﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫‪25‬‬
‫ﺇﺒﻁﺎل ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‬
‫ﻴﺭﺘﺒﻁ ﺒﻜل ﻨﻤﻁ ﻋﻨﻭﻨﺔ ﺴﺠل ﻤﻘﺘﻁﻊ ﺍﻓﺘﺭﺍﻀﻲ‪ ،‬ﻭﻴﻤﻜﻨﻨﺎ ﻓﻲ ﺃﻏﻠﺏ ﺍﻷﺤﻴﺎﻥ ﺍﺨﺘﻴﺎﺭ ﺴﺠل ﻤﻘﺘﻁـﻊ‬
‫ﺁﺨﺭ ﻋﻭﻀﹰﺎ ﻋﻨﻪ ﻭﺫﻟﻙ ﺒﻜﺘﺎﺒﺔ ﺍﺴﻡ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﻗﺒل ﺍﻟﻤﻌﺎﻤل ﻓﻲ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﻨﹸﻌﻴﻥ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺴﺠل ‪ ES‬ﻜﺴﺠل ﻤﻘﺘﻁﻊ ﻋﻭﻀﹰﺎ ﻋﻥ ﺍﻟﺴﺠل ﺍﻻﻓﺘﺭﺍﻀﻲ ‪.DX‬‬
‫]‪MOV AL, ES:[DI‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺒﺩﻴﻠﺔ ﺍﻟﻤﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﺒﺤﺴﺏ ﻨـﻭﻉ‬
‫ﺍﻟﺭﺠﻭﻉ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻓﺘﺭﺍﻀﻴ ﹰﺎ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺒﺩﻴل ﺍﻻﻨﺯﻴﺎﺡ‬ ‫ﻨﻭﻉ ﺍﻟﺭﺠﻭﻉ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‬
‫‪IP‬‬ ‫ﻻ ﻴﻭﺠﺩ‬ ‫‪CS‬‬ ‫ﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ‬
‫‪SP‬‬ ‫ﻻ ﻴﻭﺠﺩ‬ ‫‪SS‬‬ ‫ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﻜﺩﺱ‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل‬ ‫‪SS ،ES ،CS‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻌﺎﻤـﺔ )ﻤﺎﻋـﺩﺍ ‪DS‬‬

‫ﺍﻟﺘﺎﻟﻴﺔ(‬
‫‪SI‬‬ ‫‪SS ،ES ،CS‬‬ ‫‪DS‬‬ ‫ﺍﻟﻤﺼﺩﺭ ﻓﻲ ﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺎﺭﻑ‬
‫‪DI‬‬ ‫ﻻ ﻴﻭﺠﺩ‬ ‫‪ES‬‬ ‫ﺍﻟﻭﺠﻬﺔ ﻓﻲ ﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺎﺭﻑ‬
‫ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل‬ ‫‪SS ،ES ،CS‬‬ ‫‪SS‬‬ ‫ﻋﻨﻭﻨﺔ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺴﺠل ‪BP‬‬
‫ﻻ ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺴﺠل ﻤﻘﺘﻁﻊ ﻏﻴﺭ ﺍﻟﺴﺠل ﺍﻻﻓﺘﺭﺍﻀﻲ ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺜﻼﺜﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -1‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﺍﻟﻤﻜﺩﺱ )ﻤﺜل ‪ PUSH‬ﻭ ‪ ،(POP‬ﻭﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻤﺤﺘﻭﻯ ﺍﻟـﺴﺠل‬
‫‪ SP‬ﻜﻘﻴﻤﺔ ﺍﻨﺯﻴﺎﺡ‪ ،‬ﻓﺈﻨﻬﺎ ﺘﺴﺘﺨﺩﻡ ﺩﻭﻤﹰﺎ ﺍﻟﺴﺠل ‪ SS‬ﻜﺴﺠل ﻤﻘﺘﻁﻊ‪.‬‬
‫‪ -2‬ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺴﺠل ‪ DI‬ﻓﺈﻨﻬﺎ ﺘﺴﺘﺨﺩﻡ ﺩﻭﻤﹰﺎ ﺍﻟﺴﺠل ‪ ES‬ﻜﺴﺠل‬
‫ﻤﻘﺘﻁﻊ‪.‬‬
‫‪ -3‬ﻓﻲ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺤﻴﺙ ﻴﻜﻭﻥ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﻫﻭ ﺩﻭﻤﹰﺎ ‪ CS‬ﻭﺴﺠل ﺍﻹﺯﺍﺤﺔ ﻫﻭ ﺩﻭﻤﹰﺎ‬
‫‪.IP‬‬
‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻟﻤﻁﻠﻭﺏ ﺘﺤﺩﻴﺩ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ ﻓﻲ ﻜل ﻤﻥ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻔـﺭﺽ ﺃﻥ‬
‫ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ﺍﻟﻤﻌﻁﻰ ﻴ‪‬ﻤﺜل ﺍﻻﻨﺯﻴﺎﺡ ؟‬

‫‪BX -5‬‬ ‫‪SP -4‬‬ ‫‪SI -3‬‬ ‫‪IP -2‬‬ ‫‪BP -1‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬

‫‪26‬‬
‫‪DS -5‬‬ ‫‪SS -4‬‬ ‫‪DS -3 CS -2‬‬ ‫‪SS -1‬‬

‫ﻋﻨﻭﻨﺔ ﻀﻤﻨﻴﺔ ‪Implied Addressing‬‬


‫ﻻ ﺘﺤﺘﻭﻱ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻟﻨﻤﻁ ﻤﻥ ﺍﻟﻌﻨﻭﻨﺔ ﻋﻠﻰ ﻤﻌﺎﻤل ﺼﺭﻴﺢ‪ ،‬ﻭﺇﻨﻤﺎ ﻴﻜﻭﻥ ﻤﻀﻤﻨﹰﺎ‬
‫ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﹸﺼﻔﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ CLC‬ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل‪.‬‬

‫ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ‬


‫ﻴﻤﻜﻥ ﺃﻥ ﺘﻘﻊ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻀﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﻀﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒـﺎﺕ‬
‫‪:I/O‬‬
‫ƒ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺘﻘﻊ ﻀﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺃﻱ ﻤـﻥ ﺃﻨﻤـﺎﻁ ﻋﻨﻭﻨـﺔ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﺃﺠل ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ‪.‬‬
‫ƒ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺘﻘﻊ ﻀﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻓﻴﻤﻜﻥ ﺃﻥ ﹸﺘﻌﻨﻭﻥ ﺍﻟﺒﻭﺍﺒـﺎﺕ‬
‫ﺇﻤﺎ ﺒﻁﺭﻴﻘﺔ ﻤﺒﺎﺸﺭﺓ ﺃﻭ ﺒﻁﺭﻴﻘﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪:‬‬
‫ﻋﻨﻭﻨﺔ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ‪ ،‬ﺘﹸﺤﺩﺩ ﻗﻴﻤﺔ ﻓﻭﺭﻴﺔ ﻤﻥ ‪ 8‬ﺒﺘﺎﺕ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴ‪‬ﻤﻜﻨﻨﺎ ﺒﻬـﺫﻩ‬
‫ﺍﻟﻁﺭﻴﻘﺔ ﻋﻨﻭﻨﺔ ‪ 256‬ﺒﻭﺍﺒﺔ ﻤﺨﺘﻠﻔﺔ ﻓﻘﻁ‪ ،‬ﺘﺒﺩﺃ ﻤﻥ ﺍﻟﻌﻨﻭﺍﻥ ‪ 00h‬ﻭﺘﻨﺘﻬﻲ ﺒﺎﻟﻌﻨﻭﺍﻥ ‪.FFh‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺘﺨﺭﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪ OUT 05h, AL‬ﻤﺤﺘﻭﻯ ‪ 8) AL‬ﺒﺕ( ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ ﺫﺍﺕ ﺍﻟﺭﻗﻡ ﺃﻭ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫‪.05h‬‬

‫‪27‬‬
‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ‪ ،‬ﻴﺤﺘﻭﻱ ﺍﻟﺴﺠل ‪ DX‬ﻋﻠﻰ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ‪ ،‬ﻭﺒﻤﺎ ﺃﻥ ﻁـﻭل ‪DX‬‬
‫ﻴﺴﺎﻭﻱ ‪ 16‬ﺒﺕ ﻓﺘﺴﻤﺢ ﻟﻨﺎ ﻁﺭﻴﻘﺔ ﺍﻟﻌﻨﻭﻨﺔ ﻫﺫﻩ ﺒﻌﻨﻭﻨﺔ ﻜﺎﻤل ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ‪ ،[DX]=5040h‬ﻓﺘﻘﺭﺃ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN AL, DX‬ﺍﻟﺒﺎﻴﺕ ﻋﻠـﻰ ﺩﺨـل ﺍﻟﺒﻭﺍﺒـﺔ ‪5040h‬‬
‫ﻭﺘﺨﺯﻨﻬﺎ ﻓﻲ ﺍﻟﺴﺠل ‪ ،AL‬ﺒﻴﻨﻤﺎ ﺘﻘﺭﺃ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN AX, DX‬ﺍﻟﻜﻠﻤﺔ ﻋﻠـﻰ ﺩﺨـل ﺍﻟﺒﻭﺍﺒـﺔ ‪5040h‬؛‬
‫ﺘﺨﺯﻥ ﻓﻲ ‪ AL‬ﺍﻟﺒﺎﻴﺕ ﻋﻠﻰ ﺩﺨل ﺍﻟﺒﻭﺍﺒﺔ ‪ 5040h‬ﻭﺘﺨﺯﻥ ﻓﻲ ‪ AH‬ﺍﻟﺒﺎﻴـﺕ ﻋﻠـﻰ ﺩﺨـل ﺍﻟﺒﻭﺍﺒـﺔ‬
‫‪.5041h‬‬

‫‪28‬‬
‫ﻤﻼﺤﻅﺔ‪ :‬ﺘﺠﺭﻱ‪ ،‬ﺩﻭﻤﺎﹰ‪ ،‬ﻋﻤﻠﻴﺎﺕ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 8‬ﺒﺕ ﻤﻊ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻋﺒﺭ ‪ AL‬ﻓـﻲ ﺤـﻴﻥ‬
‫ﻨﺴﺘﺨﺩﻡ ‪ AX‬ﻟﺘﺒﺎﺩل ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 16‬ﺒﺕ‪.‬‬

‫ﺘﻤﺎﺭﻴﻥ‬
‫ﺃﻭ ﹰﻻ‪ :‬ﺃﺠﺏ ﺒـ ﺼﺢ ﺃﻭ ﺨﻁﺄ‪:‬‬

‫‪ -1‬ﺘﻨﻔﺫ ﺍﻟﻭﺤﺩﺓ ‪ EU‬ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻌﺩ ﻗﺭﺍﺀﺘﻬﺎ ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬


‫‪ -2‬ﻴ‪‬ﺅﺸﺭ ﺍﻟﺴﺠل ‪ CS‬ﺇﻟﻰ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬
‫‪ -3‬ﺤﺠﻡ ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﻭﺍﺤﺩ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻴﺴﺎﻭﻱ ‪ 128‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪.‬‬
‫‪ -4‬ﻴﺠﺭﻱ ﺇﻓﺭﺍﻍ ﻤﺤﺘﻭﻯ ﺭﺘل ﺩﻓﻕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻜل ﺘﻌﻠﻴﻤﺔ‪.‬‬
‫‪ -5‬ﻴﻤﻜﻥ ﺘﻘﺴﻴﻡ ﻜل ﻤﻥ ﺍﻟﺴﺠﻼﺕ ‪ CX ،AX‬ﻭ ‪ DI‬ﺇﻟﻰ ﺴﺠﻠﻴﻥ ﻁﻭل ﻜل ﻤﻨﻬﻤﺎ ‪ 8‬ﺒﺕ‪.‬‬
‫‪ -6‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻨﻭﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﺃﻜﺜﺭ ﻤﻥ ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫‪29‬‬
‫‪ -7‬ﻟﻜل ﻋﻨﻭﺍﻥ ﻓﻴﺯﻴﺎﺌﻲ ﻋﻨﻭﺍﻥ ﻤﻨﻁﻘﻲ ﻭﺤﻴﺩ‪.‬‬
‫‪ -8‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ‪ EX‬ﺍﻓﺘﺭﺍﻀﻴﹰﺎ ﻜﺴﺠل ﻤﻘﺘﻁﻊ ﻓﻲ ﺘﻌﻠﻴﻤـﺎﺕ ﺴﻼﺴـل ﺍﻟﻤﺤـﺎﺭﻑ‪ ،‬ﻭﻻ‬
‫ﻴﻤﻜﻨﻨﺎ ﺘﻌﻴﻴﻥ ﺴﺠل ﻤﻘﺘﻁﻊ ﺁﺨﺭ ﻋﻭﻀﹰﺎ ﻋﻨﻪ‪.‬‬
‫‪ -9‬ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻨﻅﺎﻡ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﻓﻲ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﻲ ﺘﻘﻊ ﻓﻲ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ‬
‫ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪.‬‬
‫‪ -10‬ﻋﻨﺩﻤﺎ ﺘﻘﻊ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻀﻤﻥ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﻓﻴﻤﻜﻨﻨﺎ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ﻋﻨﻭﻨﺔ ‪64‬‬
‫ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ ﻁﻭل ﻜل ﻤﻨﻬﺎ ﺒﺎﻴﺕ ﻭﺍﺤﺩ‪.‬‬
‫‪ -11‬ﻴﻤﻜﻥ ﺒﺎﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﺒﺎﺸﺭﺓ ﻋﻨﻭﻨﺔ ‪ 64‬ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ ﻋﻠﻰ ﺍﻷﻜﺜﺭ‪.‬‬
‫‪ -12‬ﻴﺤﺘﻭﻱ ﺍﻟﺴﺠل ‪ DX‬ﻋﻠﻰ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﻏﻴﺭ ﺍﻟﻤﺒﺎﺸﺭﺓ ﻟﻠﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﻲ ﺘﻘﻊ ﻓﻲ ﻓﻀﺎﺀ‬
‫ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪.‬‬

‫ﺜﺎﻨﻴ ﹰﺎ‪ :‬ﺃﺠﺏ ﻋﻠﻰ ﺍﻷﺴﺌﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪ -1‬ﻤﺎ ﻫﻭ ﻁﻭل ﺍﻟﻤﺭﺍﻜﻡ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬؟ ﺍﻟﺠﻭﺍﺏ‪ 16 :‬ﺒﺕ‪.‬‬


‫‪ -2‬ﻤﺎ ﻫﻭ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻭﺍﻟﻤﻌﺎﻟﺞ ‪8086‬؟‬
‫‪ -3‬ﻤﺎ ﻫﻭ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻭﺍﻟﻤﻌﺎﻟﺞ ‪8086‬؟‬
‫‪ -4‬ﻤﺎ ﻫﻭ ﺤﺠﻡ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻨﻭﻨﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬؟‬
‫‪ -5‬ﻤﺎ ﻫﻭ ﺤﺠﻡ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻲ ﻴ‪‬ﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺘﻬﺎ ﺒﺂﻥ ﻭﺍﺤﺩ؟‬
‫‪ -6‬ﻤﺎ ﻫﻭ ﺤﺠﻡ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻜﻠﻴﺔ ﺍﻟﺘﻲ ﻴ‪‬ﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺘﻬﺎ ﺒﺂﻥ ﻭﺍﺤﺩ؟‬
‫‪ -7‬ﺒﻴﻥ ﻜﻴﻑ ﻴﺠﺭﻱ ﺘﺨﺯﻴﻥ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﻀﺎﻋﻔﺔ ‪ 2C40h‬ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﺒﺘﺩﺍ ‪‬ﺀ ﻤﻥ ﺍﻟﻤﻭﻗـﻊ ‪F0000h‬‬
‫ﺒﻨﻤﻁ ﺍﻟﻨﻬﻭﻱ ﺍﻟﺼﻐﻴﺭ‪ .‬ﺃﻋﺩ ﺍﻟﻁﻠﺏ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻨﻤﻁ ﺍﻟﻨﻬﻭﻱ ﺍﻟﻜﺒﻴﺭ‪.‬‬
‫‪ -8‬ﺒﻔﺭﺽ ﺃﻥ ‪ DS=7FA2H‬ﻭﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﺘﺴﺎﻭﻱ ‪ ،438EH‬ﻭﺍﻟﻤﻁﻠﻭﺏ‬
‫‪ -1‬ﺤﺴﺎﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ‬
‫‪ -2‬ﺍﻜﺘﺏ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ‬
‫‪ -3‬ﺤﺴﺎﺏ ﻋﻨﻭﺍﻥ ﺃﻭل ﺒﺎﻴﺕ ﻓﻲ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫‪ -4‬ﺤﺴﺎﺏ ﻋﻨﻭﺍﻥ ﺁﺨﺭ ﺒﺎﻴﺕ ﻓﻲ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫ﺍﻷﺠﻭﺒﺔ‪.7FA20 + 0000 = 7FA20 -3 .7FA2:438E -2 .7FA20 + 438E = 83DAE -1 :‬‬
‫‪7FA20 + FFFF = 8FA1F -4‬‬
‫‪ -9‬ﻤﺎ ﻫﻭ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴ‪‬ﺴﺘﺨﺩﻡ ﺍﻓﺘﺭﺍﻀﻴﹰﺎ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ؟ ﻭﻤـﺎ ﻫـﻲ‬
‫ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﺍﻟﺒﺩﻴﻠﺔ ؟‬

‫‪30‬‬
‫‪ -10‬ﻤﺎ ﻫﻭ ﺴﺠل ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟﺫﻱ ﻴ‪‬ﺴﺘﺨﺩﻡ ﺍﻓﺘﺭﺍﻀﻴﹰﺎ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ؟ ﻭﻤـﺎ ﻫـﻲ‬
‫ﺴﺠﻼﺕ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﺍﻟﺒﺩﻴﻠﺔ؟‬
‫‪ -11‬ﻤﺎ ﻫﻲ ﻗﻴﻤﺔ ‪ DS‬ﺍﻟﺘﻲ ﺘﹸﻤﻜﻨﻨﺎ ﻤﻥ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ‪67F66‬؟‬
‫‪ -12‬ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﺨ ّﺯﻨﺎ ﺍﻟﻜﻠﻤﺔ ‪ 00F9‬ﻓﻲ ﺍﻟﻤﻭﻗﻊ ‪ ،0F000h‬ﻫل ﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﺘﺨﺯﻴﻥ ﻤﺘﺤﺎ ٍﺫ ﺃﻡ ﻏﻴﺭ‬
‫ﻤﺘﺤﺎﺫٍ؟ ﻫل ﻴﺠﺭﻱ ﻗﺭﺍﺀﺓ ﺍﻟﻜﻠﻤﺔ ‪ 00F9‬ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﻤﺭﺤﻠﺔ ﺃﻡ ﻤﺭﺤﻠﺘﻴﻥ؟‬
‫‪ -13‬ﺒﻴﻥ ﺼﺤﺔ ﻜل ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪MOV AX, 58FCH‬‬


‫‪MOV DS, 2341H‬‬
‫‪MOV CS, 3F47H‬‬
‫‪MOV BH, 99H‬‬
‫‪MOV 250Fh, CH‬‬
‫]‪MOV [DI], [BX‬‬
‫]‪MOV AX, [BX][BP‬‬
‫]‪MOV AL, [DI][BP‬‬

‫‪ -14‬ﺒﻔﺭﺽ ﺃﻥ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﻗﺎﻤﺕ ﺒﺠﻤﻊ ﺍﻟﻘﻴﻤﺘـﻴﻥ‪ 00110100 11110101 :‬ﻭ ‪10010101‬‬
‫‪ ،11101011‬ﻤﺎ ﻫﻲ ﻗﻴﻤﺔ ﺍﻟﺭﺍﻴﺎﺕ ‪ ZF‬ﻭ ‪ AF‬ﻭ ‪ SF‬ﻭ ‪ CF‬ﻭ ‪ PF‬ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺍﻟﺠﻤﻊ؟‬
‫‪ -15‬ﻤﺎ ﻫﻭ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪ AH‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪MOV AX, 1020h‬؟‬
‫‪ -16‬ﻤﺎ ﻫﻭ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻤﻌﺎﻤل ﺍﻟﻭﺠﻬـﺔ ﻓـﻲ ﺍﻟﺘﻌﻠﻴﻤـﺔ ]‪ ،MOV DX, [DI‬ﺒﻔـﺭﺽ ﺃﻥ‬
‫‪ ES=0000h ،DS=0200h‬ﻭ ‪DI=100h‬؟‬
‫‪ -17‬ﻤﺎ ﻫﻭ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻓـﻲ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪ MOV [BP-1], BL‬ﺒﻔـﺭﺽ ﺃﻥ‬
‫‪ SS=2000h ،DS=0200h‬ﻭ ‪BP=30h‬؟‬
‫‪ -18‬ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ‪ [DF]=1‬ﻭ ‪ [SI]=500h‬ﻭ ‪ [DI]= 0300h‬ﻓﻤﺎ ﻫﻲ ﻗﻴﻤﺔ ‪ SI‬ﻭ ‪ DI‬ﺒﻌـﺩ ﺘﻨﻔﻴـﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOVS BYTE‬؟‬

‫‪31‬‬
‫ﺍﻟﻔﺼل ﺍﻟﺭﺍﺒﻊ‬
‫ﺍﻟﺒﺭﻤﺠﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‬

‫ﺍﻟﻬﺩﻑ ﻤﻥ ﻫﺫﺍ ﺍﻟﻔﺼل‬


‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺒﻨﻴﺔ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺒﻨﻴﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻤﻬﻤﺔ ﺍﻟﻤﻭﺠﻬﺎﺕ‬
‫™ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﺘﻤﻬﻴﺩ‬
‫ﻨﻬﺘﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺒﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺞ ﺒﻠﻐﺔ ﺘﺠﻤﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻭﺘﻨﻔﻴـﺫﻫﺎ ﻋﻠـﻰ ﺍﻟﺤﺎﺴـﻭﺏ‬
‫‪1‬‬
‫ﻤﻥ ﺸـﺭﻜﺔ ﻤِﻜﺭﻭﺴـﻭﻓﺕ ‪assembler‬‬ ‫ﺍﻟﺸﺨﺼﻲ‪ .‬ﻭﺴﻨﺴﺘﺨﺩﻡ‪ ،‬ﻤﻥ ﺃﺠل ﺫﻟﻙ‪ ،‬ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺠ ﱢﻤﻊ‬
‫‪ MASM‬ﻟﺘﺭﺠﻤﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺘﺤﻭﻴﻠﻬﺎ ﺇﻟﻰ ﻤﻠﻔﺎﺕ ﺘﻨﻔﻴﺫﻴﺔ‪.‬‬
‫ﻹﻨﺸﺎﺀ ﻤﻠﻑ ﺘﻨﻔﻴﺫﻱ ﺍﻨﻁﻼﻗﹰﺎ ﻤﻥ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺘﻨﻔﻴﺫ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟـﺜﻼﺙ‬
‫ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﺤﺭﺭ ﻨﺼﻭﺹ ﻤﻨﺎﺴﺏ ﻭﻤﻥ ﺜﹸﻡ ﺘﺨﺯﻴﻨﻪ ﺒﺎﻟﻼﺤﻘﺔ ‪،asm‬‬ ‫‪-1‬‬

‫ﻭﻟﻴﻜﻥ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﻨﺎﺘﺞ ﻫﻭ ‪.Myfile.asm‬‬


‫ﺘﺤﻭﻴل )ﺘﺭﺠﻤﺔ( ﺍﻟﻤﻠﻑ ‪ Myfile.asm‬ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﺭﻨـﺎﻤﺞ ﺍﻟﻤﺠﻤ‪‬ـﻊ ‪ MASM‬ﺃﻭ‬ ‫‪-2‬‬

‫ﺒﺭﻨﺎﻤﺞ ﻤﺠﻤﻊ ‪ assembler‬ﺁﺨﺭ ﻤﻨﺎﺴﺏ‪ .‬ﻴﻭﻟﺩ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺠﻤﻊ ﺍﻟﻤﻠﻑ ‪ ،Myfile.obj‬ﻭ ‪‬ﻴﺠﺭﻱ‬
‫ﻓﻲ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﺃﻴﻀﹰﺎ ﺍﻜﺘﺸﺎﻑ ﺍﻷﺨﻁﺎﺀ ﺍﻟﻨﺤﻭﻴﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻤﻠﻑ ‪.Myfile.asm‬‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺒﺭﻨﺎﻤﺞ ﺭﺍﺒﻁ ‪ 2LINKER‬ﻟﺘﺤﻭﻴل ﺍﻟﻤﻠﻑ ‪ Myfile.obj‬ﻤﻊ ﻤﻠﻔﺎﺕ ﺃﺨـﺭﻯ )ﺇﺫﺍ ﻜـﺎﻥ‬ ‫‪-3‬‬

‫ﺍﻟﺒﺭﻨﺎﻤﺞ ‪‬ﻤﻭ ‪‬ﺯﻋﹰﺎ ﻋﻠﻰ ﻋﺩﺓ ﻤﻠﻔﺎﺕ( ﺇﻟﻰ ﺍﻟﻤﻠﻑ ﺍﻟﺘﻨﻔﻴﺫﻱ ‪ Myfile.exe‬ﺃﻭ ‪.Myfile.com‬‬

‫‪ 1‬ﺑﺮﻧﺎﻣ ‪‬ﺞ ﻣﻬ ‪‬ﻤﺘ‪‬ﻪ ﲢﻮﻳ ﹸﻞ ﺍﻟﱪﺍﻣ ِﺞ ﺍﳌﻜﺘﻮﺑ ِﺔ ﺑﻠﻐ ِﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ ،‬ﺍﻟﱵ ﻳ‪‬ﻔﻬﻤﻬﺎ ﺍﻹﻧﺴﺎﻥﹸ‪ ،‬ﺇﱃ ﻟﻐ ِﺔ ﺁﻟ ٍﺔ ﻗﺎﺑﻠ ٍﺔ ﻟﻠﺘﻨﻔﻴﺬ‪.‬‬
‫ﺞ ﺗﻨﻔﻴﺬي‪ .‬ﻗﺪ ﻳَﻜﻮن ﻟﻠﺮاﺑﻂ‬
‫ت ﻹﻧﺸﺎء ﺑﺮﻧﺎﻣ ٍ‬
‫ت ﻣﻌﻄﻴﺎ ٍ‬
‫ت ﻣُﺼﺮﱠﻓ ًﺔ ‪ compiled modules‬وﻣﻠﻔﺎ ِ‬
‫ﻂ َﻧﺴِﻴﻘَﺎ ٍ‬ ‫‪ 2‬ﺑﺮﻧﺎﻣ ٌ‬
‫ﺞ ﻳَﺮﺑ ُ‬
‫ﻒ أﺧﺮى أﻳﻀًﺎ آﺈﻧﺸﺎء اﻟﻤﻜﺘﺒﺎت‪.‬‬ ‫وﻇﺎﺋ ُ‬

‫‪1‬‬
‫ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﹶﺘﻔﹶﺤﺹ ﻋﻤل ﺍﻟﺒﺭﻨـﺎﻤﺞ ﺒﺎﺴـﺘﺨﺩﺍﻡ ﺒﺭﻨـﺎﻤﺞ ﻤ‪‬ـ ﹶﻨﻘﱢﺢ ‪ 3debugger‬ﻤﺜـل ﺍﻟﺒﺭﻨـﺎﻤﺞ‬
‫‪ CODEVIEW‬ﺍﻟﺫﻱ ﻫﻭ ﺠﺯﺀ ﻤﻥ ﺤﺯﻤﺔ ﺒﺭﻤﺠﻴﺎﺕ ‪.MASM‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺜﻼﺙ ﺍﻟﺴﺎﺒﻘﺔ ﻤﻊ ﺍﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﻜل ﻤﺭﺤﻠـﺔ ﻭﻜـﺫﻟﻙ‬
‫ﻤ‪‬ﺩﺨل ﻭﻤ‪‬ﺨﺭﺝ ﻜل ﻤﺭﺤﻠﺔ‪.‬‬

‫‪1‬‬ ‫‪2‬‬ ‫‪3‬‬

‫ﺒﻨﻴﺔ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‬


‫ﺒﻨﻴﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬
‫ﻴﺘﺄﻟﻑ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻤﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻌﺒﺎﺭﺍﺕ ‪ .statements‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺘـﻀﻤﻥ‬
‫ﺠﻪ ‪ directive‬ﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺠ ‪‬ﻤﻊ‪.‬‬
‫ﺍﻟﻌﺒﺎﺭﺓ ﺇﺤﺩﻯ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻭ ﻤ‪‬ﻭ ‪‬‬

‫]‪[label:] REFIX MNEMONIC [OPERATORS] [;COMMENT‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺗﻌﻠﻴﻖ‬
‫ﻟﺼﺎﻗﺔ‬ ‫ﺑﺎﺩﺋﺔ‬

‫ﻻ ﻋﻠﻰ ﻋﺒﺎﺭﺓ ﻨﻤﻭﺫﺠﻴﺔ ﻴﻤﻜﻥ ﺃﻥ ﻨﺠﺩﻫﺎ ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪:‬‬


‫ﻴﺒﻴﻥ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬

‫‪START:‬‬ ‫‪MOV AX, BX‬‬ ‫‪; copy BX into AX‬‬

‫ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻀﻤﻥ ﺍﻟﻌﺒﺎﺭﺓ ﺒﻌﺽ ﺃﻭ ﻜل ﺍﻟﺤﻘﻭل ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺺ‬
‫ﺤ ِ‬
‫‪ 3‬ﺑﺮﻧﺎﻣ ‪‬ﺞ ﻣﺼ ‪‬ﻤ ‪‬ﻢ ﻟﻠﻤﺴﺎﻋﺪﺓ ﰲ ﺗﻨﻘﻴﺢ ﺑﺮﻧﺎﻣ ٍﺞ ﺁﺧﺮ‪ ،‬ﲝﻴﺚ ﻳ‪‬ﺴﻤﺢ ﻟﻠﻤﱪﻣﺞ ﺑﺘﻨﻔﻴﺬ ﺑﺮﻧﺎﳎﻪ ﺧﻄﻮ ﹰﺓ ﻓﺨﻄﻮﺓ‪ ،‬ﻭﺗ‪‬ﻔ ‪‬‬
‫ﻣﻌﻄﻴﺎﺕ ﺍﻟﱪﻧﺎﻣﺞ‪ ،‬ﻭﻣﺮﺍﻗﺒ ِﺔ ﺑﻌﺾ ﺍﻟﺸﺮﻭﻁ ﻛﺘﻠﻚ ﺍﳌﺘﻌﻠﻘﺔ ﺑﻘﻴﻢ ﺍﳌﺘﻐﻴ‪‬ﺮﺍﺕ‪.‬‬

‫‪2‬‬
‫ﻼ ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﻠﺼﺎﻗﺔ ‪ :label‬ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ‪‬ﻤﻌ‪‬ﺭﻑ ﻴﻭﻀﻊ ﻗﺒل ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻤﺜ ﹰ‬
‫ﺍﻟﻘﻔﺯ ﻜﻌﻨﻭﺍﻥ ﺭﻤﺯﻱ ‪ symbolic address‬ﻟﻠﻌﻨﻭﺍﻥ ﺍﻟﺘﻲ ﺴﺘﻘﻔﺯ ﺇﻟﻴﻪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻭﻀﹰﺎ ﻋﻥ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻟﻬﺎ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻘﻔﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،JMP‬ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ‪ ،‬ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺃﻭ ﺍﻟﻌﻨﻭﺍﻥ ﺫﻱ ﺍﻟﻠﺼﺎﻗﺔ ‪ START‬ﻭﻓﻴﻪ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪:MOV AL, 0h‬‬
‫‪JMP START‬‬
‫‪….‬‬

‫‪START:‬‬ ‫;‪MOV AL, 0h‬‬

‫ﺘﻌﻠﻴﻤﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ :‬ﻤﺜل ‪ MOV‬ﻭ ‪.ADD‬‬

‫ﻤﻌﺎﻤﻼﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ :‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﺘﺎﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ﻤﻌﺎﻤل ﺃﻭ ﺍﺜﻨﻴﻥ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﻴﻜـﻭﻥ ﺍﻟﻤﻌﺎﻤـل‬
‫ﻤﻀﻤ‪‬ﻨﹰﺎ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ‪ ،‬ﺃﻭ ﻻ ﺘﺘﻀﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻱ ﻤﻌﺎﻤل‪ .‬ﻓﻲ ﺤﺎل ﺘﻀﻤﻨﺕ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻜﺜﺭ ﻤﻥ‬
‫ﻤﻌﺎﻤل ﻴﺠﺭﻱ ﺍﻟﻔﺼل ﺒﻴﻨﻬﻡ ﺒﻔﺎﺼﻠﺔ )‪.(,‬‬
‫ﻤﺜﺎل‪ :‬ﻻ ﺘﺤﺘﺎﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ 4 NOP‬ﺇﻟﻰ ﺃﻱ ﻤﻌﺎﻤل‪ ،‬ﺒﻴﻨﻤﺎ ﻴﻜﻭﻥ ﺍﻟﻤﻌﺎﻤل ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ CLC‬ﻤـﻀﻤﻨﹰﺎ‬
‫ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ‪ .‬ﺘﺤﺘﺎﺝ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ INC AL‬ﺇﻟﻰ ﻤﻌﺎﻤل ﻭﺍﺤـﺩ‪ ،‬ﺃﻤـﺎ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪MOV CX, AX‬‬
‫ﻓﺘﺤﺘﺎﺝ ﺇﻟﻰ ﻤﻌﺎﻤﻠﻴﻥ‪.‬‬

‫ﺘﻌﻠﻴﻕ‪ :‬ﻜل ﻤﺎ ﻴﻜﺘﺏ ﺒﻌﺩ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻤﻨﻘﻭﻁﺔ );( ﻫﻭ ﺘﻌﻠﻴﻕ ‪ comment‬ﻴﻬﻤﻠﻪ ﺍﻟﻤﺠﻤﻊ ﺃﺜﻨﺎﺀ ﺘﺤﻭﻴﻠـﻪ‬
‫ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﻤﺠﻤﻊ ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ‪.‬‬

‫ﺒﺎﺩﺌﺔ‪ :‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻀﻤﻥ ﺒﻌﺽ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﺎﺩﺌﺔ ‪ prefix‬ﻗﺒل ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﺜل ﺍﻟﺒﺎﺩﺌﺔ ‪.REP‬‬

‫ﻤﻭﺠﱢﻬﺎﺕ ﺍﻟﻤﺠﻤﻊ ‪Assembler Directives‬‬


‫ﺠﻬﺎﺕ ‪ Directives‬ﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻭﺇﻨﻤﺎ ﹸﺘﻭ ‪‬‬
‫ﺠﻪ ﺍﻟﻤﺠﻤﻊ ﺇﻟﻰ ﻤﺎ ﻴﺠﺏ ﻓﻌﻠـﻪ ﺤـﻴﻥ ﻴﺤـﻭّل‬ ‫ﻻ ﹸﺘﻭﻟﺩ ﺍﻟﻤﻭ ‪‬‬
‫ﺠﻬﺎﺕ‪ :‬ﺘﺼﺭﻴﺢ ﻋﻥ ﺜﻭﺍﺒـﺕ ﻭﻤﺘﺤـﻭﻻﺕ‪،‬‬
‫ﺒﺭﻨﺎﻤﺠﹰﺎ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ‪ .‬ﺘﺘﻀﻤﻥ ﻫﺫﻩ ﺍﻟﻤﻭ ‪‬‬
‫ﺘﻌﻴﻴﻥ ﻁﻭل ﺍﻟﻤﻜﺩﺱ‪ ،‬ﺘﺤﺩﻴﺩ ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴـﺔ ﻜـل‬
‫ﺇﺠﺭﺍﺌﻴﺔ‪... ،‬‬
‫ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﺜﻭﺍﺒﺕ‪ :‬ﻴﻤﻜﻥ ﺘﻌﺭﻴﻑ ﺜﺎﺒﺕ ‪ constant‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻭ ‪‬‬
‫ﺠﻪ ‪.EQU‬‬

‫‪4‬ﻻ ﺗﻨﻔﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ NOP‬ﺃﻱ ﻋﻤﻠﻴﺔ ﻭﻻ ﺗﺆﺛﺮ ﻋﻠﻰ ﺣﺎﻟﺔ ﺍﻟﺮﺍﻳﺎﺕ‪.‬‬

‫‪3‬‬
‫ﻻ ﺘﻌﺭﻴﻑ ﺍﻟﺜﺎﺒﺕ ‪ K‬ﻭﺇﻋﻁﺎﺅﻩ ﺍﻟﻘﻴﻤﺔ ‪ ،5‬ﺜﹸﻡ ﺇﺴـﻨﺎﺩ ﺍﻟﺜﺎﺒـﺕ ‪K‬‬
‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫ﺇﻟﻰ ﺍﻟﺴﺠل ‪ .AX‬ﻤﺎ ﻫﻭ ﻤﺤﺘﻭﻯ ‪ AX‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ‪MOV‬؟ ﺒﺎﻟﻁﺒﻊ ‪0005h‬‬
‫‪K‬‬ ‫‪EQU 5h‬‬
‫‪MOV AX, K‬‬
‫ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺍﻷﻋﺩﺍﺩ ﺒﺎﻟﺘﺭﻤﻴﺯ ﺍﻟﻌﺸﺭﻱ ﺃﻭ ﺍﻟﺴﺘﺔ ﻋﺸﺭ ﺃﻭ ﺍﻻﺜﻨﺎﻨﻲ‪.‬‬

‫ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺘﺤﻭل‪ :‬ﺍﻟﻤﺘﺤﻭل ﻫﻭ ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪‬ﻴﺴﺘﺨﺩﻡ ﻟﺤﻔﻅ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺅﻗﺘﺔ‪ .‬ﻋﻨﺩ ﻜﺘﺎﺒﺔ‬
‫ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ ،‬ﻤﻥ ﺍﻷﺴﻬل ﻋﻠﻰ ﺍﻟﻤﺒﺭﻤﺞ ﺍﺴﺘﺨﺩﺍﻡ ﺍﺴﻡ ﺍﻟﻤﺘﺤﻭل ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻤﺜل ‪،var1‬‬
‫ﻋﻭﻀﹰﺎ ﻋﻥ ﺍﺴﺘﺨﺩﺍﻡ ﻋﻨﻭﺍﻨﻪ ﺍﻟﻤﻨﻁﻘﻲ ﻤﺜل‪.5A72h:235Bh :‬‬
‫ﻴﻤﻜﻥ ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺘﺤﻭل ﻁﻭﻟﻪ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻭﺇﻋﻁﺎﺌﻪ ﻗﻴﻤﺔ ﺍﺒﺘﺩﺍﺌﻴﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻭﺠﻪ ‪ DB‬ﻜﻤﺎ ﻓﻲ‬
‫ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪Var1 DB‬‬ ‫‪02h‬‬
‫ﻭﻴﻤﻜﻥ ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺘﺤﻭل ﻁﻭﻟﻪ ‪ 2‬ﺒﺎﻴﺕ ﻭﺇﻋﻁﺎﺌﻪ ﻗﻴﻤﺔ ﺍﺒﺘﺩﺍﺌﻴﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻭﺠﻪ ‪ DW‬ﻜﻤﺎ ﻓﻲ‬
‫ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪Var2 DW‬‬ ‫‪03C5h‬‬
‫ﺘﻌﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﻤﺘﺤﻭل ‪ Var1‬ﻓﻲ ‪:AL‬‬
‫‪MOV AL, var1‬‬

‫ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺼﻔﻭﻓﺔ‪ :‬ﻴﻤﻜﻨﻨﺎ ﺃﻴﻀﹰﺎ ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻭﺇﻋﻁﺎﺅﻫﺎ ﻗﻴﻤﹰﺎ ﺍﺒﺘﺩﺍﺌﻴﺔ‪ .‬ﻴﺠﺭﻱ ﻓـﻲ‬
‫ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﺤﺠﺯ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ a‬ﺒﻁﻭل ‪ 6‬ﺒﺎﻴﺕ ﻭﺇﻋﻁﺎﺅﻫﺎ ﻗﻴﻤﹰﺎ ﺍﺒﺘﺩﺍﺌﻴﺔ‪.‬‬
‫‪a‬‬ ‫‪DB‬‬ ‫‪48h, 65h, 6Ch, 6Ch, 6Fh, 00h‬‬
‫ﺘﻌﺘﺒﺭ ﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺎﺭﻑ ‪ string‬ﻤﺜﺎل ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻁﻭل ﻜل ﻋﻨﺼﺭ ﻤﻨﻬﺎ ﺒﺎﻴﺕ‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﺍﻟﻤﺜﺎل‬
‫ﺍﻟﺘﺎﻟﻲ ﺤﺠﺯ ﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺎﺭﻑ ‪ b‬ﻭﺇﺴﻨﺎﺩ ﺍﻟﻜﻠﻤﺔ '‪ 'Hello‬ﺇﻟﻴﻬﺎ‪.‬‬
‫‪b‬‬ ‫‪DB‬‬ ‫'‪'Hello‬‬
‫ﻋﻨﺩﻤﺎ ‪‬ﻴﺼﺎﺩﻑ ﺍﻟ ‪‬ﻤﺠﻤﻊ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺒﻴﻥ ﻋﻼﻤﺘﻲ ﺍﻗﺘﺒﺎﺱ ﻴﺤﻭﻟﻬﺎ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺔ ﻤـﻥ ﺍﻟﺒﺎﻴﺘـﺎﺕ‬
‫ﺘﺤﻭﻱ ﺭﻤﺎﺯ ‪ ascii‬ﻟﻤﺤﺎﺭﻑ ﺍﻟﺴﻠﺴﻠﺔ‪.‬‬
‫ﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﻱ ﻋﻨﺼﺭ ﻤﻥ ﺍﻟﻤﺼﻔﻭﻓﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻷﻗﻭﺍﺱ ] [‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺭﺍﺒﻊ ﻤﻥ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ a‬ﻓﻲ ‪:AL‬‬
‫]‪MOV AL, a[3‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺃﻴﻀﹰﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﺩﻟﻴل ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺤﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ‬
‫ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫]‪MOV AL, a[SI‬‬

‫‪4‬‬
‫ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺅﺜﺭ ‪ DUP‬ﻟﻠﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻜﺒﻴﺭﺓ‪ ،‬ﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪c‬‬ ‫‪DB‬‬ ‫)?(‪10 DUP‬‬
‫‪d‬‬ ‫‪DW‬‬ ‫)‪10 DUP(8‬‬

‫ﹸﺘﺼﺭﺡ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﺒﺎﻴﺘﺎﺕ ﻁﻭﻟﻬﺎ ‪ ،10‬ﺩﻭﻥ ﺃﻥ ﺘﻌﻁﻲ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ ﻗﻴﻤـﹰﺎ‬
‫ﺍﺒﺘﺩﺍﺌﻴﺔ‪ .‬ﻓﻲ ﺤﻴﻥ ﹸﺘﺼﺭﺡ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺜﺎﻨﻴﺔ ﻋﻥ ﻤﺼﻔﻭﻓﺔ ﻜﻠﻤﺎﺕ ﻁﻭﻟﻬﺎ ﺃﻴﻀﹰﺎ ‪ ،10‬ﻭﻟﻜﻨﻬـﺎ ﺘﻌﻁـﻲ‬
‫ﺠﻤﻴﻊ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ‪.8‬‬
‫ﺍﻟﻤﻭﺠﻪ ‪ :ORG‬ﻴﺨﺒﺭ ﻫﺫﺍ ﺍﻟﻤﻭﺠﻪ ﺍﻟﻤﺠﻤﻊ ﺒﺄﻥ ﻴﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ )ﺃﻭ ﺍﻟﻤﻌﻁﻴﺎﺕ( ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﺒﺘـﺩﺍ ًﺀ‬
‫ﻤﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﻤﻭﺠﻪ ‪ .ORG‬ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﺘﻘﻊ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤـﻥ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪MOV‬‬
‫‪ AL, 05h‬ﻓﻲ ﺍﻟﻤﻭﻗﻊ ‪ 100h‬ﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‪:‬‬
‫‪ORG 100h‬‬
‫‪MOV AL, 05h‬‬

‫ﺍﻟﺒﺎﺩﺌﺘﺎﻥ ‪ BYTE PTR‬ﻭ ‪ :WORD PTR‬ﻻ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺠﻤﻊ‪ ،‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‪ ،‬ﻤﻌﺭﻓﺔ ﻓﻴﻤـﺎ‬
‫ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺴﺠل ‪ BX‬ﻴﻌﻨﻭﻥ ﺒﺎﻴﺘﹰﺎ ﺃﻭ ﻜﻠﻤﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬
‫‪MOV [BX], 05h‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺎﺩﺌﺔ ‪ BYTE PTR‬ﺇﺨﺒﺎﺭ ﺍﻟﻤﺠﻤﻊ ﺃﻥ ﻁﻭل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻴﺴﺎﻭﻱ ﺒﺎﻴﺕ ﻭﺍﺤﺩ‪ ،‬ﻜﻤـﺎ‬
‫ﻴﻤﻜﻨﻨﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺎﺩﺌﺔ ‪ WORD PTR‬ﺇﺨﺒﺎﺭ ﺍﻟﻤﺠﻤﻊ ﺃﻥ ﻁﻭل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻴﺴﺎﻭﻱ ‪ 2‬ﺒﺎﻴﺕ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺒﺎﻴﺕ ‪ 05h‬ﻓﻲ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻨﻭﻥ ﺒـ ‪:BX‬‬
‫‪MOV [BX], BYTE PTR 05h‬‬
‫ﺒﻴﻨﻤﺎ ﺘﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻜﻠﻤﺔ ‪ 0005h‬ﻓﻲ ﻜﻠﻤﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﻨﻭﻨﺔ ﺒـ ‪:BX‬‬
‫‪MOV [BX], WORD PTR 05h‬‬

‫ﺍﻟ ‪‬ﻤﺅﺜﺭ ‪ :OFFSET‬ﻴﻌﻴﺩ ﺍﻟﻤﺅﺜﺭ ‪ OFFSET‬ﺍﻟﻤﺴﺎﻓﺔ ﺒﻴﻥ ﻟﺼﺎﻗﺔ ﺃﻭ ﻤﺘﺤﻭل ﻋﻥ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ‪ .‬ﻓﻲ‬
‫ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻨﻀﻊ ﻓﻲ ‪ BX‬ﻋﻨﻭﺍﻥ ﺍﻟﻤﺘﺤﻭل ‪ ،VAR1‬ﺜﻡ ﻨﺴﺘﺨﺩﻡ ﻋﻨﻭﻨﺔ ﻏﻴـﺭ ﻤﺒﺎﺸـﺭﺓ ﺒﺎﻟـﺴﺠل‬
‫ﻟﺘﻐﻴﻴﺭ ﻤﺤﺘﻭﻯ ‪.VAR1‬‬
‫‪VAR1 DB 22h‬‬
‫‪ORG 100h‬‬
‫‪MOV BX, OFFSET VAR1‬‬
‫‪MOV BYTE PTR [BX], 44h‬‬

‫ﺍﻟﻤﻭﺠﻬﺎﻥ ‪ PROC‬ﻭ ‪ :ENDP‬ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍﻥ ﺍﻟﻤﻭﺠﻬﺎﻥ ﻟﻠﺘﺼﺭﻴﺢ ﻋﻥ ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴـﺔ ﺇﺠﺭﺍﺌﻴـﺔ‪.‬‬


‫ﻴﺤﺘﺎﺝ ﻜل ﻤﻥ ﺍﻟﻤﻭﺠﻬﻴﻥ ‪ PROC‬ﻭ ‪ ENDP‬ﺇﻟﻰ ﻟﺼﺎﻗﺔ ﺘﺤﺘﻭﻱ ﺍﺴﻡ ﺍﻹﺠﺭﺍﺌﻴﺔ‪ .‬ﻴﺠﺏ ﺃﻥ ﻴﺤﺘﻭﻱ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺠﺭﺍﺌﻴﺔ ﻭﺍﺤﺩﺓ ﻋﻠﻰ ﺍﻷﻗل‪.‬‬
‫‪‬ﻴﻠﺤﻕ ﺒﺎﻟﻤﻭﺠﻪ ‪ PROC‬ﺍﻟﻜﻠﻤﺔ ‪) NEAR‬ﻋﻨﺩﻤﺎ ﺘﻘﻊ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟـﺭﺌﻴﺱ( ﺃﻭ‬

‫‪5‬‬
‫ﺍﻟﻜﻠﻤﺔ ‪) FAR‬ﻋﻨﺩﻤﺎ ﺘﻘﻊ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻓﻲ ﻤﻘﺘﻁﻊ ﻏﻴﺭ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺱ(‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪ADDEM‬‬ ‫‪PROC FAR‬‬
‫‪ADD BX, DX‬‬
‫‪MOV AX, BX‬‬
‫‪RET‬‬
‫‪ADDEN‬‬ ‫‪ENDP‬‬

‫ﺠﻪ ‪ ،MODEL‬ﺤﺠﻡ‬
‫ﺍﻟﻤﻭﺠﻪ ‪ :MODEL‬ﻴﺤﺩﺩ ﺍﻟﻤﺠﻤﻊ‪ ،‬ﺒﻨﺎ ًﺀ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻤﺤﺩﺩ ﺒﻌﺩ ﺍﻟﻤﻭ ‪‬‬
‫ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻜﻠﻴﺔ‪ .‬ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﺨﺘﻴﺎﺭ ﺃﺤﺩ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺍﻟﺤﺠﻡ‬ ‫ﻨﻤﻭﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ‬


‫ﺤﺠﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪ +‬ﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺃﻗل ﻤﻥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ؛ ‪CS=DS=SS‬‬ ‫‪TINY‬‬

‫ﺤﺠﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ≥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ≥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ؛‬ ‫‪SMALL‬‬

‫ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﺨﺘﻠﻑ ﻋﻥ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‪.‬‬


‫ﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ≥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺤﺠﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ≤ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‬ ‫‪MIDUM‬‬

‫ﺤﺠﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ≥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ≤ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‬ ‫‪COMPACT‬‬

‫ﺤﺠﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ≤ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ ≤ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‬ ‫‪LARG‬‬

‫ﻤﺜل ‪ LARG‬ﻭﻟﻜﻥ ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺤﺠﻡ ﻜل ﻤﺘﺤﻭل ﻟﻭﺤﺩﻩ ≤ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪.‬‬ ‫‪HUGE‬‬

‫ﻤﺜﺎل‪ :‬ﻨﺨﺘﺎﺭ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﻨﻤﻭﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ ‪:TINY‬‬


‫‪.MODEL‬‬ ‫‪TINY‬‬

‫ﺍﻟﺫﻱ ﻴﻌﻨﻲ ﺃﻥ ﺤﺠﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻤﻜﺩﺱ ﻤﻌﹰﺎ ﺃﻗل ﻤﻥ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻘﻊ ﺭﻤﺎﺯ‬
‫ﻭﻤﻌﻁﻴﺎﺕ ﻭﻤﻜﺩﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻫﺫﺍ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻔﻴﺩ ﻤﻥ ﺃﺠل ﺍﻟﺒـﺭﺍﻤﺞ‬
‫ﺍﻟﺼﻐﻴﺭﺓ‪ ،‬ﻭﻴﻭﻟﺩ ﺍﻟﺭﺍﺒﻁ ‪ ،LINKER‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ‪ ،‬ﺒﺭﻨﺎﻤﺠﹰﺎ ﺘﻨﻔﻴﺫﻴﹰﺎ ﻻﺤﻘﺘـﻪ ‪ com‬ﻭﻟـﻴﺱ ‪.exe‬‬
‫ﻴﺠﺏ ﺃﻥ ﺘﺒﺩﺃ ﺍﻟﺒﺭﺍﻤﺞ ﻤﻥ ﻨﻭﻉ ‪ com‬ﺒﺎﻟﻌﻨﻭﺍﻥ ‪.100h‬‬
‫ﻋﻨﺩ ﺍﺨﺘﻴﺎﺭ ﺃﺤﺩ ﻨﻤﺎﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻷﺨﺭﻯ ﻴﻜﻭﻥ ﻟﺩﻴﻨﺎ ﻋﻠﻰ ﺍﻷﻗل ﻤﻘﺘﻁﻊ ﻟﻠﺒﺭﻨﺎﻤﺞ ﻭﺁﺨﺭ ﻟﻠﻤﻌﻁﻴـﺎﺕ‪.‬‬
‫ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﻭﻟﺩ ﺍﻟﺭﺍﺒﻁ ﺒﺭﻨﺎﻤﺠﺎ ﺘﻨﻔﻴﺫﻴﺎ ﻻﺤﻘﺘﻪ ‪.exe‬‬

‫ﺠﻬﺎﺕ ‪ CODE ،STACK‬ﻭ ‪ :DATA‬ﺘﺤﺩﺩ ﻫﺫﻩ ﺍﻟﻤﻭﺠﻬﺎﺕ ﺒﺩﺍﻴﺔ ﻭﻨﻬﺎﻴﺔ ﻤﻘﺘﻁﻌﺎﺕ ﻤﻨﻁﻘﻴـﺔ‬
‫ﺍﻟﻤﻭ ﱢ‬
‫ﻀﻤﻥ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺘﺤﺘﻭﻱ ﺃﻏﻠﺏ ﺍﻟﺒﺭﺍﻤﺞ ﺜﻼﺙ ﻤﻘﺘﻁﻌﺎﺕ ﻋﻠﻰ ﺍﻷﻗل‪ ،‬ﻴﻤﻜﻥ ﺃﻥ‬
‫ﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ﻤﺘﺭﺍﻜﺒﺔ ﺠﺯﺌﻴﹰﺎ ﺃﻭ ﻜﻠﻴﹰﺎ ﻓﻴﻤﺎ ﺒﻴﻨﻬﺎ ﺃﻭ ﻤﻨﻔﺼﻠﺔ ﺘﻤﺎﻤﹰﺎ ﻋﻥ ﺒﻌﻀﻬﺎ‪.‬‬
‫‪‬ﻴﺤﺩﺩ ﺍﻟﻤﻭﺠﻪ ‪ STACK‬ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻜﺩﺱ ﻭ ﹸﺘﺤﺩﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﻫﺫﺍ ﺍﻟﻤﻭﺠﻪ ﺤﺠـﻡ ﺍﻟـﺫﺍﻜﺭﺓ‬

‫‪6‬‬
‫ﻼ ﻴﺤﺠﺯ ﺍﻟﺘﻌﺒﻴﺭ ﺍﻟﺘﺎﻟﻲ ‪ 256‬ﺒﺎﻴﺕ ﻟﻌﻤل ﺍﻟﻤﻜﺩﺱ‬
‫ﺍﻟﻤﺭﺍﺩ ﺤﺠﺯﻫﺎ ﻟﻌﻤل ﺍﻟﻤﻜﺩﺱ‪ ،‬ﻓﻤﺜ ﹰ‬
‫‪.STACK 100h‬‬
‫ﻭﻴﺤﺩﺩ ﺍﻟﻤﻭﺠﻪ ‪ DATA‬ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻭﻴﺠﺏ ﺃﻥ ﻴ‪‬ﺼﺭﺡ ﻋﻥ ﺠﻤﻴـﻊ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻓـﻲ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﺒﺎﺸﺭﺓ ﺒﻌﺩ ﻫﺫﺍ ﺍﻟﻤﻭﺠﻪ‪ ،‬ﻤﺜﺎل‪:‬‬
‫‪.DATA‬‬
‫‪DATAW‬‬ ‫‪DW‬‬ ‫‪213FH‬‬
‫‪DATA1‬‬ ‫‪DB‬‬ ‫‪52H‬‬

‫ﻭﻴﺤﺩﺩ ﺍﻟﻤﻭﺠﻪ ‪ CODE‬ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻭﻴﺠﺏ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﺒﺎﺸﺭﺓ ﺒﻌﺩ ﻫﺫﺍ ﺍﻟﻤﻭﺠـﻪ‪،‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪.CODE‬‬
‫‪MOV AX, @DATA‬‬
‫‪MOV DS, AX‬‬
‫‪....‬‬ ‫‪...‬‬
‫ﺘﻌﻤل ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﺍﻟﺴﺎﺒﻘﺘﺎﻥ ﻋﻠﻰ ﺸﺤﻥ ‪ DS‬ﺒﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺘﹶـﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻷﻭﻟـﻰ‬
‫ﺍﻟﻤﻭﺠﻪ @ ﻟﺘﺤﺩﻴﺩ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ‪.‬‬

‫ﺍﻟﻤﻭﺠﻪ ‪ :SEG‬ﻴﻌﻴﺩ ﺍﻟ ‪‬ﻤﺅﺜﺭ ‪ SEG‬ﺤﻘل ﺍﻟﻤﻘﺘﻁﻊ ﻤﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﻤﺘﺤﻭل ﺃﻭ ﻟﻠﺼﺎﻗﺔ‪.‬‬


‫ﻤﺜﺎل‪ :‬ﹸﺘﻌﻴﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOV AX, seg array‬ﺍﻟﻤﻘﺘﻁﻊ ﺍﻟ ‪‬ﻤﻌ ‪‬ﺭﻑ ﻀﻤﻨﻪ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪.array‬‬

‫ﺍﻟﻤﻭﺠﻪ ‪ :END‬ﻴﺩل ﻋﻠﻰ ﻨﻬﺎﻴﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬


‫ﻤﺜﺎل ﻨﻤﻭﺫﺠﻲ‬
‫‪‬ﻴﻌﺘﺒﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎل ﻨﻤﻭﺫﺠﻲ ﻋﻥ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﻤﺠﻤـﻊ‪ ،‬ﻴﻤﻜـﻥ ﺘﺨـﺯﻴﻥ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﻤﻠﻑ ﻭﻟﻴﻜﻥ ‪ hello.asm‬ﺜﻡ ﺘﺭﺠﻤﺘﻪ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ‪ ،MASM‬ﺜﻡ ﻁﻠﺏ ﺒﺭﻨﺎﻤﺞ‬
‫‪ LINKER‬ﻟﺘﻭﻟﻴﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﻔﻴﺫﻱ ‪ .hello.exe‬ﻭﺃﺨﻴﺭﹰﺍ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺒﺭﻨﺎﻤﺞ ‪ hello.exe‬ﺴﻭﻑ ﻴﻁﺒﻊ‬
‫ﻋﻠﻰ ﺍﻟـﺸﺎﺸﺔ ﺍﻟﺠﻤﻠـﺔ ‪ Hello, word‬ﻋـﺸﺭ‬
‫‪TITLE Hello World Program‬‬
‫‪.MODEL SMALL‬‬ ‫ﻤﺭﺍﺕ‪.‬‬
‫‪.STACK 64‬‬
‫‪.DATA‬‬
‫"‪HelloMsg DB "Hello, World",13,10,"$‬‬
‫‪.CODE‬‬
‫‪MAIN PROC FAR‬‬
‫‪MOV AX,@DATA‬‬
‫‪MOV DS,AX‬‬
‫‪MOV AH,09H‬‬
‫‪MOV DX,OFFSET HelloMsg‬‬
‫‪MOV CX,000Dh‬‬
‫‪Disploop:‬‬
‫‪INT 21h‬‬
‫‪LOOP Disploop‬‬
‫‪Exit‬‬ ‫‪:‬‬
‫‪MOV AH,4CH‬‬
‫‪INT 21h‬‬
‫‪MAIN ENDP‬‬
‫‪END MAIN‬‬ ‫‪7‬‬
‫ِﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪8088/8086‬‬

‫ﻟﻜل ﺘﻌﻠﻴﻤﺔ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺭﻤـﺎﺯ ﺍﺜﻨـﺎﻨﻲ ﻤﺨﺘﻠـﻑ ﻴـﺴﻤﻰ ﺭﻤـﺎﺯ ﺍﻵﻟـﺔ‬
‫‪ ،Machine Code‬ﺘﹶﻔﻙ ﻭﺤﺩﺓ ﺍﻟﺘﻨﻔﻴﺫ ﻭ ﹸﺘﺤﻠل ﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﻤﻥ ﺜﻡ ﹸﺘﻨﻔﺫﻫﺎ ﻭﺍﺤﺩﺓ ﺘﻠﻭ ﺍﻷﺨﺭﻯ‪.‬‬
‫ﻋﻨﺩ ﻜﺘﺎﺒﺘﻙ ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻊ ﻓﺈﻨﻙ ﻻ ﺘﻬﺘﻡ ﻤﺒﺩﺌﻴﹰﺎ ﺒ ِﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻭﻤﻊ ﺫﻟﻙ ﻓﺈﻥ ﻤﻌﺭﻓﺘﻙ ﺒﻬﺫﻩ‬
‫ﺍﻟ ِﺭﻤﺎﺯﺍﺕ ﻴﺠﻌﻠﻙ ﺘﺨﺘﺎﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻙ ﻋﻠﻰ ﻨﺤﻭ ﺃﻓﻀل‪ ،‬ﻷﻥ ﻁﻭل ﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻴﻤﺘﺩ‬
‫ﻤﻥ ﺒﺎﻴﺕ ﺇﻟﻰ ‪ 6‬ﺒﺎﻴﺘﺎﺕ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ ﺯﻤﻥ ﺍﻟﺘﻨﻔﻴﺫ ﻴﺨﺘﻠﻑ ﺃﻴﻀﹰﺎ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ﺃﺨﺭﻯ‪.‬‬
‫ﻴﻤﻜﻥ ﻟﻤﻥ ﻴﺭﻴﺩ ﺍﻹﻁﻼﻉ ﻋﻠﻰ ﻤﺼﺎﻏﺎﺕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓـﻲ ﺍﻟﻤﻌـﺎﻟﺞ ‪ 8088/8086‬ﻗـﺭﺍﺀﺓ ﺍﻟﻤﻠـﻑ‬
‫ﺭﻤﺎﺯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬

‫ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﺴﻭﻑ ﻨﺸﺭﺡ ﻓﻴﻤﺎ ﻴﻠﻲ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻀﻤﻥ ﻤﺠﻤﻭﻋﺎﺕ ﻟﻬـﺎ ﺍﻟﺨﺎﺼـﻴﺔ‬
‫ﻨﻔﺴﻬﺎ‪ .‬ﻴﺤﺘﻭﻱ ﺍﻟﻤﻠﻑ ‪ x866.pdf‬ﺘﻔﺎﺼﻴل ﺃﻜﺜﺭ ﻋﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ‬


‫ﺘﻀﻡ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﺒﺘﺒـﺎﺩل ﺒﺎﻴـﺕ ﺃﻭ‬
‫ﻜﻠﻤﺔ ﺒﻴﻥ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻭﺴﺠل‪ .‬ﺴﻨﺸﺭﺡ ﻓﻲ ﻫﺫﻩ ﺍﻟﻔﻘﺭﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪MOV, XCHG, XLAT, LDS, LEA, LES‬‬
‫ﻭﺴﻨﻌﺭﺽ ﻓﻲ ﻓﻘﺭﺍﺕ ﻻﺤﻘﺔ‪ ،‬ﻋﻠﻰ ﻨﺤﻭ ﻤﻨﻔﺼل‪ ،‬ﺘﻌﻠﻴﻤﺎﺕ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘـﻲ ﺘـﺭﺘﺒﻁ ﺒﻌﻤـل‬
‫ﺍﻟﻤﻜﺩﺱ ﻭﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬
‫ﺘﻌﻠﻴﻤﺔ ‪5MOV‬‬
‫ﺘﻨﺴﺦ ﺘﻌﻠﻴﻤﺔ ‪ MOV‬ﺒﺎﻴﺘﹰﺎ ﺃﻭ ﻜﻠﻤﺔ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﺇﻟﻰ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪ ،‬ﻭﻻ ﺘﺅﺜﺭ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﻋﻠﻰ ﺤﺎﻟﺔ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪MOV D,S‬‬ ‫)‪(S)→(D‬‬ ‫ﻻ ﺃﺤﺩ‬

‫‪ 5‬ﻳﻤﻜﻦ رﺑﻂ آﻞ ﺗﻌﻠﻴﻤﺔ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻣﻊ اﻟﺘﻌﻠﻴﻤﺔ اﻟﻤﻮاﻓﻘﺔ ﻓﻲ اﻟﻤﻠﻒ ‪ ،8086_instruction_set.html‬آﻤﺎ ﻓﻌﻠﻨﺎ‬
‫ﻣﻊ ‪MOV‬‬

‫‪8‬‬
‫ﻻ ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ‪ 6MOV‬ﻓﻲ ﺤﺎﻟﺔ‪:‬‬
‫ƒ ﻨﺴﺦ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺫﺍﻜﺭﺓ ﺇﻟﻰ ﺫﺍﻜﺭﺓ‪.‬‬
‫ƒ ﺇﺴﻨﺎﺩ ﻗﻴﻤﺔ ﻓﻭﺭﻴﺔ ﻟﺴﺠل ﻤﻘﺘﻁﻊ‪.‬‬
‫ƒ ﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺴﺠل ﻤﻘﺘﻁﻊ ﺇﻟﻰ ﺴﺠل ﻤﻘﺘﻁﻊ‪.‬‬
‫ƒ ﻨﺴﺦ ﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﻤﺅﺸﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪.IP‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV‬‬ ‫‪AX, 0B800h‬‬ ‫‪; set AX = B800h (VGA memory).‬‬
‫‪MOV‬‬ ‫‪DS, AX‬‬ ‫‪; copy value of AX to DS.‬‬
‫‪MOV‬‬ ‫'‪CL, 'A‬‬ ‫‪; CL = 41h (ASCII code).‬‬
‫‪MOV‬‬ ‫‪CH, 01011111b‬‬ ‫‪; CL = color attribute.‬‬
‫‪MOV‬‬ ‫‪BX, 15Eh‬‬ ‫‪; BX = position on screen.‬‬
‫‪MOV‬‬ ‫‪[BX], CX‬‬ ‫‪; [0B800h:015Eh] = CX.‬‬

‫ﺘﻌﻠﻴﻤﺔ ‪XCHG‬‬
‫ﺘﺒﺎﺩل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻴﻥ ﻤﺤﺘﻭﻯ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻭﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪ ،‬ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﻁﻭل ﻜـل ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻤﻠﻴﻥ ﻤﺘﺴﺎﻭﻴﻴﻥ‪.‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬
‫‪XCHG D,S‬‬ ‫)‪(D)↔(S‬‬ ‫ﻻ ﺃﺤﺩ‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV‬‬ ‫‪AL, 5‬‬
‫‪MOV‬‬ ‫‪AH, 2‬‬
‫‪XCHG‬‬ ‫‪AL, AH ; AL = 2, AH = 5‬‬
‫‪XCHG‬‬ ‫‪AL, AH ; AL = 5, AH = 2‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪XLAT‬‬
‫ﺒﻔﺭﺽ ﺃﻥ ﻟﺩﻴﻨﺎ ﺠﺩﻭل ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ‪ 256‬ﺒﺎﻴﺕ ﻭﺃﻥ ‪ BX‬ﻴﺅﺸﺭ ﺇﻟﻰ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭل ﻤﻥ ﺍﻟﺠـﺩﻭل‪،‬‬
‫ﻓﺈﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ XLAT‬ﺘﺴﺘﺨﺩﻡ ﺍﻟﺴﺠل ‪ AL‬ﻜﺩﻟﻴل ‪ index‬ﻤﻭﺠﺏ ﻓﻲ ﺍﻟﺠﺩﻭل ﻭﺘﺴﺘﺒﺩل ﻤﺤﺘـﻭﻯ ‪AL‬‬
‫ﺒﺎﻟﺒﺎﻴﺕ ﺍﻟﺫﻱ ﺇﺯﺍﺤﺘﻪ ﻓﻲ ﺍﻟﺠﺩﻭل ﺘﺴﺎﻭﻱ ‪AL‬؛ ﺃﻱ ﺘﻨﺴﺦ ﺍﻟﻤﻭﻗﻊ ]‪ DS:[BX + unsigned AL‬ﻓﻲ‬
‫‪.AL‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬
‫‪XLAT‬‬ ‫)‪DS:[BX + unsigned AL]→(AL‬‬ ‫ﻻ ﺃﺤﺩ‬

‫‪ 6‬ﳝﻜﻦ ﻓﻘﻂ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺳﻼﺳﻞ ﺍﶈﺎﺭﻑ ﻧﺴﺦ ﻣﻌﻄﻴﺎﺕ ﻣﻦ ﺫﺍﻛﺮﺓ ﺇﱃ ﺫﺍﻛﺮﺓ‬

‫‪9‬‬
‫ﻤﺜﺎل‪ :‬ﻴ‪‬ﻭﺠﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﺭﻤﺎﺯ ‪ ASCII‬ﻟﻠﺭﻗﻡ ‪ 2‬ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ‪:AL‬‬
‫‪dat DB 30h, 31h, 32h, 33h, 34h, 35h, 36h, 37h, 38h, 39h‬‬
‫‪LEA BX, dat‬‬
‫‪MOV AL, 2‬‬
‫‪XLAT ; AL = 32h‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪LEA‬‬
‫ﺤ ‪‬ﻤل ﺴﺠل ﺍﻟﻭﺠﻬﺔ )‪-16‬ﺒﺕ( ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ‪) EA‬ﺤﻘل ﺍﻻﻨﺯﻴﺎﺡ ﻓﻲ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ( ﻟﻤﻌﺎﻤل‬
‫ﹸﺘ َ‬
‫ﺍﻟﻤﺼﺩﺭ ﺍﻟﺫﻱ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﺫﺍﻜﺭﺓ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫)‪LEA Reg16, EA EA→(Reg16‬‬ ‫ﻻ ﺃﺤﺩ‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV‬‬ ‫‪BX, 35h‬‬
‫‪MOV‬‬ ‫‪DI, 12h‬‬
‫‪LEA‬‬ ‫]‪SI, [BX+DI‬‬ ‫‪; SI = 35h + 12h = 47h‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪LDS‬‬
‫ﺤ ‪‬ﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ LDS‬ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ ،‬ﺍﻟﺫﻱ ﻫﻭ ﻋﺒﺎﺭﺓ ﻋﻥ ﻜﻠﻤﺔ ﻤﻀﺎﻋﻔﺔ ﻓـﻲ‬
‫ﹸﺘ َ‬
‫ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻓﻲ ﺴﺠل ﺍﻟﻭﺠﻬﺔ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪ .‬ﻭﺘﹸﺤﻤل ﺍﻟﻜﻠﻤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻓﻲ ﺍﻟﺴﺠل‬
‫‪.DS‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫ﻻ ﺃﺤﺩ‬
‫)‪(Mem32)→(Reg16‬‬
‫‪LDS Reg16, MEM32‬‬
‫)‪(Mem32+2)→(DS‬‬

‫ﻤﺜﺎل‪ :‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ ،‬ﻴﺠﺭﻱ ﺘﺤﻤﻴل ‪ AX‬ﺒﺎﻟﻜﻠﻤﺔ ‪ 1234h‬ﻭ ‪ DS‬ﺒﺎﻟﻜﻠﻤﺔ ‪.5678h‬‬
‫‪m DW 1234h‬‬
‫‪DW 5678h‬‬
‫‪LDS AX, m‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪LES‬‬
‫ﺤﻤ‪‬ل ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ LES‬ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ ،‬ﺍﻟﺫﻱ ﻫﻭ ﻜﻠﻤﺔ ﻤﻀﺎﻋﻔﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺇﻟﻰ‬
‫ﹸﺘ َ‬
‫ﺴﺠل ﺍﻟﻭﺠﻬﺔ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻜﻤﺎ ﻴﺠﺭﻱ ﺘﺤﻤﻴل ﺍﻟﻜﻠﻤﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻓﻲ ﺍﻟـﺴﺠل‬
‫‪.ES‬‬

‫‪10‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬
‫ﻻ ﺃﺤﺩ‬
‫)‪(Mem32)→(Reg16‬‬
‫‪LES Reg16, MEM32‬‬
‫)‪(Mem32+2)→(ES‬‬

‫ﻤﺜﺎل‪ :‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ ،‬ﻴﺠﺭﻱ ﺘﺤﻤﻴل ‪ AX‬ﺒﺎﻟﻜﻠﻤﺔ ‪ 1234h‬ﻭ ‪ ES‬ﺒﺎﻟﻜﻠﻤﺔ ‪.5678h‬‬
‫‪m DW 1234h‬‬
‫‪DW 5678h‬‬

‫‪LES AX, m‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ‬
‫ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﻋﻠﻰ ﺃﺭﺒﻊ ﻤﺼﺎﻏﺎﺕ ﻤﻥ ﺍﻷﻋﺩﺍﺩ‪ :‬ﺍﺜﻨﺎﻨﻲ ﺒﻼ ﺇﺸـﺎﺭﺓ‪ ،‬ﺍﺜﻨـﺎﻨﻲ ﻤـﻊ‬
‫ﺇﺸﺎﺭﺓ‪ ،‬ﻋﺸﺭﻱ ﻤﺭﺯﻭﻡ ﺒﻼ ﺇﺸﺎﺭﺓ ‪ unsigned packed decimal‬ﺃﻭ ﻋﺸﺭﻱ ﻏﻴﺭ ﻤـﺭﺯﻭﻡ ﺒـﻼ‬
‫ﺇﺸﺎﺭﺓ ‪ .unsigned unpacked decimal‬ﺴﻨﺸﺭﺡ ﻓﻘﻁ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻷﻋﺩﺍﺩ ﺒﺎﻟﻤﺼﺎﻏﺔ ﺍﻻﺜﻨﺎﻨﻴﺔ‬
‫ﻷﻨﻨﺎ ﻏﺎﻟﺒﹰﺎ ﻤﺎ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﺼﺎﻏﺎﺕ ﺍﻟﻌﺸﺭﻴﺔ ﺍﻟﻤﺭﺯﻭﻤﺔ ﻭﻏﻴﺭ ﺍﻟﻤﺭﺯﻭﻤﺔ ﻷﻏﺭﺍﺽ ﺍﻟﺘﺤﻜﻡ‪.‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺠﻤﻊ‪ ADC ،ADD :‬ﻭ ‪INC‬‬

‫ƒ ﺘﺠﻤﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ADD‬ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻤﻊ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ ،‬ﻭﺘﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫)‪(S) + (D) → (D‬‬
‫‪ADD D, S‬‬ ‫ﺍﻟﻜﹸل‬
‫)‪Carry →(CF‬‬

‫ﻻ ﻭﻀﻊ ‪ 5‬ﻓﻲ ‪ AL‬ﺜﻡ ﻴﺠﺭﻱ ﺠﻤﻊ ‪ AL‬ﻤﻊ ‪ -3‬ﻭﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ‪،‬‬


‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫‪ ،2‬ﻓﻲ ‪.AL‬‬
‫‪MOV AL, 5‬‬ ‫‪; AL=5‬‬
‫‪ADD AL, -3‬‬ ‫‪; AL=2‬‬

‫ƒ ﺘﺠﻤﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ADC‬ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻤﻊ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻤﻊ ﺍﻟﺤﺎﻤل ‪ ،CF‬ﻭﺘﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓـﻲ‬
‫ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫)‪(S) + (D) + (CF) → (D‬‬
‫‪ADC D, S‬‬ ‫ﺍﻟﻜﹸل‬
‫)‪Carry →(CF‬‬

‫‪11‬‬
‫ﻻ ﻭﻀﻊ ‪ 1‬ﻓﻲ ‪ ،CF‬ﺜﻡ ‪ 5‬ﻓﻲ ‪ AL‬ﻭﺃﺨﻴﺭﹰﺍ ﻴﺠﺭﻱ ﺠﻤـﻊ ‪CF‬‬
‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫ﻤﻊ ‪ AL‬ﻤﻊ ‪ 1‬ﻭﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ‪ ،7 ،‬ﻓﻲ ‪.AL‬‬
‫‪STC‬‬ ‫‪; set CF=1‬‬
‫‪MOV AL, 5‬‬ ‫‪; AL=5‬‬
‫‪ADC AL, 1‬‬ ‫‪; AL=7‬‬
‫ƒ ﹸﺘﻀﻴﻑ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ INC‬ﻭﺍﺤﺩﹰﺍ ﺇﻟﻰ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪INC D‬‬ ‫)‪(D) + 1 → (D‬‬ ‫ﺍﻟﻜﹸل ﻤﺎﻋﺩﺍ ‪CY‬‬

‫ﻻ ﻭﻀﻊ ‪ 4‬ﻓﻲ ‪ AL‬ﺜﻡ ﺯﻴﺎﺩﺓ ‪ AL‬ﺒﻤﻘﺩﺍﺭ ‪.1‬‬


‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬

‫‪MOV AL, 4‬‬


‫‪INC AL‬‬ ‫‪; AL=5‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻁﺭﺡ‪ DEC ،SBB ،SUB :‬ﻭ ‪NEG‬‬


‫ƒ ﺘﻁﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ SUB‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻭﺘﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫)‪(D) - (S) → (D‬‬
‫‪SUB D, S‬‬ ‫ﺍﻟﻜﹸل‬
‫)‪Borrow →(CF‬‬

‫ﻻ ﻭﻀﻊ ‪ 5‬ﻓﻲ ‪ AL‬ﺜﻡ ﻴﺠﺭﻱ ﻁﺭﺡ ﺍﻟﻘﻴﻤﺔ ‪ 1‬ﻤﻥ ‪ AL‬ﻭﻭﻀﻊ‬


‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫ﺍﻟﻨﺎﺘﺞ‪ ،4 ،‬ﻓﻲ ‪.AL‬‬
‫‪MOV AL, 5‬‬
‫‪SUB AL, 1 ; AL=4‬‬

‫ﺘﻁﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ SBB‬ﻤﻊ ﺍﺴﺘﻌﺎﺭﺓ ‪ CF‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻭﺘـﻀﻊ ﺍﻟﻨـﺎﺘﺞ ﻓـﻲ‬
‫ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪SBB D, S‬‬ ‫)‪(D) - (S) – (CF) → (D‬‬ ‫ﺍﻟﻜﹸل‬

‫‪12‬‬
‫ﻻ ﻭﻀﻊ ‪ 1‬ﻓﻲ ‪ ،CF‬ﺜﻡ ‪ 5‬ﻓﻲ ‪ AL‬ﻭﺃﺨﻴﺭﹰﺍ ﻴﺠﺭﻱ ﻁﺭﺡ ‪CF‬‬
‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫ﻭ ‪ 3‬ﻤﻥ ‪ AL‬ﻭﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ ‪ 1‬ﻓﻲ ‪.AL‬‬
‫‪STC‬‬ ‫‪; set CF = 1‬‬
‫‪MOV AL, 5‬‬
‫‪SBB AL, 3‬‬ ‫‪; AL = 5 - 3 - 1 = 1‬‬

‫ƒ ﹸﺘﻨﻘﺹ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DEC‬ﻭﺍﺤﺩﹰﺍ ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪DEC D‬‬ ‫)‪(D) - 1 → (D‬‬ ‫ﺍﻟﻜﹸل ﻤﺎﻋﺩﺍ ‪CY‬‬

‫ﻻ ﻭﻀﻊ ‪ 255‬ﻓﻲ ‪ AL‬ﺜﹸﻡ ﺇﻨﻘﺎﺹ ﻤﺤﺘﻭﻯ ‪ AL‬ﺒﻤﻘﺩﺍﺭ ‪.1‬‬


‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫‪MOV AL, 255‬‬ ‫)‪; AL = 0FFh (255 or -1‬‬
‫‪DEC AL‬‬ ‫)‪; AL = 0FEh (254 or -2‬‬

‫ƒ ﺘﻁﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ NEG‬ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻤﻥ ﺍﻟﺼﻔﺭ ﻭﺘﻀﻊ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ؛ ﺃﻱ ﺘﹸﻌﻜﺱ‬
‫ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺸﺎﺭﺓ ﺍﻟﻌﺩﺩ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪NEG D‬‬ ‫ﺍﻟﻤﺘﻤﻡ ﺍﻟﺜﺎﻨﻲ‬ ‫ﺍﻟﻜﹸل‬

‫ﻻ ﻭﻀﻊ ‪ 5‬ﻓﻲ ‪ ،AL‬ﺜﹸﻡ ﺘﹸﻌﻜﺱ ﺇﺸﺎﺭﺓ ﻤﺤﺘـﻭﻯ ‪ AL‬ﻓﻴـﺼﺒﺢ‬


‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﺃﻭ ﹰ‬
‫ﻤﺤﺘﻭﻯ ‪ AL‬ﻤﺴﺎﻭﻴﹰﺎ ‪ -5‬ﺃﻭ ‪.0FBh‬‬
‫‪MOV AL, 5 ; AL = 05h‬‬
‫‪NEG AL‬‬ ‫)‪; AL = 0FBh (-5‬‬

‫ﺘﻌﻠﻴﻤﺘﺎ ﺍﻟﻀﺭﺏ‪ MUL :‬ﻭ ‪IMUL‬‬


‫ƒ ﺘﻀﺭﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MUL‬ﺒﻼ ﺇﺸﺎﺭﺓ‪ ،‬ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IMUL‬ﻤﻊ ﺇﺸﺎﺭﺓ‪ ،‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻤﻊ ﺍﻟﻤﺭﺍﻜﻡ‪.‬‬
‫ﺇﺫﺍ ﻜﺎﻥ ﻁﻭل ﺍﻟﻤﺼﺩﺭ ‪ 1‬ﺒﺎﻴﺕ ﻓﺈﻨﻪ ‪‬ﻴﻀﺭﺏ ﺒـ ‪ AL‬ﻭﻴﻭﻀﻊ ﻨﺎﺘﺞ ﺍﻟﻀﺭﺏ )‪ 2‬ﺒﺎﻴـﺕ( ﻓـﻲ‬
‫‪ .AX‬ﻭﺇﺫﺍ ﻜﺎﻥ ﻁﻭل ﺍﻟﻤﺼﺩﺭ ‪ 2‬ﺒﺎﻴﺕ ﹸﻓﻴﻀﺭﺏ ﻤﻊ ‪ AX‬ﻭﻴﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ )ﻜﻠﻤـﺔ ﻤـﻀﺎﻋﻔﺔ‪4 ،‬‬
‫ﺒﺎﻴﺕ( ﻓﻲ ‪ DX‬ﻭ ‪.AX‬‬

‫‪13‬‬
‫ﻀﺭﺏ‪ MUL :‬ﺃﻭ ‪IMUL‬‬ ‫ﺍﻟﻤﻀﺭﻭﺏ‬ ‫ﻤﻌﺎﻤل ﺍﻟﻀﺭﺏ‬ ‫ﺍﻟﻨﺎﺘﺞ‬
‫‪Byte × Byte‬‬ ‫‪AL‬‬ ‫ﺴﺠل ﺃﻭ ﺫﺍﻜﺭﺓ‬ ‫‪AX‬‬
‫‪Word × Word‬‬ ‫‪AX‬‬ ‫ﺴﺠل ﺃﻭ ﺫﺍﻜﺭﺓ‬ ‫‪DX: AX‬‬

‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﺸﺭﻴﺔ ‪ 200‬ﻓﻲ ‪ ،AL‬ﻭ ‪ 4‬ﻓﻲ ‪ ،BL‬ﺜﹸﻡ ﻴ‪‬ـﻀﺭﺏ‬
‫‪ AL‬ﻤﻊ ‪ .BL‬ﻴﻭﻀﻊ ﻨﺎﺘﺞ ﺍﻟﻀﺭﺏ ‪ 800‬ﻓﻲ ‪.AX‬‬
‫‪MOV AL, 200 ; AL = 0C8h‬‬
‫‪MOV BL, 4‬‬
‫‪MUL BL‬‬ ‫)‪; AX = 0320h (800‬‬

‫ﺘﻌﻠﻴﻤﺘﺎ ﺍﻟﻘﺴﻤﺔ ‪ DIV‬ﻭ ‪IDIV‬‬


‫ƒ ﺘﹸﻘﺴﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DIV‬ﺒﻼ ﺇﺸﺎﺭﺓ‪ ،‬ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IDIV‬ﻤﻊ ﺇﺸﺎﺭﺓ‪ AX ،‬ﻋﻠﻰ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ .‬ﺇﺫﺍ ﻜﺎﻥ‬
‫ﻁﻭل ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ‪ 1‬ﺒﺎﻴﺕ ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﻭﻀﻊ ﻨﺎﺘﺞ ﺍﻟﻘﺴﻤﺔ ﻓﻲ ‪ AL‬ﻭﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﻓـﻲ ‪.AH‬‬
‫ﻭﺇﺫﺍ ﻜﺎﻥ ﻁﻭل ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ‪ 2‬ﺒﺎﻴﺕ‪ ،‬ﻓ ﹸﺘﻘﺴﻡ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﻀﺎﻋﻔﺔ ﺍﻟﻤـﺸﻜﻠﺔ ﻤـﻥ ‪ DX‬ﻭ ‪AX‬‬
‫]‪ [DX:AX‬ﻋﻠﻰ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ ،‬ﻭﻴﻭﻀﻊ ﻨﺎﺘﺞ ﻋﻤﻠﻴﺔ ﺍﻟﻘﺴﻤﺔ ﻓﻲ ‪ AX‬ﻭﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﻓﻲ ‪.DX‬‬

‫ﻗﺴﻤﺔ‪ DIV :‬ﺃﻭ ‪IDIV‬‬ ‫ﺍﻟﻘﺎﺴﻡ‬ ‫ﺍﻟﻤﻘﺴﻭﻡ ﻋﻠﻴﻪ‬ ‫ﺍﻟﻨﺎﺘﺞ‬


‫‪Word / Byte‬‬ ‫‪AX‬‬ ‫ﺴﺠل ﺃﻭ ﺫﺍﻜﺭﺓ‬ ‫‪AL:AH‬‬
‫‪DWord / Word‬‬ ‫‪DX:AX‬‬ ‫ﺴﺠل ﺃﻭ ﺫﺍﻜﺭﺓ‬ ‫‪AX: DX‬‬

‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﺸﺭﻴﺔ ‪ -203‬ﻓﻲ ‪ ،AX‬ﻭ ‪ 4‬ﻓﻲ ‪ ،BL‬ﺜﹸـﻡ ﻴ‪‬ﻘـﺴﻡ‬
‫‪ AX‬ﻋﻠﻰ ‪ .BL‬ﻴﻭﻀﻊ ﻨﺎﺘﺞ ﺍﻟﻘﺴﻤﺔ ‪ -50‬ﻓﻲ ‪ ،AL‬ﻭﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ‪ -3‬ﻓﻲ ‪.AH‬‬
‫‪MOV AX, -203 ; AX = 0FF35h‬‬
‫‪MOV BL, 4‬‬
‫‪IDIV BL‬‬ ‫)‪; AL = -50 (0CEh), AH = -3 (0FDh‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ CBW‬ﻭ ‪CWD‬‬


‫ƒ ﺘﹸﺤﻭل ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ CBW‬ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ﺒﺎﻴﺕ ﻟﺘﺼﺒﺢ ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 2‬ﺒﺎﻴـﺕ‪ ،‬ﻭﺫﻟـﻙ ﺒﺘﻭﺴـﻴﻊ‬
‫‪ extend‬ﺒﺕ ﺍﻹﺸﺎﺭﺓ ﻟﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪ AL‬ﻋﺒﺭ ﺍﻟﺴﺠل ‪.AX‬‬
‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ‪ (11111011) -5‬ﻓﻲ ‪ AL‬ﻭ ‪ 0‬ﻓﻲ ‪ ،AX‬ﺜﻡ ﻴﺠﺭﻱ‬
‫ﻭﻀﻊ ﺇﺸﺎﺭﺓ ﺍﻟﻘﻴﻤﺔ ‪ -5‬ﻓﻲ ‪ .AX‬ﻭﺒﻤﺎ ﺃﻥ ﺇﺸﺎﺭﺓ ‪ -5‬ﻫﻲ ‪ ،1‬ﻓﻴﺠﺭﻱ ﻭﻀﻊ ‪ FFh‬ﻓﻲ ‪.AX‬‬

‫‪14‬‬
‫‪MOV AX, 0 ; AH = 0, AL = 0‬‬
‫)‪MOV AL, -5 ; AX = 000FBh (251‬‬
‫‪CBW‬‬ ‫)‪; AX = 0FFFBh (-5‬‬

‫ƒ ﹸﺘﺤﻭل ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ CWD‬ﻜﻠﻤﺔ ﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﻜﻠﻤﺔ ﻤﻀﺎﻋﻔﺔ‪ ،‬ﻭﺫﻟﻙ ﺒﺘﻭﺴﻴﻊ ﺒﺕ ﺍﻹﺸﺎﺭﺓ ﻟﻤﺤﺘـﻭﻯ‬
‫ﺍﻟﺴﺠل ‪ AX‬ﻋﺒﺭ ﺍﻟﺴﺠل ‪.DX‬‬
‫ﻤﺜﺎل‪ :‬ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ‪ 0‬ﻓﻲ ‪ DX‬ﻭ ‪ (FFFBh) -5‬ﻓﻲ ‪ ،AX‬ﺜﻡ ‪‬ﻴﻭﻀـﻊ‬
‫ﺇﺸﺎﺭﺓ ﺍﻟﻘﻴﻤﺔ ‪ -5‬ﻓﻲ ‪ .DX‬ﻭﺒﻤﺎ ﺃﻥ ﺇﺸﺎﺭﺓ ‪ -5‬ﻫﻲ ‪ ،1‬ﻓﻴﺠﺭﻱ ﻭﻀﻊ ‪ FFFFh‬ﻓﻲ ‪.DX‬‬

‫‪MOV DX, 0‬‬ ‫‪; DX = 0‬‬


‫‪MOV AX, 0‬‬ ‫‪; AX = 0‬‬
‫‪MOV AX, -5‬‬ ‫‪; DX AX = 0000h:FFFBh‬‬
‫‪CWD‬‬ ‫‪; DX AX = FFFFh:FFFBh‬‬

‫ﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻘﺎﺭﻨﺔ ‪CMP‬‬


‫ﺘﻁﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ CMP‬ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ )‪ (S‬ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ )‪ (D‬ﺩﻭﻥ ﺃﻥ ﺘﻐ ّﻴﺭ ﻫـﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﻤﺤﺘﻭﻯ ﺍﻟﻤﻌﺎﻤﻠﻴﻥ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﻌﻤﻠﻴﺔ‬ ‫ﺍﻟﺭﺍﻴﺎﺕ ﺍﻟﺘﻲ ﺘﺘﺄﺜﺭ‬


‫‪CMP D, S‬‬ ‫ﺘﺘﻐﻴﺭ ﻗﻴﻡ ﺍﻟﺭﺍﻴﺎﺕ ﺒﺤﺴﺏ ﻨﺘﻴﺠﺔ )‪(D) – (S‬‬ ‫‪CF, AF, OF, PF, SF, ZF‬‬

‫ﻻ ﺘﺨﺯﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﺎﺘﺞ ﺍﻟﻁﺭﺡ‪ ،‬ﻭﺇﻨﻤﺎ ﻓﻘﻁ ﹸﺘﻌﺩل ﻗﻴﻡ ﺒﻌﺽ ﺍﻟﺭﺍﻴﺎﺕ ﺘﺒﻌﹰﺎ ﻟﻨﺎﺘﺞ ﺍﻟﻁﺭﺡ‪:‬‬
‫™ ﺇﺫﺍ ﻜﺎﻨﺕ ﻤﻌﺎﻤﻼﺕ ﺍﻟﻌﻤﻠﻴﺔ ‪ CMP‬ﺒﻼ ﺇﺸﺎﺭﺓ ﻓﺈﻥ‪:‬‬
‫‪ ZF=1‬ﻋﻨﺩﻤﺎ )‪(D) == (S‬‬
‫‪ CF=1‬ﻋﻨﺩﻤﺎ )‪(D) < (S‬‬
‫™ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻤﻌﺎﻤﻼﺕ ﻤﻊ ﺇﺸﺎﺭﺓ ﻓﺈﻥ‪:‬‬
‫‪ ZF=1‬ﻋﻨﺩﻤﺎ )‪(D) == (S‬‬
‫‪ SF=OF‬ﻋﻨﺩﻤﺎ )‪(S) < (D‬‬
‫‪ SF≠OF‬ﻋﻨﺩﻤﺎ )‪(D) < (S‬‬
‫ﻤﺜﺎل‪ :‬ﻴﺠﺭﻱ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ‪ 5‬ﻓﻲ ‪ AL‬ﻭﻓﻲ ‪ ،BL‬ﻭﻤﻥ ﺜﹸﻡ ﻴﻘﺎﺭﻥ ﻤﺤﺘـﻭﻯ ‪BL‬‬
‫ﻤﻊ ‪ ،AL‬ﻭﺒﻤﺎ ﺃﻨﻬﻤﺎ ﻤﺘﺴﺎﻭﻴﻴﻥ ﻓﺘﺼﺒﺢ ‪ ZF‬ﺘﺴﺎﻭﻱ ‪.1‬‬
‫‪MOV AL, 5‬‬
‫‪MOV BL, 5‬‬
‫)!‪CMP AL, BL ; AL = 5, ZF = 1 (so equal‬‬

‫‪15‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ‬
‫ل ﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟـﺴﺠل ‪ .CS‬ﺘﺯﻴـﺩ‬
‫ﺘﻘﺭﺃ ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﻨﺤﻭ ﻤﺘﺘﺎ ٍ‬
‫ﻭﺤﺩﺓ ﺍﻟﺘﻭﺍﺠﻪ ﺍﻟﺴﺠل ‪ IP‬ﺒﻌﺩ ﻗﺭﺍﺀﺓ ﻜل ﺘﻌﻠﻴﻤﺔ ﻟﻴﺼﺒﺢ ﻤﺸﻴﺭﹰﺍ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.‬‬
‫ﺘﺤﺘﻭﻱ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﹸﺘﻤﻜﻨﻨﺎ ﻤﻥ ﺘﻐﻴﻴـﺭ‬
‫ﺘﺘﺎﺒﻊ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻨﻬﺘﻡ ﻫﻨﺎ ﻤﻥ ﺒﻴﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺒﺘﻌﻠﻴﻤـﺎﺕ‬
‫ﺍﻟﻘﻔﺯ‪.‬‬
‫ﺘﺤﺘﻭﻱ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ﻤﺠﻤﻭﻋﺘﻴﻥ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔـﺯ‪ :‬ﻤـﺸﺭﻭﻁﺔ ﻭﻏﻴـﺭ‬
‫ﻤﺸﺭﻭﻁﺔ‪.‬‬

‫ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺯ ‪ JMP‬ﻏﻴﺭ ﺸﺭﻁﻴﺔ ‪Unconditional JMP‬‬


‫ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ِ JMP‬ﻟ َ‬
‫ﺠﺒﺭ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﺠﻠﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻤﻥ ﺍﻟﻤﻜﺎﻥ ﺍﻟﻤﺤﺩﺩ ﻓـﻲ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﻨﻔﺴﻬﺎ‪ .‬ﻭﻴﻤﻜﻥ ﺃﻥ ﻨﻤﻴﺯ ﺒﻴﻥ ﺴﺕ ﺃﻨﻭﺍﻉ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ‪ ،‬ﻭﺠﻤﻴﻌﻬﺎ ﻟﻬﺎ ﺍﻟﺸﻜل‪:‬‬
‫‪JMP TARGET‬‬

‫ﺗﻌﻠﻴﻤﺔ ﻗﻔﺰ ﻏﲑ ﺷﺮﻃﻴﺔ‬

‫ﺗﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺍﳌﻮﺍﻗﻊ ﺍﻟﱵ ﺳﻴﺠﺮﻯ‬


‫ﲣﻄﻴﻬﺎ ﻧﺘﻴﺠﺔ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺰ‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﳌﻨﻔﺬﺓ‬


‫ﺑﻌﺪ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺰ‬

‫ﺍﻟﻘﻔﺯ ﺍﻟﻘﺼﻴﺭ ‪:Short JMP‬‬


‫‪JMP‬‬ ‫)‪Disp ; (8 bit‬‬

‫ﻭﻫﻭ ﻗﻔﺯ ﻤﺒﺎﺸﺭ ﻨﺴﺒﻲ‪ ،‬ﹸﺘﺴﺘﺨﺩﻡ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ﺘﻘﻊ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺎﻟﻲ‪،‬‬
‫ﻭﻻ ﺘﺒﻌﺩ ﺃﻜﺜﺭ ﻤﻥ ‪ +127‬ﺃﻭ ‪ -128‬ﺒﺎﻴﺕ ﻋﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﺘﻌﻠﻴﻤـﺔ ‪.JMP‬‬
‫ﻴﺠﺭﻱ ﺤﺴﺎﺏ ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ ﺒﺠﻤﻊ ﻗﻴﻤﺔ ﺍﻹﺯﺍﺤﺔ‪ ،‬ﺍﻟﻤﻀﻤﻨﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﺇﻟﻰ ‪.IP‬‬
‫ﻤﺜﺎل‪ :‬ﺒﻔﺭﺽ ﺃﻥ ﺫﺍﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺘﺤﻭﻱ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪000D‬‬ ‫]‪ADD AL,[BX‬‬
‫‪000F‬‬ ‫‪INC BX‬‬
‫‪0010‬‬ ‫‪DEC CX‬‬
‫‪0011‬‬ ‫‪JMP FA‬‬
‫‪0013‬‬ ‫‪….‬‬

‫‪16‬‬
‫ﻓﺴﻭﻑ ﹸﺘﺠﺒـﺭ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪ JMP FA‬ﺍﻟﻤﻌـﺎﻟﺞ ﻋﻠـﻰ ﺘﻨﻔﻴـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺍﺒﺘـﺩﺍ ًﺀ ﻤـﻥ ﺍﻟﻤﻭﻗـﻊ‪:‬‬
‫‪ 0013h + FAh(-6) = 0Dh‬ﻋﻭﻀﹰﺎ ﻋﻥ ﺍﻟﻤﻭﻗﻊ ‪ ،0013h‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﻭﻑ ﻴﻨﻔـﺫ ﺍﻟﻤﻌـﺎﻟﺞ ﺘﺎﻟﻴـﹰﺎ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪.ADD AL,[BX‬‬

‫ﺍﻟﻘﻔﺯ ﺍﻟﻘﺭﻴﺏ ‪:Near JMP‬‬


‫)‪JMP Disp ; (16 bits‬‬
‫ﺒﺨﻼﻑ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺯ ﺍﻟﻘﺼﻴﺭ‪ ،‬ﻴﻤﻜﻨﻨﺎ ﻓﻲ ﺍﻟﻘﻔﺯ ﺍﻟﻘﺭﻴﺏ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﻤﻭﻗﻊ ﻴﺒﻌﺩ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪+32767‬‬
‫ﺃﻭ ‪ -32768‬ﺒﺎﻴﺕ ﻋﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﺘﻌﻠﻴﻤﺔ ‪.JMP‬‬

‫ﻋﻨﺩ ﻜﺘﺎﺒﺘﻙ ﻟﻠﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻀﻊ ﻟﺼﺎﻗﺔ ﻗﺒل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﺭﺍﺩ ﺍﻟﻘﻔﺯ ﺇﻟﻴﻬﺎ‪ ،‬ﻭﻟـﺘﻜﻥ‬
‫ﻫﺫﻩ ﺍﻟﻠﺼﺎﻗﺔ ‪ ،START‬ﻓﻴﺤﺴﺏ ﺍﻟﻤﺠﻤﻊ ﺍﻹﺯﺍﺤﺔ ﺒﻴﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠـﻲ ‪JMP‬‬
‫ﻭ ‪ START‬ﺁﻟﻴﹰﺎ‪ .‬ﻋﻨﺩﻫﺎ ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ JMP START‬ﻟﻠﻘﻔﺯ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ‪.START‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺇﻋﺎﺩﺓ ﻜﺘﺎﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻋﻠﻰ ﺍﻟﻨﺤﻭ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫]‪ATART: ADD AL,[BX‬‬


‫‪INC BX‬‬
‫‪DEC CX‬‬
‫‪JMP START‬‬
‫‪….‬‬
‫ﻗﻔﺯ ﻤﺒﺎﺸﺭ ﺒﻴﻥ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ‪Direct Intersegment JMP‬‬
‫)‪JMP Addr ; (32 bits‬‬
‫ﺘﺤﺘﻭﻱ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﻠﻤﻭﻗﻊ ﺍﻟﺠﺩﻴﺩ ‪-4‬ﺒﺎﻴﺕ؛ ﺘﺤﺘﻭﻱ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻭﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ‬
‫‪ Addr‬ﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﺒﻴﻨﻤﺎ ﺘﺤﺘﻭﻱ ﺍﻟﺒﺎﻴﺕ ﺍﻟﺜﺎﻟﺜﺔ ﻭﺍﻟﺭﺍﺒﻌﺔ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻟﻠﻤﻘﺘﻁـﻊ‪ .‬ﻓـﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﺠﺭﻱ ﺘﺤﻤﻴل ‪ IP‬ﺒﻘﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﻭ ‪ CS‬ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻟﻠﻤﻘﺘﻁﻊ ﺍﻟﺠﺩﻴﺩ‪ .‬ﺘﺴﺘﺨﺩﻡ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ﻻ ﺘﻘﻊ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺎﻟﻲ‪ ،‬ﻭﻴﺴﻤﻰ ﻫـﺫﺍ‬
‫ﺍﻟﻘﻔﺯ ﺒﺎﻟﺒﻌﻴﺩ ‪.FAR‬‬

‫ﻗﻔﺯ ﻏﻴﺭ ﻤﺒﺎﺸﺭ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻨﻔﺴﻪ ‪Indirect Intrasegment JMP‬‬
‫ﻴﺤﺘﺎﺝ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﻤﻌﺎﻤل ﺫﺍﻜﺭﺓ ﺒﻁﻭل ‪-16‬ﺒﺕ‪ ،‬ﺤﻴﺙ ﻴﺠـﺭﻱ ﺘﺤﻤﻴـل ‪ IP‬ﺒﻘﻴﻤـﺔ‬
‫ﺍﻻﻨﺯﻴﺎﺡ ﺍﻟﻤﺨﺯﻥ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪WordVar‬‬ ‫‪DW TargetAddress‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪JMP word ptr WordVar‬‬

‫‪17‬‬
‫ﺘﻘﻔﺯ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ﺍﻻﻨﺯﻴﺎﺡ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﻤﺘﺤﻭل ‪ WordVar‬ﻭﻟﻴﺱ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﺤـﻭﻱ‬
‫ﺍﻟﻌﺒﺎﺭﺓ ‪.WordVar‬‬
‫ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﺃﻴﹰﺎ ﻤﻥ ﺃﻨﻤﺎﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ‪.‬‬
‫ﻼ ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪ JMP Disp[BX‬ﺍﻟﻜﻠﻤﺔ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ‪ DISP+BX‬ﻓﻲ ‪.IP‬‬
‫ﻓﻤﺜ ﹰ‬

‫ﻗﻔﺯ ﻏﻴﺭ ﻤﺒﺎﺸﺭ ﺒﺎﻟﺴﺠل ‪Register Indirect JMP‬‬


‫ﻴﺠﺭﻱ‪ ،‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ‪ ،‬ﺸﺤﻥ ‪ IP‬ﺒﻘﻴﻤﺔ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻌﺎﻤﺔ‪ .‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜـﺎل‪ ،‬ﺘﻘﻔـﺯ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ JMP AX‬ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪.AX‬‬

‫ﻗﻔﺯ ﻏﻴﺭ ﻤﺒﺎﺸﺭ ﺒﻴﻥ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ ‪Indirect Intersegment JMP‬‬


‫ﻭﻫﻲ ﺃﻴﻀﹰﺎ ﺘﻌﻠﻴﻤﺔ ﻗﻔﺯ ﺒﻌﻴﺩﺓ ‪ .FAR JMP‬ﺘﺘﻀﻤﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻌﺎﻤل ﺫﺍﻜﺭﺓ ﻴﺤﻭﻱ ﻋﻠﻰ ﻤﺅﺸﺭ؛‬
‫ﻴﺤﻭﻱ ﺍﻟﻤﺅﺸﺭ ﻋﻠﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﻌﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﺭﺍﺩ ﺍﻟﻘﻔﺯ ﺇﻟﻴﻬﺎ‪ .‬ﻴﻨﺴﺦ ﺍﻟﻤﻌـﺎﻟﺞ ﺍﻟﻤﺅﺸـﺭ‬
‫ﺍﻟﻤﺨﺯﻥ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ‪.CS:IP‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﻣﻮﺟﻪ ﻳﺴﺘﺨﺪﻡ‬
‫ﳊﺠﺰ ﻛﻠﻤﺔ‬
‫ﻣﻀﺎﻋﻔﺔ‬ ‫‪FarPointer‬‬ ‫‪dword‬‬ ‫‪TargetAddress‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫‪JMP dword ptr FarPointer‬‬

‫ﺘﻘﻔﺯ ﺘﻌﻠﻴﻤﺔ ‪ JMP‬ﺇﻟﻰ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﻌﻨﻭﺍﻥ ‪.FarPointer‬‬


‫ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﺃﻴﹰﺎ ﻤﻥ ﺃﻨﻤﺎﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻗﻴﻤﺔ ﺍﻟﻤﺅﺸﺭ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ‪.‬‬
‫ﻼ ﺘﻘﻭﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪ JMP [BX‬ﺒﻨﺴﺦ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﻀﺎﻋﻔﺔ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ‪ BX‬ﺇﻟﻰ ‪.CS:IP‬‬
‫ﻓﻤﺜ ﹰ‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﻤﺸﺭﻭﻁﺔ ‪Conditional JMP‬‬


‫ﹶﺘﻔﺤﺹ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﻤﺸﺭﻭﻁﺔ ﺤﺎﻟﺔ ﺭﺍﻴﺔ ﺃﻭ ﺃﻜﺜﺭ ﻤﻥ ﺭﺍﻴﺎﺕ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪ ،‬ﻓﺈﺫﺍ ﺤﻘﻘﺕ ﺍﻟﺭﺍﻴﺔ ﺃﻭ‬
‫ﻋﺩﺓ ﺭﺍﻴﺎﺕ ﺸﺭﻁﹰﺎ ﻤﻌﻴﻨﹰﺎ ﹸﺘ ﹶﻨ ﱠﻔ ﹾﺫ ﻋﻤﻠﻴﺔ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻭﺇﻻ ‪‬ﻴﺘﺎﺒﻊ ﺍﻟﻤﻌـﺎﻟﺞ ﺘﻨﻔﻴـﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﻤﺒﺎﺸﺭ ﹰﺓ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺯ‪ .‬ﺇﻥ ﺠﻤﻴﻊ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﻫﻲ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﻘﺼﻴﺭ ﺃﻱ ﻴﺠـﺏ‬
‫ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﻤﻭﻗﻊ ﻴﻘﻊ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺎﻟﻲ ﻭﻻ ﻴﺒﻌﺩ ﺃﻜﺜﺭ ﻤـﻥ ‪ +127‬ﺃﻭ ‪-128‬‬
‫ﺒﺎﻴﺕ ﻋﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭل ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.‬‬

‫‪18‬‬
‫ﺗﻌﻠﻴﻤﺔ ﻗﻔﺰ ﻣﺸﺮﻭﻃﺔ‬
‫ﻫﻞ ﺍﻟﺸﺮﻁ‬ ‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﱵ ﺳﺘﻨﻔﺬ ﺇﻥ ﱂ ﻳﺘﺤﻘﻖ ﺍﻟﺸﺮﻁ‬
‫ﳏﻘﻖ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺍﳌﻮﺍﻗﻊ ﺍﻟﱵ ﺳﻴﺠﺮﻯ‬
‫ﲣﻄﻴﻬﺎ ﺇﺫﺍ ﺣﺪﺙ ﺍﻟﻘﻔﺰ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﱵ ﺳﺘﻨﻔﺬ‬
‫ﺇﺫﺍ ﺣﺪﺙ ﺍﻟﻘﻔﺰ‬

‫ﹸﺘﺴﺘﺨﺩﻡ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﺸﺭﻁﻴﺔ ﻓﻲ ﺘﻨﺠﻴﺯ ﺍﻟﺤﻠﻘﺎﺕ ﺃﻭ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ ﻤﺜـل ‪،if … then‬‬
‫ﻜﻤﺎ ﺘﹸﺴﺘﺨﺩﻡ ﺒﻌﺩ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻘﺎﺭﻨﺔ ‪ِ CMP‬ﻟ ﹶﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﺎﻤل ﺍﻷﻜﺒﺭ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺠﺩﻭﻟﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﺸﺭﻁﻴﺔ‪ ،‬ﺍﻟﺘﻲ ﺘﺘﻀﻤﻨﻬﺎ ﻤﺠﻤﻭﻋـﺔ ﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ ،8088/8086‬ﻭﺍﻟﺘﻲ ﺘﻔﺤﺹ ﺤﺎﻟﺔ ﺇﺤﺩﻯ ﺭﺍﻴﺎﺕ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪:‬‬

‫ﺭﻤﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﺸﺭﺡ‬ ‫ﺍﻟﺭﺍﻴﺔ‬


‫‪JZ‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻜﺎﻥ ﻤﻌﺩﻭﻤﹰﺎ‬ ‫‪ZF=1‬‬
‫‪JE‬‬ ‫ﺍﻗﻔﺯ ﻓﻲ ﺤﺎﻟﺔ ﺍﻟﺘﺴﺎﻭﻱ‬ ‫‪ZF=1‬‬
‫‪JNZ‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﻤﻌﺩﻭﻤﹰﺎ‬ ‫‪ZF=0‬‬

‫ﺍﻗﻔﺯ ﻓـﻲ ﺤﺎﻟـﺔ ﻋـﺩﻡ‬


‫‪JNE‬‬ ‫‪ZF=0‬‬
‫ﺍﻟﺘﺴﺎﻭﻱ‬
‫‪JC‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻴﻭﺠﺩ ﺤﺎﻤل‬ ‫‪CF=1‬‬
‫‪JNC‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻻ ﻴﻭﺠﺩ ﺤﺎﻤل‬ ‫‪CF=0‬‬
‫‪JS‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻜﺎﻥ ﺴﺎﻟﺏ‬ ‫‪SF=1‬‬
‫‪JNS‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻜﺎﻥ ﻤﻭﺠﺏ‬ ‫‪SF=0‬‬
‫‪JP‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﺍﻟﻨﺩﻴﺔ ﺯﻭﺠﻴﺔ‬ ‫‪PF=1‬‬
‫‪JNP‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﺍﻟﻨﺩﻴﺔ ﻓﺭﺩﻴﺔ‬ ‫‪PF=0‬‬
‫‪JO‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻴﻭﺠﺩ ﻁﻔﺢ‬ ‫‪OF=1‬‬
‫‪JNO‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ﻻ ﻴﻭﺠﺩ ﻁﻔﺢ‬ ‫‪OF=0‬‬

‫‪19‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﺸﺭﻁﻴﺔ‪ ،‬ﺍﻟﺘﻲ ﺘﺘـﻀﻤﻨﻬﺎ ﻤﺠﻤﻭﻋـﺔ ﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ ،8088/8086‬ﻟﻠﺘﺤﻘﻕ ﻤﻥ ﺤﺩﻭﺙ ﺤﺎﻟﺔ ﻤﺤﺩﺩﺓ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﺍﻟﻤﻘﺎﺭﻨﺔ ‪ CMP‬ﺒﻴﻥ ﻤﻌـﺎﻤﻠﻴﻥ‬
‫ﺒﻼ ﺇﺸﺎﺭﺓ‪.‬‬
‫ﺭﻤﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﺸﺭﺡ‬ ‫ﺍﻟﺭﺍﻴﺔ‬
‫‪JA‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1>op2‬‬ ‫‪ CF=0‬ﻭ ‪ZF=0‬‬
‫‪JAE‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1≥op2‬‬ ‫‪CF=0‬‬
‫‪JB‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1<op2‬‬ ‫‪CF=1‬‬
‫‪JBE‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1≤op2‬‬ ‫‪ CF=1‬ﺃﻭ ‪ZF=1‬‬

‫ﻭﻴﺒﻴﻥ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺍﻟﺸﺭﻁﻴﺔ‪ ،‬ﺍﻟﺘﻲ ﺘﺘﻀﻤﻨﻬﺎ ﻤﺠﻤﻭﻋـﺔ ﺘﻌﻠﻴﻤـﺎﺕ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ ،8088/8086‬ﻟﻠﺘﺤﻘﻕ ﻤﻥ ﺤﺩﻭﺙ ﺤﺎﻟﺔ ﻤﺤﺩﺩﺓ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺔ ﺍﻟﻤﻘﺎﺭﻨﺔ ‪ CMP‬ﺒﻴﻥ ﻤﻌـﺎﻤﻠﻴﻥ‬
‫ﻤﻊ ﺇﺸﺎﺭﺓ‪:‬‬

‫ﺭﻤﺯ ﺍﻟﺘﻌﻠﻴﻤﺔ‬ ‫ﺍﻟﺸﺭﺡ‬ ‫ﺍﻟﺭﺍﻴﺔ‬


‫‪JG‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1>op2‬‬ ‫‪ ZF=0‬ﻭ ‪SF=OF‬‬
‫‪JGE‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1≥op2‬‬ ‫‪OF=SF‬‬
‫‪JL‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1<op2‬‬ ‫‪OF≠SF‬‬
‫‪JLE‬‬ ‫ﺍﻗﻔﺯ ﺇﺫﺍ ‪op1≤op2‬‬ ‫‪ OF≠SF‬ﺃﻭ ‪ZF=1‬‬

‫ﻤﺜﺎل‪ :‬ﺘﻘﺎﺭﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺒﻴﻥ ﻤﺤﺘﻭﻯ ‪ BL‬ﻭ ‪ DH‬ﻭﺘﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻷﻜﺒﺭ ﻓﻲ ‪.AL‬‬
‫‪CMP BL, DH‬‬
‫‪JAE FIRST‬‬ ‫‪; JMP if BL > DH‬‬
‫‪MOV AL, DH‬‬ ‫]‪; [AL] = [DH‬‬
‫‪JMP NEXT‬‬
‫‪FIRST: MOV AL, DH‬‬ ‫]‪; [AL] = [BL‬‬
‫… ‪NEXT:‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﺤﺴﺏ ﻤﺘﻭﺴﻁ ﺨﻤﺱ ﻗﻴﺎﺴﺎﺕ ﻟﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ ﻭﺍﻜﺘﺏ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ‪،AX‬‬
‫ﺍﻓﺘﺭﺽ ﺃﻥ ﺍﻟﻘﻴﺎﺴﺎﺕ ﺍﻟﺨﻤﺴﺔ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬

‫‪20‬‬
‫‪DATA‬‬ ‫‪DB‬‬ ‫;‪+13,-10,+19,+14,-18‬‬
‫‪MOV CX,5‬‬ ‫‪;LOAD COUNTER‬‬
‫‪SUB BX, BX‬‬ ‫‪;CLEAR BX, USED AS ACCUMULATOR‬‬
‫‪MOV SI, OFFSET DATA ;SET UP POINTER‬‬
‫]‪BACK: MOVAL,[SI‬‬ ‫‪;MOVE BYTE INTO AL‬‬
‫‪CBW‬‬ ‫‪;SIGN EXTEND INTO AX‬‬
‫‪ADD BX, AX‬‬ ‫‪;ADD TO BX‬‬
‫‪INC SI‬‬ ‫‪;INCREMENT POINTER‬‬
‫‪DEC CX‬‬ ‫‪;DECREMENT COUNTER‬‬
‫‪JNZ BACK‬‬ ‫‪;LOOP IF NOT FINISHED‬‬
‫‪MOV CL,5‬‬ ‫‪;MOVE COUNT TO AL‬‬
‫‪DIV CL‬‬ ‫‪;FIND THE AVERAGE‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ‬
‫ﺘﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،XOR ،OR ،AND‬ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪ ،‬ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ‪ XOR ،OR ،AND‬ﺒـﻴﻥ‬
‫ﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻭﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪ ،‬ﻭﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﻜـﻭﻥ‬
‫ﺃﻁﻭﺍل ﺍﻟﻤﻌﺎﻤﻠﻴﻥ ﺇﻤﺎ ﺒﺎﻴﺕ ﺃﻭ ‪ 2‬ﺒﺎﻴﺕ‪ .‬ﺘﺴﻤﺢ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺒﻔﺤﺹ ﺃﻭ ﹶﺘﻐﻴﻴﺭ ﺤﺎﻟﺔ ﺒﻌـﺽ ﺒﺘـﺎﺕ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻭ ‪‬ﻴﺅﺜﺭ ﻨﺎﺘﺞ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﺤﺎﻟﺔ ﺒﻌﺽ ﺭﺍﻴﺎﺕ ﺴﺠل ﺍﻟﺤﺎﻟﺔ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﹸﺘ َﻌ ‪‬ﺩل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪ CH‬ﻭﺫﻟﻙ ﺒﻭﻀﻊ‪ 0 :‬ﻓﻲ ﺃﻭل ﺒﺘﻴﻥ‪ ،‬ﻭ ‪ 1‬ﻓﻲ ﺁﺨـﺭ‬
‫ﺒ ﹼﺘﻴﻥ‪ ،‬ﻜﻤﺎ ﺘﻌﻜﺱ ﺤﺎﻟﺔ ﺍﻟﺒﺕ ‪.5‬‬
‫‪AND CH, FCH‬‬ ‫‪;1111 1100‬‬
‫‪OR CH, C0H‬‬ ‫‪;1100 0000‬‬
‫‪XOR CH, 20H‬‬ ‫‪;0010 0000‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :TEST‬ﺘﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ TEST‬ﻋﻤﻠﻴﺔ ‪ AND‬ﺍﻟﻤﻨﻁﻘﻴﺔ ﺒﻴﻥ ﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻭﻤﻌﺎﻤـل‬
‫ﺍﻟﻭﺠﻬﺔ‪ .‬ﺘﺅﺜﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ TEST‬ﻓﻘﻁ ﻋﻠﻰ ﺤﺎﻟﺔ ﺒﻌﺽ ﺭﺍﻴﺎﺕ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪ .‬ﻭﻻ ﺘﺨﺯﻥ ﻨﺎﺘﺞ ﺍﻟﻌﻤﻠﻴﺔ‬
‫ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ‪.‬‬
‫ﻻ ﺤﺎﻟﺔ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ‪ AL‬ﻓﺈﺫﺍ ﻜﺎﻨﺕ ﺘﺴﺎﻭﻱ ‪ 1‬ﻓﻴﺠﺭﻱ ﺍﻟﻘﻔـﺯ‬
‫ﻤﺜﺎل‪ :‬ﺘﻔﺤﺹ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺃﻭ ﹰ‬
‫ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺫﻱ ﺍﻟﻠﺼﺎﻗﺔ ‪.RIGHT‬‬
‫‪TEST AL, 1‬‬ ‫‪; test right bit‬‬
‫‪JNZ RIGHT‬‬ ‫‪; if set‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :NOT‬ﺘﹸﻌﻜﺱ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ NOT‬ﺤﺎﻟﺔ ﻜل ﺒﺕ ﻤﻥ ﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ‪ .‬ﹸﺘﻜﺎﻓﺊ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ‬
‫ﺇﺠﺭﺍﺀ ﺍﻟﻤ‪‬ﺘﻤﻡ ﺇﻟﻰ ﺍﻟﻭﺍﺤﺩ ‪.one's complement‬‬
‫ﻤﺜـﺎل‪ :‬ﺒﻔﺭﺽ ﺃﻥ ‪ ،CH=99h‬ﻓﺈﻨﻪ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،NOT CH‬ﻴﺼﺒﺢ ﻤﺤﺘـﻭﻯ ‪ CH‬ﻤـﺴﺎﻭﻴﹰﺎ‬
‫‪.66h‬‬

‫‪21‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ‬
‫ﺘﺴﻤﺢ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ ﺒﺈﺯﺍﺤﺔ ﺒﺘﺎﺕ ﻤﻌﺎﻤل‪ ،‬ﺒﻁﻭل ﺒﺎﻴﺕ ﺃﻭ ‪ 2‬ﺒﺎﻴﺕ‪ ،‬ﺇﺯﺍﺤﺔ ﻤﻨﻁﻘﻴﺔ ﺃﻭ ﺤـﺴﺎﺒﻴﺔ‪.‬‬
‫‪‬ﻴﻤﻜﻥ ﺃﻥ ﺘﻨﻔﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪ 255‬ﺇﺯﺍﺤﺔ‪ ،‬ﻭ ‪‬ﻴﺤ ‪‬ﺩﺩ ﻤﻌﺎﻤل ﺍﻟﻌﺩ ‪ count operand‬ﻓﻲ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﺩﺩ ﻤﺭﺍﺕ ﺍﻹﺯﺍﺤﺔ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﻤﻌﺎﻤل ﺍﻟﻌﺩ ﻗﻴﻤﺔ ﺜﺎﺒﺘﺔ ﺃﻭ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠل ‪ .CL‬ﺘﺅﺜﺭ‬
‫ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﺤﺎﻟﺔ ﺒﻌﺽ ﺭﺍﻴﺎﺕ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪ ،‬ﻜﻤﺎ ﻴﺠﺭﻱ ﺇﺯﺍﺤﺔ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤـل‬
‫ﺇﻟﻰ ﺒﺕ ﺍﻟﺤﺎﻤل ‪ CF‬ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺯﺍﺤﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ‪ ،‬ﻭ ﺇﺯﺍﺤﺔ ﺍﻟﺒﺕ ﺍﻟﻌﻠﻴﺎ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﺇﻟﻰ ﺒـﺕ‬
‫ﺍﻟﺤﺎﻤل ‪ CF‬ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺯﺍﺤﺔ ﻨﺤﻭ ﺍﻟﻴﺴﺎﺭ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻋﻤل ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ ‪ SHR ،SAL ،SHL‬ﻭ ‪.SAR‬‬
‫ﺳﺠﻞ ﺃﻭ ﻣﻮﻗﻊ ﺫﺍﻛﺮﺓ‬
‫ﻳﻤﻜﻦ وﺿﻊ اﻟﺒﺎﻳﺖ ‪10001011‬‬
‫ﻓﻲ اﻟﺴﺠﻞ وﺗﻐﻴﺮ ﺣﺎﻟﺔ اﻟﺴﺠﻞ ﺑﻌﺪ‬ ‫‪0‬‬ ‫ﳚﺮﻱ ﺇﺩﺭﺍﺝ‬
‫ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻹزاﺣﺔ‪ .‬ﺗﺼﺒﺢ اﻟﻨﺘﻴﺠﺔ‬
‫ﻋﻠﻰ اﻟﺘﺮﺗﻴﺐ‪:‬‬
‫‪ 00010110‬و ‪C=1‬‬
‫‪ 00010110‬و ‪C=1‬‬
‫‪ 01000101‬و ‪C=1‬‬
‫‪ 11000101‬و ‪C=1‬‬

‫ﺑﺖ ﺍﻹﺷﺎﺭﺓ‬

‫ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ SHL‬ﻭ ‪SAL‬‬


‫ﻫﺎﺘﺎﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﻤﺘﻜﺎﻓﺌﺘﺎﻥ‪ ،‬ﺘﻌﻤﻼﻥ ﻋﻠﻰ ﺇﺯﺍﺤﺔ ﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻴﺴﺎﺭﹰﺍ‪ .‬ﻴﺠﺭﻱ ﺇﺩﺨﺎل ﺼـﻔﺭ‬
‫ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﺒﻌﺩ ﻜل ﺇﺯﺍﺤﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪SHR‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﻤﻨﻁﻘﻴﺔ ﻋﻠﻰ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻴﻤﻴﻨﹰﺎ‪ .‬ﻴﺠﺭﻱ ﺇﺩﺨﺎل ﺼﻔﺭ ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴـﺭﺓ‬
‫ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﺒﻌﺩ ﻜل ﺇﺯﺍﺤﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪SAR‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﺤﺴﺎﺒﻴﺔ ﻋﻠﻰ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ‪ .‬ﻴﺠﺭﻱ ﺩﻭﻤﹰﺎ ﺇﺩﺭﺍﺝ ﺒﺕ ﺍﻹﺸﺎﺭﺓ‬
‫ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﻋﻠﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤل‪.‬‬

‫‪22‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV AL, 11100000b‬‬
‫‪SHL AL, 1‬‬ ‫‪; AL = 11000000b, CF=1.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻀﺭﺏ ‪ AX‬ﺒـ ‪ 10‬ﻤﺴﺘﺨﺩﻤﹰﺎ ﻋﻤﻠﻴﺎﺕ ﺇﺯﺍﺤﺔ ﻭﺠﻤﻊ‪.‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬
‫‪SHL AX,1‬‬
‫‪MOV BX, AX‬‬
‫‪MOV CL, 2‬‬
‫‪SHL AX, CL‬‬
‫‪ADD AX, BX‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺩﻭﺭﺍﻥ‬
‫ﺘﺴﻤﺢ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺩﻭﺭﺍﻥ ﺒﺈﺯﺍﺤﺔ ﺒﺘﺎﺕ ﻤﻌﺎﻤل‪ ،‬ﺒﻁﻭل ﺒﺎﻴﺕ ﺃﻭ ‪ 2‬ﺒﺎﻴﺕ‪ ،‬ﻴﻤﻴﻨﹰﺎ ﺃﻭ ﻴﺴﺎﺭﹰﺍ ﻜﻤـﺎ ﻓـﻲ‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ‪ ،‬ﻭﻴﻜﻤﻥ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺤﺔ ﻭﺍﻟﺩﻭﺭﺍﻥ ﺃﻨـﻪ ﻻ ﻴﺠـﺭﻱ ﻓـﻲ ﺘﻌﻠﻴﻤـﺎﺕ‬
‫ﺍﻟﺩﻭﺭﺍﻥ ﺇﻫﻤﺎل ﺍﻟﺒﺕ ﺍﻟﻤﺯﺍﺤﺔ ﺨﺎﺭﺠﹰﺎ ﻭﺇﻨﻤﺎ ﻴﻌﺎﺩ ﺇﺩﺨﺎﻟﻬﺎ ﻤﻥ ﺠﺩﻴﺩ ﻓـﻲ ﺍﻟﻤﻌﺎﻤـل‪ .‬ﺘـﺅﺜﺭ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﺤﺎﻻﺕ ﺒﻌﺽ ﺍﻟﺭﺍﻴﺎﺕ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻋﻤل ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺩﻭﺭﺍﻥ ‪ RCR ،ROL ،RCL‬ﻭ ‪.ROR‬‬
‫ﺳﺠﻞ ﺃﻭ ﻣﻮﻗﻊ ﺫﺍﻛﺮﺓ‬

‫ﻳﻤﻜﻦ وﺿﻊ اﻟﺒﺎﻳﺖ ‪ 10001011‬ﻓﻲ‬


‫اﻟﺴﺠﻞ و ‪ CF=0‬وﺗﻐﻴﺮ ﺣﺎﻟﺔ اﻟﺴﺠﻞ‬
‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻹزاﺣﺔ‪ .‬ﺗﺼﺒﺢ اﻟﻨﺘﻴﺠﺔ‬
‫ﻋﻠﻰ اﻟﺘﺮﺗﻴﺐ‪:‬‬
‫‪ 00010111‬و ‪C=1‬‬
‫‪ 00010111‬و ‪C=1‬‬
‫‪ 11000101‬و ‪C=1‬‬
‫‪ 11000101‬و ‪C=1‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪RCL‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﺩﻭﺭﺍﻨﻴﺔ ﻟﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻨﺤﻭ ﺍﻟﻴﺴﺎﺭ ﻋﺒﺭ ﺍﻟﺤﺎﻤل‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺩﺭﺍﺝ ﺍﻟﺤﺎﻤل ‪ CF‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﻭﻴﺄﺨﺫ ﺍﻟﺤﺎﻤل ﻗﻴﻤﺔ ﺍﻟﺒـﺕ ﺍﻟﻌﻠﻴـﺎ ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻤل‪.‬‬

‫‪23‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ROL‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﺩﻭﺭﺍﻨﻴﺔ ﻟﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻨﺤﻭ ﺍﻟﻴﺴﺎﺭ ﻋﺒﺭ ﺍﻟﺤﺎﻤل‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺩﺭﺍﺝ ﺍﻟﺒﺕ ﺍﻟﻌﻠﻴﺎ ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﻭﻴﺄﺨﺫ ﺍﻟﺤﺎﻤل ﺃﻴﻀﹰﺎ ﻗﻴﻤﺔ ﺍﻟﺒﺕ ﺍﻟﻌﻠﻴﺎ ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻤل‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪RCR‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﺩﻭﺭﺍﻨﻴﺔ ﻟﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ ﻋﺒﺭ ﺍﻟﺤﺎﻤل‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺩﺭﺍﺝ ﺍﻟﺤﺎﻤل ‪ CF‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﻋﻠﻰ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﻭﻴﺄﺨﺫ ﺍﻟﺤﺎﻤل ﻗﻴﻤﺔ ﺍﻟﺒﺕ ﺍﻷﻭﻟـﻰ ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻤل‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ROR‬‬
‫ﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺯﺍﺤﺔ ﺩﻭﺭﺍﻨﻴﺔ ﻟﺒﺘﺎﺕ ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﻨﺤﻭ ﺍﻟﻴﻤﻴﻥ ﻋﺒﺭ ﺍﻟﺤﺎﻤل‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺩﺭﺍﺝ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﺒﺕ ﺍﻟﻌﻠﻴﺎ ﻤﻥ ﺍﻟﻤﻌﺎﻤل ﻭﻴﺄﺨﺫ ﺍﻟﺤﺎﻤل ﺃﻴﻀﹰﺎ ﻗﻴﻤﺔ ﺍﻟﺒﺕ ﺍﻷﻭﻟﻰ ﻤﻥ‬
‫ﺍﻟﻤﻌﺎﻤل‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪STC‬‬ ‫‪; set carry (CF=1).‬‬
‫‪MOV AL, 1Ch‬‬ ‫‪; AL = 00011100b‬‬
‫‪RCL AL, 1‬‬ ‫‪; AL = 00111001b, CF=0.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ‪‬ﻴﺤﺼﻲ ﻋﺩﺩ ﺍﻟﻭﺤﺩﺍﻥ ﻓﻲ ﺒﺎﻴﺕ ﻭﻴﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ‪:BL‬‬
‫ﺍﻟﺤل‪:‬‬

‫‪DATA1‬‬ ‫‪DB 97‬‬ ‫‪; 61h‬‬


‫‪SUB BL,BL‬‬ ‫‪;clear BL to keep the number of 1s‬‬
‫‪MOV DL,8‬‬ ‫‪;rotate total of 8 times‬‬
‫‪MOV AL,DATA1‬‬
‫‪AGAIN:‬‬
‫‪ROL AL,1‬‬ ‫‪;rotate it once‬‬
‫‪JNC NEXT‬‬ ‫‪;check for 1‬‬
‫‪INC BL‬‬ ‫‪;if CF=1 then add one to count‬‬
‫‪NEXT: DEC DL‬‬ ‫‪;go through this 8 times‬‬
‫‪JNZ AGAIN‬‬ ‫‪;if not finished go backNOP‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻔﺭﻋﻴﺔ‬
‫ﺇﺫﺍ ﻜﺎﻥ ﺒﺭﻨﺎﻤﺠﻙ ‪‬ﻴﻜﺭﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻤﺜل ﺠﻤﻊ ﻗﻴﻡ ﻤﺼﻔﻭﻓﺔ ﺃﻭ ﺇﻴﺠـﺎﺩ ﺍﻟﻘﻴﻤـﺔ‬
‫ﺍﻟﻌﻅﻤﻰ ﺒﻴﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻌﻁﻴﺎﺕ‪ ،‬ﻓﻤﻥ ﺍﻷﻓﻀل ﻭﻀﻊ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﻌﹰﺎ ﻀـﻤﻥ ﻭﺤـﺩﺓ ﺘـﺴﻤﻰ‬

‫‪24‬‬
‫ﺒﺭﻨﺎﻤﺠﹰﺎ ﻓﺭﻋﻴﹰﺎ ﺃﻭ ﺇﺠﺭﺍﺌﻴﺔ‪.‬‬
‫ﻴﻤﻜﻥ ﻁﻠﺏ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻤﻥ ﺃﻱ ﻨﻘﻁﺔ ﻤﻥ ﺒﺭﻨﺎﻤﺠﻙ ﺍﻟﺭﺌﻴﺱ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ‪ ،CALL‬ﻋﻨﺩﻫﺎ ‪‬ﻴﺨﹶـ ِﺯﻥ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﻋﻨﻭﺍﻥ ﺃﻭل ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ ﺘﻌﻠﻴﻤﺔ ‪ CALL‬ﻓﻲ ﺍﻟﻤﻜﺩﺱ‪ ،‬ﺜﻡ َﻴﺸﺤﻥ ‪ IP‬ﺒﻌﻨـﻭﺍﻥ‬
‫ﺃﻭل ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻔﺭﻋﻲ‪ .‬ﻴ‪‬ﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺤﺘﻰ ﻴـﺼل‬
‫ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ‪ ،RET‬ﺍﻟﺘﻲ ﺘﹸﺸﻴﺭ ﺇﻟﻰ ﻨﻬﺎﻴﺔ ﺍﻹﺠﺭﺍﺌﻴﺔ‪ .‬ﻋﻨﺩﻫﺎ َﻴﺸﺤﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪ IP‬ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﺨﺯﻥ ﻓﻲ‬
‫ﺍﻟﻤﻜﺩﺱ ﻭﻴﻌﻭﺩ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻴﺘﺎﺒﻊ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﺒﺘﺩﺍ ًﺀ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠـﺕ ﺘﻌﻠﻴﻤـﺔ ﺍﻻﺴـﺘﺩﻋﺎﺀ‬
‫‪ ،CALL‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻳﻤﻜﻦ ﺟﻌﻞ اﻟﻤﺨﻄﻂ ﻣﺘﺤﺮآًﺎ ﺑﺤﻴﺚ‬


‫ﺑﻌﺪ اﻟﺘﻌﻠﻴﻤﺔ ‪ Call sub A‬ﻳﻨﻔﺬ‬
‫ﺗﻌﻠﻴﻤﺎت ‪ sub A‬ﺛﻢ ﻳﻌﻮد وﻳﻨﻔﺬ‬
‫اﻟﺘﻌﻠﻴﻤﺎت ﻣﻦ ‪ main‬وﻋﻨﺪﻣﺎ ﻳﺼﻞ‬
‫إل اﻻﺳﺘﺪﻋﺎء اﻵﺧﺮ ‪Call sub A‬‬
‫ﻳﻌﻮد وﻳﻨﻔﺬ ﺗﻌﻠﻴﻤﺎت ‪ sub A‬وﻣﻦ‬
‫ﺛﻢ ﻳﺘﺎﺑﻊ ﺗﻨﻔﻴﺬ اﻟﺘﻌﻠﻴﻤﺎت ﻓﻲ ‪main‬‬

‫ﺘﺒﺩﺃ ﺇﺠﺭﺍﺌﻴﺔ ﺒﻤﻌﺭ‪‬ﻑ ﻴﺤﺩﺩ ﺍﺴﻡ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻤﺘﺒﻭﻋﹰﺎ ﺒﺎﻟﻜﻠﻤﺔ ﺍﻟﻤﺨﺘﺯﻟﺔ ‪ ،proc‬ﻭﺘﻨﺘﻬﻲ ﺃﻴـﻀﹰﺎ ﺒﺎﺴـﻡ‬
‫ﺍﻹﺠﺭﺍﺌﻴﺔ ﻤﺘﺒﻭﻋﹰﺎ ﺒﺎﻟﻜﻠﻤﺔ ﺍﻟﻤﺨﺘﺯﻟﺔ ‪ .endp‬ﻭﻴﻤﻜﻨﻨﺎ ﺍﻟﺘﻤﻴﻴﺯ ﺒﻴﻥ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻻﺴـﺘﺩﻋﺎﺀ‪ :‬ﻗﺭﻴـﺏ‬
‫‪ NEAR CALL‬ﻭﺒﻌﻴﺩ ‪.FAR CALL‬‬

‫ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﻘﺭﻴﺏ ‪NEAR CALL‬‬


‫ﻓﻲ ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﻘﺭﻴﺏ ﺘﻘﻊ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺱ ﻨﻔﺴﻪ‪ ،‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺘﺨـﺯﻥ‬
‫) ﹸﺘﺩﻓﻊ( ﻗﻴﻤﺔ ‪ IP‬ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﻭ ‪‬ﻴﺸﺤﻥ ‪ IP‬ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻹﺠﺭﺍﺌﻴﺔ‪ .‬ﻴﻤﻜـﻥ ﺃﻥ‬
‫ﻴﻜﻭﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻤﻀﻤﻨﹰﺎ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻨﻔﺴﻬﺎ ﺃﻭ ﻤﻭﺠﻭﺩﹰﺍ ﻓﻲ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻭ ﻓﻲ ﻤﻭﻗـﻊ‬
‫ﺫﺍﻜﺭﺓ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻥ ﺃﻥ ﻨﻤﻴﺯ ﺒﻴﻥ ﺍﺴﺘﺩﻋﺎﺀ ﺒﻌﻨﻭﻨﺔ ﻤﺒﺎﺸﺭﺓ ﺃﻭ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪.‬‬
‫ƒ ﻋﻨﻭﻨﺔ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺘﺘﻀﻤﻥ ﺘﻌﻠﻴﻤﺔ ‪ CALL‬ﺇﺯﺍﺤﺔ ﺒﻁﻭل ‪-2‬ﺒﺎﻴـﺕ ﻤـﻊ ﺇﺸـﺎﺭﺓ‪،‬‬
‫ﻭﻴ‪‬ﺤﺴﺏ ﻋﻨﻭﺍﻥ ﺒﺩﺍﻴﺔ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺒﺈﻀﺎﻓﺔ ﻫﺫﻩ ﺍﻹﺯﺍﺤﺔ ﺇﻟﻰ ‪ .IP‬ﻴﻤﻜﻥ ﺒﻬـﺫﻩ ﺍﻟﻁﺭﻴﻘـﺔ ﻁﻠـﺏ‬
‫ﺇﺠﺭﺍﺌﻴﺔ ﺘﺒﻌﺩ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ﺒﻴﻥ ‪ -32768‬ﻭ ‪ +32767‬ﺒﺎﻴﺕ ﻋﻥ ﺃﻭل ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻲ‬
‫ﺘﻌﻠﻴﻤﺔ ﺍﻟـ ‪.CALL‬‬

‫‪25‬‬
‫ƒ ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﻘﻊ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻟﻺﺠﺭﺍﺌﻴﺔ ﻓﻲ ﺃﺤﺩ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻭ‬
‫ﻓﻲ ﻤﻭﻗﻌﻴﻥ ﻤﺘﺘﺎﻟﻴﻴﻥ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻭﻴﻤﻜﻨﻨﺎ ﺒﺎﻟﺘﺎﻟﻲ ﺍﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺃﻨﻤﺎﻁ ﻋﻨﻭﻨـﺔ ﺍﻟـﺫﺍﻜﺭﺓ ﻏﻴـﺭ‬
‫ﺍﻟﻤﺒﺎﺸﺭﺓ ﻟﻘﺭﺍﺀﺓ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻌﺎل ﻟﻺﺠﺭﺍﺌﻴﺔ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪CALL CallTbl[bx] ;Index into an array of pointers.‬‬
‫‪CALL word ptr [bx] ;BX points at word to use.‬‬

‫ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺒﻌﻴﺩ ‪FAR CALL‬‬


‫ﻓﻲ ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺒﻌﻴﺩ‪ ،‬ﻴﻘﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻔﺭﻋﻲ ﻀﻤﻥ ﻤﻘﺘﻁﻊ ﻤﺨﺘﻠﻑ ﻋﻥ ﺍﻟﻤﻘﺘﻁـﻊ ﺍﻟـﺫﻱ ﻴﺤﺘـﻭﻱ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺱ‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺒﻌﻴﺩ‪:‬‬
‫‪ -1‬ﺩﻓﻊ ﻗﻴﻤﺔ ‪ IP‬ﻭ ‪ CS‬ﺇﻟﻰ ﺍﻟﻤﻜﺩﺱ‪.‬‬
‫‪ -2‬ﺘﺤﻤﻴل ‪ CS:IP‬ﺒﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻹﺠﺭﺍﺌﻴﺔ‪.‬‬

‫ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺲ‬ ‫ﺍﻹﺟﺮﺍﺋﻴﺔ‬ ‫ﺍﳌﻜﺪﺱ‬


‫ﻳﻤﻜﻦ ﺟﻌﻞ اﻟﻤﺨﻄﻂ ﻣﺘﺤﺮآًﺎ ﺑﺤﻴﺚ‬
‫ﺑﻌﺪ اﻟﺘﻌﻠﻴﻤﺔ ‪ Call sub1‬ﻳﺒﻴﻦ‬
‫ﺣﺎﻟﺔ اﻟﻤﻜﺪس و ‪ IP‬و ‪ CS‬وﺛﻢ ﻳﻨﻔﺬ‬
‫ﺗﻌﻠﻴﻤﺎت ‪ sub1‬ﺛﻢ ﻋﻨﺪﻣﺎ ﻳﺼﻞ‬
‫إﻟﻰ اﻟﺘﻌﻠﻴﻤﺔ ‪ ret‬ﻳﺸﺤﻦ ‪ IP‬و ‪CS‬‬
‫ﻣﻦ اﻟﻤﻜﺪس وﻳﻌﻮد وﻳﻨﻔﺬ اﻟﺘﻌﻠﻴﻤﺎت‬
‫ﻣﻦ ‪main‬‬

‫ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﺠﺯﺀ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻭ ﻓﻲ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜـﻥ ﺃﻥ ﻨﻤﻴـﺯ‬
‫ﺒﻴﻥ ﺍﺴﺘﺩﻋﺎﺀ ﺒﻌﻨﻭﻨﺔ ﻤﺒﺎﺸﺭﺓ ﺃﻭ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪.‬‬
‫ƒ ﻋﻨﻭﻨﺔ ﻤﺒﺎﺸـﺭﺓ‪ :‬ﺘﺘﻀﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ‪ ،‬ﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﺒﺎﺸﺭﺓ‪ ،‬ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﺒﺩﺍﻴﺔ ﺍﻹﺠﺭﺍﺌﻴـﺔ‪،‬‬
‫ﺍﻟﺫﻱ ﻴ‪‬ﺸﺤﻥ ﻓﻲ ﺯﻭﺝ ﺍﻟﺴﺠﻼﺕ ‪ .CS:IP‬ﻴﺨﺯﻥ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻭ ﹰ‬
‫ﻻ ﺍﻻﻨﺯﻴﺎﺡ ﺜﻡ ﻴﻠﻴﻬﺎ ﺍﻟﻤﻘﺘﻁﻊ‪.‬‬
‫ƒ ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﻘﻊ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﺒﺩﺍﻴﺔ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻓﻲ ﺃﺭﺒـﻊ ﻤﻭﻗـﻊ‬
‫ﻤﺘﺘﺎﻟﻴﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻴﺤﺘﻭﻱ ﺃﻭل ﺒﺎﻴﺘﻴﻥ ﻗﻴﻤﺔ ‪ IP‬ﻭﻴﺤﻭﻱ ﺍﻟﺒﺎﻴﺘﻴﻥ ﺍﻟﺜﺎﻟﺙ ﻭﺍﻟﺭﺍﺒﻊ ﻋﻠـﻰ ﻗﻴﻤـﺔ‬
‫‪ .CS‬ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺃﻨﻤﺎﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻏﻴﺭ ﺍﻟﻤﺒﺎﺸـﺭﺓ ﻟﻘـﺭﺍﺀﺓ ﺍﻟﻌﻨـﻭﺍﻥ ﺍﻟﻤﻨﻁﻘـﻲ‬
‫ﻟﻺﺠﺭﺍﺌﻴﺔ‪.‬‬

‫‪26‬‬
‫ﻤﺜل‪:‬‬
‫‪CALL DWordVar‬‬
‫]‪CALL dword ptr [bx‬‬
‫ﺘﻌﻠﻴﻤﺔ ‪RET‬‬
‫ﻋﻨﺩﻤﺎ ﻴﺼﺎﺩﻑ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻌﻠﻴﻤﺔ ‪ RET‬ﻴ‪‬ﻨﻬﻲ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻭﻴﻌﻭﺩ ﺇﻟﻰ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﺍﻟـﺫﻱ‬
‫ﺍﺴﺘﺩﻋﻰ ﺍﻹﺠﺭﺍﺌﻴﺔ‪ .‬ﻴﺘﺎﺒﻊ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﺒﺘﺩﺍ ًﺀ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﺕ ﻤﺒﺎﺸﺭﺓ ﺘﻌﻠﻴﻤﺔ ﻁﻠﺏ‬
‫ﺍﻹﺠﺭﺍﺌﻴﺔ‪ .‬ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﺸﺤﻥ ‪ IP‬ﺒﺂﺨﺭ ﻜﻠﻤﺔ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﺇﺫﺍ ﻜﺎﻨﺕ ﺘﻌﻠﻴﻤﺔ ‪ CALL‬ﻤﻥ ﺍﻟﻨﻭﻉ‬
‫ﺍﻟﻘﺭﻴﺏ‪ ،‬ﺃﻭ ﺒﺸﺤﻥ ﺯﻭﺝ ﺍﻟﺴﺠﻼﺕ ‪ CS:IP‬ﺒﺂﺨﺭ ﻜﻠﻤﺔ ﻤﻀﺎﻋﻔﺔ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﻤﻜـﺩﺱ ﺇﺫﺍ ﻜﺎﻨـﺕ‬
‫ﺘﻌﻠﻴﻤﺔ ‪ CALL‬ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺒﻌﻴﺩ‪.‬‬

‫ﻻ ﻋﻥ ﺘﻤﺭﻴﺭ ﻤﻭﺴﻁﺎﺕ ‪ parameters‬ﺇﻟﻰ ﺇﺠﺭﺍﺌﻴﺔ ﻋﺒﺭ ﺍﻟﻤﻜـﺩﺱ‪.‬‬


‫ﻤﺜﺎل‪ :‬ﻴﺒﻴﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ﻻ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺱ ﻗﻴﻤﹰﺎ ﻓﻲ ﺍﻟﺴﺠﻠﻴﻥ ‪ AX‬ﻭ ‪ BX‬ﻭﻤﻥ ﺜﻡ ﻴـﺩﻓﻊ ﺒﻬﻤـﺎ ﺇﻟـﻰ ﺍﻟﻤﻜـﺩﺱ‪،‬‬
‫ﻴﻀﻊ ﺃﻭ ﹰ‬
‫ﻭﻴﺴﺘﺩﻋﻲ ﺃﺨﻴﺭﹰﺍ ﺍﻹﺠﺭﺍﺌﻴﺔ ‪ ADDM‬ﻟﺠﻤﻊ ﺍﻟﻘﻴﻤﺘﻴﻥ‪ .‬ﺘﻘﺭﺃ ﺍﻹﺠﺭﺍﺌﻴـﺔ ‪ ADDM‬ﺍﻟﻤﻭﺴـﻁﺎﺕ ﻤـﻥ‬
‫ﺍﻟﻤﻜﺩﺱ ﻭﺘﻀﻊ ﻨﺎﺘﺞ ﺠﻤﻌﻬﻤﺎ ﻓﻲ ‪.AX‬‬
‫‪MOV‬‬ ‫‪AX, 30‬‬
‫‪MOV‬‬ ‫‪BX, 40‬‬
‫‪PUSH‬‬ ‫‪AX‬‬ ‫‪; stack parameter 1‬‬
‫‪PUSH‬‬ ‫‪BX‬‬ ‫‪; stack parameter 2‬‬
‫‪CALL‬‬ ‫‪ADDM‬‬

‫‪ADDM‬‬ ‫‪PROC‬‬ ‫‪NEAR‬‬


‫‪PUSH BP‬‬ ‫‪; save BP‬‬
‫‪MOV BP, SP‬‬ ‫‪; address stack with BP‬‬
‫‪MOV AX, [BP+4] ; get parameter 1‬‬
‫‪ADD AX, [BP+6] ; add parameter 2‬‬
‫‪POP BP‬‬
‫‪RET‬‬
‫‪ADDM‬‬ ‫‪ENDP‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟ ‪‬ﻤﻜ ﱢﺩﺱ ‪ POP ،PUSHF ،PUSH‬ﻭ ‪POPF‬‬


‫ﹸﺘﺴﺘﺨﺩﻡ ﺘﻌﻠﻴﻤﺔ ‪ PUSH‬ﻟﺘﺨﺯﻴﻥ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﻋﻠﻰ ﻨﺤﻭ ﻤﺅﻗﺕ ﺃﻭ ﻟﺘﻤﺭﻴﺭ ﻤﻌﻁﻴـﺎﺕ ﻤـﻥ‬
‫ﺒﺭﻨﺎﻤﺞ ﺭﺌﻴﺱ ﺇﻟﻰ ﺇﺠﺭﺍﺌﻴﺔ ﺃﻭ ﺒﺎﻟﻌﻜﺱ‪ .‬ﻜﻤﺎ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ PUSHF‬ﻟﺘﹸﺨﺯﻴﻥ ﻤﺤﺘـﻭﻯ ﺴـﺠل‬
‫ﺍﻟﺭﺍﻴﺔ ﻓﻲ ﺍﻟﻤﻜﺩﺱ‪.‬‬
‫ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ PUSH‬ﻋﻠﻰ ﻨﺤﻭ ﺨﺎﺹ ﻟﺤﻔﻅ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﻴ‪‬ﺘﻭﻗﻊ ﺃﻥ ﺘﺘﻐﻴـﺭ ﻗﻴﻤﻬـﺎ‬
‫ﺨﻼل ﺘﻨﻔﻴﺫ ﺇﺠﺭﺍﺌﻴﺔ‪.‬‬

‫‪27‬‬
‫ﻋﻨﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ‪ PUSH‬ﻟﺘﺨﺯﻴﻥ ﻤﻌﺎﻤل ﻤﻥ ‪-16‬ﺒﺕ ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﻴﺠـﺭﻱ ﺘﻨﻔﻴـﺫ ﺍﻟﺨﻁـﻭﺍﺕ‬
‫ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -1‬ﻴﺨﺯﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ ﻟﻠﻜﻠﻤﺔ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ ‪SP-1‬‬
‫‪ -2‬ﻴﺨﺯﻥ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ ‪SP-2‬‬
‫‪ -3‬ﻴ‪‬ﻨﻘﺹ ‪ SP‬ﺒﻤﻘﺩﺍﺭ ‪SP ← SP-2 : 2‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﻌﺎﻤل ﺴﺠل ﻋﺎﻡ ﺃﻭ ﺴﺠل ﻤﻘﺘﻁﻊ ﺃﻭ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪PUSHF‬‬ ‫‪; push flages‬‬
‫‪PUSH AX ; push accumulator‬‬
‫‪PUSH C‬‬
‫‪PUSH [BX] ; push the location pointed by BX‬‬
‫ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ POP‬ﻓﻲ ﻤﻌﺎﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺁﺨﺭ ﺒﺎﻴﺘﻴﻥ ﹸ‬
‫ﺨﺯﻨﺘﺎ ﻓﻲ ﺍﻟﻤﻜﺩﺱ )ﺍﻟﺒﺎﻴﺘﻴﻥ ﺍﻟﻤﻭﺠﺩﺘﻴﻥ ﻓـﻲ‬
‫ﻗﻤﺔ ﺍﻟﻤﻜﺩﺱ(‪ ،‬ﻭﻤﻥ ﺜﻡ ﹸﺘﺯﻴﺩ ‪ SP‬ﺒـ ‪ ،2‬ﻋﻠﻰ ﺍﻟﻨﺤﻭ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪ -1‬ﻴﺠﺭﻱ ﻨﺴﺦ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻗل ﺩﻻﻟﺔ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﻌﻨﻭﻨﻪ ‪SP‬‬
‫‪ -2‬ﻴﺠﺭﻱ ﻨﺴﺦ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻜﺜﺭ ﺩﻻﻟﺔ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺫﻱ ﻴﺅﺸﺭ ﺇﻟﻴﻪ ‪SP-1‬‬
‫‪ -3‬ﻴﺯﺍﺩ ‪ SP‬ﺒﻤﻘﺩﺍﺭ ‪SP ← SP+2 : 2‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﻌﺎﻤل ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ POP‬ﺴﺠل ﻋﺎﻡ ﺃﻭ ﺴﺠل ﻤﻘﺘﻁﻊ‪ ،‬ﻤﺎ ﻋـﺩﺍ ‪ ،CS‬ﺃﻭ ﻤﻭﻗـﻊ‬
‫ﺫﺍﻜﺭﺓ‪ .‬ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ POPF‬ﻟﻨﺴﺦ ﻤﺤﺘﻭﻯ ﺍﻟﻤﻜﺩﺱ ﻓﻲ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪POPF‬‬ ‫‪; pop flages‬‬
‫‪POP AX ; pop accumulator‬‬
‫‪POP C‬‬
‫‪POP [BX] ; pop the location pointed by BX‬‬

‫ﻨﺨﺯﻥ‪ ،‬ﻋﺎﺩﺓ‪ ،‬ﻓﻲ ﺒﺩﺍﻴﺔ ﻜل ﺇﺠﺭﺍﺌﻴﺔ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﺘﻐﻴﺭ ﻤﺤﺘﻭﺍﻫﺎ ﺨﻼل ﺘﻨﻔﻴﺫ ﺍﻹﺠﺭﺍﺌﻴﺔ‪.‬‬
‫ﻼ ﺘﺨﺯﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺴﺠل ﺍﻟﺭﺍﻴﺎﺕ ﻭ ‪ AX‬ﻭ ‪ BX‬ﻓﻲ ﺍﻟﻤﻜﺩﺱ‪:‬‬
‫ﻓﻤﺜ ﹰ‬
‫‪PUSHF‬‬
‫‪PUSH AX‬‬
‫‪PUSH BX‬‬
‫ﻭﻗﺒل ﺍﻟﻌﻭﺩﺓ ﻤﻥ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻨﺴﺤﺏ ﺍﻟﺴﺠﻼﺕ ﻤﻥ ﺍﻟﻤﻜﺩﺱ ﺒﺎﻟﺘﺭﺘﺏ ﺍﻟﻌﻜﺴﻲ‪ ،‬ﺃﻱ ﺍﻟﻤﺨـﺯﻥ ﺃﺨﻴـﺭﹰﺍ‬
‫ﻻ‪:‬‬
‫‪‬ﻴﺴﺤﺏ ﺃﻭ ﹰ‬
‫‪POP BX‬‬
‫‪POP AX‬‬
‫‪POPF‬‬
‫‪RET‬‬

‫‪28‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‬
‫ƒ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :LAHF‬ﺘﻨﺴﺦ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﻓﻲ ﺍﻟﺴﺠل ‪.AH‬‬
‫ƒ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :SAHF‬ﺘﻨﺴﺦ ‪ AH‬ﻓﻲ ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟﻰ ﻤﻥ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :CLC‬ﺘﻀﻊ ‪ 0‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل ‪(CF) ← 0 :CF‬‬ ‫ƒ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :STC‬ﺘﻀﻊ ‪ 1‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل ‪(CF) ← 1 :CF‬‬ ‫ƒ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :CMC‬ﺘﻌﻜﺱ ﺤﺎﻟﺔ ﺭﺍﻴﺔ ﺍﻟﺤﺎﻤل‪ (CF) ← 0 :‬ﺇﺫﺍ ‪(CF) ==1‬‬ ‫ƒ‬
‫‪ (CF) ← 1‬ﺇﺫﺍ ‪(CF) ==0‬‬
‫ƒ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :CLI‬ﺘﻀﻊ ‪ 0‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ ،IF‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻟﻥ ﻴﺴﺘﺠﻴﺏ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺃﻱ ﻤﻘﺎﻁﻌـﺔ‬
‫ﺨﺎﺭﺠﻴﺔ ﺘﺤﺩﺙ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪(IF) ← 0 :INTR‬‬
‫ƒ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :STI‬ﺘﻀﻊ ‪ 1‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ ،IF‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﺘﺴﻤﺢ ﻟﻠﻤﻌﺎﻟﺞ ﺒﺎﻻﺴـﺘﺠﺎﺒﺔ ﻟﻤﻘﺎﻁﻌـﺔ‬
‫ﺨﺎﺭﺠﻴﺔ ﺘﺤﺩﺙ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪(IF) ← 1 :INTR‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :CLD‬ﺘﻀﻊ ‪ 0‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻻﺘﺠﺎﻩ ‪ ،DF‬ﻤﻤﺎ ﻴﺴﺒﺏ ﻓﻲ ﺯﻴﺎﺩﺓ ﺁﻟﻴﺔ ﻟﻤﺤﺘﻭﻯ ﺍﻟﺴﺠﻠﻴﻥ ‪SI‬‬ ‫ƒ‬
‫ﻭ ‪ DI‬ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‪(DF) ← 0 :‬‬
‫ƒ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ :STD‬ﺘﻀﻊ ‪ 1‬ﻓﻲ ﺭﺍﻴﺔ ﺍﻻﺘﺠﺎﻩ ‪ ،DF‬ﻤﻤﺎ ﻴﺴﺒﺏ ﻓﻲ ﺇﻨﻘﺎﺹ ﺁﻟﻲ ﻟﻤﺤﺘﻭﻯ ﺍﻟـﺴﺠﻠﻴﻥ‬
‫‪ SI‬ﻭ ‪ DI‬ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‪(DF) ← 1 :‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻘﺎﻁﻌﺔ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ‪ 256‬ﻤﻘﺎﻁﻌﺔ ﻤﺨﺘﻠﻔﺔ ﻟﻜل ﻤﻨﻬﺎ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﻤﻘﺎﻁﻌﺔ ﺨـﺎﺹ‬
‫ﺒﻬﺎ‪ .‬ﻴﻤﻜﻥ ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻤﺎ‪:‬‬
‫ƒ ﺩﺍﺨﻠﻴﹰﺎ ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﻁﻔﺢ ﻓﻲ ﻋﻤﻠﻴﺔ ﺤﺴﺎﺒﻴﺔ ﺃﻭ ﻋﻨﺩ ﻤﺤﺎﻭﻟﺔ ﺍﻟﺘﻘﺴﻴﻡ ﻋﻠﻰ ﺼﻔﺭ‪.‬‬
‫ƒ ﺒﺭﻤﺠﻴﹰﺎ ﻋﻥ ﻁﺭﻴﻕ ﺘﻨﻔﻴﺫ ﺃﺤـﺩ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ‪ ،INT nn‬ﺃﻭ ‪ INTO‬ﺃﻭ ‪ ،INT 3‬ﺤﻴـﺙ ‪ xx‬ﺭﻗـﻡ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻤﻥ ‪ 00h‬ﺇﻟﻰ ‪.FFh‬‬
‫ƒ ﺃﻭ ﺨﺎﺭﺠﻴﹰﺎ ﻋﺒﺭ ﺒﻌﺽ ﻤﻐﺎﺭﺯ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ƒ ﺴﻨﻬﺘﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺒﺎﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ ‪ INTO‬ﻭ ‪ ،INT nn‬ﻭﺴﻨﺸﺭﺡ ﻋﻠﻰ ﻨﺤﻭ ﺘﻔﺼﻴﻠﻲ‬
‫ﻓﻲ ﺍﻟﻔﺼل ﺍﻟﺴﺎﺩﺱ ﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ƒ ‪ :INTO‬ﺘﹸﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻘﺎﻁﻌﺔ ﺇﺫﺍ ﻨﺘﺞ ﻁﻔﺢ ‪ overflow‬ﺨﻼل ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺒﻘﺔ‪.‬‬
‫ƒ ‪ :INT nn‬ﻴﻤﻜﻥ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ‪ INT nn‬ﺘﻭﻟﻴﺩ ‪ 256‬ﻤﻘﺎﻁﻌﺔ ﻤﺨﺘﻠﻔﺔ‪ ،‬ﻟﻜل ﻤﻨﻬﺎ ﺒﺭﻨﺎﻤﺞ ﺨﺩﻤـﺔ ﻤﻘﺎﻁﻌـﺔ‬
‫ﺨﺎﺹ ﺒﻬﺎ‪.‬‬
‫ﺘﹸﺴﺘﺨﺩﻡ ﺘﻌﻠﻴﻤﺔ ‪ INT nn‬ﻓﻲ ﺍﻟﺤﺎﺴﻭﺏ ﻋﻠﻰ ﻨﺤﻭ ﺭﺌﻴﺱ ﻻﺴﺘﺩﻋﺎﺀ ﺍﻹﺠﺭﺍﺌﻴﺎﺕ ﺍﻟﺘﻲ ﻴﺯﻭﺩﻨـﺎ ﺒﻬـﺎ‬

‫‪29‬‬
‫ﻨﻅﺎﻡ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻷﺴﺎﺴﻲ ‪7 BIOS‬ﻭﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ‪ .8MS-DOS‬ﻴﻤﻜﻥ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ‪ INT‬ﺍﺴﺘﺩﻋﺎﺀ‬
‫‪ 256‬ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﻤﺨﺘﻠﻔﺔ ﻓﻘﻁ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻴﺩﻋﻡ ﻨﻅﺎﻡ ‪ MS-DOS‬ﺃﻜﺜﺭ ﻤﻥ ‪ 100‬ﺇﺠﺭﺍﺌﻴﺔ ﻭﻴـﺩﻋﻡ‬
‫ﺍﻟـ ‪ BIOS‬ﻭﺃﺩﻭﺍﺕ ﺍﻟﻨﻅﺎﻡ ﺍﻷﺨﺭﻯ ﻤﺌﺎﺕ ﺍﻹﺠﺭﺍﺌﻴﺎﺕ ﺍﻷﺨﺭﻯ‪ .‬ﺤ‪‬ﺠﺯﺕ ﺍﻟﻤﻘﺎﻁﻌـﺎﺕ ‪،10h-1Ah‬‬
‫ﻓﻲ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‪ ،‬ﻻﺴﺘﺩﻋﺎﺀ ﺇﺠﺭﺍﺌﻴﺎﺕ ﺍﻟـ ‪ BIOS‬ﻭ ﺍﻟﻤﻘﺎﻁﻌـﺎﺕ ‪ 20h-3Fh‬ﻹﺠﺭﺍﺌﻴـﺎﺕ‬
‫ﻨﻅﺎﻡ ‪.MS-DOS‬‬
‫ﺘﹸﺨﺩﻡ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻨﻔﺴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ﻭﻅﻴﻔﺔ )ﺘﺎﺒﻊ‪ ،‬ﻤﻬﻤﺔ(‪ ،‬ﻭﻴﺠﺭﻱ ﺘﻌﻴﻴﻥ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺘﻭﺍﺒﻊ ﻤـﻥ ﺨـﻼل‬
‫ﺍﻟﻌﺩﺩ ﺍﻟﺫﻱ ﻴ‪‬ﻤﺭﺭ ﺇﻟﻰ ﺇﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﺒﺭ ﺍﻟﺴﺠل ‪ .AX‬ﻜﻤﺎ ﺘﺘﻁﻠﺏ ﺒﻌﺽ ﺍﻹﺠﺭﺍﺌﻴﺎﺕ ﻤﻭﺴﻁﺎﺕ‬
‫‪ parameters‬ﻴﺠﺭﻱ ﺘﻤﺭﻴﺭﻫﺎ ﺇﻟﻰ ﺍﻹﺠﺭﺍﺌﻴﺎﺕ ﻋﺒﺭ ﺒﻌﺽ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺩﺍﺨﻠﻴﺔ‪.‬‬
‫ﻨﺒﻴﻥ ﻓﻴﻤﺎ ﻴﻠﻲ ﺃﻤﺜﻠﺔ ﻻﺴﺘﺩﻋﺎﺀ ﺒﻌﺽ ﻤﻘﺎﻁﻌﺎﺕ ﻨﻅﺎﻡ ‪ MS-DOS‬ﻭ ‪ BIOS‬ﻟﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺎﺕ‪ :‬ﺇﺩﺨـﺎل‬
‫ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ ،‬ﻭﺇﻅﻬﺎﺭ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‪.‬‬
‫ﺃﻤﺜﻠﺔ‪:‬‬
‫ﺇﺩﺨﺎل ﻤﺤﺭﻑ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪:‬‬
‫‪‬ﻴﺴﺘﺩﻋﻰ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺎﻟﻤﻘﺎﻁﻌﺔ ‪ INT 21h‬ﺒﻌﺩ ﻭﻀﻊ ‪ 01h‬ﻓﻲ ‪ .AX‬ﻴﺠﺭﻱ ﺇﻅﻬﺎﺭ ﺍﻟﻤﺤﺭﻑ ﺍﻟ ‪‬ﻤﺩْﺨل‬
‫ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻭﻭﻀﻌﻪ ﻓﻲ ‪.AL‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV AH, 01h‬‬
‫‪INT 21h‬‬
‫‪MOV character, AL ;Save readed character.‬‬

‫ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻭﺍﺒﻊ ‪ BIOS‬ﻗﺭﺍﺀﺓ ﻤﺤﺭﻑ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﻭﻀـﻌﻪ ﻓـﻲ ‪ ،AL‬ﻭﺫﻟـﻙ‬
‫ﺒﺎﺴﺘﺩﻋﺎﺀ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ 16h‬ﺒﻌﺩ ﻭﻀﻊ ‪ 0‬ﻓﻲ ‪.AH‬‬
‫‪MOV AH, 0‬‬ ‫‪;Wait for key available, and then‬‬
‫‪INT 16h‬‬ ‫‪; read that key.‬‬
‫‪MOV character, al‬‬ ‫‪;Save readed character.‬‬

‫ﺕ ‪ routines‬ﺑﺮﳎﻴ ٍﺔ ﺃﺳﺎﺳﻴ ٍﺔ‬


‫‪ 7‬ﳐﺘﺼﺮ‪ .Basic Input/Output System :‬ﺗﻌﲏ ﰲ ﺍﳊﻮﺍﺳﻴﺐ ﺍﻟﺸﺨﺼﻴﺔ ﳎﻤﻮﻋ ﹸﺔ ﻣ‪‬ﺴﺎﻗﺎ ٍ‬
‫ﺕ ﻋﺘﺎﺩﻳﺔ‪ .‬ﻳ‪‬ﺨﺰ‪‬ﻥ ‪ BIOS‬ﰲ‬ ‫ﺗ‪‬ﻔﺤﺺ ﺍﻟﻌﺘﺎﺩﻳﺎﺕ ﻋﻨﺪ ﺍﻹﻗﻼﻉ‪ ،‬ﻭﺗ‪‬ﻔﻌ‪‬ﻞ ﻧﻈﺎ ‪‬ﻡ ﺍﻟﺘﺸﻐﻴﻞ‪ ،‬ﻭﺗﺘﺤﻤ‪‬ﻞ ﻧ ﹾﻘ ﹶﻞ ﺍﳌﻌﻄﻴﺎﺕ ﻋﱪ ﲡﻬﻴﺰﺍ ٍ‬
‫ﺫﺍﻛﺮﺓ ‪ ،ROM‬ﲝﻴﺚ ﳝﻜِﻦ ﺗﻨﻔﻴﺬﹸﻩ ﻋﻨﺪ ﺑﺪﺀ ﺗﺸﻐﻴﻞ ﺍﳊﺎﺳﻮﺏ‪ .‬ﻭﻣﻊ ﺃ ﹼﻥ ‪ BIOS‬ﺣﺎﺳ ‪‬ﻢ ﰲ ﺍﻷﺩﺍﺀ‪ ،‬ﻓﺈﻧﻪ ﻏ ‪‬ﲑ ﻣﺮﺋ ‪‬ﻲ ﻋﺎﺩ ﹰﺓ‬
‫ﳌﺴﺘﺨﺪﻣِﻲ ﺍﳊﺎﺳﻮﺏ‪.‬‬

‫‪ 8‬ﳐﺘﺼﺮ‪ .Microsoft Disk Operating System :‬ﻧﻈﺎ ‪‬ﻡ ﺗﺸﻐﻴ ٍﻞ ﳌﻬﻤ ٍﺔ ﻭﺍﺣﺪﺓ ﻭِﻟﻤ‪‬ﺴﺘﺨ ِﺪ ٍﻡ ﻭﺍﺣﺪ ﻣﻊ ﻭﺍﺟﻬ ِﺔ ﺃﻭﺍﻣﺮ‬
‫ﺕ‬
‫ﺳﻄﺮﻳﺔ‪ ،‬ﺃﹸﳒﺰ ﻋﺎﻡ ‪ 1981‬ﳊﻮﺍﺳﻴﺐ ‪ IBM‬ﻭﺍﳌﺘﻮﺍﻓﻘﺔ ﻣﻌﻬﺎ‪ .‬ﺇﻥ ﻧﻈﺎﻡ ‪ MS-DOS‬ﻛﻐﲑﻩ ﻣﻦ ﺃﻧﻈﻤﺔ ﺍﻟﺘﺸﻐﻴﻞ ﻳﺪﻳ ‪‬ﺮ ﻋﻤﻠﻴﺎ ٍ‬
‫ﺧﺎﺭﺟﻴﺔ‪ ،‬ﻣﺜﻞ‪ :‬ﺩﺧﻞ ﻭﺧﺮﺝ ﺍﻟﻘﺮﺹ‪ ،‬ﻭﺗﻘﺒ‪‬ﻞ ﺍﻟﻔﻴﺪﻳﻮ‪ ،‬ﻭﺍﻟﺘﺤﻜﹼﻢ ﰲ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ‪ ،‬ﺇﺿﺎﻓ ﹰﺔ ﺇﱃ ﻋﺪﺩ ﻣﻦ ﺍﻟﻮﻇﺎﺋﻒ ﺍﻟﺪﺍﺧﻠﻴﺔ‬
‫ﺗﺘﻌﻠﻖ ﺑﺘﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﻭﺻﻴﺎﻧﺔ ﺍﳌﻠﻒ‪.‬‬

‫‪30‬‬
‫ﺇﻅﻬﺎﺭ ﻤﺤﺭﻑ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‪ :‬ﻴﺴﺘﺩﻋﻰ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺎﻟﻤﻘﺎﻁﻌﺔ ‪ INT 10h‬ﺒﻌﺩ ﻭﻀﻊ ‪ 0Eh‬ﻓﻲ ‪.AX‬‬
‫ﻴﺠﺭﻱ ﻭﻀﻊ ﺍﻟﻤﺤﺭﻑ ﺍﻟﻤ‪‬ﺭﺍﺩ ﺇﻅﻬﺎﺭﻩ ﻓﻲ ‪ ،AL‬ﻭ ‪‬ﻴﺤﺩﺩ ‪ BH‬ﺼﻔﺤﺔ ﺍﻟﻔﻴﺩﻴﻭ ﻭ ‪ BL‬ﻟﻭﻥ ﺍﻟﺨﻠﻔﻴﺔ‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫‪MOV AH, 0Eh‬‬ ‫‪;character display function‬‬
‫‪MOV AL, 41h‬‬ ‫'‪; specify ASCII character 'A‬‬
‫‪MOV BH, 00h‬‬ ‫‪; set to page 0‬‬
‫‪MOV BL, 00h‬‬ ‫‪; set colour‬‬
‫‪INT 10h‬‬ ‫‪; perform interupt‬‬
‫ﺇﺩﺨﺎل ﺴﻠﺴﺔ ﻤﺤﺎﺭﻑ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ :‬ﻴﺴﺘﺩﻋﻰ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺎﻟﻤﻘﺎﻁﻌﺔ ‪ INT 21h‬ﺒﻌﺩ ﻭﻀـﻊ‬
‫‪ 0Ah‬ﻓﻲ ‪ .AH‬ﻴﺤﺘﻭﻱ ‪ DX‬ﻋﻠﻰ ﺍﻨﺯﻴﺎﺡ ﻋﻨﻭﺍﻥ ﺴﻠﺴﺔ ﺍﻟﻤﺤﺎﺭﻑ ﻋﻥ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪.DS‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺣﺠﺰ ﺑﺎﻳﺖ ﻳﻀﻊ ﻓﻴﻪ ﺗﺎﺑﻊ‬ ‫ﺣﺠﺰ ‪ 6‬ﺑﺎﻳﺘﺎت ﻟﺴﻠﺴﺔ اﻟﻤﺤﺎرف‬
‫اﻟﻌﺪد اﻷآﺒﺮ ﻟﻠﻤﺤﺎرف‬ ‫اﻹدﺧﺎل ﻋﺪد اﻟﺒﺎﻳﺘﺎت اﻟﻤُﺪﺧﻠﺔ‬ ‫اﻟﻤﺮاد إدﺧﺎﻟﻬﺎ وﺿﻊ اﻟﺒﺎﻳﺖ ‪FFh‬‬
‫اﻟﻤﺴﻤﻮح إدﺧﺎﻟﻬﺎ‬ ‫ﻓﻲ آﻞ ﻣﻨﻬﺎ‬

‫ﻳﺠﺮي ﺣﺠﺰ اﻟﻤﻌﻄﻴﺎت‬ ‫‪ORG 0010h‬‬


‫اﺑﺘﺪا ًء ﻣﻦ اﻟﻤﻮﻗﻊ ‪0010h‬‬ ‫)‪DATA1 DB 6,?,6 DUP(0FFh‬‬
‫ﻣﻦ ﻗﻄﺎع اﻟﻤﻌﻄﻴﺎت‬ ‫‪MOV AH, 0AH‬‬
‫‪MOV DX, OFFSET DATA1‬‬
‫‪INT 21H‬‬

‫ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﺃﺩﺨﻠﻨﺎ ﺴﻠﺴﺔ ﺍﻟﻤﺤﺎﺭﻑ ‪ USA‬ﺜﻡ >‪ <enter‬ﻓﺈﻥ ﺴﻠـﺴﻠﺔ ﺍﻟﻤﺤـﺎﺭﻑ ‪ DATA‬ﺴـﻭﻑ‬
‫ﺘﺤﺘﻭﻱ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﺗﺮﻣﻴﺰ ‪ascii‬‬
‫ﻋﺪد اﻟﻤﺤﺎرف اﻟﻌﺪد اﻷآﺒﺮ ﻟﻠﻤﺤﺎرف‬ ‫ﻟـ ‪USA‬‬
‫اﻟﻤﺴﻤﻮح إدﺧﺎﻟﻬﺎ‬ ‫اﻟﻤُﺪﺧﻠﺔ‬ ‫ﺗﺮﻣﻴﺰ ‪ascii‬‬
‫ﻟـ ‪return‬‬

‫ﺇﺨﺭﺍﺝ ﺴﻠﺴﺔ ﻤﺤﺎﺭﻑ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‪ :‬ﻴﺴﺘﺩﻋﻰ ﻫﺫﺍ ﺍﻟﺘﺎﺒﻊ ﺒﺎﻟﻤﻘﺎﻁﻌﺔ ‪ INT 21h‬ﺒﻌﺩ ﻭﻀﻊ ‪ 09h‬ﻓﻲ‬
‫‪ .AX‬ﻴﺤﺘﻭﻱ ‪ DX‬ﻋﻠﻰ ﺍﻨﺯﻴﺎﺡ ﻋﻨﻭﺍﻥ ﺴﻠﺴﺔ ﺍﻟﻤﺤﺎﺭﻑ ﻋﻥ ﺒﺩﺍﻴﺔ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪.DS‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﺳﻠﺴﺔ اﻟﻤﺤﺎرف‬ ‫ﺗﺮﻣﻴﺰ ‪ascii‬‬ ‫ﺗﺮﻣﻴﺰ ‪ascii‬‬
‫اﻟﻤُﺮاد إﺧﺮاﺟﻬﺎ‬ ‫ﻟـ ‪line feed‬‬ ‫ﻟـ‪carriage return‬‬

‫'‪DATA1 DB 'Hello', 13, 10, '$‬‬ ‫ﻣﺤﺮف ﻟﻠﺪﻻﻟﺔ‬


‫‪MOV AH, 0AH‬‬ ‫ﻋﻠﻰ ﻧﻬﺎﻳﺔ اﻟﺴﻠﺴﻠﺔ‬
‫‪MOV DX, OFFSET DATA1‬‬
‫‪INT 21H‬‬

‫‪31‬‬
‫ﻴﺠﺏ ﺸﺤﻥ ‪ AH‬ﺒـ ‪ 4Ch‬ﺜﹸﻡ ﻁﻠﺏ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ 21h‬ﻹﻨﻬﺎﺀ ﺒﺭﻨﺎﻤﺞ ﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻟﻤﺠﻤـﻊ ﻭِﺇﻋـﺎﺩﺓ‬
‫ﺍﻟﺴﻴﻁﺭﺓ ﺇﻟﻰ ﻨﻅﺎﻡ ‪.MS-DOS‬‬

‫‪MOV ah, 4ch ;MS-DOS terminate opcode.‬‬


‫‪INT 21h‬‬ ‫‪;MS-DOS call‬‬
‫ﺍﻟﺤﻠﻘﺎﺕ ﻭﺘﻌﻠﻴﻤﺎﺘﻬﺎ‬
‫ﺘﺴﻤﺢ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﻠﻘﺎﺕ ﺒﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﺩﺓ ﻤﺭﺍﺕ‪.‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪LOOP‬‬
‫ﹸﺘﻨﻘﺹ ﺘﻌﻠﻴﻤﺔ ‪ LOOP‬ﻤﺤﺘﻭﻯ ‪ CX‬ﺒﻭﺍﺤﺩ ﻭﻤﻥ ﺜﹸﻡ ﻴﺠﺭﻱ ﺍﻟﻘﻔﺯ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤـﺔ ﺇﺫﺍ‬
‫ﻜﺎﻨﺕ ﻗﻴﻤﺔ ‪ CX‬ﻻ ﺘﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ‪ .‬ﻴﺠﺏ ﺃﻥ ﻴﻘﻊ ﻤﻜﺎﻥ ﺍﻟﻘﻔـﺯ ﻀـﻤﻥ ‪-128‬‬
‫ﻭ ‪ +127‬ﺒﺎﻴﺕ ﻋﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟـ ‪.LOOP‬‬
‫ﻤﺜﺎل‪ :‬ﻴﻌﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻋﻠﻰ ﻭﻀﻊ ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ ،array‬ﺍﻟﻤﻜﻭﻨﺔ ﻤﻥ ‪ 256‬ﻋﻨﺼﺭ‪ ،‬ﺍﻟﻘﻴﻡ ‪،0‬‬
‫‪... ،2 ،1‬‬
‫‪MOV‬‬ ‫‪CX, 255‬‬
‫‪ArrayLp:‬‬ ‫‪MOV‬‬ ‫‪Array[CX], CL‬‬
‫‪LOOP‬‬ ‫‪ArrayLp‬‬
‫‪MOV‬‬ ‫‪Array[0], 0‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪LOOPE/LOOPZ‬‬
‫ﺇﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ LOOPZ‬ﻭ ‪ LOOPE‬ﻤﺘﻜﺎﻓﺌﺘﺎﻥ‪ .‬ﹸﺘﻨﻘﺹ ﻜﻠﺘﺎ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﻤﺤﺘﻭﻯ ‪ CX‬ﺒﻭﺍﺤﺩ ﻭﺘﻘﻔـﺯ‬
‫ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺇﺫﺍ ﻜﺎﻨﺕ‪ :‬ﻗﻴﻤﺔ ‪ CX‬ﻻ ﺘﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ ﺒﻌﺩ ﻋﻤﻠﻴـﺔ ﺍﻹﻨﻘـﺎﺹ ﻭ ‪ZF‬‬
‫ﺘﺴﺎﻭﻱ ‪ .1‬ﻴﺠﺏ ﺃﻥ ﻴﻘﻊ ﻤﻜﺎﻥ ﺍﻟﻘﻔﺯ ﻀﻤﻥ ‪ -128‬ﻭ ‪ +127‬ﺒﺎﻴـﺕ ﻋـﻥ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪ LOOPZ‬ﺃﻭ‬
‫‪.LOOPE‬‬
‫ﻫﺎﺘﺎﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﻤﻔﻴﺩﺍﻥ ﻓﻲ ﺘﻜﺭﺍﺭ ﺤﻠﻘﺔ ﻋﺩﺩ ﻤﻥ ﺍﻟﻤﺭﺍﺕ ﻁﺎﻟﻤﺎ ﺒﻘﻴﺕ ﻗﻴﻤﺔ ﻤﺘﺤﻭل ﻤﺎ ﻤﺨﺘﻠﻔﺔ ﻋﻥ‬
‫)ﻻ ﺘﺴﺎﻭﻱ( ﻗﻴﻤﺔ ﻤﻌﻴﻨﺔ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺒﻔﺭﺽ ﺃﻥ ﻋﺩﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ Array‬ﻫﻭ ‪ ،16‬ﻓﺈﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻘﻭﻡ ﺒﺎﻟﺒﺤﺙ ﻋـﻥ‬
‫ﺃﻭل ﻋﻨﺼﺭ ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ Array‬ﻻ ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ‪.‬‬

‫‪MOV CX, 16‬‬ ‫‪;Max 16 array elements.‬‬


‫‪MOV BX, -1‬‬ ‫‪;Index into the array (note next inc).‬‬
‫‪SearchLp:‬‬ ‫‪INC BX‬‬ ‫‪;Move on to next array element.‬‬
‫‪CMP Array[BX], 0‬‬ ‫‪;See if this element is zero.‬‬
‫‪LOOPE SearchLp‬‬ ‫‪;Repeat if it is.‬‬
‫‪JE AllZero‬‬ ‫‪;Jump if all elements were zero.‬‬

‫‪32‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪LOOPNE/LOOPNZ‬‬
‫ﺇﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ LOOPNZ‬ﻭ ‪ LOOPNE‬ﺃﻴﻀ ﹰﺎ ﻤﺘﻜﺎﻓﺌﺘﺎﻥ‪ .‬ﺘﹸﻨﻘﺹ ﻜﻠﺘـﺎ ﺍﻟﺘﻌﻠﻴﻤﺘـﺎﻥ ﻤﺤﺘـﻭﻯ ‪CX‬‬
‫ﺒﻭﺍﺤﺩ ﻭﺘﻘﻔﺯ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪ :‬ﺇﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺔ ‪ CX‬ﻻ ﺘﺴﺎﻭﻱ ﺍﻟـﺼﻔﺭ ﺒﻌـﺩ ﻋﻤﻠﻴـﺔ‬
‫ﺍﻹﻨﻘﺎﺹ ﻭ ‪ ZF‬ﺘﺴﺎﻭﻱ ‪ .0‬ﻴﺠﺏ ﺃﻥ ﻴﻘﻊ ﻤﻜﺎﻥ ﺍﻟﻘﻔﺯ ﻀﻤﻥ ‪ -128‬ﻭ ‪ +127‬ﺒﺎﻴﺕ ﻋـﻥ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫‪ LOOPNZ‬ﺃﻭ ‪.LOOPE‬‬
‫ﻫﺎﺘﺎﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﻤﻔﻴﺩﺍﻥ ﻓﻲ ﺘﻜﺭﺍﺭ ﺤﻠﻘﺔ ﻋﺩﺩﹰﺍ ﻤﻥ ﺍﻟﻤﺭﺍﺕ ﺒﺎﻨﺘﻅﺎﺭ ﺃﻥ ﻴﺘﺤﻘﻕ ﺸﺭﻁ ﺁﺨﺭ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺒﻔﺭﺽ ﺃﻥ ﻋﺩﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺼﻔﻭﻓﺔ ‪ Array‬ﻫﻭ ‪ ،16‬ﻓﺈﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻘﻭﻡ ﺒﺎﻟﺒﺤﺙ ﻓـﻲ‬
‫ﺍﻟﻤﺼﻔﻭﻓﺔ ﻋﻥ ﺃﻭل ﻋﻨﺼﺭ ﻴﺴﺎﻭﻱ ‪.0h‬‬

‫‪MOV CX, 16‬‬ ‫‪;Maximum # of array elements.‬‬


‫‪MOV BX, -1‬‬ ‫‪;Index into array.‬‬
‫‪LoopWhlNot0: INC BX‬‬ ‫‪;Move on to next array element.‬‬
‫?‪CMP Array[BX],0 ;Does this element contain zero‬‬
‫‪LOOPNE LoopWhlNot0 ;Quit if it does, or more than 16 bytes.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪JCXZ‬‬
‫ﺘﻘﻔﺯ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﻟﻰ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺸﺎﺭ ﺇﻟﻴﻪ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺔ ‪ CX‬ﻻ ﺘﺴﺎﻭﻱ ‪ .0‬ﻴﻤﻜـﻥ ﺃﻥ‬
‫ﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻟﻔﺤﺹ ﻓﻴﻤﺎ ﺇﺫﺍ ﻜﺎﻥ ‪ .[CX]=0‬ﻜﻤﺎ ﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻗﺒل ﺒﺩﺍﻴـﺔ ﺍﻟﺤﻠﻘـﺔ‬
‫ﻟﻤﻨﻊ ﺍﻟﺩﺨﻭل ﻓﻲ ﺍﻟﺤﻠﻘﺔ ﺇﺫﺍ ﻜﺎﻥ ‪.[CX]=0‬‬
‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﺒﺤﺙ ﻋﻥ ﺍﻟﻌﻼﻤﺔ ﺍﻷﻋﻅﻡ ﻤﻥ ﺒﻴﻥ ‪ 5‬ﻋﻼﻤﺎﺕ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ‪،‬‬
‫ﺍﻜﺘﺏ ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ‪.DL‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬
‫; ‪DATA DB 51, 44, 99, 88, 80‬‬
‫‪MOV CX,5‬‬ ‫‪;set up loop counter‬‬
‫‪MOV BX, OFFSET DATA ;BX points to GRADE data‬‬
‫‪SUB AL,AL‬‬ ‫‪;AL holds highest grade found so far‬‬
‫]‪AGAIN: CMP AL,[BX‬‬ ‫‪;compare next grade to highest‬‬
‫‪JA NEXT‬‬ ‫‪;jump if AL still highest‬‬
‫]‪MOV AL,[BX‬‬ ‫‪;else AL holds new highest‬‬
‫‪NEXT:INC BX‬‬ ‫‪;point to next grade‬‬
‫‪LOOP AGAIN‬‬ ‫‪;continue search‬‬
‫‪MOV DL, AL‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬
‫ﺘﺴﻤﺢ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ IN‬ﻭ ‪ OUT‬ﺒﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ‪ AL‬ﺃﻭ ‪ AX‬ﻤﻊ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﺘﻘـﻊ ﻓـﻲ‬
‫ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪.8088/8086‬‬

‫‪33‬‬
‫ﺘﻘﺭﺃ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN‬ﺍﻟﻘﻴﻤﺔ ﻋﻠﻰ ﻤﺩﺨل ﺒﻭﺍﺒﺔ ﻭﺘﻀﻌﻬﺎ ﻓﻲ ﺍﻟﻤﺭﺍﻜﻡ‪ ،‬ﻓﻲ ﺤﻴﻥ ﺘﻀﻊ ﺃﻭ ﺘﹸﺨﺭﺝ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫‪ OUT‬ﻤﺤﺘﻭﻯ ﺍﻟﻤﺭﺍﻜﻡ ﻋﻠﻰ ﻤﺨﺭﺝ ﺒﻭﺍﺒﺔ‪ .‬ﻴﻤﻜﻥ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ‪ ،‬ﺍﻟﻭﺍﻗﻌﺔ ﻓﻲ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﺒﻁﺭﻴﻘﺔ ﻤﺒﺎﺸﺭﺓ ﺃﻭ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪.‬‬
‫ﻋﻨﻭﻨﺔ ﻤﺒﺎﺸـﺭﺓ‪ :‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺘﺤﺘﻭﻱ ﺘﻌﻠﻴﻤﺔ ‪ IN‬ﻭ ‪ OUT‬ﻋﻠﻰ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﺫﻱ ﻴﺘﺭﺍﻭﺡ ﺒﻴﻥ ‪0‬‬
‫ﻭ ‪ .255‬ﺇﺫﺍ ﺠﺭﻯ ﺘﻌﻴﻴﻥ ‪ AL‬ﻜﻤﻌﺎﻤل ﻭﺠﻬﺔ ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﺒﺎﺩل ﺒﺎﻴﺕ ﺒﻴﻥ ‪ AL‬ﻭﺍﻟﺒﻭﺍﺒﺔ‪ .‬ﻭﺇﺫﺍ ﺠﺭﻯ‬
‫ﺘﻌﻴﻴﻥ ‪ AX‬ﻜﻤﻌﺎﻤل ﻭﺠﻬﺔ ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﺒﺎﺩل ﻜﻠﻤﺔ ﺒﻴﻥ ‪ AX‬ﻭﺍﻟﺒﻭﺍﺒﺔ‬
‫ﻤﺜـﺎل‪ :‬ﺇﺫﺍ ﻋﻠﻤﺕ ﺃﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ‪ keyboard‬ﻟﻠﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﻤﻭﺼﻭﻟﺔ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒـﺔ ﺫﺍﺕ‬
‫ﺍﻟﺭﻗﻡ ‪ 60h‬ﻓﻴﻤﻜﻨﻙ ﻗﺭﺍﺀﺓ ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺔ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪IN AL, 60h‬‬

‫ﻋﻨﻭﻨﺔ ﻏﻴﺭ ﻤﺒﺎﺸﺭﺓ‪ :‬ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺃﻥ ﻴﻌﻨﻭﻥ ﺤﺘﻰ ‪ 64‬ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ ﻁﻭل‬
‫ﻜل ﻤﻨﻬﺎ ‪ 1‬ﺒﺎﻴﺕ ﺃﻭ ‪ 32‬ﻜﻴﻠﻭ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 2‬ﺒﺎﻴﺕ‪ .‬ﻭﻟﻌﻨﻭﻨـﺔ ﻜﺎﻤـل ﻓـﻀﺎﺀ‬
‫ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺨﺭﺝ ﻴﺠﺭﻱ ﻭﻀﻊ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻲ ﺍﻟﺴﺠل ‪ DX‬ﻭﻤﻥ ﺜﻡ ﹸﺘﻌﻨﻭﻥ ﺍﻟﺒﻭﺍﺒﺔ ﻋﻠـﻰ ﻨﺤـﻭ‬
‫ﻏﻴﺭ ﻤﺒﺎﺸﺭ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺇﺫﺍ ﻋﻠﻤﺕ ﺃﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﺘﻔﺭﻋﻴﺔ ‪ LTP1‬ﻟﻠﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ ﻫﻭ ‪ 378h‬ﻓﻴﻤﻜﻨﻙ ﻗﺭﺍﺀﺓ‬
‫ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺔ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪MOV DX, 378h‬‬ ‫‪;Point at LPT1: data port‬‬


‫‪IN AL, DX‬‬ ‫‪;Read data from printer port.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﹸﺘﺨﺭﺝ ﻤﻭﺠﺔ ﻤﺭﺒﻌﺔ ﻋﻠﻰ ﺍﻟﺒﺕ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﺘﻔﺭﻋﻴﺔ‪.‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬

‫‪MOV DX, 378h‬‬ ‫‪;Parallel printer port address.‬‬


‫‪LoopForever: IN AL, DX‬‬ ‫‪;Read character from input port.‬‬
‫‪XOR AL, 1‬‬ ‫‪;Invert the L.O. bit.‬‬
‫‪OUT DX, al‬‬ ‫‪;Output data back to port.‬‬
‫‪JMP LoopForever‬‬ ‫‪;Repeat forever.‬‬

‫ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ‬


‫ﻴ‪‬ﻘﺼﺩ ﺒﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ‪ String‬ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ )ﺒﺎﻴﺘﺎﺕ ﺃﻭ ﻜﻠﻤﺎﺕ( ﻤﺨﺯﻨـﺔ ﻓـﻲ ﻤﻭﺍﻗـﻊ‬
‫ﻤﺘﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﹶﺘﻀﻡ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﹸﺘﻤﻜﻨﻨﺎ ﻤﻥ‪:‬‬
‫ƒ ﻨﺴﺦ ﺴﻠﺴﺔ ﻤﺤﺎﺭﻑ ﻤﻥ ﻤﻜﺎﻥ ﺇﻟﻰ ﺁﺨﺭ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‬

‫‪34‬‬
‫ƒ ﻤﻘﺎﺭﻨﺔ ﺴﻠﺴﻠﺘﻲ ﻤﺤﺎﺭﻑ‬
‫ƒ ﺍﻟﺒﺤﺙ ﻋﻥ ﻗﻴﻤﺔ ﻓﻲ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ‬
‫ﻜﻤﺎ ﺘﹶﻀﻡ ﺘﻌﻠﻴﻤﺎﺕ ﹸﺘﻤﻜﻨﻨﺎ ﻤﻥ ﻨﻘل ﻋﻨﺎﺼﺭ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﻤﻥ ﺍﻟﻤﺭﺍﻜﻡ ﻭﺇﻟﻴﻪ‪.‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﺘﻭﻱ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻋﻠﻰ ﻤﻌﺎﻤل ﻤﺼﺩﺭ ﺃﻭ ﻤﻌﺎﻤـل ﻭﺠﻬـﺔ ﺃﻭ ﻜﻠﻴﻬﻤـﺎ‪.‬‬
‫ﻭﺘﻔﺘﺭﺽ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻴﻘﻊ ﻓﻲ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺤﺎﻟﻲ‪ ،9 DS ،‬ﻭﺃﻥ ﻤﻌﺎﻤل‬
‫ﺍﻟﻭﺠﻬﺔ ﻴﻘﻊ ﻓﻲ ﻤﻘﺘﻁﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻹﻀﺎﻓﻲ‪ .ES ،‬ﺘﻔﺘﺭﺽ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻴـﻀﹰﺎ ﺃﻥ ‪ SI‬ﻴﻌﻨـﻭﻥ‬
‫ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ﻤﻥ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺍﻟﻤﺼﺩﺭ‪ ،‬ﻭﻴﻌﻨﻭﻥ ‪ DI‬ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ﻤﻥ ﺴﻠـﺴﻠﺔ ﻤﺤـﺎﺭﻑ‬
‫ﺍﻟﻭﺠﻬﺔ‪.‬‬
‫ﺘﹸﺤ ‪‬ﺩﺙ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻤﺤﺘﻭﻯ ‪ SI‬ﻭ‪/‬ﺃﻭ ‪ DI‬ﻟﻴﺅﺸﺭﻭﺍ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺘﺎﻟﻲ ﻤﻥ ﺴﻼﺴـل‬
‫ﺍﻟﻤﺤﺎﺭﻑ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻜل ﺘﻌﻠﻴﻤﺔ‪ .‬ﻓﻲ ﺤﺎل ﻜﺎﻥ ‪ ،DF=0‬ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺯﻴﺎﺩﺓ ‪ SI‬ﻭ ‪ DI‬ﺒﻭﺍﺤﺩ )ﺇﺫﺍ ﻜﺎﻥ‬
‫ﻁﻭل ﻋﻨﺼﺭ ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ ﻴﺴﺎﻭﻱ ﺒﺎﻴﺕ( ﺃﻭ ﺒﺎﺜﻨﻴﻥ )ﺇﺫﺍ ﻜﺎﻥ ﻁﻭل ﻋﻨﺼﺭ ﻤﻥ ﺍﻟﺴﻠـﺴﻠﺔ ﻴـﺴﺎﻭﻱ‬
‫ﻜﻠﻤﺔ(‪ ،‬ﺘﺼﺒﺢ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺇﻨﻘﺎﺼﹰﺎ ﺇﺫﺍ ﻜﺎﻥ ‪.DF=1‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ MOVSB‬ﻭ ‪MOVSW‬‬


‫ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOVSB‬ﺒﺎﻴﺕ ﻤﻥ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺍﻟﻤﺼﺩﺭ )ﺍﻟﻤﻌﻨﻭﻨﺔ ﺒـ ‪ (SI‬ﺇﻟـﻰ ﺒﺎﻴـﺕ ﻤـﻥ‬
‫ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺍﻟﻭﺠﻬﺔ )ﺍﻟﻤﻌﻨﻭﻨﺔ ﺒـ ‪.(DI‬‬
‫ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOVSW‬ﻜﻠﻤﺔ ﻤﻥ ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺍﻟﻤﺼﺩﺭ )ﺍﻟﻤﻌﻨﻭﻨﺔ ﺒـ ‪ (SI‬ﺇﻟـﻰ ﻜﻠﻤـﺔ ﻤـﻥ‬
‫ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺍﻟﻭﺠﻬﺔ )ﺍﻟﻤﻌﻨﻭﻨﺔ ﺒـ ‪.(DI‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪CMPS‬‬
‫ﺘﻁﺭﺡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻨﺼﺭ ﺍﻟﻭﺠﻬﺔ ﺍﻟﻤﻌﻨﻭﻥ ﺒـ ‪ SI‬ﻤﻥ ﻋﻨﺼﺭ ﺍﻟﻤﺼﺩﺭ ﺍﻟﻤﻌﻨﻭﻥ ﺒــ ‪ ،DI‬ﻜﻤـﺎ‬
‫ﹸﺘﺤ ّﺩﺙ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ SI‬ﻭ ‪ DI‬ﻟﻴﺅﺸﺭﻭﺍ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ ﻤﻥ ﺍﻟﺴﻠﺴﻠﺘﻴﻥ‪ .‬ﻻ ﺘﻐﻴﺭ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻥ‬
‫ﻤﺤﺘﻭﻯ ﺍﻟﻤﺼﺩﺭ ﺃﻭ ﺍﻟﻭﺠﻬﺔ ﻭﺇﻨﻤﺎ ﹸﺘﺤﺩﺙ ﻓﻘﻁ ﺤﺎﻟﺔ ﺍﻟﺭﺍﻴﺎﺕ ﺘﺒﻌﹰﺎ ﻟﻠﻌﻼﻗﺔ ﺒـﻴﻥ ﻋﻨـﺼﺭ ﺍﻟﻤـﺼﺩﺭ‬
‫ﻭﻋﻨﺼﺭ ﺍﻟﻭﺠﻬﺔ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﻁﻭل ﻜل ﻤﻥ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﻭﺍﻟﻭﺠﻬﺔ ﺒﺎﻴﺕ ﺃﻭ ﻜﻠﻤﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪SCAS‬‬
‫ﺘﻁﺭﺡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻨﺼﺭ ﺍﻟﻭﺠﻬﺔ ﺍﻟﻤﻌﻨﻭﻥ ﺒـ ‪ DI‬ﻤﻥ ﻤﺤﺘﻭﻯ ﺍﻟﻤﺭﺍﻜﻡ‪ ،‬ﻭ ﹸﺘﺤـ ّﺩﺙ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪DI‬‬
‫ﻟﻴﺅﺸﺭ ﺇﻟﻰ ﻋﻨﺼﺭ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻻ ﺘﻐﻴﻴﺭ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻤﻥ ﻤﺤﺘﻭﻯ ﺍﻟﻭﺠﻬﺔ ﺃﻭ ﺍﻟﻤـﺭﺍﻜﻡ ﻭﺇﻨﻤـﺎ‬

‫‪ 9‬ﳝﻜﻦ ﺍﺧﺘﻴﺎﺭ ﻣﻘﺘﻄﻊ ﺁﺧﺮ ﻏﲑ ﺍﻻﻓﺘﺮﺍﺿﻲ‬

‫‪35‬‬
‫ﹸﺘﺤ ّﺩﺙ ﻓﻘﻁ ﺤﺎﻟﺔ ﺍﻟﺭﺍﻴﺎﺕ ﺘﺒﻌ ﹰﺎ ﻟﻠﻌﻼﻗﺔ ﺒﻴﻥ ﻋﻨﺼﺭ ﺍﻟﻤﺼﺩﺭ ﻭﺍﻟﻤﺭﺍﻜﻡ‪ .‬ﻴﺠﺭﻱ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺭﺍﻜﻡ ‪AL‬‬
‫ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻁﻭل ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ‪ 1‬ﺒﺎﻴﺕ‪ ،‬ﻭ ‪ AX‬ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻁﻭل ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ‪ 2‬ﺒﺎﻴﺕ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪LODS‬‬
‫ﺘﻨﺴﺦ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻴﺘﹰﺎ ﺃﻭ ﻜﻠﻤﺔ ﻤﻌﻨﻭﻨﺔ ﺒـ ‪ SI‬ﺇﻟﻰ ‪ AL‬ﺃﻭ ‪ ،AX‬ﻭ ﹸﺘﺤ ّﺩﺙ ‪ SI‬ﻟﻴﺅﺸﺭ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ‬
‫ﺍﻟﺘﺎﻟﻲ ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪STOS‬‬
‫ﺘﻨﺴﺦ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﺎﻴﺘﹰﺎ ﺃﻭ ﻜﻠﻤﺔ ﻤﻥ ‪ AL‬ﺃﻭ ‪ AX‬ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ﻤﻥ ﺴﻠـﺴﻠﺔ ﺍﻟﻤﺤـﺎﺭﻑ ﺍﻟﻤﻌﻨـﻭﻥ‬
‫ﺒـ ‪ ،SI‬ﻜﻤﺎ ﹸﺘﺤ ‪‬ﺩﺙ ‪ SI‬ﻟﻴﺅﺸﺭ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺘﺎﻟﻲ ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ‪.‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ REPNE ،REPZ ،REPE ،REP‬ﻭ ‪REPNZ‬‬


‫ﺘﺴﻤﺢ ﻫﺫﻩ ﺍﻟﺒﺎﺩﺌﺎﺕ ﺇﺫﺍ ﺃﻀﻴﻑ ﺇﺤﺩﺍﻫﺎ ﻗﺒل ﺇﺤـﺩﻯ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ‪،CMPS ،MOVSW ،MOVSB‬‬
‫‪ ،SCAS‬ﺒﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪ CX‬ﻤﺭﺓ‪ .‬ﻴﺠﺭﻱ ﺇﻨﻘﺎﺹ ‪ CX‬ﺒـ ‪ 1‬ﺒﻌـﺩ ﻜـل‬
‫ﺘﻜﺭﺍﺭ‪ ،‬ﻟﺫﻟﻙ ﻴﺠﺏ ﻭﻀﻊ ﻓﻲ ‪ CX‬ﻋﺩﺩ ﺍﻟﺘﻜﺭﺍﺭﺍﺕ ﺍﻷﻋﻅﻡ ﺍﻟﻤﺴﻤﻭﺡ ﺒﻪ ﻗﺒل ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬
‫ﺘﺴﺘﺨﺩﻡ ﺍﻟﺒﺎﺩﺌﺔ ‪ REP‬ﻟﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻋﺩﺩﹰﺍ ﻤﻥ ﺍﻟﻤﺭﺍﺕ ﻤﺤﺩﺩﹰﺍ ﺒــ ‪.CX‬‬
‫ﻭﺘﺴﺘﺨﺩﻡ ﺍﻟﺒﺎﺩﺌﺘﻴﻥ ‪ REPE‬ﻭ ‪) REPZ‬ﺍﻟﻤﺘﻜﺎﻓﺌﺘﻴﻥ( ﻟﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻤﺎﺩﺍﻡ‬
‫‪ ZF=1‬ﻭﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪ CX‬ﻤﺭﺓ‪ .‬ﻭﺘﺴﺘﺨﺩﻡ ﺍﻟﺒﺎﺩﺌﺘﻴﻥ ‪ REPNE‬ﻭ ‪) REPNZ‬ﺍﻟﻤﺘﻜـﺎﻓﺌﺘﻴﻥ( ﻟﺘﻜـﺭﺍﺭ‬
‫ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ﺴﻼﺴل ﺍﻟﻤﺤﺎﺭﻑ ﻤﺎﺩﺍﻡ ‪ ZF=0‬ﻭﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪ CX‬ﻤﺭﺓ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻨﺴﺦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺜﻤﺎﻨﻴﺔ ﺒﺎﻴﺘﺎﺕ ﻤﻥ ﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺎﺭﻑ ﺘﺒـﺩﺃ ﺒـﺎﻟﻌﻨﻭﺍﻥ ‪ 02000h‬ﺇﻟـﻰ‬
‫ﺴﻠﺴﻠﺔ ﻤﺤﺎﺭﻑ ﺃﺨﺭﻯ ﺘﺒﺩﺃ ﺒﺎﻟﻌﻨﻭﺍﻥ ‪.02400H‬‬
‫‪MOV AX, 0h‬‬
‫‪MOV DS, AX‬‬
‫‪MOV ES, AX‬‬
‫‪MOV SI, 2000h‬‬
‫‪MOV DI, 2400h‬‬
‫‪MOV CX, 8h‬‬
‫‪CLD‬‬
‫‪REP MOVSB‬‬

‫‪36‬‬
."J" ‫" ﺒﺎﻟﻤﺤﺭﻑ‬G" ‫" ﻭﻴﺴﺘﻌﻴﺽ ﻋﻥ ﻜل‬Mr.Gohns" ‫ ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻘﺭﺃ ﺍﻻﺴﻡ‬:‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‬
:‫ﺍﻟﺠﻭﺍﺏ‬
Data1 db 'Mr.Gones','$'
.code
MOV ES,DS
CLD ;set auto increment bit D=0
MOV DI, offset Data1
MOV CX,09 ; number of chars to be scanned
MOV AL,'G' ; char to be compared against
REPNE SCASB ; start scan AL =? ES[DI]
JNE Over ; if Z=0
DEC DI ; Z=1
MOV byte ptr[DI], 'J'
Over: MOV AH,09
MOV DX, offset Data1
INT 21h ; display the resulting String

37
‫ﺘﻤﺎﺭﻴﻥ‪:‬‬
‫ﺃﻭ ﹰﻻ‪ :‬ﺃﺠﺏ ﺒـ ﺼﺢ ﺃﻭ ﺨﻁﺄ‬
‫‪ -1‬ﻴﺤﻭل ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺠﻤﻊ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻤﻜﺘﻭﺒﹰﺎ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﺭﻤﺎﺯ ﺒﻠﻐﺔ ﺍﻵﻟﺔ‪.‬‬
‫‪ -2‬ﻴﻭﻟﺩ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺍﺒﻁ ﻤﻠﻔﹰﺎ ﺘﻨﻔﻴﺫﻴﹰﺎ‪.‬‬
‫‪ -3‬ﺇﻥ ﻻﺤﻘﺔ ﺍﻟﻤﻠﻑ ﺍﻟﺘﻨﻔﻴﺫﻱ ﻫﻲ ﺩﻭﻤﹰﺎ ‪.exe‬‬
‫‪ -4‬ﻴﺠﺏ ﺃﻥ ﺘﺤﺘﻭﻱ ﻜل ﺘﻌﻠﻴﻤﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻋﻠﻰ ﻟﺼﺎﻗﺔ‪.‬‬
‫‪ -5‬ﺘﺘﻀﻤﻥ ﻜل ﺘﻌﻠﻴﻤﺔ ﺒﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻋﻠﻰ ﻤﻌﺎﻤل ﻭﺍﺤﺩ ﻋﻠﻰ ﺍﻷﻗل‪.‬‬
‫‪ -6‬ﻴﻤﻜﻥ ﺘﻌﺭﻴﻑ ﺜﺎﺒﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻭﺠ‪‬ﻪ ‪.EQU‬‬
‫‪ -7‬ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻭﺠﻪ ‪ DW‬ﻟﻠﺘﺼﺭﻴﺢ ﻋﻥ ﻤﺘﺤﻭل ﺒﻁﻭل ‪ 2‬ﺒﺎﻴﺕ‪.‬‬
‫‪.K DB‬‬ ‫‪ -8‬ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺼﺤﻴﺤﺔ ‪126Fh‬‬
‫‪ -9‬ﻴﺠﺏ ﺃﻥ ﻴﺒﺩﺃ ﻜل ﻤﻠﻑ ﺘﻨﻔﻴﺫﻱ ﺫﻭ ﺍﻟﻼﺤﻘﺔ ‪ exe‬ﻋﻨﺩ ﺍﻟﻤﻭﻗﻊ ‪ 100h‬ﻤﻥ ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬
‫‪ -10‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﻭﻥ ﺤﺠﻡ ﺍﻟﻤﻌﻁﻴﺎﺕ < ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﻓﻲ ﻨﻤﻭﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ ‪.SMALL‬‬
‫‪ -11‬ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻨﻤﻭﺫﺝ ﺍﻟﺫﺍﻜﺭﺓ ‪ TINY‬ﻓﺈﻥ ﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺍﺒﻁ ﻴﻭﻟﺩ ﺒﺭﻨﺎﻤﺠﹰﺎ ﺘﻨﻔﻴﺫﻴﹰﺎ ﻻﺤﻘﺘﻪ ‪.com‬‬
‫‪ -12‬ﻴﻤﻜﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOV‬ﺇﺴﻨﺎﺩ ﻗﻴﻤﺔ ﺇﻟﻰ ﺍﻟﺴﺠل ‪.IP‬‬
‫‪ -13‬ﻻ ﺘﻐ ّﻴﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ MOV‬ﻤﻥ ﺤﺎﻟﺔ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬
‫‪ -14‬ﻻ ﺘﻐ ّﻴﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﻤﻥ ﺤﺎﻟﺔ ﺴﺠل ﺍﻟﺭﺍﻴﺔ‪.‬‬
‫‪ -15‬ﺘﹸﻘﺴ‪‬ﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DIV‬ﺍﻟﺴﺠل ‪ AH‬ﻋﻠﻰ ﻤﻌﺎﻤل ﺍﻟﻤﺼﺩﺭ ﺍﻟﻤﺤﺩﺩ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ‪.‬‬
‫‪ -16‬ﺘﹸﻨﻘﺹ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ INC‬ﻤﻌﺎﻤل ﺍﻟﻭﺠﻬﺔ ﺒﻤﻘﺩﺍﺭ ‪.1‬‬
‫‪ -17‬ﻴﺠﺭﻱ ﻓﻲ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺯ ﺘﺨﺯﻴﻥ ‪ CS‬ﻭ ‪ IP‬ﻓﻲ ﺍﻟﻤﻜﺩﺱ‪.‬‬
‫‪ -18‬ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ‪ 256‬ﻤﻘﺎﻁﻌﺔ ﺒﺭﻤﺠﻴﺔ‪.‬‬

‫ﺜﺎﻨﻴ ﹰﺎ‪ :‬ﺃﺠﺏ ﻋﻠﻰ ﺍﻷﺴﺌﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ‬


‫‪ -1‬ﻫل ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ‪ AND‬ﻭ ‪ TEST‬ﻤﺘﻜﺎﻓﺌﺘﺎﻥ؟‬
‫‪ -2‬ﺍﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻀﻊ ‪ 1000h‬ﻓﻲ ‪.DS‬‬
‫‪ -3‬ﻤﺎ ﻋﺩﺩ ﺍﻟﺒﺎﻴﺘﺎﺕ ﺍﻟﺘﻲ ﻴﺠﺭﻱ ﺩﻓﻌﻬﺎ ﻓﻲ ﺍﻟﻤﻜﺩﺱ ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ‪PUSH‬؟‬
‫‪ -4‬ﻫل ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﺍﻟﺘﺎﻟﻴﺘﺎﻥ ﻤﺘﻜﺎﻓﺌﺘﺎﻥ‪ MOV SI, OFFSET NUMB :‬ﻭ ‪LEA SI, NUMB‬؟‬
‫‪ -5‬ﻤﺎ ﻫﻲ ﺤﺎﻟﺔ ﺍﻟﺭﺍﻴﺎﺕ ‪ SF ،AC ،CF‬ﻭ ‪ OF‬ﺒﻌﺩ ﺘﻨﻔﻴـﺫ ﺍﻟﺘﻌﻠﻴﻤـﺔ ﺍﻟﺘﺎﻟﻴـﺔ ‪،ADD AX, DX‬‬
‫ﺒﻔﺭﺽ ﺃﻥ ‪ AL=1001h‬ﻭ ‪DX=20FFh‬؟‬

‫‪38‬‬
‫‪ -6‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﺠﻤﻊ ‪ DL ،CL ،BL ،AL‬ﻭ ‪ ،AH‬ﻭﺘﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ‪.DH‬‬
‫‪ -7‬ﻤﺎ ﻫﻭ ﺍﻟﺨﻁﺄ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪INC [BX‬؟‬
‫‪ -8‬ﺃﻴﻥ ﻴﺠﺭﻱ ﺘﺨﺯﻴﻥ ﻨﺎﺘﺞ ﺠﺩﺍﺀ ﻜﻠﻤﺘﻴﻥ؟‬
‫‪ -9‬ﻤﺎ ﻫﻭ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﻴﻥ ‪ MUL‬ﻭ ‪IMUL‬؟‬
‫‪ -10‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺔ ﺘﻀﻊ ﺃﺼﻔﺎﺭﹰﺍ ﻓﻲ ﺍﻟﺒﺘﺎﺕ ﺍﻟﺜﻼﺜﺔ ﺍﻟﻌﻠﻴﺎ ﻤﻥ ‪ BH‬ﺩﻭﻥ ﺃﻥ ﺘﺅﺜﺭ ﻋﻠﻰ ﺤﺎﻟﺔ ﺍﻟﺒﺘـﺎﺕ‬
‫ﺍﻟﺒﺎﻗﻴﺔ ؟‬
‫‪ -11‬ﻤﺎ ﻫﻭ ﻤﺤﺘﻭﻯ ﺍﻟﺴﺠﻠﻴﻥ ‪ AX‬ﻭ ‪ DX‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪MOV AL, 0A1h‬‬
‫‪CBW‬‬
‫‪CWD‬‬

‫‪ -12‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻘﺭﺃ ﻋﻠﻰ ﺍﻷﻜﺜﺭ ‪ 20‬ﻤﺤﺭﻓﹰﺎ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﻴﺨﺯﻨﻬﺎ ﻓﻲ ﻤﺼﻔﻭﻓﺔ‪ ،‬ﺘﻨﺘﻬـﻲ‬
‫ﻋﻤﻠﻴﺔ ﺍﻹﺩﺨﺎل ﺒﺈﺩﺨﺎل ﻤﻔﺘﺎﺡ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺒﺩﺍﻴﺔ ﺍﻟﺴﻁﺭ ‪.carriage return‬‬
‫‪ -13‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻁﺭﺡ ﺍﻟﻌﺩﺩ ‪ Y‬ﻤﻥ ‪ X‬ﺤﻴﺙ ﻁﻭل ﻜل ﻤﻨﻬﻤﺎ ‪ 32‬ﺒﺕ‪ .‬ﺒﻔﺭﺽ ﺃﻥ ‪ X‬ﺨﹸﺯﻥ ﻓـﻲ‬
‫ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ‪ (DS:203h)(DS:202h)(DS:201h)(DS:200h) :‬ﻭ ‪ Y‬ﻓﻲ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬
‫)‪ .(DS:103h)(DS:102h)(DS:101h)(DS:100h‬ﺨﺯﻥ ﻨﺎﺘﺞ ﺍﻟﻁﺭﺡ ﻓﻲ ‪.X‬‬
‫‪ -14‬ﺃﻭﺠﺩ ﻨﺎﺘﺞ ﻀﺭﺏ ﺍﻟﻤﺘﺤﻭﻟﻴﻥ ‪ DATAX‬ﻭ ‪ DATAY‬ﻭﻀﻊ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﺍﻟﻤﺘﺤـﻭل ‪.RESULT‬‬
‫ﻋﻠﻤﹰﺎ ﺃﻥ ﻁﻭل ‪ DATAX‬ﻴﺴﺎﻭﻱ ﺒﺎﻴﺕ ﻭﺍﺤﺩ‪ ،‬ﻭﻁﻭل ‪ DATAY‬ﻴﺴﺎﻭﻱ ‪ 2‬ﺒﺎﻴﺕ‪.‬‬
‫‪ -15‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﺒﺤﺙ ﻋﻥ ﺍﻟﻌﻼﻤﺔ ﺍﻷﺼﻐﺭ ﻤﻥ ﺒﻴﻥ ‪ 5‬ﻋﻼﻤﺎﺕ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ‪ ،‬ﺍﻜﺘـﺏ‬
‫ﺍﻟﻨﺘﻴﺠﺔ ﻓﻲ ‪.DL‬‬
‫‪ -16‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﺠﻤﻊ ﺨﻤﺱ ﻗﻴﻡ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻜل ﻤﻨﻬﺎ ﻤﻤﺜل ﻋﻠﻰ ﺒﺎﻴﺕ‪ ،‬ﻭﻟﺘﻜﻥ ﻫﺫﻩ ﺍﻟﻘﻴﻡ‬
‫ﻫﻲ‪ .25,12,15,10,11 :‬ﺨﺯﻥ ﺍﻟﻨﺎﺘﺞ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫‪39‬‬
‫ﺍﻟﻔﺼل ﺍﻟﺨﺎﻤﺱ‬
‫ﺍﻟﺫﻭﺍﻜﺭ ﻭﺍﻟﺴﺠﻼﺕ‬

‫ﺘﻤﻬﻴﺩ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﻋﻨﺼﺭ ﺃﺴﺎﺴﻲ ﻓﻲ ﺃﻱ ﻨﻅﺎﻡ ﻤﻌﺎﻟﺠﺔ‪ ،‬ﻴﺴﺘﺨﺩﻡ ﻟﺘﺨﺯﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ ﻭﻤﻌﻁﻴﺎﺕ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﻓـﻲ‬
‫ﺍﻟﻨﻅﺎﻡ ﺍﻟﺼﻐﺭﻱ‪ .‬ﻴﻤﻜﻨﻨﺎ ﹶﺘﻘﺴﻴﻡ ﺍﻟﺫﻭﺍﻜﺭ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺘﻴﻥ ﺃﺴﺎﺴﻴﺘﻴﻥ‪ :‬ﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘـﻁ ﻭﺫﻭﺍﻜـﺭ‬
‫ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ‪ .‬ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻟﺘﺨﺯﻴﻥ ﺒﺭﻨﺎﻤﺢ ﻭ‪/‬ﺃﻭ ﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﻨﺤﻭ ﻤـﺴﺘﺩﻴﻡ‪،‬‬
‫ﺒﻴﻨﻤﺎ ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﻟﺘﺨﺯﻴﻥ ﺍﻟﺒﺭﻨﺎﻤﺢ ﻭ‪/‬ﺃﻭ ﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﻨﺤﻭ ﻤﺅﻗﺕ‪.‬‬
‫ﺘﺘﻜﻭﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺴﺠﻼﺕ‪ ،‬ﻭﻴﻤﻜﻨﻨﺎ ﺍﻨﺘﺨﺎﺏ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻤﻥ ﺨﻼل ﺃﻋﺩﺍﺩ ﺇﺜﻨﺎﻨﻴﺔ‪،‬‬
‫ﺘﹸﺴﻤﻰ ﻋﻨﺎﻭﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ‪ .memory addresses‬ﻴﺨﺘﻠﻑ ﻁﻭل ﺍﻟﺴﺠل ﻤﻥ ﺫﺍﻜـﺭﺓ ﺇﻟـﻰ ﺃﺨـﺭﻯ‪،‬‬
‫ﻭﻨﹸﺴﻤﻲ ﻋﺩﺩ ﺍﻟﺒﺘﺎﺕ ﺍﻟﻤﻤﻜﻥ ﺘﺨﺯﻴﻨﻬﺎ ﻓﻲ ﺍﻟﺴﺠل ﺍﻟﻭﺍﺤﺩ ﺒﻜﻠﻤﺔ ﺍﻟﺫﺍﻜﺭﺓ ‪ .memory word‬ﻴﺨﺘﻠـﻑ‬
‫ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺫﻭﺍﻜﺭ ﺃﻴﻀﹰﺎ ﻤﻥ ﺫﺍﻜﺭﺓ ﺇﻟﻰ ﺃﺨﺭﻯ‪ ،‬ﻭﺘﺘﻭﺍﻓﺭ ﻓﻲ ﺍﻷﺴـﻭﺍﻕ ﺭﻗﺎﻗـﺎﺕ ﺫﻭﺍﻜـﺭ‬
‫ﺒﺄﺤﺠﺎﻡ ﻤﺨﺘﻠﻔﺔ ﻤﻥ ﺍﻟﻜﻠﻤﺎﺕ ﺘﺘﺭﺍﻭﺡ ﻤﻥ ﻋﺩﺓ ﺒﺎﻴﺘﺎﺕ ﺇﻟﻰ ﻋﺩﺓ ﻤﺌﺎﺕ ﻤﻴﻐﺎﺒﺎﻴﺘﺎﺕ‪.‬‬
‫ﹸﺘﻭﺼل ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺭ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ‪ ،‬ﺍﻟﺫﻱ ﻴﺘﻀﻤﻥ ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ ﻭﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫ﻭﻤﺴﺭﻯ ﺍﻟﺘﺤﻜﻡ‪ .‬ﻴﺴﺘﺨﺩﻡ ﻤﺴﺭﻯ ﺍﻟﻌﻨﻭﻨﺔ ﻻﻨﺘﺨﺎﺏ ﺃﺤﺩ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻭﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻟﺘﻤﺭﻴﺭ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺃﻤﺎ ﺍﻹﺸﺎﺭﺍﺕ ﻋﻠﻰ ﻤﺴﺭﻯ ﺍﻟﺘﺤﻜﻡ ﻓﺘﺴﺘﺨﺩﻡ ﻟﻤﺯﺍﻤﻨـﺔ ﻋﻤﻠﻴـﺎﺕ‬
‫ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻜﻤﺎ ﻴﺤﺩﺩ ﻫﺫﺍ ﺍﻟﻤﺴﺭﻯ ﺍﺘﺠﺎﻩ ﺤﺭﻜﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﺫﺍﻜﺭﺓ‪.‬‬

‫‪1‬‬
‫ﺒﻨﻴﺎﻥ ﺍﻟﺫﻭﺍﻜﺭ‬
‫ﻋﻨﺼﺭ ﺘﺨﺯﻴﻥ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﻫﻲ ﺩﺍﺭﺓ ﻤﺘﻜﺎﻤﻠﺔ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺘﹸﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻻﺜﻨﺎﻨﻴﺔ‪ .‬ﻴﺠﺭﻱ‪ ،‬ﻓﻲ ﺍﻟـﺫﺍﻜﺭﺓ‪ ،‬ﺘﺨـﺯﻴﻥ‬
‫‪2‬‬
‫ﺍﻟﻭﺍﺤﺩ ﺍﻟﻤﻨﻁﻘﻲ ﻜﻔﻠﻁﻴﺔ ﻋﺎﻟﻴﺔ ‪1‬ﻭﺍﻟﺼﻔﺭ ﺍﻟﻤﻨﻁﻘﻲ ﻜﻔﻠﻁﻴﺔ ﻤﻨﺨﻔﻀﺔ‪.‬‬
‫ﺇﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻷﺴﺎﺴﻲ ﺍﻟﺫﻱ ‪‬ﻴﺩﺨل ﻓﻲ ﺘﻜﻭﻴﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻫـﻭ ﺍﻟﻘـﻼﺏ ‪ flip-flop‬ﺃﻭ ﺍﻟﻤﺎﺴـﻙ ‪.latch‬‬
‫ﻴﺴﺘﻁﻴﻊ ﺍﻟﻘﻼﺏ ﻤﺴﻙ ﺃﻭ ﺘﺨﺯﻴﻥ ﺒﺕ ﻭﺍﺤﺩﺓ ﻤﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻴﺠﺭﻱ ﻭﺼل ﺒﺕ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ Din‬ﺇﻟـﻰ‬
‫ﻤ‪‬ﺩﺨل ﺍﻟﻘﻼﺏ ‪ D‬ﻭﺇﺸﺎﺭﺓ ﺍﻟﺘﺄﻫﻴل ‪ 3EN‬ﺍﻟﺨﺎﺭﺠﻴﺔ ﺇﻟﻰ ﺍﻟﻤ‪‬ﺩﺨل ‪) EN‬ﺃﻭ ‪ (Clk‬ﻟﻠﻘﻼﺏ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ‬
‫ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻋﻨﺩ ﻭﺭﻭﺩ ﺇﺸﺎﺭﺓ ﻤﻨﺎﺴﺒﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺩﺨل ‪ EN‬ﻴ ‪‬ﻤ ِ‬


‫ﺴﻙ ‪‬ﻤﺨﹾـﺭﺝ ﺍﻟﻘـﻼﺏ ‪ Dout‬ﺒـﺕ ﺍﻟﻤﻌﻁﻴـﺎﺕ ‪Din‬‬
‫ﺍﻟﻤﻭﺠﻭﺩﺓ ﻋﻠﻰ ﺍﻟﻤﺩﺨل ‪ .D‬ﻴﻤﻜﻨﻨﺎ ﺘﺤﺎﺸﻲ ﺍﻟﻜﺘﺎﺒﺔ ﻏﻴﺭ ﺍﻟﻤﺘﻌﻤﺩﺓ ﻓﻲ ﺍﻟﻘﻼﺏ ﺒﺘﻤﺭﻴﺭ ﺒﺕ ﺍﻟﻤﻌﻁﻴـﺎﺕ‬
‫‪ Din‬ﻋﺒﺭ ﻋﺎﺯل ﺜﻼﺜﻲ ﺍﻟﺤﺎﻻﺕ ‪ tri-state‬ﻗﺒل ﻭﺼﻠﻬﺎ ﺇﻟﻰ ﻤﺩﺨل ﺍﻟﻘﻼﺏ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل‬
‫)ﺍﻟﺘﻲ ﻴﻭﻟﺩﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻋﺎﺩﺓ( ﺒﺤﺎﻟﺔ ﺍﻟﻌﺎﺯل؛ ﻭﻴﺠـﺏ ﺃﻥ ﺘﻜـﻭﻥ‬ ‫‪WR‬‬ ‫ﺍﻟﺘﺎﻟﻲ‪ .‬ﺘﺘﺤﻜﻡ ﺇﺸﺎﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ‬
‫‪4‬‬
‫ﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺕ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻘﻼﺏ‪ .‬ﹸﻨﻤﺭﺭ ﺃﻴﻀﹰﺎ ﻤ‪‬ﺨﺭﺝ ﺍﻟﻘﻼﺏ ﻋﺒﺭ ﻋﺎﺯل ﺜﻼﺜﻲ‬ ‫ﻓﻌﺎﻟﺔ‬ ‫‪WR‬‬

‫)ﺍﻟﺘﻲ ﻴﻭﻟﺩﻫﺎ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻴﻀﹰﺎ(‪ ،‬ﻭﻴﺠﺏ ﺘﻔﻌﻴل ﺍﻹﺸﺎﺭﺓ‬ ‫‪RD‬‬ ‫ﺍﻟﺤﺎﻻﺕ ﺁﺨﺭ‪ ،‬ﻴﺘﺤﻜﻡ ﺒﻌﻤﻠﻪ ﺇﺸﺎﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ‬
‫ﻋﻨﺩ ﻗﺭﺍﺀﺓ ﺍﻟﺒﺕ ﻋﻠﻰ ﻤﺨﺭﺝ ﺍﻟﻘﻼﺏ‪.‬‬ ‫‪RD‬‬

‫ﺍﻟﺴﺠﻼﺕ‬

‫‪ 1‬اﻟﻔﻠﻄﻴﺔ اﻟﻌﺎﻟﻴﺔ ﻓﻲ دارات ‪ TTL‬ﺗﺴﺎوي ‪ 5‬ﻓﻮﻟﻂ‬


‫‪ 2‬ﺍﻟﻔﻠﻄﻴﺔ ﺍﳌﻨﺨﻔﻀﺔ ﰲ ﺩﺍﺭﺍﺕ ‪ TTL‬ﺗﺴﺎﻭﻱ ‪ 0‬ﻓﻮﻟﻂ‬
‫‪ 3‬ﻣﺨﺘﺼﺮ‪ENable :‬‬
‫‪ 4‬ﺗﻜﻮﻥ ﺇﺷﺎﺭﺓ ﺍﻟﺘﺤﻜﻢ ﻓﻌﺎﻟﺔ ﻋﻨﺪ ﺍﳌﻨﻄﻖ ‪ 0‬ﺇﺫﺍ ‪‬ﻭﺟﺪﺕ ﺇﺷﺎﺭﺓ ﺍﻟﺒﺎﺭ ﻓﻮﻗﻬﺎ‪ ،‬ﻭﺗﻜﻮﻥ ﻓﻌﺎﻟﺔ ﻋﻨﺪ ﺍﳌﻨﻄﻖ ‪ 1‬ﺇﻥ ﱂ ﻳﻮﺟﺪ ﺍﻟﺒﺎﺭ‬
‫ﻓﻮﻗﻬﺎ‪ .‬ﻭﺑﺎﻟﺘﺎﱄ‪ ،‬ﺗﻜﻮﻥ ‪ WR‬ﻓﻌﺎﻟﻴﺔ ﻋﻨﺪ ﺍﳌﻨﻄﻖ ‪.0‬‬

‫‪2‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺘﺨﺯﻴﻥ ﺒﺕ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ﻓﻲ ﺍﻟﻘﻼﺏ‪ ،‬ﺍﻟﺫﻱ ﻨﹸﺴﻤﻴﻪ ﺃﻴﻀﹰﺎ ﺨﻠﻴﺔ ﺫﺍﻜﺭﺓ ‪ .memory cell‬ﻴ‪‬ﻤﻜﻨﻨـﺎ‬
‫ﺒﻭﻀﻊ ﺃﺭﺒﻊ ﺨﻼﻴﺎ‪ ،‬ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﺒﻨﺎﺀ ﺴﺠل ﺒﻁﻭل ‪ 4‬ﺒﺕ‪.‬‬

‫ﻨﻜﺘﺏ ﺤﺠﻡ ﻫﺫﺍ ﺍﻟﺴﺠل ﺇﻤﺎ ‪ 4-bit‬ﺃﻭ ‪ ،1× 4-bit‬ﻭﺍﻟﺫﻱ ﻴﻌﻨﻲ ﺴﺠل ﻭﺍﺤﺩ ﺒﻁﻭل ‪ 4‬ﺒﺘـﺎﺕ‪ .‬ﻴﺒـﻴﻥ‬
‫ﺍﻟﺸﻜل ﻤﺨﻁﻁ ﺼﻨﺩﻭﻗﻲ ﻤﺒﺴﻁ ﻟﻬﺫﺍ ﺍﻟﺴﺠل‪.‬‬

‫ﺒﻨﻴﺔ ﺍﻟﺫﺍﻜﺭﺓ‬
‫ﺘﺘﻜﻭﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻋﺩﺓ ﺴﺠﻼﺕ‪ ،‬ﻭﻴ‪‬ﺤﺩﺩ ﻁﻭل ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﻁﻭل ﻜﻠﻤﺔ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻴﺒـﻴﻥ ﺍﻟـﺸﻜل‬
‫ﺍﻟﺘﺎﻟﻲ ﺃﺭﺒﻊ ﺴﺠﻼﺕ ﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﺘﺘﺎﻟﻲ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 8‬ﺒﺕ‪ .‬ﻨﺤﺘﺎﺝ ﻋﻨﺩ ﺍﻟﻜﺘﺎﺒﺔ ﺃﻭ ﺍﻟﻘـﺭﺍﺀﺓ‬
‫ﻤﻥ ﺃﺤﺩ ﻫﺫﻩ ﺍﻟﺴﺠﻼﺕ ﺇﻟﻰ ﺍﺨﺘﻴﺎﺭ ﺃﻭ ﺘﺄﻫﻴل ﺫﻟﻙ ﺍﻟﺴﺠل‪ .‬ﻴﻤﻜﻨﻨﺎ ﺘﺄﻫﻴل ﺃﺤﺩ ﺍﻟـﺴﺠﻼﺕ ﺒﺎﺴـﺘﺨﺩﺍﻡ‬
‫ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ‪ 2 decoder‬ﺇﻟﻰ ‪ .(2-to-4) 4‬ﻨﺤﺘـﺎﺝ‬
‫ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺇﻟﻰ ﻤ‪‬ـﺩﺨﻠﻴﻥ ﺇﻀـﺎﻓﻴﻴﻥ ‪ A0‬ﻭ ‪،A1‬‬
‫‪‬ﻴﺅﺨﺫﺍﻥ ﻤﻥ ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ‪ address lines‬ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﹸﺘﺸﻜل ﻗﻴﻤﺔ ‪ A0‬ﻭ ‪ A1‬ﺃﺭﺒﻊ ﺜﻨﺎﺌﻴـﺎﺕ ﻤﺨﺘﻠﻔـﺔ‪،00 :‬‬
‫‪ 10 ،01‬ﻭ ‪ ،11‬ﺘﹸﺤﺩﺩ ﺃﻭ ﺘﻌﻨﻭﻥ ﻜـل ﺘـﺸﻜﻴﻠﺔ ﺃﺤـﺩ‬
‫ﺍﻟـﺴﺠﻼﺕ‪ register 0 :‬ﺇﻟـﻰ ‪ .register 3‬ﺠـﺭﻯ‬
‫ﺍﻻﺴﺘﻌﺎﻀﺔ‪ ،‬ﻓﻲ ﺍﻟﺸﻜل‪ ،‬ﻋـﻥ ‪ EN‬ﺒـﺎﻟﺨﻁﻴﻥ ‪ A0‬ﻭ‬
‫‪.A1‬‬

‫‪3‬‬
‫ﻋﻨﺩ ﺯﻴﺎﺩﺓ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺴﺎﺒﻕ ﺇﻟﻰ ‪ 8‬ﻓﺈﻨﻨﺎ ﻨﺼﺒﺢ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ‪ 3‬ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﻟﻌﻨﻭﻨﺔ‬
‫ﺃﻱ ﺴﺠل ﺃﻭ ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻭﻋﻠﻰ ﻨﺤﻭ ﻋﺎﻡ ﻴﻠﺯﻤﻨﺎ ‪ log 2 L‬ﺨﻁ ﻋﻨﻭﻨﺔ ﻓﻲ ﺤﺎﻟﺔ ﺫﺍﻜﺭﺓ ﺘﻀﻡ ‪L‬‬
‫ﻼ‪.‬‬
‫ﺴﺠ ﹰ‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﻤﺎ ﻫﻭ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻼﺯﻤﺔ ﻟﻌﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺒﺤﺠﻡ ‪ 1024‬ﺒﺎﻴﺕ؟‬
‫ﺍﻟﺤل‪. log 2 1024 = 10 :‬‬
‫ﻻ ﻨﻤﻁﻴﹰﺎ ﻋﻥ ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ )ﺘﺴﻤﻰ ﺃﻴﻀﹰﺎ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺤﻴـﺔ( ﻭﻋﻠـﻰ‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ﺍﻟﻤﻐﺎﺭﺯ ﺍﻟﺘﻲ ﺘﺘﻀﻤﻨﻬﺎ‪ .‬ﺘﻀﻡ ﻤﻐﺎﺭﺯ ﺍﻟﺫﺍﻜﺭﺓ ‪ ،62256‬ﺍﻟﺘﻲ ﻴﺒﻠﻎ ﺤﺠﻤﻬﺎ ‪ 32K × 8‬ﺒﺕ‪ ،‬ﺨﻁـﻭﻁ‬
‫ﺍﻟﻌﻨﻭﻨﺔ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺇﺸﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪62256‬‬ ‫ﻣﻐﺎﺭﺯ ﺍﻟﺬﺍﻛﺮﺓ‬

‫ƒ ﺨﻁﻭﻁ ﺍﻟﺫﺍﻜﺭﺓ‪ :‬ﺘﻀﻡ ﺍﻟﺫﺍﻜﺭﺓ ‪ 15 62256‬ﺨﻁ ﻋﻨﻭﻨﺔ )‪ .(A0-A14‬ﻭﻴﺠﺭﻱ ﻭﺼـل ﻫـﺫﻩ‬


‫ﺍﻟﺨﻁﻭﻁ ﺇﻟﻰ ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻋﻨﺩ ﻭﻀﻊ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻲ ﻨﻅﺎﻡ ﻤﺒﻨﻲ ﺤﻭل ﻤﻌﺎﻟﺞ‪.‬‬
‫ƒ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ :‬ﺘﻀﻡ ﺍﻟﺫﺍﻜﺭﺓ ‪ 62256‬ﺜﻤﺎﻨﻲ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ )‪ ،(D0-D7‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻨﻨـﺎ‬
‫ﺘﺨﺯﻴﻥ ﺒﺎﻴﺕ ﻭﺍﺤﺩ ﻓﻲ ﺃﻱ ﻤﻭﻗﻊ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺘﹸﻭﺼل ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ƒ ﺨﻁﻭﻁ ﺍﻟﺘﺤﻜﻡ‪ :‬ﺘﻀﻡ ﺍﻟﺫﺍﻜﺭﺓ ‪ 62256‬ﺜﻼﺙ ﺨﻁﻭﻁ ﺘﺤﻜﻡ‪:‬‬
‫ﻤﺩﺨل ﺍﻨﺘﺨﺎﺏ )‪ : (CS‬ﻴ‪‬ﺴﺘﺨﺩﻡ ﻤﺩﺨل ﺍﻻﻨﺘﺨﺎﺏ ‪ Chip Select‬ﻻﻨﺘﺨﺎﺏ ﺍﻟﺫﺍﻜﺭﺓ ﻜﻜل‪ ،‬ﻓﻲ ﺤﻴﻥ‬
‫ﺘﻨﺘﺨﺏ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻤﻭﻗﻌﹰﺎ ﻤﻌﻴﻨﹰﺎ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺘﺤﺘﻭﻱ ﺒﻌﺽ ﺍﻟﺫﻭﺍﻜﺭ ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻤﺩﺨل‬
‫‪ chip enable‬ﺃﻭ ‪. S‬‬ ‫)‪(CE‬‬ ‫ﺍﻨﺘﺨﺎﺏ‪ ،‬ﻭﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫ ‪‬ﻤﺴﻤﻴﺎﺕ ﻤﺨﺘﻠﻔﺔ ﻤﺜل‬
‫‪ Output Enable‬ﺇﻟـﻰ ﺇﺸـﺎﺭﺓ‬ ‫ﺍﻟﻤﺩﺨل )‪(OE‬‬ ‫ﻤُﺩﺨل ﺘﺄﻫﻴل ﻤﺨﺎﺭﺝ ﺍﻟﻤﻌﻁﻴﺎﺕ )‪ : (OE‬ﻴﻭﺼل‬
‫ﺍﻟﻘﺭﺍﺀﺓ ‪ RD‬ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻴﺘﺤﻜﻡ ﻫﺫﺍ ﺍﻟ ‪‬ﻤﺩﺨل ﺒﻅﻬﻭﺭ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺨﻁـﻭﻁ‬
‫ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬

‫‪4‬‬
‫ﻤـﻥ ﺍﻟﻤﻌـﺎﻟﺞ‪ ،‬ﻭﻴ‪‬ـﺴﺘﺨﺩﻡ‬ ‫‪WR‬‬ ‫ﻤُﺩﺨل ﺍﻟﻜﺘﺎﺒﺔ ‪ : WR‬ﻴﻭﺼل ﻫﺫﺍ ﺍﻟﻤﺩﺨل ﺇﻟﻰ ﺇﺸﺎﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ‬
‫ﻟﻜﺘﺎﺒﺔ ﺃﻭ ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤﺤﺩﺩ ﺒﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬
‫ﺨﻁﻭﻁ ﺍﻟﺘﻐﺫﻴﺔ‪ :‬ﻴﺤﺘﺎﺝ ﻋﻤل ﺃﻱ ﺫﺍﻜﺭﺓ ﺇﻟﻰ ﺘﻁﺒﻴﻕ ﹸﻓﻠﻁﻴﺔ ﻤﻭﺠﺒﺔ ﺒﻴﻥ ﻤﺩﺨل ﺍﻷﺭﻀـﻲ ‪GND‬‬ ‫ƒ‬
‫ﻭﻤﺩﺨل ﺍﻟﺘﻐﺫﻴﺔ ‪.VCC‬‬

‫ﺘﺨﺘﻠﻑ ﻤﻐﺎﺭﺯ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ )ﺃﻭ ﺍﻟﻤﻴﺘﺔ(‪ ،‬ﻨﻭﻋﹰﺎ ﻤﺎ‪ ،‬ﻋﻥ ﻤﻐﺎﺭﺯ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒـﺔ‪.‬‬
‫ﻓﺒﻴﻨﻤﺎ ﻻ ﺘﺤﺘﻭﻱ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻋﻠﻰ ﻤﺩﺨل ﺍﻟﻜﺘﺎﺒﺔ ‪ ، WR‬ﻓﺈﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻭﺍﻟﻘﺎﺒﻠـﺔ‬
‫ﻹﻋﺎﺩﺓ ﺍﻟﺒﺭﻤﺠﺔ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻤﺩﺨل ﺁﺨﺭ ﻭﻫﻭ ‪ .PGM‬ﻴﺠﺭﻱ ﺘﻁﺒﻴﻕ ﻓﻠﻁﻴﺔ ﻤﻨﺎﺴـﺏ ﻋﻠـﻰ ﻫـﺫﺍ‬
‫ﺍﻟﻤﺩﺨل ﻋﻨﺩ ﺒﺭﻤﺠﺔ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺘﻭﺯﻉ ﻤﻐﺎﺭﺯ ﺍﻟﺫﺍﻜﺭﺓ ‪ 2716‬ﻭﺍﻟﺘﻲ ﺘﺒﻠـﻎ ﺴـﻌﺘﻬﺎ‬
‫‪ 2K × 8‬ﺒﺕ‪.‬‬
‫‪2716‬‬ ‫ﻣﻐﺎﺭﺯ ﺍﻟﺬﺍﻛﺮﺓ‬

‫ﺃﻨﻭﺍﻉ ﺍﻟﺫﻭﺍﻜﺭ‬
‫ﻴﻤﻜﻥ ﺘﺼﻨﻴﻑ ﺍﻟﺫﻭﺍﻜﺭ ﻋﻠﻰ ﻨﺤـﻭ ﺭﺌـﻴﺱ ﺇﻟـﻰ ﻤﺠﻤـﻭﻋﺘﻴﻥ ﺃﺴﺎﺴـﻴﺘﻴﻥ‪ :‬ﺍﻟـﺫﻭﺍﻜﺭ ﺍﻟﺭﺌﻴـﺴﺔ‬
‫‪ prime memory‬ﻭﺫﻭﺍﻜﺭ ﺍﻟﺘﺨﺯﻴﻥ ‪ .storage memory‬ﹸﺘﻌﺘﺒﺭ ﺍﻟﺫﻭﺍﻜﺭ ‪) RAM‬ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ(‬
‫ﻭ ‪) ROM‬ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ( ﺃﻤﺜﻠﺔ ﻋﻥ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺭﺌﻴﺴﺔ ﻓﻲ ﺍﻟﻨﻅﺎﻡ‪ .‬ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟـﺫﻭﺍﻜﺭ ﻟﻠﻘـﺭﺍﺀﺓ‬
‫ﻓﻘﻁ ﻟﺘﺨﺯﻴﻥ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺅﻗﺘﺔ‪ ،‬ﺨﻼل ﻤﺭﺤﻠﺔ‬
‫ﻑ ﻭﻤﺘﻭﺍﻓﻘﺔ ﻤﻊ ﺴـﺭﻋﺔ ﻋﻤـل‬
‫ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ .‬ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺴﺭﻴﻌﺔ ﻋﻠﻰ ﻨﺤﻭ ﻜﺎ ٍ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻤـﻥ ﺍﻟـﻨﻤﻁ ﺫﺍﺕ ﺍﻟﻭﺼـﻭل ﺍﻟﻌـﺸﻭﺍﺌﻲ ‪Random Access‬‬
‫‪memory‬؛ ﺃﻱ ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﺃﻥ ‪‬ﻴﺼل ﺃﻭ ‪‬ﻴ ﹾﻨ ﹶﻔﺫ ﺇﻟﻰ ﻤﻌﻁﻴﺎﺕ ﺃﻱ ﺴﺠل ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺎﻟﺴﺭﻋﺔ ﻨﻔﺴﻬﺎ‬
‫)ﺒﻐﺽ ﺍﻟﻨﻅﺭ ﻋﻥ ﺘﺭﺘﻴﺏ ﻤﻭﻗﻌﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ(‪.‬‬
‫ﹸﺘﺴﺘﺨﺩﻡ ﺫﻭﺍﻜﺭ ﺍﻟﺘﺨﺯﻴﻥ ﻟﺤﻔﻅ ﺍﻟﺒﺭﺍﻤﺞ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻨﺫﻜﺭ ﻜﺄﻤﺜﻠـﺔ‬
‫ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ‪ :‬ﺍﻟﺴﻭﺍﻗﺎﺕ ‪ disks‬ﻭﺍﻟﺸﺭﺍﺌﻁ ﺍﻟﻤﻐﻨﺎﻁﻴﺴﻴﺔ ‪ .magnetic tapes‬ﹸﺘﻌﺘﺒﺭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ‬
‫ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﻻﻤ‪‬ﺘﻼﺸﻴﺔ ‪nonvolatile‬؛ ﺃﻱ ﺘﺒﻘﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﺫﻭﺍﻜﺭ ﺤﺘـﻰ‬

‫‪5‬‬
‫ﺒﻌﺩ ﻓﺼل ﺘﻐﺫﻴﺔ ﺍﻟﻨﻅﺎﻡ ‪ turn off‬ﻋﻨﻬﺎ‪ .‬ﻨﻅﺭﹰﺍ ﻟﻠﺴﺭﻋﺎﺕ ﺍﻟﻤﻨﺨﻔﻀﺔ ﻟﻬﺫﻩ ﺍﻟـﺫﻭﺍﻜﺭ ﻓـﻼ ﻴـﺴﺘﻁﻴﻊ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻴﻬﺎ ﻤﺒﺎﺸﺭﺓ‪ ،‬ﻟﺫﻟﻙ ﻓﻬﻭ ﻴﻨﻔﺫ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﺨﺯﻨﺔ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺒﻌﺩ‬
‫ﻨﺴﺨﻬﺎ ﺇﻟﻰ ﺫﻭﺍﻜﺭ ﺤﻴﺔ ‪ .RAM‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺼﻨﻔﻴﻥ ﻤﻥ ﺫﻭﺍﻜﺭ ﺍﻟﺘﺨﺯﻴﻥ‪ :‬ﻭﺴﺎﺌﻁ ﺍﻟﺘﺨﺯﻴﻥ ﺍﻟﺜﺎﻨﻭﻴـﺔ‬
‫‪ secondary storage‬ﻭﻭﺴﺎﺌﻁ ﺍﻟﺘﺨﺯﻴﻥ ﻟﺤﻔﻅ ﺍﻟﻨﺴﺦ ﺍﻻﺤﺘﻴﺎﻁﻴﺔ ‪.5backup storage‬‬
‫ﺘﺘﻀﻤﻥ ﻭﺴﺎﺌﻁ ﺍﻟﺘﺨﺯﻴﻥ ﺍﻟﺜﺎﻨﻭﻴﺔ ﻭﺍﻻﺤﺘﻴﺎﻁﻴـﺔ ﺘﺠﻬﻴـﺯﺍﺕ ﻤﺜـل ﺍﻟـﺴﻭﺍﻗﺎﺕ ‪ ،disks‬ﺍﻟـﺸﺭﺍﺌﻁ‬
‫‪6‬‬
‫‪7‬‬
‫ﺍﻟﻤﻐﻨﺎﻁﻴﺴﻴﺔ‪ ،‬ﺍﻟـﺫﺍﻜﺭﺓ ﺍﻟﻔﻘﺎﻋﻴـﺔ ‪ ،bubble memory‬ﻭ ﻋﻨـﺼﺭ ﻗـﺭ‪‬ﻥ ﺸِـﺤﻨﻲ ‪charge-‬‬
‫)‪ .coupled device (CCD‬ﺘﺘﻤﻴﺯ ﻫﺫﻩ ﺍﻟﻭﺴﺎﺌﻁ ﺒﻜﻭﻨﻬﺎ ﻭﺍﺴﻌﺔ ﺍﻟﺤﺠﻡ‪ ،‬ﺭﺨﻴﺼﺔ ﺍﻟﺜﻤﻥ‪ ،‬ﻭﻟﻜـﻥ‬
‫ﺴﺭﻋﺔ ﺍﻟ ﹶﻨﻔﺎﺫ ﺇﻟﻴﻬﺎ ﺒﻁﻴﺌﺔ‪.‬‬

‫ﺽ ﺍﻷﺭﺸﻔﺔ ﺃﻭ ﻟﺤﻤﺎﻴ ِﺔ ﺍﻟﻤﻠﻔﺎﺕ‬


‫‪ 5‬ﺍﻟﻨﺴﺦ ﺍﻻﺤﺘﻴﺎﻁﻴﺔ ﻫﻲ ﻨﺴﺨ ﹲﺔ ﻤﻜﺭ‪‬ﺭ ﹲﺓ ﻤﻥ ﺒﺭﻨﺎﻤﺞٍ‪ ،‬ﺃﻭ ﻗﺭﺹٍ‪ ،‬ﺃﻭ ﻤﻌﻁﻴﺎﺕٍ‪ ،‬ﹸﺘ ‪‬ﻌﺩ‪ ‬ﺇﻤﺎ ﻷﻏﺭﺍ ِ‬
‫ل ﺘﻀ ‪‬ﺭﺭِ‪ ،‬ﺃﻭ ﺩﻤﺎﺭ‪ ،‬ﺍﻟﻨﺴﺨ ِﺔ ﺍﻟﻤﻭﻀﻭﻋ ِﺔ ﻓﻲ ﺍﻻﺴﺘﺨﺩﺍﻡ‪.‬‬ ‫ﺍﻟﻘﻴ‪‬ﻤ ِﺔ ﻤﻥ ﺍﻟﻀﻴﺎﻉ‪ ،‬ﻭﺫﻟﻙ ﻓﻲ ﺤﺎ ِ‬
‫ﺫﺍﻜﺭ ﹲﺓ ﻤﻜﻭ‪‬ﻨ ﹲﺔ ﻤﻥ ﺴﻠﺴﻠ ٍﺔ ﻤﻥ ﺍﻟﻔﻘﺎﻋﺎﺕ ﺍﻟﺩﺍﺌﻤ ِﺔ ﺍﻟﻤﻐﻨﻁﻴﺴﻴ ِﺔ ﻓﻲ ﺭﻜﻴﺯ ِﺓ ﻏﺸﺎ ٍﺀ ﺭﻗﻴﻕ‪ .‬ﻋﻠﻰ ﺨﻼﻑ ﺍﻟـ ‪ ،ROM‬ﻴﻤﻜِﻥ ﻜﺘﺎﺒ ﹸﺔ‬
‫‪6‬‬

‫ﺏ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻔﻘﺎﻋﻴ ِﺔ ﺘﹶﺒﻘﻰ ﻫﻨﺎﻙ ﺤﺘﻰ ﻴ‪‬ﻌﺎ ‪‬ﺩ‬


‫ﺕ ﺍﻟﺘﻲ ﺘﹸﻜ ﹶﺘ ‪‬‬
‫ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻔﻘﺎﻋﻴﺔ‪ .‬ﻭﻋﻠﻰ ﺨﻼﻑ ﺍﻟـ ‪ ،RAM‬ﺍﻟﻤﻌﻠﻭﻤﺎ ﹸ‬
‫ﺘﻐﻴﻴﺭﻫﺎ‪ ،‬ﻭﺘﹶﺒﻘﻰ ﻤﺤﻔﻭﻅ ﹰﺔ ﺤﺘﻰ ﺒﻌﺩ ﺇﻴﻘﺎﻑ ﺍﻟﺤﺎﺴﻭﺏ ﻋﻥ ﺍﻟﻌﻤل‪.‬‬
‫ﺝ ﺃﺤﺩ‬
‫ﻑ ﻨﺎﻗﻠﺔ ﺇﻓﺭﺍﺩﻴﺔ ﺒﺤﻴﺙ ﺘﺯﻭ‪‬ﺩ ﺍﻟﺸﺤﻨ ﹸﺔ ﺍﻟﻜﻬﺭﺒﺎﺌﻴ ﹸﺔ ﻋﻨﺩ ﺨ ‪‬ﺭ ِ‬
‫ﺕ ﻨﺼ ﹸ‬
‫ﻤﺨﺘﺼﺭﻩ‪ .CCD :‬ﺘﺠﻬﻴﺯ ﹲﺓ ﺘﹸﺭﺒ‪‬ﻁ ﻓﻴﻬﺎ ﻤﻜﻭ‪‬ﻨﺎ ﹲ‬ ‫‪7‬‬

‫ﻻ ﻋﻠﻰ‬
‫ﻑ ﺍﻟﻀﻭﺌﻲ ﻓﻲ ﺍﻟ ﹶﻜﻤِﺭﺍﺕ ﺍﻟﺭﻗﻤﻴﺔ‪ ،‬ﻭﺍﻟﻌﺩﻴﺩ ﻤﻥ ﹶﻜﻤِﺭﺍﺕ ﺍﻟﻔﻴﺩﻴﻭ ﻤﺜﺎ ﹰ‬
‫ل ﺍﻟﻤﻜﻭﻥ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻭﻴ‪‬ﻌ ‪‬ﺩ ﻋﻨﺼ ‪‬ﺭ ﺍﻟﻜﺸ ِ‬
‫ﺍﻟﻤﻜﻭﻨﺎﺕ‪ ،‬ﺩﺨ َ‬
‫ﻋﻨﺎﺼﺭ ﺍﻟﻘﺭﻥ ﺍﻟﺸﺤﻨﻲ‪.‬‬

‫‪6‬‬
‫ﺇﻥ ﻁﺭﻴﻘﺔ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺍﻟﺴﻭﺍﻗﺎﺕ ﻫﻲ ﻤﻥ ﺍﻟﻨﻤﻁ ﻨﺼﻑ ﺍﻟﻌﺸﻭﺍﺌﻲ‪ ،‬ﺒﻴﻨﻤﺎ ﻫﻲ ﺘﺴﻠـﺴﻠﻴﺔ‬
‫ﻓﻲ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻷﺨﺭﻯ؛ ﺃﻱ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﺨﺯﻨﺔ ﻓﻲ ﻤﻨﺘﺼﻑ ﺍﻟـﺸﺭﻴﻁ ﻓﻴﺠـﺏ ﺘـﺩﻭﻴﺭ‬
‫ﺍﻟﺸﺭﻴﻁ ﺇﻟﻰ ﻤﻨﺘﺼﻔﻪ ﻗﺒل ﺍﻟﺘﻤﻜﻥ ﻤﻥ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ‪.‬‬

‫ﺫﺍﻜﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ‪R/W‬‬


‫ﻜﻤﺎ ﻫﻭ ﻭﺍﻀﺢ ﻤﻥ ﺍﻻﺴﻡ‪ ،‬ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﺃﻥ ﻴﻘﺭﺃ ﻤﻥ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﻴﻜﺘﺏ ﻓﻴﻬﺎ‪ ،‬ﻭﺘﹸﻌـﺭﻑ ﻋـﺎﺩﺓ‬
‫ﺒﺎﻟﺫﺍﻜﺭﺓ ﺫﺍﺕ ﺍﻟﻭﺼﻭل ﺍﻟﻌﺸﻭﺍﺌﻲ ﺃﻭ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺤﻴﺔ‪ .RAM ،‬ﻭﺘﹸﺴﺘﺨﺩﻡ ﻋﺎﺩﺓ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻠﻭﻤـﺎﺕ‬
‫ﺍﻟﻤﺘﻐﻴﺭﺓ‪ ،‬ﻤﺜل ﺍﻟﻤﺘﺤﻭﻻﺕ‪ .‬ﻭﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻗﺎﺒل ﻟﻠﺘﻼﺸﻲ ‪volatile‬؛ ﺃﻱ ﹸﺘ ﹾﻔ ﹶﻘ ‪‬ﺩ ﺍﻟﻤﻌﻠﻭﻤـﺎﺕ‬
‫ﺍﻟﻤﺨﺯﻨﺔ ﻓﻴﻬﺎ ﺒﻌﺩ ﻓﺼل ﺘﻐﺫﻴﺔ ﺍﻟﻨﻅﺎﻡ‪ .‬ﻴﻤﻜﻥ ﺘﻤﻴﻴﺯ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟـﺫﺍﻜﺭﺓ ‪ :R/W‬ﺫﺍﻜـﺭﺓ ﺴـﻜﻭﻨﻴﺔ‬
‫‪ Static RAM‬ﻭﺫﺍﻜﺭﺓ ﺩﻴﻨﺎﻤﻴﻜﻴﺔ ‪.Dynamic RAM‬‬
‫ƒ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺴﻜﻭﻨﻴﺔ ‪ :SRAM‬ﻴﺘﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻥ ﻗﻼﺒﺎﺕ ‪ ،flip-flop‬ﻭﻴﺠﺭﻱ ﻓﻴﻬﺎ‬
‫ﺘﺨﺯﻴﻥ ﺍﻟﺒﺕ ﻜﻔﻠﻁﻴﺔ‪ .‬ﻴ‪‬ﺩﺨل ﻓﻲ ﺘﺼﻤﻴﻡ ﻜل ﻗﻼﺏ ‪ 6‬ﺘﺭﺍﻨﺯﺴﺘﻭﺍﺕ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ ﺴﻌﺔ ﺍﻟﺭﻗﺎﻗـﺔ‬
‫ﺘﻜﻭﻥ ﻗﻠﻴﻠﺔ ﻭﻟﻜﻨﻬﺎ ﺘﺘﻤﻴﺯ ﺒﺴﺭﻋﺔ ﻨﻔﺎﺫ ﻜﺒﻴﺭﺓ‪ .‬ﺇﻥ ﻜﻠﻔﺔ ﺼﻨﺎﻋﺔ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﻭﺍﺴﺘﻬﻼﻜﻬﺎ ﻟﻠﻁﺎﻗﺔ‬
‫ﺃﻜﺜﺭ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺩﻴﻨﺎﻤﻴﻜﻴﺔ‪.‬‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺩﻴﻨﺎﻤﻴﻜﻴﺔ ‪ :DRAM‬ﻴﺘﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻥ ﺒﻭﺍﺒﺎﺕ ﺘﺭﺍﻨﺯﺴﺘﻭﺭﺍﺕ ‪MOS‬‬ ‫ƒ‬
‫)‪ ،(MOS transistor gates‬ﻭﻴﺠﺭﻱ ﻓﻴﻬﺎ ﺘﺨﺯﻥ ﺍﻟﺒﺘﺎﺕ ﻜﺸﺤﻨﺎﺕ ﻓﻲ ﻤﻜﺜﻔﺎﺕ‪ .‬ﺘﻤﺘـﺎﺯ ﻫـﺫﻩ‬
‫ﺍﻟﺫﻭﺍﻜﺭ ﻋﻠﻰ ‪ :SRAM‬ﺒﺎﻟﺴﻌﺔ ﺍﻷﻋﻠﻰ‪ ،‬ﻭﺍﻻﺴﺘﻬﻼﻙ ﺍﻷﻗل ﻟﻼﺴـﺘﻁﺎﻋﺔ ﻭﺍﻟـﺜﻤﻥ ﺍﻷﺭﺨـﺹ‪.‬‬
‫ﻭ ﹰﺘﻜﻤﻥ ﺴﻴﺌﺔ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺭﺌﻴﺴﺔ ﺒﺘﺴﺭﻴﺏ ﺍﻟﺸﺤﻨﺔ )ﺘﻔﺭﻴﻎ ﺍﻟﺸﺤﻨﺔ(‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺠﺏ ﺇﻋﺎﺩﺓ ﻜﺘﺎﺒﺔ‬
‫ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺒﻌﺩ ﻗﺭﺍﺀﺘﻬﺎ‪ ،‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ‪ ،‬ﺒﺎﺴﺘﻤﺭﺍﺭ‪ .‬ﺘﹸﺴﻤﻰ ﻋﻤﻠﻴﺔ ﺍﻟﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ﺒﺈﻨﻌـﺎﺵ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ‪ ،refresh‬ﻭﻴ‪‬ﻌﺎﺩ ﺘﻨﻔﻴﺫﻫﺎ ﻜل ﻋﺩﺓ ِﻤﱢﻠﻲ ﺜﺎﻨﻴﺎﺕ‪ .‬ﺘﺤﺘﺎﺝ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﺇﻟـﻰ ﺩﺍﺭﺍﺕ‬
‫ﺇﻀﺎﻓﻴﺔ ﻤﻤﺎ ﻴﺯﻴﺩ ﺘﻌﻘﻴﺩ ﺍﻟﻨﻅﺎﻡ ﻭﻜﻠﻔﺘﻪ‪ .‬ﺇﻥ ﺴﺭﻋﺔ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ‪ DRAM‬ﺃﺒﻁﺄ ﺒﻜﺜﻴﺭ ﻤﻥ ﺴـﺭﻋﺔ‬
‫ﻋﻤل ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺘﻲ ﺘﺯﺩﺍﺩ ﺒﺎﻁﺭﺍﺩ‪ ،‬ﻤﻤﺎ ﺩﻓﻊ ﺇﻟﻰ ﺘﻁﻭﻴﺭ ﺘﻘﺎﻨﺎﺕ ﻋﺩﻴﺩﺓ ﺃﺩﺕ ﺇﻟﻰ ﺇﻨﺘﺎﺝ ﺭﻗﺎﻗﺎﺕ‬
‫‪8‬‬
‫ﺫﺍﻜﺭﺓ ﻋﺎﻟﻴﺔ ﺍﻟﺴﺭﻋﺔ ﻤﺜـل‪Synchronous ،Extended Data OUT (EDO9) ، DDR :‬‬
‫)‪ ،DRAM10 (SDRAM‬ﻭ )‪.Rambus 11DRAM (RDRAM‬‬

‫ﻤﺨﺘﺼﺭ‪،double-data-rate synchronous dynamic random access memory :‬‬ ‫‪8‬‬

‫ﺫﺍﻜﺭﺓ ‪ RAM‬ﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﻤﺘﺯﺍﻤﻨﺔ ﺒﻤﻌﺩل ﻨﻘل ﻤﻌﻁﻴﺎﺕ ﻤﻀﺎﻋﻑ‪.‬‬


‫‪ 9‬ﻤﺨﺘﺼﺭ‪ .Extended Data Out Dynamic Random Access Memory :‬ﺫﺍﻜﺭﺓ ‪ RAM‬ﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﺫﺍﺕ ﺨﺭﺝ‬
‫ﻤﻁﻭ‪‬ل‬
‫‪ 10‬ﻤﺨﺘﺼﺭ‪،synchronous Dynamic RAM :‬ﺫﺍﻜﺭﺓ ‪ RAM‬ﺩﻴﻨﺎﻤﻴﻜﻴﺔ ﻤﺘﺯﺍﻤﻨﺔ‬
‫‪ Rambus 11‬ﺍﺴﻡ ﺸﺭﻜﺔ ﺘﺼﻨﻊ ﺫﻭﺍﻜﺭ ﻟﻠﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ ﺘﺤﻤل ﺍﺴﻤﻬﺎ‪.‬‬

‫‪7‬‬
‫ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ‪ROM‬‬
‫ﺇﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻨﻭﻉ ‪ ROM‬ﻻﻤﺘﻼﺸﻴﺔ ‪nonvolatile‬؛ ﺃﻱ ﺘﺴﺘﻤﺭ ﺒﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺤﺘـﻰ ﺒﻌـﺩ‬
‫ﻓﺼل ﺘﻐﺫﻴﺔ ﺍﻟﻨﻅﺎﻡ‪ .‬ﺘﹸﺴﺘﺨﺩﻡ ﺍﻟﺫﻭﺍﻜﺭ ‪ ROM‬ﻟﺘﺨﺯﻴﻥ ﺍﻟﺒﺭﺍﻤﺞ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘـﻲ ﻻ ﺘﺤﺘـﺎﺝ ﺇﻟـﻰ‬
‫ﺘﻐﻴﻴﺭ‪ .‬ﻭﻜﻤﺎ ﻴﺒﻴﻥ ﺍﺴﻡ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻴﻤﻜﻨﻨﺎ ﻓﻘﻁ ﻗﺭﺍﺀﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺘﹸﺴﻤﻰ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺘـﻲ ﻻ‬
‫ﺘﺴﻤﺢ ﺒﺘﻐﻴﻴﺭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻴﻬﺎ ﺒﺎﻟﻤ‪‬ﺴﺘﺩﻴﻤﺔ ‪ ،permanent‬ﻭﺘﺘﻀﻤﻥ ﺍﻟـﺫﻭﺍﻜﺭ ﺍﻟﻤ‪‬ـﺴﺘﺩﻴﻤﺔ‬
‫ﺍﻟﺫﻭﺍﻜﺭ ‪ ROM‬ﻭ ‪ .PROM‬ﻭﺘﹸﺴﻤﻰ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﺒﺘﻐﻴﻴﺭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻴﻬﺎ ﺒـﺸﺒﻪ ﻤـﺴﺘﺩﻴﻤﺔ‬
‫‪ semi-permanent‬ﻭﺘﺘﻀﻤﻥ ﺍﻟﺼﻨﻔﻴﻥ ‪ EPROM‬ﻭ ‪ ،EEPROM‬ﻜﻤﺎ ﻫﻭ ﻤﺒـﻴﻥ ﻓـﻲ ﺍﻟـﺸﻜل‬
‫ﺍﻟﺴﺎﺒﻕ‪.‬‬
‫ﻴﻤﻜﻥ ﺸﺭﺡ ﺍﻟﻤﻔﻬﻭﻡ ﺍﻟﺭﺌﻴﺱ ﻟﻠﺫﺍﻜﺭﺓ ‪ ROM‬ﺒﻭﺍﺴﻁﺔ ﺩﻴﻭﺩﺍﺕ ﻤﺭﺘﺒﺔ ﻋﻠﻰ ﺸﻜل ﻤﺼﻔﻭﻓﺔ‪ ،‬ﻜﻤﺎ ﻫﻭ‬
‫ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ .‬ﻴﻤﻜﻥ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﺸﻜل‪ ،‬ﻓﻘﻁ ﻭﺼل ﺍﻟﺨﻁﻭﻁ ﺍﻷﻓﻘﻴﺔ ﻤﻊ ﺍﻟﺨﻁﻭﻁ ﺍﻟﺸﺎﻗﻭﻟﻴﺔ‬
‫ﺒﺩﻴﻭﺩﺍﺕ‪ ،‬ﻭﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﺨﻁﻭﻁ ﻏﻴﺭ ﻤﺘﺼﻠﺔ ﻓﻴﻤﺎ ﺒﻴﻨﻬﺎ ﻋﻨﺩﻤﺎ ﺘﺒﺩﻭ ﻤﺘﻘﺎﻁﻌﺔ‪ .‬ﻴ‪‬ﻤﻜﻥ ﺍﻋﺘﺒﺎﺭ ﺍﻷﺴﻁﺭ‬
‫ﺍﻟﺜﻤﺎﻨﻴﺔ ﺍﻷﻓﻘﻴﺔ ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﺔ ﺴﺠﻼﺕ ﺘﺘﺭﺍﻭﺡ ﻋﻨﺎﻭﻴﻨﻬﺎ ﺒﻴﻥ ‪ 000‬ﻭ ‪ .111‬ﺘﹸﺨﺯﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓـﻲ‬
‫ﺍﻟﺩﻴﻭﺩﺍﺕ ﻋﻠﻰ ﺸﻜل ﺃﺼﻔﺎﺭ ‪ 0's‬ﻭﻭﺤﺩﺍﻥ ‪ ،1's‬ﻴ‪‬ﻌﺒﺭ ﻭﺠﻭﺩ ﺍﻟﺩﻴﻭﺩ ﻋﻥ ﺘﺨﺯﻴﻥ ‪ 1‬ﻤﻨﻁﻘﻲ ﻭﻏﻴﺎﺒـﻪ‬
‫ﻋﻥ ﺘﺨﺯﻴﻥ ‪ 0‬ﻤﻨﻁﻘﻲ‪ .‬ﻋﻨﺩ ﻋﻨﻭﻨﺔ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺜﻤﺎﻨﻴﺔ ﺘﺼﺒﺢ ﻓﻠﻁﻴﺔ ﺫﻟﻙ ﺍﻟﺨﻁ ﻋﺎﻟﻴﺔ‪ ،‬ﻤﻤﺎ ﻴﺅﺩﻱ‬
‫ﺇﻟﻰ ﻅﻬﻭﺭ ﻓﻠﻁﻴﺔ ﻋﺎﻟﻴﺔ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﺨﺭﺝ ﺍﻟﻤﻭﺼﻭﻟﺔ ﺒﺩﻴﻭﺩﺍﺕ‪ .‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﻴﻤﻜﻨﻨﺎ ﻋﻨﺩ‬
‫ﻋﻨﻭﻨﺔ ﺍﻟﺴﺠل ‪ 111‬ﻗﺭﺍﺀﺓ ﺍﻟﺒﺎﻴﺕ )‪ 0111 1000 (78h‬ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪.D0-D7‬‬

‫‪8‬‬
‫ﻴﻤﻜﻥ ﺃﻥ ﻨﻤﻴﺯ‪ ،‬ﻋﻠﻰ ﻨﺤﻭ ﺭﺌﻴﺴﻲ‪ ،‬ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ‪:‬‬
‫‪13‬‬ ‫‪12‬‬
‫ﻭ ‪PROM‬‬ ‫ﺫﻭﺍﻜﺭ ﺘﺒﺭﻤﺞ ﻟﻤﺭﺓ ﻭﺍﺤﺩﺓ‪ ،‬ﻤﺜل ‪ROM‬‬ ‫ƒ‬
‫‪15‬‬ ‫‪14‬‬
‫ﻭ ‪Flash‬‬ ‫ـل ‪EE-PROM ، EPROM‬‬
‫ـﺔ‪ ،‬ﻤﺜـ‬
‫ـﺎﺩﺓ ﺍﻟﺒﺭﻤﺠـ‬
‫ـﺔ ﻹﻋـ‬
‫ـﺭ ﻗﺎﺒﻠـ‬
‫ﺫﻭﺍﻜـ‬ ‫ƒ‬
‫‪16‬‬
‫‪Memory‬‬

‫‪ 12‬ﻤﺨﺘﺼﺭ‪ ،Masked ROM :‬ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻤ‪‬ﺤﺠﺒﺔ‪ .‬ﺘﺠﺭﻱ ﻜﺘﺎﺒﺔ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻴﻬﺎ ﺒﻭﺍﺴﻁﺔ ﻋﻤﻠﻴﺎﺕ ﺘﺤﺠﻴﺏ‬
‫‪ masking‬ﻭﻤﻌﺩﻨﺔ ‪ .metallization‬ﺘﻤﺘﻠﻙ ﺍﻟﺸﺭﻜﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ ﻟﻠﺫﻭﺍﻜﺭ ‪ ROM‬ﻋﻠﻰ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻀﺭﻭﺭﻴﺔ ﻟﺘﻨﻔﻴﺫ ﻫﺫﻩ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕ‪ ،‬ﻭﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻤﻜﻠﻔﺔ ﻤﺎﺩﻴﹰﺎ ﻭﺘﺼﺒﺢ ﺍﻗﺘﺼﺎﺩﻴﺔ ﻓﻲ ﺍﻹﻨﺘﺎﺝ ﺍﻟﻜﻤﻲ ﺍﻟﻜﺒﻴﺭ‪.‬‬
‫ﻤﺨﺘﺼﺭ‪ ،Programmable Read-Only Memory :‬ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻗﺎﺒﻠﺔ ﻟﻠﺒﺭﻤﺠﺔ‪ .‬ﺘﺤﺘﻭﻱ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ‬ ‫‪13‬‬

‫ﺃﺴﻼﻙ ﻨﻴﻜﺭﻭﻥ ‪ nichrome‬ﺃﻭ ﺒﻭﻟﻴﺴﻴﻠﻴﻜﻭﻥ ‪ polysilicon‬ﻤﻨﻅﻤﺔ ﻋﻠﻰ ﺸﻜل ﻤﺼﻔﻭﻓﺔ؛ ﻴ‪‬ﻤﻜﻥ ﺍﻋﺘﺒﺎﺭ ﻭﻅﻴﻔﺔ ﺍﻷﺴﻼﻙ ﻤﺜل‬
‫ﺍﻟﺩﻴﻭﺩﺍﺕ ﺃﻭ ﺍﻟﻔﺎﺼﻤﺎﺕ ‪ .fuses‬ﻴﻤﻜﻥ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺭﻤﺠﺔ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺒﻭﺍﺴﻁﺔ ﻤﺒﺭﻤﺠﺎﺕ ‪ PROM‬ﺨﺎﺼﺔ ﺘﻌﻤل ﻋﻠﻰ ﺤﺭﻕ‬
‫‪ burn‬ﺍﻷﺴﻼﻙ ﺘﺒﻌﹰﺎ ﻟﺒﺘﺎﺕ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﻤ‪‬ﺭﺍﺩ ﺘﺨﺯﻴﻨﻬﺎ‪ .‬ﺘﺒﻘﻰ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﺴﺘﺩﻴﻤﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﺩ ﺒﺭﻤﺠﺘﻬﺎ‪.‬‬

‫ﻤﺨﺘﺼﺭ‪ ،Erasable Programmable Read-Only Memory :‬ﺫﺍﻜﺭﺓ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ﻗﺎﺒﻠﺔ ﻟﻠﺒﺭﻤﺠﺔ ﻭﺍﻟﻤﺤﻲ‪ .‬ﺘﹸﺨـﺯﻥ‬ ‫‪14‬‬

‫ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺕ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﻁﺭﻴﻕ ﺸﺤﻥ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﻌﺎﺌﻤﺔ ‪ floating gate‬ﻟﺘﺭﺍﻨﺯﺴﺘﻭﺭ ﺤﻘﻠـﻲ ‪ .FET‬ﻴﻤﻜـﻥ ﻟﻠﻤﺒـﺭﻤﺞ‬
‫ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺫﺍﻜﺭﺓ ‪ EPROM‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﺒﺭﻤﺠﺔ ﺨﺎﺼﺔ‪ .‬ﻴﻤﻜﻨﻨﺎ ﻤﺤﻭ ﺠﻤﻴﻊ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋـﻥ ﻁﺭﻴـﻕ‬
‫ﺘﹶﻌ ِﺭﻴﺽ ﺭﻗﺎﻗﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺇﻟﻰ ﺃﺸﻌﺔ ﻓﻭﻕ ﺍﻟﺒﻨﻔﺴﺠﻴﺔ ‪ ultraviolet‬ﻋﺒﺭ ﻨﺎﻓﺫﺘﻬﺎ ﺍﻟﺯﺠﺎﺠﻴﺔ‪ ،‬ﻭﻴﻤﻜﻨﻨﺎ ﺒﻌﺩ ﺫﻟﻙ ﺇﻋـﺎﺩﺓ ﺘﺨـﺯﻴﻥ ﺃﻭ‬
‫ﺒﺭﻤﺠﺔ ﻤﻌﻁﻴﺎﺕ ﺠﺩﻴﺩﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﻭﺒﻤﺎ ﺃﻨﻨﺎ ﻗﺎﺩﺭﻴﻥ ﻋﻠﻰ ﺇﻋﺎﺩﺓ ﺒﺭﻤﺠﺔ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻋﺩﺓ ﻤﺭﺍﺕ ﻓﻬﻲ ﻤﻨﺎﺴﺒﺔ ﺒﺸﻜل ﺨـﺎﺹ‬
‫ﻟﻼﺴﺘﺨﺩﺍﻡ ﺨﻼل ﻤﺭﺤﻠﺔ ﺘﻁﻭﻴﺭ ﺍﻟﺒﺭﺍﻤﺞ ﻭﺍﻟﺘﺠﻬﻴﺯﺍﺕ‪ .‬ﻭﻤﻥ ﻤﺴﺎﻭﺉ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻨﺫﻜﺭ‪:‬‬
‫‪ -1‬ﻀﺭﻭﺭﺓ ﺇﺯﺍﻟﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﻤﻥ ﺃﺠل ﻤﺤﻭﻫﺎ ﻭﺇﻋﺎﺩﺓ ﺒﺭﻤﺠﺘﻬﺎ‪.‬‬
‫‪ -2‬ﻀﺭﻭﺭﺓ ﻤﺤﻭ ﻜﺎﻤل ﺍﻟﺫﺍﻜﺭﺓ ﻗﺒل ﺇﻋﺎﺩﺓ ﺒﺭﻤﺠﺘﻬﺎ‬
‫‪ -3‬ﺯﻤﻥ ﻤﺤﻭ ﻜﺒﻴﺭ‪ ،‬ﺤﻭﺍﻟﻲ ‪ 15‬ﺩﻗﻴﻘﺔ‪.‬‬

‫ﻤﺨﺘﺼﺭ‪ ،Electrical Erasable PROM :‬ﺫﺍﻜﺭﺓ ‪ PROM‬ﻗﺎﺒﻠﺔ ﻟﻠﻤﺤﻭ ﻜﻬﺭﺒﺎﺌﻴﹰﺎ‪ .‬ﻴ‪‬ﺸﺒِﻪ ﻋﻤل ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻤل ﺫﺍﻜﺭﺓ‬ ‫‪15‬‬

‫‪ ،EPROM‬ﻭﻴﻜﻤﻥ ﺍﻟﻔﺭﻕ ﺍﻟﺭﺌﻴﺱ ﺒﻴﻨﻬﻤﺎ ﺒﺈﻤﻜﺎﻥ ﺘﻐﻴﻴﺭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺃﻱ ﺴﺠل ﺒﻭﺍﺴﻁﺔ ﺇﺸﺎﺭﺍﺕ ﻜﻬﺭﺒﺎﺌﻴﺔ‪ ،‬ﻋﻭﻀـﹰﺎ ﻋـﻥ‬
‫ﻀﺭﻭﺭﺓ ﻤﺤﻭ ﻜﺎﻤل ﺍﻟﺫﺍﻜﺭﺓ ﻓﻲ ‪ .EPROM‬ﻴﺴﻤﺢ ﺍﺴﺘﺨﺩﺍﻡ ‪ EE-PROM‬ﺒﺘﺤﺩﻴﺙ ﺒﺭﺍﻤﺞ ﻨﻅﻡ ﺘﻘﻊ ﻓﻲ ﺃﻤﺎﻜﻥ ﺒﻌﻴﺩﺓ‪ ،‬ﻋﺒـﺭ‬
‫ﺍﻟﺨﻁﻭﻁ ﺍﻟﻬﺎﺘﻔﻴﺔ‪ ،‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺤﺎﺴﻭﺏ ﻤﺭﻜﺯﻱ‪ .‬ﻴﻤﻜﻥ ﻤﺤﻭ ﻜﺎﻤل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺫﺍﻜﺭﺓ ‪ EE-PROM‬ﺨﻼل ﺯﻤﻥ ﺼﻐﻴﺭ ﻤﻥ‬
‫ﺭﺘﺒﺔ ‪ 10‬ﻤﻠﻲ ﺜﺎﻨﻴﺔ‪ .‬ﺇﻥ ﻜﻠﻔﺔ ﺘﺼﻨﻴﻊ ﺫﺍﻜﺭﺓ ‪ EE-PROM‬ﺃﻋﻠﻰ ﻤﻥ ﻜﻠﻔﺔ ﺘﺼﻨﻴﻊ ﺫﺍﻜـﺭﺓ ‪ EPROM‬ﻭﺍﻟـﺫﺍﻜﺭﺓ ﺍﻟﻭﻤـﻀﻴﺔ‬
‫‪.Flash memory‬‬

‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻭﻤﻀﻴﺔ ‪ :Flash Memory‬ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﻨﺴﺨﺔ ﻤﻌﺩﻟﺔ ﻋﻥ ‪ EE-PROM‬ﻭﻫﻲ ﺃﻜﺜﺭ ﺍﻨﺘـﺸﺎﺭﹰﺍ ﻤﻨﻬـﺎ‪ .‬ﻴﻜﻤـﻥ‬ ‫‪16‬‬

‫ﺍﻻﺨﺘﻼﻑ ﺍﻟﺭﺌﻴﺱ ﺒﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻭﻤﻀﻴﺔ ﻭ ‪ EE-PROM‬ﻓﻲ ﺇﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﺤﻭ‪ :‬ﻴﻤﻜﻥ ﻓﻲ ‪ EE-PROM‬ﻤﺤﻭ ﺴـﺠل ﻭﺍﺤـﺩ‬
‫ﺒﻴﻨﻤﺎ ﻴﺠﺭﻱ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﻭﻤﻀﻴﺔ ﻤﺤﻭ ﻜﺎﻤل ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﻜﺘﻠﺔ ‪ block‬ﻤﻨﻬﺎ‪ .‬ﻴﻤﻜﻥ ﻤﺤﻭ ﻭﺒﺭﻤﺠﺔ ﻫﺫﻩ ﺍﻟـﺫﺍﻜﺭﺓ ﻋﻠـﻰ ﺍﻷﻗـل‬
‫ﻤﻠﻴﻭﻥ ﻤﺭﺓ‪ ،‬ﻭﻫﻲ ﺘﻨﺎﺴﺏ ﺍﻟﻨﻅﻡ ﺫﺍﺕ ﺍﻻﺴﺘﻬﻼﻙ ﺍﻟﻤﻨﺨﻔﺽ ﻟﻼﺴﺘﻁﺎﻋﺔ ﻟﻜﻭﻨﻬﺎ ﺘﺒﺭﻤﺞ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻓﻠﻁﻴﺔ ﻤﻨﺨﻔﻀﺔ‪ 1.8 ،‬ﻓﻭﻟﻁ‪.‬‬

‫‪9‬‬
‫ﺘﻭﺍﺠﻪ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪88088/8086‬‬
‫ﻋﻨﺩ ﺘﻭﺍﺠﻪ ﺃﻭ ﺭﺒﻁ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻴﺠﺏ ﻭﺼل‪:‬‬
‫ƒ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ƒ ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ‬ ‫‪RD‬‬ ‫ﻟﻠﺫﻭﺍﻜﺭ ﻤﻊ ﺇﺸﺎﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ‬ ‫‪OE‬‬ ‫ƒ ﻤ‪‬ﺩﺨل ﺘﺄﻫﻴل ﻤﺨﺭﺝ ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫ﻟﻠﻤﻌﺎﻟﺞ )ﻓﻲ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺤﻴﺔ ﻓﻘﻁ(‬ ‫‪WR‬‬ ‫ﻟﻠﺫﺍﻜﺭﺓ ﻤﻊ ﺇﺸﺎﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ‬ ‫‪WR‬‬ ‫ƒ ﻤ‪‬ﺩﺨل ﺍﻟﻜﺘﺎﺒﺔ‬
‫ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻤﺎ ﺴﺒﻕ‪ ،‬ﻴﺠﺏ ﺍﺴﺘﺨﺩﺍﻡ ﺇﺸﺎﺭﺓ ﺍﻟﺘﺤﻜﻡ ‪ ، M/ IO‬ﺍﻟﺘﻲ ﺘﺨﺘﺎﺭ ﺒﻴﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻓـﻀﺎﺀ‬
‫ﺍﻟﺒﻭﺍﺒﺎﺕ‪ ،‬ﻤﻊ ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺒﺎﻗﻴﺔ ﻏﻴﺭ ﺍﻟﻤﻭﺼﻭﻟﺔ ﻤﺒﺎﺸﺭﺓ ﻤﻊ ﺍﻟـﺫﻭﺍﻜﺭ‪ ،‬ﻟﻔـﻙ ﺘﺭﻤﻴـﺯ‬
‫ﺍﻟﻌﻨﺎﻭﻴﻥ ﻭﺍﻨﺘﺨﺎﺏ ﺭﻗﺎﻗﺎﺕ ﺍﻟﺫﻭﺍﻜﺭ ﻋﻠﻰ ﻨﺤﻭ ﻭﺤﻴﺩ‪.‬‬
‫ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻋﻠﻰ ‪ 20‬ﺨﻁ ﻋﻨﻭﻨﺔ‪ ،‬ﻤﻥ ﺒﻴـﻨﻬﻡ ‪ 16‬ﺨـﻁ‬
‫ﻤﺸﺘﺭﻙ ﻤﻊ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﹸﺘﺴﻤﻰ ‪ .AD0-AD15‬ﻜﻤﺎ ﺘﺸﺘﺭﻙ ﺃﻴﻀ ﹰﺎ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪A16-A19‬‬
‫ﻤﻊ ﺇﺸﺎﺭﺍﺕ ﺍﻟﺤﺎﻟﺔ ‪ S3-S6‬ﻋﻠﻰ ﺍﻟﻤﻐﺎﺭﺯ ﻨﻔﺴﻬﺎ‪ .‬ﻭﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﺃﻴﻀﹰﺎ ﻋﻠـﻰ ﺍﻹﺸـﺎﺭﺓ‬
‫ﺍﻟﺘﻲ ﹸﺘﺴﺘﺨﺩﻡ ﻻﻨﺘﺨﺎﺏ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻔﺭﺩﻴﺔ‪.‬‬ ‫‪BHE‬‬

‫‪Power Supply‬‬
‫‪VCC GND‬‬

‫‪INT‬‬
‫‪AD0-AD15, A16/S3-A19/S6‬‬
‫‪Interrupt‬‬ ‫‪INTA‬‬
‫‪ALE‬‬
‫‪Interface‬‬ ‫‪TEST‬‬
‫‪BHE/S7‬‬
‫‪NMI‬‬
‫‪8086‬‬ ‫‪M/IO‬‬
‫‪RESET‬‬
‫‪HOLD‬‬
‫‪MPU‬‬ ‫‪DT/R‬‬ ‫ﺍﻟﺬﻭﺍﻛﺮ‬
‫‪DMA‬‬
‫‪RD‬‬
‫‪Interface HLDA‬‬
‫‪WR‬‬
‫‪VCC‬‬ ‫‪DEN‬‬
‫‪Mode Select MN/MX‬‬ ‫‪READY‬‬

‫‪CLK‬‬

‫ﻴﻜﻤﻥ ﺍﻟﻔﺭﻕ ﺍﻟﺭﺌﻴﺱ ﺒﻴﻥ ﻤﻐﺎﺭﺯ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻭ ‪ 8086‬ﻓﻲ ﻤﺎ ﻴﻠﻲ‪:‬‬


‫ƒ ﻋﺩﺩ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻴﺴﺎﻭﻱ ‪ 8‬ﺒﺕ‬
‫‪BHE‬‬ ‫ƒ ﻻ ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻋﻠﻰ ﺍﻹﺸﺎﺭﺓ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﺍﻹﺸﺎﺭﺓ ‪ IO/ M‬ﻋﻭﻀ ﹰﺎ ﻋﻥ ﺍﻹﺸﺎﺭﺓ ‪ M/ IO‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪8086‬‬ ‫ƒ‬

‫‪10‬‬
‫ﺩﻭﺭﺓ ﺁﻟﺔ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬
‫‪‬ﻴﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺩﻭﺭﺓ ﺁﻟﺔ ‪ Bus Cycle‬ﺃﻭ ﺩﻭﺭﺓ ﻤﺴﺭﻯ ﻓﻲ ﻜل ﻋﻤﻠﻴﺔ ﺘﺒﺎﺩل ﻤﻌﻁﻴـﺎﺕ‬
‫ﻤﻊ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‪ .‬ﻴﻭﻟﺩ ﺍﻟﻤﻌﺎﻟﺞ ﺨﻼل ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﺘﺘﺎﺒﻌﹰﺎ ﻤـﻥ ﺍﻹﺸـﺎﺭﺍﺕ ﺘـﺘﺤﻜﻡ ﺒﻌﻤـل‬
‫ﺍﻟﻤﺴﺭﻯ ﻭﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﺩﻭﺭﺓ ﻗﺭﺍﺀﺓ ﺃﻭ ﺩﻭﺭﺓ ﻜﺘﺎﺒﺔ‪ ،‬ﻭﺘﺘﻜـﻭﻥ‬
‫ﻜل ﺩﻭﺭﺓ ﺁﻟﺔ ﻤﻥ ﺃﺭﺒﻊ ﺃﺩﻭﺍﺭ ﺴﺎﻋﺔ )ﺃﻭ ﺤﺎﻻﺕ(‪ ،‬ﻋﻠﻰ ﺍﻷﻗل‪ ،‬ﺘﺴﻤﻰ ‪ T3 ،T2 ،T1‬ﻭ ‪.T4‬‬

‫ﺩﻭﺭﺓ ﻜﺘﺎﺒﺔ‬
‫ﻴﻀﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪-‬ﺨﻼل ﺩﻭﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ‪ -‬ﻋﻨﻭﺍﻥ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪ ،‬ﻭﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤ‪‬ﺭﺍﺩ‬
‫ﻭ ‪‬ﻴﺨﺘـﺎﺭ‬ ‫‪WR‬‬ ‫ﻜﺘﺎﺒﺘﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻭﻴ‪‬ﺨﺭﺝ ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ﻋﻠـﻰ ﺍﻟﻤﺨـﺭﺝ‬
‫)ﻓﻲ ﻤﻌﺎﻟﺠﺎﺕ ‪ .(8086‬ﻴﺒـﻴﻥ‬ ‫‪ (8088‬ﻭ ‪M/ IO = 1‬‬ ‫)ﻓﻲ ﻤﻌﺎﻟﺠﺎﺕ‬ ‫ﺒﺠﻌل ‪IO/ M = 0‬‬ ‫ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‬
‫ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺨﻁﻁﹰﺎ ﺯﻤﻨﻴﹰﺎ ﻤﺒﺴﻁﹰﺎ ﻟﺩﻭﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬

‫ﺩﻭﺭﺓ ﻗﺭﺍﺀﺓ‬
‫ﻴﻀﻊ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺨﻼل ﺩﻭﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ‪ ،‬ﻋﻨﻭﺍﻥ ﺍﻟﻤﻭﻗﻊ ﺍﻟﻤ‪‬ﺭﺍﺩ ﻗﺭﺍﺀﺘﻪ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪ ،‬ﺜﻡ ﻴ‪‬ﻨـﺘﺞ‬
‫ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ﻋﻠﻰ ﺍﻟﻤﺨﺭﺝ ‪ ، RD‬ﻭﺃﺨﻴﺭﹰﺍ ﻴﻘﺭﺃ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﺘـﻀﻌﻬﺎ ﺍﻟـﺫﺍﻜﺭﺓ ﻋﻠـﻰ ﺨﻁـﻭﻁ‬
‫‪ (8088‬ﻭ ‪M/ IO = 1‬‬ ‫)ﻓﻲ ﻤﻌﺎﻟﺠﺎﺕ‬ ‫ﺒﺠﻌل ‪IO/ M = 0‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻭﻫﻨﺎ ﺃﻴﻀﹰﺎ‪ ،‬ﻴ‪‬ﺨﺘﺎﺭ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‬
‫)ﻓﻲ ﻤﻌﺎﻟﺠﺎﺕ ‪ .(8086‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺨﻁﻁﹰﺎ ﺯﻤﻨﻴﹰﺎ ﻤﺒﺴﻁﹰﺎ ﻟﺩﻭﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪:‬‬

‫‪11‬‬
‫ﻋﻨﺩ ﻤﺎ ﺘﻜﻭﻥ ﺴﺭﻋﺔ ﻋﻤل ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﺍﻟﺘﻲ ﻴﺘﺒﺎﺩل ﺍﻟﻤﻌﺎﻟﺞ ﻤﻌﻬﺎ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﺃﻗل ﻤﻥ ﺴـﺭﻋﺔ ﻋﻤـل‬
‫ﺝ ﺩﻭﺭﺍﺕ ﺴـﺎﻋﺔ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﺘﻁﻠﺏ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺒﻭﻀﻊ ‪ 0‬ﻋﻠـﻰ ﺍﻟﻤـﺩﺨل ‪ ،READY‬ﺇﺩﺭﺍ ‪‬‬
‫ﺇﻀﺎﻓﻴﺔ ﺒﻌﺩ ﺍﻟﺤﺎﻟﺔ ‪ ،T3‬ﺘﹸﺴﻤﻰ ﻫﺫﻩ ﺍﻟﺩﻭﺭﺍﺕ ﺒﺤﺎﻻﺕ ﺍﻨﺘﻅﺎﺭ ‪.wait state‬‬
‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘـﻲ‪ :‬ﺒﻔﺭﺽ ﺃﻥ ﺘﺭﺩﺩ ﺴﺎﻋﺔ ﺍﻟﻤﻌﺎﻟﺞ ﻫﻲ ‪ 5‬ﻤﻴﻐﺎﻫﺭﺘﺯ‪ ،‬ﻓﻤﺎ ﻫﻭ ﺍﻟﺯﻤﻥ ﺍﻷﺼﻐﺭﻱ ﻟـﺩﻭﺭ‬
‫ﺁﻟﺔ؟‬
‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﺘﺤﺘﺎﺝ ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﺃﺭﺒﻊ ﺃﺩﻭﺍﺭ ﺴﺎﻋﺔ ﻋﻠﻰ ﺍﻷﻗـل‪ ،‬ﻭﺒﻤـﺎ ﺃﻥ ﺘـﺭﺩﺩ ﻋﻤـل ﺍﻟﻤﻌـﺎﻟﺞ ‪5‬‬
‫‪1‬‬
‫= ‪ ، T‬ﻭﻤﻨﻪ ﻓﺈﻥ ﺃﺼﻐﺭ ﺯﻤﻥ ﺩﻭﺭﺓ ﺍﻵﻟـﺔ‬ ‫‪= 200 ns‬‬ ‫ﻤﻴﻐﺎﻫﺭﺘﺯ ﻓﺈﻥ ﺩﻭﺭ ﺍﻟﺴﺎﻋﺔ ﻴﺴﺎﻭﻱ‬
‫‪5000000‬‬
‫ﻫﻭ ‪ 4 × 200ns‬ﻭﻫﻭ ﻴﺴﺎﻭﻱ ‪ 800‬ﻨﺎﻨﻭﺜﺎﻨﻴﺔ‪.‬‬

‫ﻓﺼل ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻋﻥ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ‬


‫ﺇﻥ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ D0-D15‬ﻭﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨـﺔ ‪ ،A0-A15‬ﻓـﻲ ﺍﻟﻤﻌـﺎﻟﺞ ‪ ،8086‬ﻤـﻀﻤﻤﺔ‬
‫‪ multiplexed‬ﻋﻠﻰ ﺍﻟﺨﻁﻭﻁ ﻨﻔﺴﻬﺎ‪ ،‬ﻭﻜﺫﻟﻙ ﻓﺈﻥ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A16-A19‬ﻭ ﺨﻁﻭﻁ ﺍﻟﺤﺎﻟﺔ ‪S3-‬‬
‫ﻭ ‪ S7‬ﻤﻀﻤﻤﺔ ﻋﻠﻰ ﺍﻟﺨﻁ ﻨﻔﺴﻪ‪.‬‬ ‫‪BHE‬‬ ‫‪ S6‬ﻤﻀﻤﻤﺔ ﻋﻠﻰ ﺍﻟﺨﻁﻭﻁ ﻨﻔﺴﻬﺎ‪ ،‬ﻭﺃﻴﻀﹰﺎ‬
‫‪‬ﻴﻀﻊ ﺍﻟﻤﻌـﺎﻟﺞ ﻋﻨـﻭﺍﻥ ﻤﻭﻗـﻊ ﺍﻟـﺫﺍﻜﺭﺓ ﺃﻭ ﻋﻨـﻭﺍﻥ ﺒﻭﺍﺒـﺔ ﺩﺨـل‪/‬ﺨـﺭﺝ ﻋﻠـﻰ ﺍﻟﺨﻁـﻭﻁ‬
‫ﻓﻘﻁ ﺨﻼل ﺍﻟﺤﺎﻟﺔ ‪ 1‬ﻤﻥ ﺩﻭﺭﺓ ﺍﻵﻟﺔ‪ ،‬ﻭﻟﻜﻥ ﺒﻤﺎ‬ ‫‪ AD19/S6-AD16/S3 ،AD0-AD15‬ﻭ ‪BHE/S7‬‬

‫ﺃﻥ ﺃﻏﻠﺏ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺘﺘﻁﻠﺏ ﻭﺠﻭﺩ ﺍﻟﻌﻨﻭﺍﻥ ﻋﻠﻰ ﻤﺩﺍﺨﻠﻬﺎ ﺨﻼل ﻜﺎﻤل ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﻓﺈﻨﻪ ﻴﺠـﺏ ﻓـﻙ‬
‫ﺘﻀﻤﻴﻡ ﻫﺫﻩ ﺍﻟﺨﻁﻭﻁ‪ ،‬ﻭﺫﻟﻙ ﺒﻤﺴﻙ ‪ latch‬ﺍﻟﻌﻨﻭﺍﻥ ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﺨﻁﻭﻁ ﺨﻼل ﺍﻟﺤﺎﻟـﺔ ‪ .T1‬ﻴﻤﻜـﻥ‬
‫ﻤﺴﻙ ﺍﻟﻌﻨﻭﺍﻥ ﺒﺎﻟﺘﺯﺍﻤﻥ ﻤﻊ ﺍﻟﺠﺒﻬﺔ ﺍﻟﻬﺎﺒﻁﺔ ﻹﺸﺎﺭﺓ ﺍﻟﺘﺤﻜﻡ ‪ ALE‬ﺍﻟﺘﻲ ﻴﻨﺘﺠﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﺨﻼل ‪.T1‬‬
‫ﻴ‪‬ﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﻡ ﺍﻟﺭﻗﺎﻗﺔ ‪ 74373‬ﻟﻌﺯل ﻭﻤﺴﻙ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓـﻲ ﺍﻟـﺸﻜل ﺍﻟﺘـﺎﻟﻲ‪.‬‬

‫‪12‬‬
‫ﺘﺴﺘﻁﻴﻊ ﺍﻟﺭﻗﺎﻗﺔ ‪ 74373‬ﻤﺴﻙ ﻜﻠﻤﺔ ﻤﻥ ‪ 8‬ﺒﺕ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻓﺈﻨﻨﺎ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ‪ 3‬ﺭﻗﺎﻗﺎﺕ ﻤﻥ ‪74373‬‬
‫ﻟﻤﺴﻙ ﻜﺎﻤل ﺍﻟﻌﻨﻭﺍﻥ ‪ A0-A19‬ﻭ ‪. BHE‬‬

‫ﺧﻄﻮﻁ ﺍﻟﻌﻨﻮﻧﺔ‬
‫ﺍﳌﻤﺴﻮﻛﺔ ﺃﻭ ﺍﳌﻌﺰﻭﻟﺔ‬

‫ﺇﻥ ﻋﺭﺽ ﻜﻠﻤﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﺘﺴﺎﻭﻱ ‪ 8‬ﺒﺕ‪ ،‬ﻭﺒﺎﻟﺘـﺎﻟﻲ ﺘﻜـﻭﻥ ﺨﻁـﻭﻁ ﺍﻟﻌﻨﻭﻨـﺔ‬
‫‪ AD0-AD7‬ﻭ‪ AD16/S3-AD19/S6‬ﻤﻀﻤﻤﺔ ﻓﻘﻁ‪ ،‬ﻻ ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌـﺎﻟﺞ ‪ 8088‬ﻋﻠـﻰ ﺇﺸـﺎﺭﺓ‬
‫‪ . BHE‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻨﺤﺘﺎﺝ‪ ،‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088‬ﻓﻘﻁ ﺇﻟﻰ ﺭﻗﺎﻗﺘﻴﻥ ﻤﻥ ‪ 74373‬ﻟﻤﺴﻙ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬

‫ﺧﻄﻮﻁ ﺍﻟﻌﻨﻮﻧﺔ‬
‫ﺍﳌﻤﺴﻮﻛﺔ ﺃﻭ ﺍﳌﻌﺰﻭﻟﺔ‬

‫‪13‬‬
‫ﻓﻙ ﺘﺭﻤﻴﺯ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪Address Decoding‬‬
‫ﻤﻥ ﺍﻟﻀﺭﻭﺭﻱ‪ ،‬ﻓﻲ ﺃﻱ ﻨﻅﺎﻡ ﺼﻐﺭﻱ‪ ،‬ﻓﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻤ‪‬ﺭﺴﻠﺔ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟﻰ ﺍﻟﺘﺠﻬﻴـﺯﺍﺕ‬
‫ﺍﻟﻤﺤﻴﻁﻴﺔ‪ ،‬ﻤﺜل ﺍﻟﺫﻭﺍﻜﺭ‪ .‬ﹶﺘﺴﻤﺢ ﻋﻤﻠﻴﺔ ﻓﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﺨﺘﻴﺎﺭ ﺇﺤﺩﻯ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ ﻓﻘﻁ‬
‫ﻓﻲ ﻋﻤﻠﻴﺔ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻻ ﻨﺴﺘﻁﻴﻊ‪ ،‬ﺇﻥ ﻟﻡ ﻨﺴﺘﺨﺩﻡ ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺘﺭﻤﻴـﺯ ﺍﻟﻌﻨـﺎﻭﻴﻥ‬
‫‪ ،address decoder‬ﺇﻻ ﺭﺒﻁ ﺘﺠﻬﻴﺯﺓ ﻭﺍﺤﺩﺓ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻤﻤﺎ ﻴ‪‬ﺤﺩ ﻤﻥ ﻓﺎﺌﺩﺓ ﻭﺃﺩﺍﺀ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﺘﻤﺘﻠﻙ ﺭﻗﺎﻗﺔ ﺍﻟﺫﺍﻜﺭﺓ ‪ 11، 2716‬ﺨﻁ ﻋﻨﻭﻨﺔ‪ ،‬ﻓﻲ ﺤﻴﻥ ﺘﻤﺘﻠﻙ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ‬
‫‪ 16‬ﺨﻁ ﻋﻨﻭﻨﺔ ﻋﻠﻰ ﺍﻷﻗل‪ .‬ﻴﻤﺘﻠﻙ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8085‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ 16 ،‬ﺨﻁ ﻋﻨﻭﻨﺔ ﺒﻴﻨﻤﺎ ﻴﻤﺘﻠـﻙ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ‪ 20 ،8088/8086‬ﺨﻁﹰﺎ‪ .‬ﺇﺫﺍ ﺭﺒﻁﻨﺎ ﺍﻟﺫﺍﻜﺭﺓ ‪ 2716‬ﻤﺒﺎﺸﺭﺓ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻓﺈﻨﻨﺎ‬
‫ﻨﻭﺼل ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ‪ 2716‬ﺍﻟـ ‪ 11‬ﻤﻊ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺩﻨﻴﺎ ﻟﻠﻤﻌﺎﻟﺞ‪ ،A0-A10 ،‬ﻓﻤـﺎﺫﺍ‬
‫ﻨﻔﻌل ﺒﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺒﺎﻗﻴﺔ ‪A11-A20‬؟ ﹶﻨﻔﻙ ﺘﺭﻤﻴﺯ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺒﺎﻗﻴﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻤﻔﻜـﻙ‬
‫ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ‪ ،‬ﻤﻤﺎ ﻴﺴﻤﺢ ﻟﻨﺎ ﺒﻭﺼل ﺃﻜﺜﺭ ﻤﻥ ﺭﻗﺎﻗﺔ ﺫﺍﻜﺭﺓ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻭﻋﻨﻭﻨﺔ ﺃﻱ ﻤﻭﻗـﻊ ﻤـﻥ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﻨﻭﺍﻥ ﻭﺤﻴﺩ‪.‬‬

‫ﻓﻙ ﺍﻟﺘﺭﻤﻴﺯ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ‪:NAND‬‬


‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻤﺜﺎل ﻋﻠﻰ ﻜﻴﻔﻴﺔ ﻭﺼل ﺍﻟﺫﺍﻜﺭﺓ ‪ 2716‬ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻤﻔﻜﻙ‬
‫ﺍﻟﻌﻨﻭﻨﺔ ‪ .NAND‬ﺇﻥ ﺴﻌﺔ ﺍﻟﺫﺍﻜﺭﺓ ‪ 2716‬ﻫﻲ ‪ 2K‬ﺒﺎﻴﺕ‪ ،‬ﻭﺘﻤﺘﻠﻙ ﺒﺎﻟﺘﺎﻟﻲ ‪ 11‬ﺨﻁ ﻋﻨﻭﻨﺔ ‪.A0-A10‬‬
‫ﹸﻨﻭﺼل ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻟﻠﺫﺍﻜﺭﺓ ‪ A0-A10‬ﻤﻊ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﻘﺎﺒﻠـﺔ ﻓـﻲ ﺍﻟﻤﻌـﺎﻟﺞ ‪.A0-A10‬‬
‫ﻭﻨﻤﺭﺭ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺒﺎﻗﻴﺔ ‪ ،A11-A20‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜـﺎل‪ ،‬ﺇﻟـﻰ ﺒﻭﺍﺒـﺔ ‪،74ALS133 NAND‬‬
‫ﻟﻠﺫﺍﻜﺭﺓ‪ .‬ﺠﺭﻯ ﺃﻴﻀﹰﺎ ﺘﻤﺭﻴﺭ ﺇﺸﺎﺭﺓ ﺍﻟـﺘﺤﻜﻡ ‪، IO/ M‬‬ ‫‪CS‬‬ ‫ﻭﻨﻭﺼل ﻤﺨﺭﺝ ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺔ ﺇﻟﻰ ﺍﻟﻤ‪‬ﺩﺨل‬
‫ﺒﻴﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬ ‫ﺘﺨﺘﺎﺭ ‪IO/ M‬‬ ‫ﺇﻟﻰ ﺍﻟﺒﻭﺍﺒﺔ ﻨﻔﺴﻬﺎ؛‬

‫‪A0-A10‬‬

‫‪14‬‬
‫ﻴﺠﺭﻱ ﺍﻨﺘﺨﺎﺏ ﺍﻟﺩﺍﺭﺓ ‪ 2716‬ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻤ‪‬ﺨﺭﺝ ﺍﻟﺩﺍﺭﺓ ‪ NAND‬ﻤ‪‬ﺴﺎﻭﻴﹰﺎ ‪ ،0‬ﻭﻴﺘﺤﻘﻕ ﺫﻟﻙ ﻋﻨـﺩﻤﺎ‬
‫ﺘﻜﻭﻥ ﺠﻤﻴﻊ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A11-A19‬ﺘﺴﺎﻭﻱ ‪ 1‬ﻤﻨﻁﻘﻲ ﻭ ‪ ، IO/M = 0‬ﺒﻘﻁﻊ ﺍﻟﻨﻅﺭ ﻋـﻥ ﺤﺎﻟـﺔ‬
‫ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ .A0-A10‬ﹶﺘﻨﺘﺨﺏ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A11-A19‬ﺭﻗﺎﻗﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻴﻨﻤﺎ ﺘﻨﺘﺨﺏ ﺍﻟﺨﻁﻭﻁ‬
‫‪ A0-A10‬ﺃﺤﺩ ﺍﻟﻤﻭﺍﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻤﻤﺎ ﻴﺅﺩﻱ ﺇﻟﻰ ﻋﻨﻭﻨﺔ ﻜل ﻤﻭﻗﻊ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺒﻌﻨـﻭﺍﻥ ﻭﺤﻴـﺩ‪.‬‬
‫ﺘﹸﻌﺭﻑ ﻁﺭﻴﻘﺔ ﺍﻟﻌﻨﻭﻨﺔ ﻫﺫﻩ ﺒﺎﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﻁﻠﻘﺔ ‪.absolute addressing‬‬
‫ﻭﺒﺎﻟﻨﺘﻴﺠﺔ ﺘﺤﺘل ﺍﻟﺫﺍﻜﺭﺓ ‪ 2726‬ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﻤـﻥ ‪) 11111111100000000000‬ﺃﻭ ‪(FF800h‬‬
‫ﺇﻟﻰ ‪) 11111111111111111111‬ﺃﻭ ‪ .(FFFFFh‬ﻴ ‪‬ﻤ ِﺜل ﺍﻟﻌﻨﻭﺍﻥ ‪ FF800h‬ﺍﻟﻌﻨـﻭﺍﻥ ﺍﻟﻘﺎﻋـﺩﻱ‬
‫ﻟﻠﺫﺍﻜﺭﺓ ﻭﻫﻭ ﻋﻨﻭﺍﻥ ﺃﻭل ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﻨﺎﺩﺭﹰﺍ ﻤﺎ ﻨﺴﺘﺨﺩﻡ ﻋﻤﻠﻴﹰﺎ ﺒﻭﺍﺒﺎﺕ ‪ NAND‬ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ‪ ،‬ﻷﻨﻨﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺒﺤﺎﺠـﺔ ﺇﻟـﻰ‬
‫ﺒﻭﺍﺒﺔ ‪ NAND‬ﻟﻜل ﺭﻗﺎﻗﺔ ﺫﺍﻜﺭﺓ‪ .‬ﻨﺴﺘﺨﺩﻡ‪ ،‬ﻋﺎﺩﺓ‪ ،‬ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨـﺎﻭﻴﻥ ﻤﺜـل ‪74LS138‬‬
‫ﻋﻭﻀﹰﺎ ﻋﻥ ﺒﻭﺍﺒﺎﺕ ‪.NAND‬‬
‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺒﻔﺭﺽ ﺃﻨﻨﺎ ﻨﺭﻴﺩ ﺘﻌﺩﻴل ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻟﻠﺫﺍﻜﺭﺓ ‪ 2716‬ﻟﻴﺼﺒﺢ ﺒﺩﺀﹰﺍ ﻤـﻥ ﺍﻟﻌﻨـﻭﺍﻥ‬
‫‪ F0000h‬ﻤﺎ ﻫﻭ ﺍﻟﺘﻌﺩﻴل ﺍﻟﻭﺍﺠﺏ ﺇﺠﺭﺍﺅﻩ ﻋﻠﻰ ﺍﻟﺩﺍﺭﺓ ﺍﻟﺴﺎﺒﻘﺔ؟‬
‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﻴﺠﺏ ﻋﻜﺱ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A11-A15‬ﻗﺒل ﻭﺼﻠﻬﺎ ﺇﻟﻰ ﺩﺍﺭﺓ ﺍﻟـ ‪.NAND‬‬

‫ﻓﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ‬


‫ﺇﻥ ﺃﻜﺜﺭ ﺍﻟﺩﺍﺭﺍﺕ ﺍﺴﺘﺨﺩﺍﻤ ﹰﺎ ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﻓﻲ ﻨﻅﻡ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻫﻲ ﺍﻟﺭﻗﺎﻗﺔ ‪ ،74LS138‬ﻤﻥ ‪3‬‬
‫ﺇﻟﻰ ‪ .8‬ﻴﻭﻀﺢ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺩﺍﺨل ﻭﻤﺨﺎﺭﺝ ﻫﺫﻩ ﺍﻟﺩﺍﺭﺓ‪.‬‬

‫ﻣﺪﺍﺧﻞ ﺍﻧﺘﺨﺎﺏ‬

‫ﳐﺎﺭﺝ‬

‫ﻣﺪﺍﺧﻞ ﺗﺄﻫﻴﻞ‬

‫)‪(G2A, G2B, G1‬‬ ‫ﺘﺤﺘﻭﻱ ﻫﺫﻩ ﺍﻟﺩﺍﺭﺓ ﻋﻠﻰ ﺜﻼﺙ ﻤﺩﺍﺨل ‪ B ،A‬ﻭ ‪ C‬ﻋﻨﻭﻨﺔ ﻭﺜﻼﺙ ﻤﺩﺍﺨل ﺘﺤﻜـﻡ‬
‫‪17‬‬
‫ﻟﻠﺩﺍﺭﺓ ‪74LS138‬‬ ‫ﻭﺜﻤﺎﻨﻲ ﻤﺨﺎﺭﺝ‪ .‬ﺘﹸﻔﻌل ﺍﻟﻘﻴﻡ ﻋﻠﻰ ﺍﻟﻤﺩﺍﺨل ‪ B ،A‬ﻭ ‪ C‬ﺃﺤﺩ ﺍﻟﻤﺨﺎﺭﺝ ﺍﻟﺜﻤﺎﻨﻴﺔ‬
‫ﻋﻨـﺩﻤﺎ ‪G2A = G2B = 0‬‬ ‫ﻓﻌﺎﻟـﺔ؛ ﺃﻱ‬ ‫)‪(G2A, G2B, G1‬‬ ‫ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﺠﻤﻴـﻊ ﻤـﺩﺍﺨل ﺍﻟـﺘﺤﻜﻡ‬

‫ﺘﺠﻌﻠﻪ ﻴﺴﺎﻭﻱ ‪ 0‬ﻤﻨﻁﻘﻲ‬ ‫‪17‬‬

‫‪15‬‬
‫ﻭ ‪. G1 = 1‬‬
‫ﻻ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ‪ A=B=1‬ﻭ ‪ ،C=0‬ﺍﻨﻅﺭ ﺠـﺩﻭل ﺍﻟﺤﻘﻴﻘـﺔ‬
‫ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﻴﻜﻭﻥ ﺍﻟﻤﺨﺭﺝ ‪ 3‬ﻓﻌﺎ ﹰ‬
‫ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫ﻴﻤﻜﻥ ﺃﻴﻀﹰﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ‪ 74LS139‬ﻓﻲ ﻓﻙ ﻋﻨﻭﻨﺔ ﺍﻟﺫﻭﺍﻜﺭ‪ .‬ﺘﺘﺄﻟﻑ ﻫـﺫﻩ‬
‫ﺍﻟﺭﻗﺎﻗﺔ ﻤﻥ ﺩﺍﺭﺘﻲ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﻜل ﻤﻨﻬﺎ ﻤﻥ ‪ 2‬ﺇﻟﻰ ‪ ،4‬ﻭﺘﻤﺘﻠﻙ ﻜل ﻤﻨﻬﺎ ﺃﻴـﻀﹰﺎ ﻤـﺩﺨل‬
‫ﺘﺄﻫﻴل ﺨﺎﺹ ﺒﻬﺎ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻣﺪﺍﺧﻞ ﺍﻧﺘﺨﺎﺏ‬
‫ﳐﺎﺭﺝ‬
‫ﻣﺪﺧﻞ ﺗﺄﻫﻴﻞ‬
‫ﻣﺪﺍﺧﻞ ﺍﻧﺘﺨﺎﺏ‬
‫ﳐﺎﺭﺝ‬
‫ﻣﺪﺧﻞ ﺗﺄﻫﻴﻞ‬

‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺠﺩﻭل ﺍﻟﺤﻘﻴﻘﺔ ﻟﻜل ﻤﻥ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﻓﻲ ﺍﻟﺭﻗﺎﻗﺔ ‪:74LS139‬‬

‫‪16‬‬
‫ﻤﺜﺎل‪ :‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻁﺭﻴﻘﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻤﻔﻙ ﺍﻟﺘﺭﻤﻴﺯ ‪ 74LS138‬ﻟﻌﻨﻭﻨﺔ ﺜﻤﺎﻨﻲ ﺫﻭﺍﻜﺭ ﻤـﻥ‬
‫ﻁﺭﺍﺯ ‪-8) 2764‬ﻜﻴﻠﻭﺒﺎﻴﺕ(‪ .‬ﹶﺘﻨﺘﺨﺏ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A13-A15‬ﺇﺤﺩﻯ ﺭﻗﺎﻗﺎﺕ ﺍﻟـﺫﻭﺍﻜﺭ ﻋﻨـﺩﻤﺎ‬
‫ﺘﻜﻭﻥ ﺍﻟﺩﺍﺭﺓ ‪ 74LS138‬ﻓﻌ‪‬ﺎﻟﺔ؛ ﺃﻱ ﻋﻨﺩﻤﺎ ﺘﺴﺎﻭﻱ ﺠﻤﻴـﻊ ﺨﻁـﻭﻁ ﺍﻟﻌﻨﻭﻨـﺔ ‪ A16-A19‬ﺍﻟﻭﺍﺤـﺩ‬
‫ﻤﻨﻁﻘﻲ‪ .‬ﻴﺠﺭﻱ ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ﺍﻨﺘﺨﺎﺏ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻷﻭﻟﻰ ﻋﻨـﺩﻤﺎ ﻴﻜـﻭﻥ ‪،A13=A14=A15=0‬‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻜﻭﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻘﺎﻋﺩﻱ ﻟﻠﺫﺍﻜﺭﺓ ﺍﻷﻭﻟﻰ ﻫﻭ ‪ ،F0000h‬ﻭﺘﺤﺘل ﺍﻟـﺫﺍﻜﺭﺓ ﺍﻷﻭﻟـﻰ ﻓـﻀﺎﺀ‬
‫ﺍﻟﻌﻨﺎﻭﻴﻥ ‪ .F0000h-F1FFFh‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺃﻴﻀﹰﺎ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﺘﺤﺘﻠﻪ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺒﺎﻗﻴﺔ‪.‬‬

‫ﺘﻭﺍﺠﻪ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻤﻊ ﺍﻟﺫﻭﺍﻜﺭ‬


‫ﻓﻲ ﺍﻟﻔﺘﺭﺓ ﺍﻟﺘﻲ ﻅﻬﺭ ﻓﻴﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻜﺎﻥ ﻴﺘﻭﺍﻓﺭ ﻓﻲ ﺍﻷﺴﻭﺍﻕ ﺫﻭﺍﻜﺭ ﻁﻭل ﻜﻠﻤﺘﻬـﺎ ‪ 8‬ﺒـﺕ‪،‬‬
‫ﺼﻤﻤﺕ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﻟﻠﺘﻭﺍﻓﻕ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻷﻗﺩﻡ ﺍﻟﺘﻲ ﻋﺭﺽ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺘﻬﺎ ﺃﻴـﻀﹰﺎ ‪ 8‬ﺒـﺕ‪،‬‬
‫ﻤﺜل ﺍﻟﻤﻌﺎﻟﺞ ‪.8085‬‬
‫ﺇﻥ ﻋﺭﺽ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻫﻭ ‪ 16‬ﺒﺕ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻥ ﻟﻠﻤﻌـﺎﻟﺞ ﺃﻥ ﻴﺘﺒـﺎﺩل‬
‫ﺨﻼل ﺩﻭﺭﺓ ﺁﻟﺔ ﻭﺍﺤﺩﺓ‪ ،‬ﻤﻊ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‪ ،‬ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ﺒﺎﻴﺕ ﺃﻭ ﺒﻁﻭل ‪ 2‬ﺒﺎﻴﺕ‪ .‬ﻭﻟﻜـﻲ‬
‫ﻴﺴﺘﻔﻴﺩ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﺒﻁﻭل ‪ 8‬ﺒﺕ‪ ،‬ﺠﺭﻯ ﺘﻘﺴﻴﻡ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟـﻰ ﻜﺘﻠﺘـﻴﻥ‬
‫‪ ،banks‬ﺤﺠﻡ ﻜل ﻤﻨﻬﻤﺎ ‪ 512‬ﻜﻴﻠﻭﺒﺎﻴﺕ‪ .‬ﺘﻀﻡ ﺇﺤﺩﻯ ﺍﻟﻜﺘل ﺍﻟﻤﻭﺍﻗﻊ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻔﺭﺩﻴﺔ ﺒﻴﻨﻤـﺎ‬
‫ﺘﻀﻡ ﺍﻟﻜﺘﻠﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺍﻟﻤﻭﺍﻗﻊ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺯﻭﺠﻴﺔ‪ .‬ﺘﹸﻭﺼ‪‬ل ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻜﺘﻠﺔ ﺍﻟﻔﺭﺩﻴـﺔ ﺇﻟـﻰ‬
‫ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ D0-D7‬ﻭﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻜﺘﻠﺔ ﺍﻟﺯﻭﺠﻴﺔ ﺇﻟﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ D8-D15‬ﻤﻥ‬

‫‪17‬‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﻔﺮﺩﻳﺔ‬ ‫ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺰﻭﺟﻴﺔ‬

‫‪BHE‬‬

‫ﻴﺠﺭﻱ ﺍﻨﺘﺨﺎﺏ ﺃﻱ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻓﻲ ﺇﺤﺩﻯ ﺍﻟﻜﺘﻠﺘﻴﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺨﻁـﻭﻁ ﺍﻟﻌﻨﻭﻨـﺔ ‪ ،A1-D19‬ﺒﻴﻨﻤـﺎ‬
‫ﻴﺠﺭﻱ ﺍﻨﺘﺨﺎﺏ ﺍﻟﻜﺘﻠﺔ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻔﺭﺩﻴﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪ ،A0‬ﻭﺍﻟﺯﻭﺠﻴﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪. BHE‬‬
‫ﻋﻨﺩﻤﺎ ﻴﺘﺒﺎﺩل ﺍﻟﻤﻌﺎﻟﺞ ﺒﺎﻴﺘﹰﺎ ﻤﻊ ﻤﻭﻗﻊ ﺯﻭﺠﻲ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻓﺈﻨﻪ ﻴﺠﻌل ‪ A0 =0‬ﻭ ‪ ، BHE = 1‬ﻻﻨﺘﺨﺎﺏ‬
‫ﺍﻟﻜﺘﻠﺔ ﺍﻟﺯﻭﺠﻴﺔ‪ .‬ﻭﻋﻨﺩﻤﺎ ﻴﺭﻴﺩ ﺍﻟﻤﻌﺎﻟﺞ ﺘﺒﺎﺩل ﺒﺎﻴﺕ ﻤﻊ ﻤﻭﻗﻊ ﻓﺭﺩﻱ ﻓﺈﻨﻪ ﻴﺠﻌل ‪ A0 =1‬ﻭ ‪، BHE = 0‬‬
‫ﻋﻨﺩﻤﺎ ﻴﺘﺒﺎﺩل ﻜﻠﻤﺔ ﻤﻥ ‪ 2‬ﺒﺎﻴﺕ ﻤﻊ‬ ‫‪ A0 =0‬ﻭ ‪BHE = 0‬‬ ‫ﻻﻨﺘﺨﺎﺏ ﺍﻟﻜﺘﻠﺔ ﺍﻟﻔﺭﺩﻴﺔ‪ .‬ﺒﻴﻨﻤﺎ ﻴﺠﻌل ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻴﺒﺩﺃ ﺒﻌﻨﻭﺍﻥ ﺯﻭﺠﻲ‪ .‬ﻭﻟﻜﻥ ﻋﻨﺩﻤﺎ ﻴﺘﺒﺎﺩل ﺍﻟﻤﻌﺎﻟﺞ ﻜﻠﻤﺔ ﻤﻥ ‪ 2‬ﺒﺎﻴﺕ ﻤﻊ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻴﺒﺩﺃ‬
‫ﺒﻌﻨﻭﺍﻥ ﻓﺭﺩﻱ ﻓﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺒﺎﺩل ﻋﻠﻰ ﻤﺭﺤﻠﺘﻴﻥ‪ ،‬ﻴﺠﺭﻱ ﻓﻲ ﺍﻷﻭﻟﻰ ﺘﺒﺎﺩل ﺍﻟﺒﺎﻴﺕ ﺍﻷﻭﻟـﻰ ﻤـﻥ‬
‫ﺍﻟﻜﻠﻤﺔ ﻤﻊ ﺍﻟﻤﻭﻗﻊ ﺫﻱ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﺭﺩﻱ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻴﺠﺭﻱ ﺘﺒﺎﺩل ﺍﻟﺒﺎﻴﺕ ﺍﻟﺜﺎﻨﻴﺔ ﻤﻥ ﺍﻟﻜﻠﻤﺔ ﻤﻊ ﺍﻟﻤﻭﻗـﻊ‬
‫ﺫﻱ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﺯﻭﺠﻲ‪.‬‬
‫ﺇﻥ ﺠﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺸﻔﺎﻓﺔ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﺒﺭﻤﺞ‪ ،‬ﺤﻴﺙ ﻴﺭﻯ ﺍﻟﻤﺒـﺭﻤﺞ ﻓـﻀﺎﺀ ﺫﺍﻜـﺭﺓ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻜﺘﺘﺎﺒﻊ ﻤﻥ ﺍﻟﺒﺎﻴﺘﺎﺕ ﻋﺩﺩﻫﺎ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ‪ ،‬ﺘﺒﺩﺃ ﺒﺎﻟﻌﻨﻭﺍﻥ ‪ 00000h‬ﻭﺘﻨﺘﻬﻲ ﺒـﺎﻟﻌﻨﻭﺍﻥ‬
‫‪ .FFFFFh‬ﻴﺤﺘﻭﻱ ﻜل ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﻤﻌﻁﻴﺎﺕ ﺒﻁﻭل ‪ 8‬ﺒﺕ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﻴ‪‬ﺸﻜل ﺃﻱ ﺒﺎﻴﺘﻴﻥ ﻤﺘﺘﺎﻟﻴﻥ‬
‫ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻜﻠﻤﺔ ﺒﻁﻭل ‪ 16‬ﺒﺕ‪.‬‬

‫‪18‬‬
‫ﺨـﻼل ﺩﻭﺭﺓ‬ ‫‪ A0‬ﻭ ‪BHE‬‬ ‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺒﻔﺭﺽ ﺃﻥ ‪ ،BX=F000h‬ﻤﺎ ﻫﻲ ﺤﺎﻟﺔ ﺨﻁـﻲ ﺍﻟﻌﻨﻭﻨـﺔ‬
‫ﺍﻟﻘﺭﺍﺀﺓ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪MOV DH, [BX‬؟‬
‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﺒﻤﺎ ﺃﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﻘﺭﺃ ﺒﺎﻴﺘﹰﺎ ﻤﻥ ﻋﻨﻭﺍﻥ ﺯﻭﺠﻲ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻓﺈﻨﻪ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﻜـﻭﻥ‬
‫‪ A0 =0‬ﻭ ‪. BHE = 1‬‬
‫ﺨـﻼل ﺩﻭﺭﺓ‬ ‫‪ A0‬ﻭ ‪BHE‬‬ ‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺒﻔﺭﺽ ﺃﻥ ‪ ،BX=A200h‬ﻤﺎ ﻫﻲ ﺤﺎﻟﺔ ﺨﻁـﻲ ﺍﻟﻌﻨﻭﻨـﺔ‬
‫ﺍﻟﻘﺭﺍﺀﺓ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪MOV [BX], CX‬؟‬
‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﺘﻜﺘﺏ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ 2‬ﺒﺎﻴﺕ )ﻤﺤﺘﻭﻯ ‪ (CX‬ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻭﺒﻤﺎ ﺃﻨﻪ ﻴﺠﺭﻱ ﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﻓـﻲ‬
‫ﻤﻭﻗﻊ ﺯﻭﺠﻲ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻓﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻟﻜﺘﺎﺒﺔ ﺨﻼل ﺩﻭﺭﺓ ﻜﺘﺎﺒﺔ ﻭﺍﺤـﺩﺓ‪ ،‬ﻴﻜـﻭﻥ ﻓﻴﻬـﺎ ‪A0 =0‬‬
‫ﻭ ‪. BHE = 0‬‬
‫ﻤﻊ ﻤ‪‬ﺩﺨل ﺇﺸﺎﺭﺓ‬ ‫‪WR‬‬ ‫ﻋﻨﺩ ﺘﻭﺍﺠﻪ ﺃﻭ ﺭﺒﻁ ﺍﻟﺫﻭﺍﻜﺭ ﻤﻊ ﻤﻌﺎﻟﺞ ﺼﻐﺭﻱ ﻨﻭﺼل ﺇﺸﺎﺭﺓ ﻜﺘﺎﺒﺔ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﺍﻟﻜﺘﺎﺒﺔ ﻟﻠﺫﻭﺍﻜﺭ‪ .‬ﻭﻟﻜﻥ ﻨﻅﺭﹰﺍ ﻟﻜﻭﻥ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻴﻤﻜﻥ ﺃﻥ ﻴﻜﺘﺏ ﻓﻲ ﺍﻟﻜﺘﻠﺔ ﺍﻟﺯﻭﺠﻴـﺔ ﺃﻭ ﺍﻟﻜﺘﻠـﺔ‬
‫ﻭﺃﺨﺭﻯ ﻟﻠﻜﺘﺎﺒـﺔ‬ ‫‪LWR‬‬ ‫ﺍﻟﻔﺭﺩﻴﺔ ﻋﻠﻰ ﻨﺤﻭ ﻤﻨﻔﺼل‪ ،‬ﻓﻴﺠﺏ ﺍﺸﺘﻘﺎﻕ ﺇﺸﺎﺭﺓ ﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﻜﺘﻠﺔ ﺍﻟﺯﻭﺠﻴﺔ‬
‫‪LWR‬‬ ‫ﻓﻲ ﺍﻟﻜﺘﻠﺔ ﺍﻟﻔﺭﺩﻴﺔ ‪ . HWR‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﻤﻜﻨﺔ ﻻﺸـﺘﻘﺎﻕ ﺍﻹﺸـﺎﺭﺘﻴﻥ‬
‫ﻭﺇﺸﺎﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ ‪: WR‬‬ ‫‪ A0‬ﻭ ‪BHE‬‬ ‫ﻤﻥ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‬ ‫ﻭ ‪HWR‬‬

‫ﻤﺜﺎل‪ :‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻨﻅﺎﻡ ﺫﺍﻜﺭﺓ ﻴﺤﻭﻱ ‪ 128‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﺫﺍﻜـﺭﺓ ‪ EPROM‬ﻭ ‪ 128‬ﻜﻴﻠﻭﺒﺎﻴـﺕ‬
‫ﺫﺍﻜﺭﺓ ‪ SRAM‬ﻴﻤﻜﻥ ﺭﺒﻁﻪ ﻤﻊ ﻤﻌﺎﻟﺞ ‪ .8086‬ﻴﺘﻀﻤﻥ ﻫﺫﺍ ﺍﻟﻨﻅﺎﻡ‪:‬‬
‫• ﺃﺭﺒﻊ ﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ ‪ EPROM‬ﻤﻥ ﻁﺭﺍﺯ ‪ ،27128‬ﻴﺒﻠﻎ ﺤﺠﻡ ﻜل ﻤﻨﻬـﺎ ‪ 16‬ﻜﻴﻠﻭﺒﺎﻴـﺕ‪.‬‬
‫ﺘﹸﻜﻭﻥ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺒﻤﺠﻤﻭﻋﻬﺎ ﺫﺍﻜﺭﺓ ‪ EPROM‬ﺒﺤﺠﻡ ‪ 32‬ﻜﻴﻠﻭ × ‪ 16‬ﺒﺕ‪ ،‬ﻭﺘﺤﺘل ﺍﻟﻤﻭﺍﻗﻊ ﻤﻥ‬
‫‪.F0000h-FFFFFh‬‬
‫• ﺃﺭﺒﻊ ﺫﻭﺍﻜﺭ ﻟﻠﻘﺭﺍﺀﺓ ﻭﺍﻟﻜﺘﺎﺒﺔ ‪ SRAM‬ﻤﻥ ﻁﺭﺍﺯ ‪ ،62256‬ﻴﺒﻠﻎ ﺤﺠﻡ ﻜل ﻤﻨﻬﺎ ‪ 32‬ﻜﻴﻠﻭﺒﺎﻴـﺕ‪.‬‬
‫ﹸﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﺫﻭﺍﻜﺭ ﺒﻤﺠﻤﻭﻋﻬﺎ ﺫﺍﻜﺭﺓ ‪ SRAM‬ﺒﺤﺠﻡ ‪ 64‬ﻜﻴﻠﻭ × ‪ 16‬ﺒﺕ‪ ،‬ﻭﺘﺤﺘل ﺍﻟﻤﻭﺍﻗﻊ ﻤـﻥ‬
‫‪.00000h-1FFFFh‬‬

‫‪19‬‬
‫ﻨﺴﺘﺨﺩﻡ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻅﺎﻡ‪ ،‬ﺠﺯﺀﹰﺍ ﻤﻥ ﺍﻟﺭﻗﺎﻗﺔ ‪ 74LS139‬ﻻﻨﺘﺨﺎﺏ ﺍﻟـﺫﻭﺍﻜﺭ ‪ ،EPROM‬ﻭﺍﻟﺠـﺯﺀ‬
‫ﺍﻵﺨﺭ ﻤﻥ ﺍﻟﺭﻗﺎﻗﺔ ﻨﻔﺴﻬﺎ ﻻﻨﺘﺨﺎﺏ ﺍﻟﺫﻭﺍﻜﺭ ‪ .SRAM‬ﻻﺤﻅ ﺃﻥ ﻜل ﻤ‪‬ﺨﺭﺝ ﻤﻥ ﻤﺨـﺎﺭﺝ ﺍﻟﺭﻗﺎﻗـﺔ‬
‫‪ 74LS139‬ﻴﻨﺘﺨﺏ ﺫﺍﻜﺭﺓ ﻋﺭﺽ ﻜﻠﻤﺘﻬﺎ ‪ 16‬ﺒﺕ‪.‬‬
‫ﺇﻟﻰ ﺍﻟﻤﺩﺨل ‪ WE‬ﻟﻠﺫﻭﺍﻜﺭ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺯﻭﺠﻴﺔ ﺒﻴﻨﻤـﺎ‬ ‫‪LWR‬‬ ‫ﻴﺠﺭﻱ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﻭﺼل ﺍﻹﺸﺎﺭﺓ‬
‫ﺇﻟﻰ ﺍﻟﻤﺩﺨل ‪ WE‬ﻟﻠﺫﻭﺍﻜﺭ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻔﺭﺩﻴﺔ‪.‬‬ ‫ﻭﺼل ‪HWR‬‬ ‫ﻴﺠﺭﻱ‬
‫ﻻ ﺤﻅ ﺃﻴﻀﹰﺎ ﺃﻨﻨﺎ ﻟﻡ ﻨﺸﺘﻕ ﺇﺸﺎﺭﺓ ﻗﺭﺍﺀﺓ ﻟﻠﻜﺘﻠﺔ ﺍﻟﺯﻭﺠﻴﺔ ﻭﺃﺨﺭﻯ ﻟﻠﻜﺘﻠﺔ ﺍﻟﻔﺭﺩﻴﺔ ﻭﺇﻨﻤﺎ ﻭﺼﻠﻨﺎ ﺇﺸـﺎﺭﺓ‬
‫ﻟﻠﺫﻭﺍﻜﺭ ‪ EPROM‬ﻭ ‪ !RAM‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟـﺔ‬ ‫‪OE‬‬ ‫ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻤﺒﺎﺸﺭﺓ ﺇﻟﻰ ﺍﻟﻤﺩﺨل‬ ‫‪RD‬‬ ‫ﺍﻟﻘﺭﺍﺀﺓ‬
‫ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺩﻭﻤﹰﺎ ‪ 16‬ﺒﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻴﺘﺠﺎﻫل ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺒﺎﻴﺕ ﺍﻟﺫﻱ ﻻ ﻴﺤﺘﺎﺠﻪ ﻋﻨﺩﻤﺎ ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ‬
‫ﺒﺎﻴﺘﹰﺎ ﻭﺍﺤﺩﹰﺍ ﻓﻘﻁ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺃﺨﻴﺭﺍﹰ‪ ،‬ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﺍﻨﺘﺨﺎﺏ ﺍﻟﺫﻭﺍﻜﺭ ‪ EPEOM‬ﺃﻭ ‪ SRAM‬ﻤﺸﺭﻭﻁﹰﺎ ﺒﻜﻭﻥ ‪ ، M/ IO = 1‬ﻟﻜـﻭﻥ‬
‫ﻤﻊ ﺨﻁﻲ ﺍﻟﻌﻨﻭﻨـﺔ‬ ‫‪M/ IO‬‬ ‫ﺍﻟﺫﻭﺍﻜﺭ ﺘﻘﻊ ﻓﻲ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ‪ ،‬ﻴﺠﺭﻱ ﺘﻤﺭﻴﺭ ﺍﻹﺸﺎﺭﺓ‬
‫ﻻ )ﻴﺴﺎﻭﻱ ‪ 0‬ﻤﻨﻁﻘﻲ( ﻋﻨﺩﻤﺎ ﺘﻜـﻭﻥ‬
‫‪ A18‬ﻭ ‪ A19‬ﺇﻟﻰ ﺒﻭﺍﺒﺔ ‪ .NAND‬ﻴﻜﻭﻥ ﺨﺭﺝ ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻌﺎ ﹰ‬
‫ﺠﻤﻴﻊ ﻤﺩﺍﺨﻠﻬﺎ ﺘﺴﺎﻭﻱ ‪ 1‬ﻤﻨﻁﻘﻲ‪.‬‬

‫‪20‬‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ‪Cache Memory‬‬
‫ﺃﺼﺒﺤﺕ ﺴﺭﻋﺔ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ ﺃﻜﺒﺭ ﺒﻜﺜﻴﺭ ﻤﻥ ﺴﺭﻋﺔ ﻋﻤل ﺍﻟﺫﻭﺍﻜﺭ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﺃﺼـﺒﺤﺕ‬
‫ﻋﻤﻠﻴﺎﺕ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﺘﺴﺘﻐﺭﻕ ﻭﻗﺘﹰﺎ‪ ،‬ﻭﻫﺫﺍ ‪‬ﻴﺒﻁﺊ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟﻨﻅﺎﻡ ﻜﻜل‪ .‬ﹸﺘﻌﺘﺒـﺭ‬
‫ﺘﻘﺎﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ‪ ،‬ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﺤﺩﻴﺜﺔ‪ ،‬ﻟﺯﻴـﺎﺩﺓ ﺴـﺭﻋﺔ ﻨﻔﺎﺫﻫـﺎ‬
‫ﺍﻟﻭﺴﻁﻴﺔ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﺇﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ﻫﻲ ﺫﺍﻜﺭﺓ ﺴﺭﻴﻌﺔ‪ ،‬ﺼﻐﻴﺭﺓ ﺍﻟﺤﺠﻡ ‪18‬ﺘﺘﻭﻀﻊ ﺒﻴﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺍﻟـﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴـﺴﺔ‪.‬‬
‫ﺘﹸﻭﻀﻊ ﻓﻲ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭ‪/‬ﺃﻭ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻴﺴﺘﺨﺩﻤﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻜﺜﺭﺓ‪ ،‬ﻭﻓﻘـﹰﺎ ﻟﻤﻔﻬـﻭﻡ‬
‫ﺍﻟﻤﻭﻀﻌﻴﺔ ﺍﻟﺯﻤﺎﻨﻴﺔ ﻭﺍﻟﻤﻜﺎﻨﻴﺔ‪:‬‬
‫ƒ ﺍﻟﻤﻭﻀﻌﻴﺔ ﺍﻟﺯﻤﺎﻨﻴﺔ‪ :‬ﻫﻨﺎﻙ ﺍﺤﺘﻤﺎل ﻜﺒﻴﺭ ﻓﻲ ﻨﻔﺎﺫ ﺍﻟﻤﻌﺎﻟﺞ ﻤﺭﺍﺕ ﻋﺩﻴﺩﺓ ﻤﺘﺘﺎﻟﻴﺔ ﺇﻟﻰ ﺍﻟﻤﻭﺍﻀﻊ‬
‫ﻨﻔﺴﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ƒ ﺍﻟﻤﻭﻀﻌﻴﺔ ﺍﻟﻤﻜﺎﻨﻴﺔ‪ :‬ﻫﻨﺎﻙ ﺍﺤﺘﻤﺎل ﻜﺒﻴﺭ ﻓﻲ ﻨﻔﺎﺫ ﺍﻟﻤﻌﺎﻟﺞ ﺇﻟﻰ ﻤﻭﺍﻗﻊ ﻗﺭﻴﺒﺔ ﻤﻥ ﺍﻟﻤﻭﺍﻗﻊ ﺍﻟﺘﻲ‬
‫ﻨﻔﺫ ﺇﻟﻴﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﺴﺎﺒﻘﹰﺎ‪.‬‬
‫ﻻ ﻓﻴﻤﺎ‬
‫ﻋﻨﺩﻤﺎ ﻴﺭﻴﺩ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﻗﺭﺍﺀﺓ ﻤﻭﻗﻊ ﻤﺎ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﻓﺈﻨﻪ ﻴﻔﺤﺹ ﺃﻭ ﹰ‬
‫ﺇﺫﺍ ﻜﺎﻥ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﻫﺫﺍ ﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ‪ ،‬ﺇﻥ ﻜﺎﻥ ﻤﻭﺠﻭﺩﹰﺍ ﻓﺈﻨﻪ ﻴﻘﺭﺃ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻭﺭﻴﹰﺎ‬
‫ﻓﻲ ﺍﻟﺨﺎﺒﻴﺔ‪ .‬ﻭﻓﻲ ﺤﺎل ﻟﻡ ﺘﻜﻥ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ﻓﻴﺠـﺭﻱ ﺍﻟﻨﻔـﺎﺫ ﺇﻟـﻰ‬
‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﻭﻭﻀﻊ ﻨﺴﺨﺔ ﻋﻨﻬﺎ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ‪ .‬ﺘﺒﻁﺊ ﻋﻤﻠﻴﺔ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴـﺴﺔ‬
‫ﻋﻤل ﺍﻟﻨﻅﺎﻡ ﻟﻜﻭﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﺃﺒﻁﺄ ﺒﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ‪.‬‬

‫ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ‬ ‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ‬


‫ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ‬
‫‪ CPU‬ﺍﻟﻤﺭﻜﺯﻱ‬ ‫‪L1‬‬

‫ﻨﻅﺭﹰﺍ ﻟﻠﻌﻼﻗﺔ ﺍﻟﻭﺜﻴﻘﺔ ﺒﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ﻭﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻋ‪‬ﻤ ‪‬ﺩ ﺍﻟﻤﺼﻤﻤﻭﻥ ﻋﻠﻰ ﺩﻤﺞ ﻫﺫﻩ ﺍﻟـﺫﺍﻜﺭﺓ ﻤـﻊ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﻓﻲ ﺍﻟﺩﺍﺭﺓ ﺍﻟﻤﺘﻜﺎﻤﻠﺔ ﻨﻔﺴﻬﺎ‪ ،‬ﺘﺴﻤﻰ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺎﻟﻤﺴﺘﻭﻯ ‪ 1‬ﺃﻭ ‪ .L1‬ﻴﻜﻭﻥ ﺤﺠﻡ ﺍﻟـﺫﺍﻜﺭﺓ‬
‫ﺍﻟﺨﺎﺒﻴﺔ ‪ L1‬ﺼﻐﻴﺭﹰﺍ‪ ،‬ﻓﻤﺜ ﹰ‬
‫ﻼ ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 486‬ﻋﻠﻰ ‪ 16‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﺫﺍﻜﺭﺓ ﺨﺎﺒﻴﺔ ﻤـﻥ ﺍﻟﻤـﺴﺘﻭﻯ‬
‫ﺍﻷﻭل‪ .‬ﻭﻤﻥ ﺃﺠل ﺯﻴﺎﺩﺓ ﺴﺭﻋﺔ ﻋﻤل ﺍﻟﻨﻅﺎﻡ ﺃﻜﺜﺭ ﺘﺤﺘﻭﻱ ﺒﻌﺽ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻋﻠـﻰ ﺫﺍﻜـﺭﺓ ﺨﺎﺒﻴـﺔ‬

‫ﺤﺘﻰ ﺘﺒﻘﻰ ﻜﻠﻔﺘﻬﺎ ﻤﻌﻘﻭﻟﺔ‬ ‫‪18‬‬

‫‪21‬‬
‫ﺃﺨﺭﻯ ﺘﻭﻀﻊ ﺨﺎﺭﺝ ﺩﺍﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﻭﺘﹸﺩﻋﻰ ﺒﺎﻟﻤﺴﺘﻭﻯ ﺍﻟﺜﺎﻨﻲ ﺃﻭ ‪ ،L2‬ﻭﻴﻜﻭﻥ ﺤﺠﻡ ﻫﺫﻩ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻜﺒﺭ‬
‫ﺒﻜﺜﻴﺭ ﻤﻥ ‪ L1‬ﻭﺘﻭﻀﻊ ﺒﻴﻥ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﺔ ﻭ ‪ .L1‬ﻓﻤﺜﻼﹰ‪ ،‬ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻨﺘﻴﻭﻡ ﻋﻠﻰ ‪ 8‬ﻜﻴﻠﻭﺒﺎﻴﺕ‬
‫ﻤﻥ ‪ L1‬ﻭﺃﻜﺜﺭ ﻤﻥ ‪ 256‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﻤﻥ ‪ .L2‬ﺍﻟﺠﺩﻴﺭ ﺒﺎﻟﺫﻜﺭ ﺃﻥ ﺍﻟﻤﻌـﺎﻟﺞ ‪ 8088/8086‬ﻻ ﻴﺤﺘـﻭﻱ‬
‫ﻋﻠﻰ ﺫﺍﻜﺭﺓ ﺨﺎﺒﻴﺔ‪ ،‬ﺇﻻ ﺇﺫﺍ ﺍﻋﺘﺒﺭﻨﺎ ﺭﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﺤﺩ ﺃﻨﻭﺍﻉ ﺍﻟﺫﻭﺍﻜﺭ ﺍﻟﺨﺎﺒﻴﺔ‪.‬‬

‫ﺫﺍﻜﺭﺓ ﺭﺌﻴﺴﺔ‬

‫ﺫﺍﻜﺭﺓ ﺨﺎﺒﻴﺔ ﻤﻥ ﺍﻟﻤﺴﺘﻭﻯ ‪2‬‬


‫‪L2‬‬

‫ﺫﺍﻜﺭﺓ ﺨﺎﺒﻴﺔ ﻤﻥ ﺍﻟﻤﺴﺘﻭﻯ ‪1‬‬


‫‪L1‬‬

‫ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ‬
‫ﺍﻟﻤﺭﻜﺯﻱ ‪CPU‬‬

‫ﺘﺤﺘﻭﻱ ﺒﻌﺽ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻋﻠﻰ ﻤﺴﺘﻭﻯ ﺜﺎﻟﺙ ﻤﻥ ﺍﻟـﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴـﺔ ‪ L3‬ﻴﺘﺠـﺎﻭﺯ ﺤﺠﻤﻬـﺎ ﻋـﺩﺓ‬
‫ﻤﻴﻐﺎﺒﺎﻴﺕ‪ ،‬ﻤﺜل ﺍﻟﻤﻌﺎﻟﺞ ‪ Itanium II‬ﻤﻥ ‪ Intel‬ﻭﺴﻠﺴﻠﺔ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ‪.IBM Power 4‬‬

‫‪22‬‬
‫ﺘﻤﺎﺭﻴﻥ‬
‫ﺃﻭ ﹰﻻ‪ :‬ﺃﺠﺏ ﺒـ ﺼﺢ ﺃﻭ ﺨﻁﺄ‬
‫‪ -1‬ﺍﻟﺫﻭﺍﻜﺭ ‪ ROM‬ﻫﻲ ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ‪.‬‬
‫‪ -2‬ﺍﻟﺫﻭﺍﻜﺭ ‪ SRAM‬ﻫﻲ ﻟﻠﻜﺘﺎﺒﺔ ﻓﻘﻁ‪.‬‬
‫‪ -3‬ﺘﺤﺘﺎﺝ ﺍﻟﺫﻭﺍﻜﺭ ‪ DRAM‬ﺇﻟﻰ ﻋﻤﻠﻴﺔ ﺇﻨﻌﺎﺵ‪.‬‬
‫‪ -4‬ﺴﺭﻋﺔ ﻋﻤل ‪ DRAM‬ﺃﺴﺭﻉ ﻤﻥ ‪.SRAM‬‬
‫‪ -5‬ﻴﻤﻜﻥ ﺇﻋﺎﺩﺓ ﺒﺭﻤﺠﺔ ﺍﻟﺫﻭﺍﻜﺭ ‪.ROM‬‬
‫‪ -6‬ﺯﻤﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﻱ ﻤﻭﻗﻊ ﻓﻲ ﺍﻟﺫﻭﺍﻜﺭ ‪ SRAM‬ﻫﻲ ﻨﻔﺴﻬﺎ‪.‬‬
‫‪ -7‬ﺴﻌﺔ ﺫﻭﺍﻜﺭ ‪ SRAM‬ﺃﻜﺒﺭ ﻤﻥ ‪.DRAM‬‬
‫‪ -8‬ﻻ ﻴﻤﻜﻥ ﺇﻋﺎﺩﺓ ﺒﺭﻤﺠﺔ ﺍﻟﺫﻭﺍﻜﺭ ‪.PROM‬‬
‫‪ -9‬ﻴﻤﻜﻥ ﻤﺤﻭ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ‪ EPROM‬ﻋﻥ ﻁﺭﻴﻕ ﺘﹶﻌﺭِﻴﻀﻬﺎ ﺇﻟﻰ ﺃﺸﻌﺔ ﻓﻭﻕ ﺍﻟﺒﻨﻔﺴﺠﻴﺔ‬
‫ﻋﺒﺭ ﻨﺎﻓﺫﺘﻬﺎ ﺍﻟﺯﺠﺎﺠﻴﺔ‪.‬‬
‫‪ -10‬ﻴﺠﺭﻱ ﻋﻨﺩ ﺭﺒﻁ ﺫﺍﻜﺭﺓ ﻤﻊ ﻤﻌﺎﻟﺞ ﻭﺼل ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻊ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫‪ -11‬ﻴﻤﻜﻥ ﻓﻲ ﺍﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﻁﻠﻘﺔ ﻋﻨﻭﻨﺔ ﻤﻭﻗﻊ ﺫﺍﻜﺭﺓ ﺒﺄﻜﺜﺭ ﻤﻥ ﻋﻨﻭﺍﻥ‪.‬‬
‫ﻟﻠﻤﻌﺎﻟﺞ ‪ 8086‬ﻻﻨﺘﺨﺎﺏ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﺍﻨﺘﺨﺎﺏ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ‬ ‫‪M/ IO‬‬ ‫‪ -12‬ﺘﺴﺘﺨﺩﻡ ﺇﺸﺎﺭﺓ ﺍﻟﺘﺤﻜﻡ‬
‫ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ‪.‬‬
‫‪ -13‬ﻴﻀﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺨﻼل ﺩﻭﺭﺓ ﻜﺘﺎﺒﺔ‪.‬‬
‫‪ -14‬ﺇﻥ ﻋﺩﺩ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088‬ﻫﻲ ‪ 8‬ﺒﺕ‪.‬‬
‫‪ -15‬ﺇﻥ ﻋﺩﺩ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻫﻲ ‪ 16‬ﺒﺕ‪.‬‬
‫‪ -16‬ﻴﺠﺭﻱ ﺘﻘﺴﻴﻡ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﺇﻟﻰ ﻜﺘﻠﺘﻴﻥ ﺯﻭﺠﻴﺔ ﻭﻓﺭﺩﻴﺔ‪.‬‬
‫‪ -17‬ﺘﺘﻜﻭﻥ ﺩﻭﺭﺓ ﺍﻵﻟﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻤﻥ ‪ 4‬ﺤﺎﻻﺕ ﻋﻠﻰ ﺍﻷﻗل‪.‬‬
‫‪ -18‬ﺇﻥ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻀﻤﻤﺔ ﻤﻊ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪.8086‬‬
‫‪ -19‬ﻨﺴﺘﺨﺩﻡ ﺇﺸﺎﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ ALE‬ﻟﻌﺯل ﺨﻁﻭﻁ ﻋﻨﻭﻨﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﻀﻤﻤﺔ‪.‬‬
‫ﺍﻟﻤﻭﺍﻗﻊ ﺫﺍﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺯﻭﺠﻴﺔ‪ .‬ﺍﻟﺠﻭﺍﺏ‪ :‬ﺨﻁﺄ‬ ‫‪BHE‬‬ ‫‪ -20‬ﺘﻨﺘﺨﺏ‬
‫‪ -21‬ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ‪ 8088‬ﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺒﻁﻭل ‪ 2‬ﺒﺎﻴﺕ ﺨﻼل ﺩﻭﺭﺓ ﻜﺘﺎﺒﺔ ﻭﺍﺤﺩﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫‪ -22‬ﻴﺤﺘﺎﺝ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﺩﻭﻤﹰﺎ ﺇﻟﻰ ﺩﻭﺭﺘﻲ ﻗﺭﺍﺀﺓ ﻟﻘﺭﺍﺀﺓ ﻜﻠﻤﺔ ﻤﻥ ‪ 2‬ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫‪ -23‬ﺘﺴﺘﺨﺩﻡ ﺩﺍﺭﺍﺕ ﻓﻙ ﺍﻟﻌﻨﻭﻨﺔ ﻻﻨﺘﺨﺎﺏ ﺭﻗﺎﻗﺎﺕ ﺍﻟﺫﻭﺍﻜﺭ‪.‬‬
‫‪ -24‬ﺴﻌﺔ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ‪ L2‬ﺃﻜﺒﺭ ﻤﻥ ﺴﻌﺔ ﺍﻟﺫﺍﻜﺭﺓ ‪.L1‬‬

‫‪23‬‬
‫‪ -25‬ﺘﻀﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺨﺎﺒﻴﺔ ‪ L1‬ﻀﻤﻥ ﺭﻗﺎﻗﺔ ﺍﻟﻤﻌﺎﻟﺞ ﻨﻔﺴﻬﺎ‪.‬‬

‫ﺜﺎﻨﻴ ﹰﺎ‪ :‬ﺃﺠﺏ ﻋﻠﻰ ﺍﻷﺴﺌﻠﺔ ﺍﻟﺘﺎﻟﻲ‪:‬‬


‫‪ -1‬ﺒﻔﺭﺽ ﺃﻥ ﺘﺭﺩﺩ ﺴﺎﻋﺔ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﻫﻲ ‪ 10‬ﻤﻴﻐﺎﻫﺭﺘﺯ‪ ،‬ﻓﻤﺎ ﻫﻭ ﺍﻟﺯﻤﻥ ﺍﻷﺼـﻐﺭﻱ ﻟـﺩﻭﺭ‬
‫ﺁﻟﺔ؟‬
‫‪ -2‬ﺒﻔﺭﺽ ﺃﻥ ‪ ،DI=AB07h‬ﻤﺎ ﻫﻲ ﻋﺩﺩ ﺩﻭﺭﺍﺕ ﺍﻟﻘﺭﺍﺀﺓ ﺍﻟﺘﻲ ﻴﺤﺘﺎﺠﻬﺎ ﺍﻟﻤﻌـﺎﻟﺞ ‪ 8086‬ﻟﺘﻨﻔﻴـﺫ‬
‫ﺨﻼل ﻜل ﺩﻭﺭﺓ ﻗﺭﺍﺀﺓ؟‬ ‫‪ A0‬ﻭ ‪BHE‬‬ ‫ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪MOV AX, [DI‬؟ ﻤﺎ ﻫﻲ ﺤﺎﻟﺔ ﺨﻁﻲ ﺍﻟﻌﻨﻭﻨﺔ‬
‫‪ -3‬ﺒﻔﺭﺽ ﺃﻥ ‪ ،SI=0000h‬ﻤﺎ ﻫﻲ ﻋﺩﺩ ﺩﻭﺭﺍﺕ ﺍﻟﻘﺭﺍﺀﺓ ﺍﻟﺘﻲ ﻴﺤﺘﺎﺠﻬﺎ ﺍﻟﻤﻌـﺎﻟﺞ ‪ 8088‬ﻟﺘﻨﻔﻴـﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ]‪MOV AX, [DI‬؟‬
‫‪ -4‬ﻤﺎ ﻫﻲ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﺘﺤﺘﻠﻬﺎ ﺍﻟﺫﺍﻜﺭﺓ ‪ EPROM‬ﻤﻥ ﻁﺭﺍﺯ ‪ 271000‬ﻭﺍﻟﺘـﻲ ﺤﺠﻤﻬـﺎ‬
‫‪ ،128K × 8‬ﻭﻜﺫﻟﻙ ﺍﻟﺫﺍﻜﺭﺓ ‪ SRAM‬ﻤﻥ ﻁﺭﺍﺯ ‪ 621000‬ﻭﺍﻟﺘﻲ ﺤﺠﻤﻬـﺎ ‪ 128K × 8‬ﻓـﻲ‬
‫ﺍﻟﻨﻅﺎﻡ ﺍﻟﺼﻐﺭﻱ ﺍﻟﺘﺎﻟﻲ ﺍﻟﻤﺒﻨﻲ ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ‪.8088‬‬

‫‪24‬‬
‫‪ -5‬ﻤﺎ ﻫﻲ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺘﻲ ﺘﺤﺘﻠﻬﺎ ﻜل ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺼﻐﺭﻱ ﺍﻟﺘﺎﻟﻲ ﺍﻟﻤﺒﻨﻲ ﺤـﻭل‬
‫ﺍﻟﻤﻌﺎﻟﺞ ‪.8086‬‬

‫‪A0‬‬

‫‪25‬‬
‫ﺍﻟﻔﺼل ﺍﻟﺴﺎﺩﺱ‬
‫ﺘﻭﺍﺠﻪ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻤﻊ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴﺔ‬

‫ﺘﻤﻬﻴﺩ‬
‫ﻨﺸﺭﺡ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل‪ ،‬ﻁﺭﻕ ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﻭﺒﻌـﺽ ﺍﻟﻁـﺭﻕ‬
‫ﺍﻟﻤﻤﻜﻨﺔ ﻟﺘﺼﻤﻴﻡ ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺎﺕ‪ .‬ﺜﻡ ﻨﺸﺭﺡ ﺒﻨﻴﺎﻥ ﺭﻗﺎﻗﺔ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﻤﺒﺭﻤﺠﺔ ‪ 8255A‬ﻭﺃﻨﻤﺎﻁ ﻋﻤﻠﻬﺎ‪.‬‬
‫ﻜﻤﺎ ﻨﺒﻴﻥ ﺁﻟﻴﺔ ﺭﺒﻁ ﺍﻟﻤﺒﺩل ﺍﻟﺭﻗﻤﻲ‪/‬ﺍﻟﺘﻤﺎﺜﻠﻲ ‪ DAC0830‬ﻭﺍﻟﻤﺒﺩل ﺍﻟﺘﻤـﺎﺜﻠﻲ‪/‬ﺍﻟﺭﻗﻤـﻲ ‪ ADC0804‬ﻤـﻊ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﻨﺸﺭﺡ‪ ،‬ﺃﺨﻴﺭﺍﹰ‪ ،‬ﺘﻘﻨﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻭﺃﻨﻭﺍﻋﻬﺎ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫ﻋﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬


‫ﻴ‪‬ﻤﻜﻥ ﺃﻥ ﺘﻘﻊ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺇﻤﺎ ﻀﻤﻥ ﻓﻀﺎﺀ ﻤﺴﺘﻘل ﻟﻌﻨﻭﻨﺔ ﺒﻭﺍﺒﺎﺕ ‪ I/O‬ﺃﻭ ﻴﻤﻜـﻥ‬
‫ﺃﻥ ﺘﻜﻭﻥ ﺠﺯ ‪‬ﺀﺍ ﻤﻥ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﺘﺤﺘل ﻜل ﺒﻭﺍﺒﺔ ﺒﻁﻭل ‪ 8-bit‬ﻤﻭﻗﻊ ﻭﺍﺤﺩ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻥ‬
‫ﺃﻥ ‪‬ﻴﺸﻜل ﻋﻨﻭﺍﻨﻴﻥ ﻤﺘﺘﺎﻟﻴﻥ ﺒﻭﺍﺒﺔ ﺒﻁﻭل ‪ .16-bit‬ﻨﺎﺩﺭﹰﺍ ﻤﺎ ﻨﺭﺒﻁ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻭﺍﺒـﺎﺕ ﺒﻁـﻭل ‪،16-bit‬‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﺴﻴﻘﺘﺼﺭ ﺸﺭﺤﻨﺎ ﻭﺘﻌﺎﻤﻠﻨﺎ ﻓﻴﻤﺎ ﻴﺄﺘﻲ ﻤﻊ ﺒﻭﺍﺒﺎﺕ ﺒﻁﻭل ‪.8-bit‬‬

‫ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻀﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‬


‫ﻴﻤﻜﻥ ﺃﻥ ﺘﺤﺘل ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺤﻴﺯﹰﺍ ﻤﻥ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8088/8086‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓـﻲ‬
‫ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ .‬ﻴﺠﺭﻱ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺒﺎﻟﻁﺭﻴﻘﺔ ﻨﻔﺴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﻋﻨﻭﻨﺔ ﺍﻟـﺫﻭﺍﻜﺭ‪،‬‬
‫ﻭﻴﻤﻜﻨﻨﺎ ﺒﺎﻟﺘﺎﻟﻲ ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻥ ﺠﻤﻴﻊ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺘﻲ ﺘﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺫﻭﺍﻜﺭ‪ .‬ﻭﻟﻜﻥ ﻟﻬـﺫﻩ ﺍﻟﻁﺭﻴﻘـﺔ‬
‫ﺴﻴﺌﺔ ﺭﺌﻴﺴﺔ ﺘﺘﻤﺜل ﺒﺤﺠﺯ ﺠﺯﺀ ﻤﻥ ﻓﻀﺎﺀ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻌﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ‪.‬‬

‫‪1‬‬
‫ﻓﻀﺎﺀ ﺩﺧﻞ‪/‬ﺧﺮﺝ ﺟﺰﺀ ﻣﻦ ﻓﻀﺎﺀ ﺍﻟﺬﺍﻛﺮﺓ‬

‫ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻀﻤﻥ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‬


‫ﻴﻤﻜﻨﻨﺎ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺭﺒﻁ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺭ ﻓﻀﺎﺀ ﻋﻨﻭﻨﺔ ﺨﺎﺹ ﺒﺎﻟﺒﻭﺍﺒﺎﺕ‪ ،‬ﻜﻤﺎ ﻫﻭ‬
‫ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪.‬‬
‫ﻓﻀﺎﺀ ﺩﺧﻞ‪/‬ﺧﺮﺝ ﺧﺎﺹ‬

‫‪2‬‬
‫ﻴﺠﺏ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺩﺨل ‪ IN‬ﻭﺘﻌﻠﻴﻤﺔ ﺍﻟﺨﺭﺝ ‪ OUT‬ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻴﻥ ﺍﻟﺒﻭﺍﺒـﺎﺕ‬
‫ﻭﺍﻟﻤﺭﺍﻜﻡ )‪ AL‬ﻟﻠﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺒﺎﻴﺕ ﻭ ‪ AX‬ﻟﻠﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ‪ 2‬ﺒﺎﻴﺕ(‪ .‬ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻀﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN‬ﺃﻭ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ OUT‬ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ﺃﻭ ﺭﻗﻤﻬﺎ ﻋﻨﺩ ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺒﻭﺍﺒﺔ ﺘﺤﺘل ﺃﺤﺩ ﺍﻟﻌﻨﺎﻭﻴﻥ ‪ ،00h-FFh‬ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ‬
‫ﺒﻭﻀﻊ ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻲ ﺍﻟﺴﺠل ‪ DX‬ﺍﻟﻨﻔﺎﺫ ﺇﻟﻰ ﺃﻱ ﺒﻭﺍﺒﺔ ﺘﻘﻊ ﻀﻤﻥ ﻜﺎﻤل ﻓﻀﺎﺀ ﻋﻨﻭﻨـﺔ ﺍﻟﺒﻭﺍﺒـﺎﺕ‬
‫‪.0000h-FFFFh‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻘﺭﺃ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN AL, 38h‬ﺍﻟﻘﻴﻤﺔ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ ﺫﺍﺕ ﺍﻟﻌﻨﻭﺍﻥ ‪ 0038h‬ﻭﺘﻀﻌﻬﺎ ﻓﻲ ﺍﻟـﺴﺠل ‪،AL‬‬
‫ﻓﻲ ﺤﻴﻥ ﺘﻘﺭﺃ ﺍﻟﺘﻌﻠﻴﻤﺘﻴﻥ ﺍﻟﺘﺎﻟﻴﺘﻴﻥ ﺍﻟﻘﻴﻤﺔ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﺘﻔﺭﻋﻴـﺔ ‪1 LTP1‬ﻓـﻲ ﺍﻟﺤﺎﺴـﻭﺏ ﺍﻟﺸﺨـﺼﻲ‬
‫ﻭﺘﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺴﺠل ‪:AL‬‬

‫‪MOV DX, 0378h‬‬


‫‪IN AL, DX‬‬

‫ﻫﻨﺎﻙ ﺘﺸﺎﺒﻪ ﻜﺒﻴﺭ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﻌﺎﻟﺞ ﺒﻴﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻓﻀﺎﺀ ﺍﻟﺒﻭﺍﺒﺎﺕ‪ ،‬ﺤﻴﺙ ‪‬ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ﻤـﺴﺭﻯ‬
‫ﺍﻟﻨﻅﺎﻡ ﻨﻔﺴﻪ ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﻜل ﻤﻥ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻭﺍﻟﺫﻭﺍﻜﺭ‪ .‬ﻭﻤﻊ ﺫﻟﻙ‪ ،‬ﻴﻭﺠﺩ ﺜﻼﺙ ﺍﺨﺘﻼﻓﺎﺕ ﺃﺴﺎﺴﻴﺔ‬
‫ﺒﻴﻥ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ ﻭﻓﻀﺎﺀ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﻌﺎﻟﺞ ﻭﻫﻲ‪:‬‬
‫ﻓﻲ ﺍﻟﻤﻌﺎﻟﺞ ‪ (8088‬ﻟﻠﺘﻤﻴﻴﺯ ﺒﻴﻥ ﻓﻀﺎﺀ ﺍﻟـﺫﺍﻜﺭﺓ‬ ‫‪) M/ IO‬ﺃﻭ ‪IO/ M‬‬ ‫ƒ ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8086‬ﺍﻹﺸﺎﺭﺓ‬
‫ﻭﻓﻀﺎﺀ ﺍﻟﺒﻭﺍﺒﺎﺕ‪.‬‬
‫ƒ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻨﻭﻨﺔ ‪ 1‬ﻤﻴﻐﺎﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺫﻭﺍﻜﺭ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ ،A0-A19‬ﻓـﻲ ﺤـﻴﻥ‬
‫ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﻌﺎﻟﺞ ﻓﻘﻁ ﻋﻨﻭﻨﺔ ‪ 64‬ﻜﻴﻠﻭﺒﺎﻴﺕ ﺃﻭ ‪ 32‬ﻜﻴﻠﻭ ﻜﻠﻤﺔ ﻤﻥ ﺒﻭﺍﺒﺎﺕ ﺍﻟـﺩﺨل‪/‬ﺍﻟﺨـﺭﺝ ﻭﺫﻟـﻙ‬
‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪.A0-A15‬‬
‫ƒ ﻻ ‪‬ﻴﺴﺘﺨﺩﻡ ﺍﻟﻤﻌﺎﻟﺞ ﻓﻲ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﻲ ﺘﻘﻊ ﻓﻲ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻨﻅﺎﻡ ﺍﻟﻤﻘﺘﻁﻌﺎﺕ‬
‫ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﻓﻀﺎﺀ ﺍﻟﺫﺍﻜﺭﺓ‪.‬‬
‫ﻴﻤﻜﻨﻨﺎ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺍﻟﺘﻲ ﺘﻘﻊ ﻓﻲ ﻓﻀﺎﺀ ﺍﻟﺒﻭﺍﺒﺎﺕ ﺒﺎﻟﻁﺭﻴﻘﺔ ﻨﻔﺴﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﻋﻨﻭﻨـﺔ ﺍﻟـﺫﻭﺍﻜﺭ‬
‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A0-A15‬ﻓﻘﻁ‪ .‬ﻨﺫﻜﺭ ﻫﻨﺎ ﺃﻨﻪ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻤﻀﻤﻨﻨﹰﺎ ﻓﻲ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫‪ IN‬ﺃﻭ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ OUT‬ﻓﺈﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻴﻀﻊ ﺃﺼﻔﺎﺭﹰﺍ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪.A8-A15‬‬

‫‪ 1‬ﺗﺤﺘﻞ اﻟﺒﻮاﺑﺔ اﻟﺘﻔﺮﻋﻴﺔ ﻓﻲ اﻟﺤﺎﺳﻮب اﻟﺸﺨﺼﻲ اﻟﻌﻨﻮان ‪0378h‬‬

‫‪3‬‬
‫ﺨﺭﻴﻁﺔ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻓﻲ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‬
‫ﺠﺭﻯ ﺤﺠﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ‪ 00000h-03FFh‬ﻤﻥ ﻓﻀﺎﺀ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻓﻲ ﺍﻟﺤﺎﺴـﻭﺏ ﺍﻟﺸﺨـﺼﻲ‬
‫ﻟﻭﻅﺎﺌﻑ ﻤﺤﺩﺩﺓ‪ ،‬ﻭﺘﺭﻜﺕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺒﺎﻗﻴﺔ ‪ 0400h-FFFFh‬ﻤﺘﺎﺤﺔ ﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﻤﺴﺘﺨﺩﻡ‪ .‬ﻓﻤـﺜ ﹰ‬
‫ﻼ ﺠـﺭﻯ‬
‫ﺤﺠﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ‪ 03F0-03FFh‬ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﺘﺴﻠﺴﻴﺔ ‪ ،COM1‬ﻭﺍﻟﻌﻨﺎﻭﻴﻥ ‪0378-037Fh‬‬
‫ﻟﻠﺒﻭﺍﺒﺔ ﺍﻟﺘﻔﺭﻋﻴﺔ ﻭ ‪ 0060-0063h‬ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺭﻗﺎﻗﺔ ‪ .8255‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘـﺎﻟﻲ ﺨﺭﻴﻁـﺔ ﺒﻭﺍﺒـﺎﺕ‬
‫ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻟﻠﺤﺎﺴﻭﺏ ﺍﻟﺸﺨﺼﻲ‪.‬‬

‫ﺧﺮﻳﻄﺔ ﺍﻟﺪﺧﻞ‪/‬ﺍﳋﺮﺝ‬
‫ﻟﻠﺤﺎﺳﻮﺏ ﺍﻟﺸﺨﺼﻲ‬

‫ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺩﺨل‪/‬ﺨﺭﺝ‬


‫ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺩﺨل‬
‫ﻻ ﻋﻠﻰ ﺒﻭﺍﺒﺔ ﺩﺨـل‬
‫ﹶﻨﺴﺘﺨﺩﻡ ﻓﻲ ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺩﺨل ﺩﺍﺭﺓ ﻋﺯل ﺜﻼﺜﻲ ﺍﻟﺤﺎﻻﺕ‪ .‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬

‫‪4‬‬
‫ﺘﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪ 9Ch‬ﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻟﻠﻤﻌﺎﻟﺞ ‪ ،8088‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺭﻗﺎﻗﺔ ‪.74LS24‬‬

‫ﹸﻨﻭﺼل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ ﺇﻟﻰ ‪‬ﻤﺩﺨل ﺭﻗﺎﻗﺔ ﺍﻟﻌﺯل ‪ ،74LS244‬ﻓﻲ ﺤﻴﻥ ﹸﻨﻭﺼل ﻤﺨﺎﺭﺝ ﺭﻗﺎﻗﺔ ﺍﻟﻌﺯل‬
‫ﺇﻟﻰ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﻗﺭﺍﺀﺓ ‪ IN‬ﻤﻥ ﺍﻟﻤﻭﻗﻊ ‪ ،9Ch‬ﺘﹸﻨﺘﺨﺏ ﺍﻟﺭﻗﺎﻗﺔ ‪74LS244‬‬
‫ﻟﻠﺭﻗﺎﻗﺔ‪ .‬ﹸﺘﻤﺭﺭ ﺩﺍﺭﺓ ﺍﻟﻌﺯل ﻋﻨﺩ‬ ‫‪G2‬‬ ‫ﻭ‬ ‫‪G1‬‬ ‫ﻋﺒﺭ ﻤﻔﻜﻙ ﺘﺭﻤﻴﺯ ﺍﻟﻌﻨﺎﻭﻴﻥ ﻭﺫﻟﻙ ﺒﻭﻀﻊ ‪ 0‬ﻋﻠﻰ ﺍﻟﻤﺩﺍﺨل‬
‫ﺍﻨﺘﺨﺎﺒﻬﺎ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻋﻠﻰ ﻤﺩﺍﺨﻠﻬﺎ ﺇﻟﻰ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻭﻤﻥ ﺜﻡ ﻴﻌﻤـل ﺍﻟﻤﻌـﺎﻟﺞ ﻋﻠـﻰ‬
‫ﻗﺭﺍﺀﺘﻬﺎ ﻭﻭﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺴﺠل ‪ .AL‬ﻭﻋﻨﺩﻤﺎ ﻻ ﺘﻜﻭﻥ ﺍﻟﺭﻗﺎﻗﺔ ‪ 74LS244‬ﻤﻨﺘﺨﺒﺔ‪ ،‬ﺃﻱ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺃﺤـﺩ‬
‫ﻤﺴﺎﻭﻴﹰﺎ ‪ ،1‬ﻓﺈﻥ ﻤﺨﺎﺭﺝ ﺍﻟﺭﻗﺎﻗﺔ ﺘﻜﻭﻥ ﻓـﻲ ﺤﺎﻟـﺔ ﻤﻤﺎﻨﻌـﺔ‬ ‫‪G2‬‬ ‫ﻭ‬ ‫‪G1‬‬ ‫ﺃﻭ ﻜﻼ ﻤﺩﺨﻠﻲ ﺍﻨﺘﺨﺎﺏ ﺍﻟﺩﺍﺭﺓ‬
‫ﻋﺎﻟﻴﺔ‪ ،‬ﻤﻤﺎ ﻴﻌﻨﻲ ﻋﺯل ﻤﺩﺍﺨل ﺭﻗﺎﻗﺔ ﺍﻟﻌﺯل ﻋﻥ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬
‫ﻻﺤﻅ ﺃﻨﻨﺎ ﻟﻡ ﻨﺴﺘﺨﺩﻡ‪ ،‬ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ‪ ،‬ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A8-A15‬ﻓﻲ ﻋﻨﻭﻨﺔ ﺍﻟﺒﻭﺍﺒﺔ ﻟﻜﻭﻨﻬﺎ ﺘﻘﻊ ﻓـﻲ‬
‫ﺍﻟﺤﻴﺯ ‪ 00-FFh‬ﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺒﻭﺍﺒﺎﺕ‪ .‬ﻭﻴﻤﻜﻨﻨﺎ ﺒﺎﻟﺘﺎﻟﻲ ﺘﻀﻤﻴﻥ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻲ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺩﺨﺎل ‪ IN‬ﻨﻔﺴﻬﺎ‪،‬‬
‫ﻭﺘﺴﺎﻭﻱ ﺠﻤﻴﻊ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A8-A15‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺼﻔﺭ‪.‬‬
‫ﺇﻥ ﺩﺍﺭﺓ ﺍﻟﺩﺨل ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺘﻅﻬﺭ ﺒﺸﻜل ﻭﺍﻀﺢ ﻋﻨﺩﻤﺎ ﻨﺤﺘﺎﺝ ﺇﺩﺨﺎل ﻤﻌﻁﻴﺎﺕ ﺇﻟـﻰ ﺍﻟﻤﻌـﺎﻟﺞ ﺃﻭ‬
‫ﺘﻅﻬﺭ ﻜﺠﺯﺀ ﻤﻥ ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﺍﻟﻤﺒﺭﻤﺠﺔ‪.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﺘﻘﺼ‪‬ﻰ ﺤﺎﻟﺔ ﺍﻟﻤ‪‬ﺩﺨل ‪ ،D7‬ﻤﻥ ﺒﻭﺍﺒﺔ ﺘﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪ ،9Ch‬ﺤﺘﻰ ﻴـﺴﺎﻭﻱ‬
‫‪.0‬‬

‫‪5‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬
‫‪POLL:‬‬ ‫‪IN Al, 9Ch‬‬ ‫‪; read data‬‬
‫‪SHL AL, 1‬‬ ‫‪; put D7 in AC‬‬
‫‪JC POLL‬‬ ‫‪; re-read data if AC ==1‬‬

‫ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺨﺭﺝ‬


‫ﹶﻨﺴﺘﺨﺩﻡ ﻓﻲ ﺘﺼﻤﻴﻡ ﺩﺍﺭﺓ ﺨﺭﺝ ﺩﺍﺭﺍﺓ ﻤﺴﻙ )ﺃﻭ ﻗﻼﺏ ‪ (D‬ﻤﺜل ﺍﻟﺭﻗﺎﻗﺔ ‪ .74LS373‬ﹸﻨﻭﺼل ﻤﺩﺍﺨل ﻫﺫﻩ‬
‫ﺍﻟﺩﺍﺭﺓ ﺇﻟﻰ ﺨﻁﻭﻁ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻨﻭﺼل ﻤﺨﺎﺭﺝ ﻫﺫﻩ ﺍﻟﺭﻗﺎﻗﺔ ﺇﻟﻰ ﺘﺠﻬﻴﺯﺓ ﺨﺎﺭﺠﻴﺔ‪ .‬ﻴﺒﻴﻥ‬
‫ﻻ ﻋﻠﻰ ﺒﻭﺍﺒﺔ ﺨﺭﺝ ﺘﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪ 9Ch‬ﻤﻥ ﻓﻀﺎﺀ ﺍﻟـﺩﺨل‪/‬ﺍﻟﺨـﺭﺝ ﻟﻠﻤﻌـﺎﻟﺞ ‪.8088‬‬
‫ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ﻋﻨﺩﻤﺎ ﻴﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻤﺜﻼﹰ‪ ،‬ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ OUT 9Ch, AL‬ﻓﺈﻨﻪ ﻴﻀﻊ ﻤﺤﺘﻭﻯ ‪ AL‬ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴـﺎﺕ‬
‫ﻟﻤﺩﺓ ﺼﻐﻴﺭﺓ ﻤﻥ ﺍﻟﺯﻤﻥ‪ ،‬ﻜﻤﺎ ﺘﻭﻟﺩ ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ﻨﺒﻀﺔ ﻤﺴﻙ ﻋﻠﻰ ﺍﻟﻤـﺩﺨل ‪ G‬ﻟﻠـﺩﺍﺭﺓ‬
‫‪ .74LS373‬ﺘﻤﺴﻙ ﻤﺨﺎﺭﺝ ﺍﻟﺭﻗﺎﻗﺔ ‪ ،74LS373‬ﻨﺘﻴﺠﺔ ﻟﻬﺫﻩ ﺍﻟﻨﺒﻀﺔ‪ ،‬ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘـﻲ ﻋﻠـﻰ ﻤـﺩﺍﺨﻠﻬﺎ‬
‫ﻟﺤﻅﺔ ﺘﻁﺒﻴﻕ ﻨﺒﻀﺔ ﺍﻟﻤﺴﻙ‪.‬‬

‫ﹸﺘﺤﺎﻓﻅ ﻤﺨﺎﺭﺝ ﺍﻟﺩﺍﺭﺓ ‪ ،74LS373‬ﻋﻨﺩﻤﺎ ﻻ ﺘﻜﻭﻥ ﺍﻟﺩﺍﺭﺓ ﻤﻨﺘﺨﺒﺔ‪ ،‬ﻋﻠﻰ ﺁﺨﺭ ﻗﻴﻤﺔ ﺠﺭﻯ ﻤـﺴﻜﻬﺎ‪ ،‬ﻭﻻ‬
‫ﺘﺘﻐﹼﻴﺭ ﻤﺨﺎﺭﺝ ﺍﻟﺩﺍﺭﺓ ﺇﻻ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﺇﺨﺭﺍﺝ ﺠﺩﻴﺩﺓ ﻋﻠﻰ ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ﻨﻔﺴﻪ‪.‬‬

‫‪6‬‬
‫ﺭﻗﺎﻗﺔ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﻤﺒﺭﻤﺠﺔ ‪8255A‬‬

‫ﹸﺘﺴﺘﺨﺩﻡ ﺭﻗﺎﻗﺔ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﻤﺒﺭﻤﺠﺔ ‪ ،8255A‬ﻋﻠﻰ ﻨﺤﻭ ﺨﺎﺹ‪ ،‬ﻟﺭﺒﻁ ﻤﻌﺎﻟﺠﺎﺕ ‪ Intel‬ﻤﻊ ﺘﺠﻬﻴﺯﺍﺕ‬
‫ﻤﺤﻴﻁﻴﺔ ﻤﺘﻭﺍﻓﻘﺔ ﻤﻊ ﺘﻘﺎﻨﺔ ‪ .TTL‬ﻟﻘﺩ ﺍﺴﺘﺨﺩﻤﺕ ﻫﺫﻩ ﺍﻟﺭﻗﺎﻗﺔ ﻓﻲ ﺍﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ ﺍﻷﻭﻟﻰ ﻜﻭﺍﺠﻬـﺔ‬
‫ﺭﺒﻁ ﻤﻊ ﻁﺎﺒﻌﺔ ﺘﻔﺭﻋﻴﺔ ﻭﻤﻊ ﻟﻭﺤﺔ ﻤﻔﺎﺘﻴﺢ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﺭﻗﺎﻗﺔ ‪.8255A‬‬

‫ﺘﺤﺘﻭﻱ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﻋﻠﻰ ﺜﻼﺙ ﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ‪ B ،A :‬ﻭ ‪ C‬ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 1‬ﺒﺎﻴﺕ‪ .‬ﻗﹸـﺴﻤﺕ‬
‫ﻫﺫﻩ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻜﻤﺠﻤﻭﻋﺘﻴﻥ ‪ A‬ﻭ ‪ .B‬ﺘﻀﻡ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﻨﺼﻑ ﺍﻷﻋﻠﻰ ﻤـﻥ ﺍﻟﺒﻭﺍﺒـﺔ ‪C‬‬
‫)‪ ،(PC4-PC7‬ﻓﻲ ﺤﻴﻥ ﺘﻀﻡ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ B‬ﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻭﺍﻟﻨﺼﻑ ﺍﻷﺩﻨﻰ ﻤـﻥ ﺍﻟﺒﻭﺍﺒـﺔ ‪.(PC0-PC3) C‬‬
‫ﻴﻤﻜﻥ ﺒﺭﻤﺠﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺍﺭﺓ ‪ ،8255A‬ﻋﺒﺭ ﺴﺠل ﺘﺤﻜﻡ ﺩﺍﺨﻠﻲ‪ ،‬ﻟﺘﻌﻤل ﺠﻤﻴﻌﻬﺎ ﻜﺒﻭﺍﺒﺎﺕ ﺩﺨـل‪/‬ﺨـﺭﺝ‬
‫ﻤﺴﺘﻘﻠﺔ ﺒﻌﻀﻬﺎ ﻋﻥ ﺒﻌﺽ‪ ،‬ﺃﻭ ﺃﻥ ﻴﻌﻤل ﺠﺯﺀ ﻤﻨﻬﺎ ﻜﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﻓﻲ ﺤﻴﻥ ﻴﺴﺘﺨﺩﻡ ﺍﻟﺠﺯﺀ ﺍﻵﺨﺭ‬
‫ﻜﺨﻁﻭﻁ ﺘﺤﻜﻡ ﻟﻬﺫﻩ ﺍﻟﺒﻭﺍﺒﺎﺕ‪ .‬ﻴﻤﻜﻨﻨﺎ ﺍﻨﺘﺨﺎﺏ ﺇﺤﺩﻯ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﺜﻼﺜـﺔ ﺃﻭ ﺴـﺠل ﺍﻟـﺘﺤﻜﻡ‬
‫ﺍﻟﺩﺍﺨﻠﻲ ﻋﺒﺭ ﻤﻐﺭﺯﻱ ﺍﻟﻌﻨﻭﻨﺔ ‪ A0‬ﻭ ‪ A1‬ﻟﻠﺭﻗﺎﻗﺔ‪ ،‬ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪7‬‬
‫ﺍﻟﻭﻅﻴﻔﺔ‬ ‫‪A1‬‬ ‫‪A0‬‬

‫ﺍﻟﺒﻭﺍﺒﺔ ‪A‬‬ ‫‪0‬‬ ‫‪0‬‬

‫ﺍﻟﺒﻭﺍﺒﺔ ‪B‬‬ ‫‪0‬‬ ‫‪1‬‬

‫ﺍﻟﺒﻭﺍﺒﺔ ‪C‬‬ ‫‪1‬‬ ‫‪0‬‬

‫ﺴﺠل ﺍﻟﺘﺤﻜﻡ‬ ‫‪1‬‬ ‫‪1‬‬

‫ﻻ ﻋﻠﻰ ﻁﺭﻴﻘﺔ ﺭﺒﻁ ﺭﻗﺎﻗﺔ ‪ 8255A‬ﻤﻊ ﻤﻌﺎﻟﺞ ‪ .8086‬ﻨﻭﺼل‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل‪:‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ƒ ﻤﻐﺎﺭﺯ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻟﻠﺭﻗﺎﻗﺔ ‪ ،D0-D7‬ﺇﻟﻰ ﻤﺴﺭﻯ ﻤﺴﺭﻯ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﻌﺯﻭل ‪.D0-D7‬‬
‫ﻟﻨﻅﺎﻡ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻋﻠﻰ ﺍﻟﺘﺘﺎﻟﻲ‪.‬‬ ‫ﺍﻟﻤ‪‬ﺨﺭﺠﻴﻥ ‪ IOR‬ﻭ ‪IOW‬‬ ‫ﺇﻟﻰ‬ ‫‪WR‬‬ ‫ﻭ‬ ‫‪RD‬‬ ‫ƒ ﻤﻐﺭﺯﻱ ﺍﻟﺭﻗﺎﻗﺔ‬
‫ƒ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ A0‬ﻭ ‪ A3-A7‬ﺇﻟﻰ ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ ‪ 74LS138‬ﻻﻨﺘﺨﺎﺏ ﺍﻟﺭﻗﺎﻗﺔ‪ ،‬ﺒﻴﻨﻤﺎ‬
‫ﻨﻭﺼل ﻤﻐﺭﺯﻱ ﺍﻟﻌﻨﻭﻨﺔ ﻟﻠﺭﻗﺎﻗﺔ ‪ A0‬ﻭ ‪ A1‬ﺇﻟﻰ ﺨﻁﻲ ﺍﻟﻌﻨﻭﻨﺔ ‪ A1‬ﻭ ‪ A2‬ﻟﻠﻤﻌﺎﻟﺞ ﻻﻨﺘﺨﺎﺏ ﺇﺤـﺩﻯ‬
‫ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﺜﻼﺜﺔ ﺃﻭ ﺴﺠل ﺍﻟﺘﺤﻜﻡ ﺍﻟﺩﺍﺨﻠﻲ‪.‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺃﺨﻴﺭﹰﺍ ﻭﺼل ﻤﻐﺎﺭﺯ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻟﻠﺭﻗﺎﻗﺔ ﺇﻟﻰ ﺘﺠﻬﻴﺯﺍﺕ ﺨﺎﺭﺠﻴﺔ ﻤﻨﺎﺴﺒﺔ‪.‬‬

‫‪8‬‬
‫ﺘﺤﺘل ﺍﻟﺒﻭﺍﺒﺎﺕ ﻭﺴﺠل ﺍﻟﺘﺤﻜﻡ ﻟﻠﺭﻗﺎﻗﺔ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺒﻕ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺍﻟﻭﻅﻴﻔﺔ‬ ‫ﺍﻟﻌﻨﻭﺍﻥ‬
‫ﺍﻟﺒﻭﺍﺒﺔ ‪A‬‬ ‫‪C0h‬‬

‫ﺍﻟﺒﻭﺍﺒﺔ ‪B‬‬ ‫‪C2h‬‬

‫ﺍﻟﺒﻭﺍﺒﺔ ‪C‬‬ ‫‪C4h‬‬

‫ﺴﺠل ﺍﻟﺘﺤﻜﻡ‬ ‫‪C6h‬‬

‫ﻴﻤﻜﻥ ﺍﺸﺘﻘﺎﻕ ﺇﺸﺎﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ ﻤﻥ ﺍﻟﺒﻭﺍﺒﺎﺕ ‪ ، IORC‬ﻭﺇﺸﺎﺭﺓ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺍﻟﺒﻭﺍﺒﺎﺕ ‪ ، IOWC‬ﻤـﻥ ﺇﺸـﺎﺭﺍﺕ‬
‫ﻭ ‪ ، WR‬ﻜﻤﺎ ﻴﻠﻲ‪:‬‬ ‫‪RD‬‬ ‫ﺍﻟﺘﺤﻜﻡ ﻟﻠﻤﻌﺎﻟﺞ‪، IO/ M :‬‬

‫‪OR‬‬
‫‪IORC‬‬
‫‪IO/M‬‬
‫‪OR‬‬ ‫‪IOWC‬‬

‫‪9‬‬
‫ﺒﺭﻤﺠﺔ ﺍﻟﺭﻗﺎﻗﺔ ‪8255A‬‬
‫ﻴﻤﻜﻨﻨﺎ ﺒﺭﻤﺠﺔ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﻋﺒﺭ ﺴﺠﻠﻲ ﺘﺤﻜﻡ ﺩﺍﺨﻠﻴﻴﻥ ﻟﻬﻤﺎ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ﻨﻔﺴﻪ‪ ،‬ﻴﺠﺭﻱ ﺍﻨﺘﺨﺎﺏ‬
‫ﺃﺤﺩ ﻫﺫﻴﻥ ﺍﻟﺴﺠﻠﻴﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭﺓ ﻤﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻛﻠﻤﺔ ﲢﻜﻢ‬

‫ﻭﻇﻴﻔﺔ ﻛﻞ ﺑﺖ ﻣﻦ‬
‫ﺳﺠﻞ ﺍﻟﺘﺤﻜﻢ‬

‫‪10‬‬
‫‪‬ﻴ ‪‬ﻤﻜﱢﻨﻨﺎ ﻭﻀﻊ ‪ 1‬ﻤﻨﻁﻘﻲ ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭﺓ ﻤﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ‪ ،‬ﻤﻥ ﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻭ ‪ B‬ﻋﻠﻰ ﻨﺤـﻭ‬
‫ﻤﺴﺘﻘل ﻟﺘﻌﻤل ﺒﻌﺩﺓ ﺃﻨﻤﺎﻁ‪ ،‬ﺍﻨﻅﺭ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ƒ ﻴﻤﻜﻨﻨﺎ ﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ B‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 0‬ﻟﺘﻌﻤل ﻜﺒﻭﺍﺒﺎﺕ ﺩﺨل‪/‬ﺨﺭﺝ ﺒﺴﻴﻁﺔ‪ ،‬ﺃﻭ ﺒﺭﻤﺠﺘﻬﺎ ﻓﻲ ﺍﻟﻨﻤﻁ‬
‫‪ 1‬ﻟﺘﻌﻤل ﻓﻲ ﻨﻤﻁ ﺍﻟﻘﺩﺡ ‪ strobed‬ﺤﻴﺙ ﻴﺠﺭﻱ ﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻊ ﺍﻟﺘﺠﻬﻴﺯﺍﺕ ﺍﻟﻤﺤﻴﻁﻴـﺔ ﻋﺒـﺭ‬
‫ﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻓﻲ ﺤﻴﻥ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺠﺯﺀ ﺍﻷﺩﻨﻰ ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ ،PCL ،C‬ﻟﺘﺄﻤﻴﻥ ﺇﺸﺎﺭﺍﺕ ﺍﻟﻤﺼﺎﻓﺤﺔ‪.‬‬
‫ƒ ﻴﻤﻜﻨﻨﺎ ﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻟﺘﻌﻤل ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 0‬ﺃﻭ ‪ 1‬ﻜﻤﺎ ﻫﻭ ﺍﻟﺤﺎل ﻓﻲ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ .B‬ﻋﻨﺩ ﺒﺭﻤﺠﺔ‬
‫ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 1‬ﻨﺴﺘﺨﺩﻡ ﺍﻟﺠﺯﺀ ﺍﻷﻋﻠـﻰ ﻤـﻥ ﺍﻟﺒﻭﺍﺒـﺔ ‪ ،PCU ،C‬ﻟﺘـﺄﻤﻴﻥ ﺇﺸـﺎﺭﺍﺕ‬
‫ﺍﻟﻤﺼﺎﻓﺤﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻙ‪ ،‬ﻴﻤﻜﻨﻨﺎ ﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 2‬ﺤﻴﺙ ﺘـﺼﺒﺢ ﺍﻟﺒﻭﺍﺒـﺔ ‪A‬‬
‫ﺜﻨﺎﺌﻴﺔ ﺍﻻﺘﺠﺎﻩ ‪.bidirectional‬‬

‫‪11‬‬
‫ﻴ‪‬ﻤ ِﻜﻨﻨﺎ ﻋﻨﺩ ﻭﻀﻊ ‪ 0‬ﻤﻨﻁﻘﻲ ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭﺓ ﻤﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ‪ ،‬ﺘﻐﻴﻴﺭ ﺤﺎﻟﺔ ﻜل ﺒﺕ ﻤﻥ ﺒﺘﺎﺕ ﺍﻟﺒﻭﺍﺒﺔ ‪C‬‬
‫ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﻤﺒﺭﻤﺠﺔ ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 0‬ﺃﻭ ‪ ،1‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻤﺜﺎل‪:‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﻀﻊ ‪ 1‬ﻓﻲ ﺍﻟﺒﺘﺘﻴﻥ ‪ PC3‬ﻭ ‪ ،PC7‬ﺒﻔﺭﺽ ﺃﻥ ﻋﻨﻭﺍﻥ ﺴﺠل ﺍﻟﺘﺤﻜﻡ ﻓـﻲ ﺍﻟـﺩﺍﺭﺓ‬
‫‪ 8255A‬ﻫﻭ ‪.83h‬‬
‫ﺍﻟﺤل‪:‬‬

‫‪MOV‬‬ ‫‪AL, 07h‬‬ ‫‪; set PC3=1‬‬


‫‪OUT‬‬ ‫‪83h, AL‬‬
‫‪MOV‬‬ ‫‪AL, 0Fh‬‬ ‫‪; set PC7=1‬‬
‫‪OUT‬‬ ‫‪83h, AL‬‬

‫ﺍﻟﻌﻤل ﻓﻲ ﺍﻟﻨﻤﻁ ‪0‬‬


‫ﺘﺒﺭﻤﺞ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ‪ ،‬ﻜل ﻤﻥ ﺍﻟﺒﻭﺍﺒﺎﺕ ‪ A‬ﻭ ‪ B‬ﻭ ‪ PCL‬ﻭ ‪ PCH‬ﻜ ٌ‬
‫ل ﻋﻠﻰ ﺤﺩﻩ ﻟﺘﻌﻤل ﻜﺒﻭﺍﺒﺔ ﺩﺨل ﺃﻭ‬
‫ﺨﺭﺝ ﺒﺴﻴﻁﺔ‪ .‬ﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻹﺩﺨﺎل ﻭﺍﻹﺨﺭﺍﺝ ﻤﻥ ﺨﻼل ﺍﻟﻘﺭﺍﺀﺓ ﺃﻭ ﺍﻟﻜﺘﺎﺒﺔ ﻤﻥ ﻭﻓﻲ ﺍﻟﺒﻭﺍﺒﺎﺕ ﻤﺒﺎﺸﺭﺓ‬
‫ﺩﻭﻥ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﺇﺸﺎﺭﺍﺕ ﻤﺼﺎﻓﺤﺔ‪ .‬ﻋﻨﺩ ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﺒﻭﺍﺒﺔ ﺨﺭﺝ ﺘﻤﺴﻙ ﺍﻟﺒﻭﺍﺒﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻻ‬
‫ﺘﻤﺴﻙ ﺒﻭﺍﺒﺔ ﺩﺨل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﻤﺩﺍﺨﻠﻬﺎ ﻭﻴﺠﺏ ﻋﻠﻰ ﺍﻟﻤﻌﺎﻟﺞ ﻗﺭﺍﺀﺘﻬﺎ ﻗﺒل ﺘﻐﻴﺭﻫﺎ‪.‬‬
‫ﺘﺠﺭﻱ ﺒﺭﻤﺠﺔ ﺒﻭﺍﺒﺎﺕ ﺍﻟﺩﺍﺭﺓ ‪ 8255A‬ﻤﻥ ﺨﻼل ﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺘﺤﻜﻡ ﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺴﺠل ﺍﻟﺘﺤﻜﻡ‪ ،‬ﻤﻊ ﺍﻟﺘﻨﻭﻴﻪ‬
‫ﺇﻟﻰ ﻀﺭﻭﺭﺓ ﻭﻀﻊ ‪ 1‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭﺓ ﻤﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ‪ .‬ﻴﺠﺏ ﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ B‬ﻓـﻲ ﺍﻟـﻨﻤﻁ ‪0‬‬

‫‪12‬‬
‫ﻭﻀﻊ ‪ 0‬ﻓﻲ ‪ D2‬ﻤﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ‪ ،‬ﻓﻲ ﺤﻴﻥ ﻴﺠﺏ ﻭﻀﻊ ‪ 0‬ﻓﻲ ‪ D5‬ﻭ ‪ D6‬ﻤﻥ ﻜﻠﻤﺔ ﺍﻟـﺘﺤﻜﻡ ﻟﺒﺭﻤﺠـﺔ‬
‫ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ .0‬ﻭﻴﻤﻜﻨﻨﺎ ﺒﺘﻐﻴﻴﺭ ﻗﻴﻡ ﺍﻟﺒﺘﺎﺕ ‪ D3 ،D1 ،D0‬ﻭ ‪ D4‬ﺒﺭﻤﺠﺔ ﻜل ﻤﻥ ﺍﻟﺒﻭﺍﺒـﺎﺕ‬
‫‪ A ،PCL ،B‬ﻭ ‪ PCH‬ﻋﻠﻰ ﺤﺩﻩ ﺩﺨل ﺃﻭ ﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل‪.‬‬
‫ﻤﺜﺎل‪:‬‬
‫ﻤﺎ ﻫﻲ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﺘﺒﺭﻤﺞ‪ :‬ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺨﺭﺝ‪ ،‬ﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﺩﺨل‪ PCL ،‬ﺩﺨل ﻭ ‪ PCU‬ﺨﺭﺝ‪ ،‬ﻜﻤـﺎ‬
‫ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ؟ ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻘﺭﺃ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻭﻴﺭﺴﻠﻬﺎ ﺇﻟﻰ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﻴﻘﺭﺃ‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ ‪ PCL‬ﻭﻴﺭﺴﻠﻬﺎ ﺇﻟﻰ ﺍﻟﺒﻭﺍﺒﺔ ‪ ،PCH‬ﺒﻔﺭﺽ ﺃﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻟﻠﺭﻗﺎﻗﺔ ‪8255A‬‬
‫ﻫﻭ ‪.300h‬‬

‫ﺍﻟﺤل‪:‬‬
‫ﺇﻥ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻫﻲ‪:‬‬

‫‪13‬‬
‫ﻴﻌﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﺃﻭﻻﹰ‪ ،‬ﻋﻠﻰ ﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺴﺠل ﺍﻟﺘﺤﻜﻡ‪ ،‬ﺜﻡ ﻴﻨﻔﺫ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻘﺭﺍﺀﺓ‬
‫ﻭﺍﻟﻜﺘﺎﺒﺔ ﺍﻟﻤﻁﻠﻭﺒﺔ‪.‬‬
‫‪B8255 EQU 300h‬‬ ‫‪; address of port A‬‬
‫‪CNTL EQU 83h‬‬ ‫‪; control word‬‬

‫‪MOV DX, B8255+3‬‬ ‫‪; select control port‬‬


‫‪MOV AL, CNTL‬‬ ‫‪; write control word in control register‬‬
‫‪OUT DX, AL‬‬
‫‪MOV DX, B8255+1‬‬ ‫‪; select port B‬‬
‫‪IN AL, DX‬‬ ‫‪; read port B in AL‬‬
‫‪MOV DX, B8255‬‬ ‫‪; select port A‬‬
‫‪OUT DX, AL‬‬ ‫‪; out AL in port A‬‬
‫‪MOV DX, B8255+2‬‬ ‫‪; select port C‬‬
‫‪IN AL, DX‬‬ ‫‪; read port C in AL‬‬
‫‪AND AL, 0Fh‬‬ ‫‪; reset the higher nibble‬‬
‫‪MOV CL, 4‬‬ ‫‪; put the lower nibble in the higher nibble‬‬
‫‪ROL AL, CL‬‬
‫‪OUT DX, AL‬‬ ‫‪; out AL in port C‬‬

‫ﺍﻟﻌﻤل ﻓﻲ ﺍﻟﻨﻤﻁ ‪1‬‬


‫ﺘﺠﺭﻱ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺩﺨل ﻭﺍﻟﺨﺭﺝ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ‪ ،‬ﺒﺎﻟﺘﻭﺍﻓﻕ ﻤﻊ ﺇﺸـﺎﺭﺍﺕ ﻗـﺩﺡ ‪ strobes‬ﺃﻭ ﻤـﺼﺎﻓﺤﺔ‬
‫‪.handshaking‬‬
‫ﺒﻭﺍﺒﺎﺕ ﺩﺨل ﺘﻌﻤل ﺒﺎﻟﻘﺩﺡ‬
‫ﻓﻲ ﺤﺎل ﺒﺭﻤﺠﺔ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺃﻭ ‪ B‬ﻜﺒﻭﺍﺒﺔ ﺩﺨل ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 1‬ﻓﺈﻥ ﻜل ﻤﻨﻬﻤﺎ ﺘﻌﻤل ﻜﺘﺠﻬﻴﺯ ﺩﺨل ﻤﺎﺴـﻜﺔ‬
‫ﻟﻠﻤﻌﻁﻴﺎﺕ‪ .‬ﻴ‪‬ﻤ ﱢﻜﻨﻨﺎ ﻫﺫﺍ ﺍﻟﻨﻤﻁ ﻤﻥ ﺤﻔﻅ ﻤﻌﻁﻴﺎﺕ ﺍﻟﺩﺨل ﺇﻟﻰ ﺃﻥ ﻴـﺼﺒﺢ ﺍﻟﻤﻌـﺎﻟﺞ ﺠـﺎﻫﺯﹰﺍ ﻟﻘﺭﺍﺀﺘﻬـﺎ‪.‬‬
‫ﹸﺘﺴﺘﺨﺩﻡ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ‪ ،‬ﺍﻟﺒﻭﺍﺒﺔ ‪ PCU‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ PCL‬ﻟﺘﻨﺠﻴﺯ ﻋﻤﻠﻴﺔ ﺍﻟﻤﺼﺎﻓﺤﺔ ﻟﻠﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﺒﻭﺍﺒـﺔ ‪B‬‬
‫ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺘﻭﺼﻴﻑ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻋﻨﺩﻤﺎ ﺘﻌﻤل ﻜل ﻤﻨﻬﺎ ﻜﺒﻭﺍﺒﺔ ﺩﺨل ﺘﻌﻤل ﺒﺎﻟﻘﺩﺡ‪ ،‬ﻜﻤﺎ‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﻨﻔﺴﻪ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﻼﺯﻤﺔ ﻟﺒﺭﻤﺠﺔ ﻜل ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻜﺒﻭﺍﺒﺔ ﺩﺨل ﻓﻲ ﺍﻟﻨﻤﻁ ‪.1‬‬

‫‪14‬‬
‫ﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻹﺩﺨﺎل ﺒﺎﻟﻘﺩﺡ ﻜﻤﺎ ﻴﻠﻲ‪ ،‬ﺍﻨﻅﺭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺯﻤﻨﻲ‪:‬‬
‫‪ -1‬ﺘﻀﻊ‪ ،‬ﺃﻭﻻﹰ‪ ،‬ﺘﺠﻬﻴﺯﺓ ﺍﻟﺩﺨل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ‪.‬‬
‫‪ -2‬ﺘﻭﻟﺩ ﺘﺠﻬﻴﺯﺓ ﺍﻟﺩﺨل ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ﻋﻠﻰ ﺍﻟ ‪‬ﻤﺩﺨل ‪ . STB‬ﹸﺘﻤﺴﻙ ﺒﻭﺍﺒﺔ ﺍﻟﺩﺨل‪ ،‬ﻨﺘﻴﺠﺔ ﻟﻬﺫﻩ ﺍﻟﻨﺒـﻀﺔ‪،‬‬
‫ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﺘﻭﺍﺠﺩﺓ ﻋﻠﻰ ﻤﺩﺍﺨﻠﻬﺎ‪ ،‬ﻭﻤﻥ ﺜﻡ ﺘﻔﻌل ﺇﺸﺎﺭﺓ ﺼﻭﺍﻥ ﺍﻟﺩﺨل ﻤﻤﺘﻠﺊ ‪(input buffer IBF‬‬
‫)‪ ،full‬ﺃﻱ ﺘﺠﻌﻠﻪ ﻴﺴﺎﻭﻱ ‪ِ ،1‬ﻟ ﹸﺘﻌﻠﻡ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﺘﺠﻬﻴﺯﺓ ﺍﻟﺩﺨل ﺃﻨﻪ ﺠـﺭﻯ ﻤـﺴﻙ ﺍﻟﻤﻌﻁﻴـﺎﺕ‬
‫ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ‪ .‬ﻭﻴﺠﺭﻱ ﺃﺨﻴﺭﹰﺍ ﺘﻔﻌﻴل ﺇﺸﺎﺭﺓ ﻁﻠﺏ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ (interrupt request) IR‬ﺇﺫﺍ‬
‫ﻜﺎﻨﺕ ﻤﺅﻫﻠﺔ‪.‬‬
‫‪ -3‬ﻋﻨﺩﻤﺎ ‪‬ﻴﻌﻠﻡ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻨﻪ ﺠﺭﻯ ﻗﺩﺡ ﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺍﻟﺒﻭﺍﺒﺔ‪ ،‬ﺇﻤﺎ ﺒﺭﻤﺠﻴﹰﺎ ﻋﻥ ﻁﺭﻴﻕ ﺘﻔﺤﺹ ﺃﻭ ﺘﻘﺼﻲ‬
‫ﺤﺎﻟﺔ ‪ ،IBF‬ﺃﻭ ﻋﺘﺎﺩﻴﹰﺎ ﻋﻥ ﻁﺭﻴﻕ ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺒﺈﺸﺎﺭﺓ ‪ ،INTR‬ﻴﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ﺘﻌﻠﻴﻤﺔ ‪ IN‬ﻟﻘـﺭﺍﺀﺓ‬
‫ﻭ ‪ INTR‬ﺇﻟـﻰ ﺤﺎﻟﺘﻬﻤـﺎ ﻏﻴـﺭ‬ ‫‪STB‬‬ ‫ﻜل ﻤﻥ‬ ‫‪RD‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ .‬ﺃﺜﻨﺎﺀ ﻋﻤﻠﻴﺔ ﺍﻟﻘﺭﺍﺀﺓ ﺘﻌﻴﺩ ﺍﻹﺸﺎﺭﺓ‬

‫‪15‬‬
‫ﺍﻟﻔﻌﺎﻟﺔ ﺒﺎﻨﺘﻅﺎﺭ ﺤﺩﻭﺙ ﻋﻤﻠﻴﺔ ﻗﺩﺡ ﻤﻌﻁﻴﺎﺕ ﺠﺩﻴﺩﺓ ﻓﻲ ﺍﻟﺒﻭﺍﺒﺔ‪.‬‬

‫ﺩﺧﻞ ﻣﻦ ﲡﻬﻴﺰﺓ ﺧﺎﺭﺟﻴﺔ‬

‫ﻴﺠﺭﻱ ﺘﺄﻫﻴل ﺃﻭ ﺤﺠﺏ ﺇﺸﺎﺭﺓ ﺘﻭﻟﻴﺩ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ INTRA‬ﺍﻟﺨﺎﺼـﺔ ﺒﺎﻟﺒﻭﺍﺒـﺔ ‪ A‬ﻭ ‪ INTRB‬ﺍﻟﺨﺎﺼـﺔ‬
‫ﺒﺎﻟﺒﻭﺍﺒﺔ ‪ B‬ﺒﻭﻀﻊ ‪ 0‬ﺃﻭ ‪ 1‬ﻓﻲ ﺍﻟﺒﺕ ‪ PC4‬ﻭﻓﻲ ﺍﻟﺒﺕ ‪ PC2‬ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪ ،‬ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺘﺤﻜـﻡ‬
‫ﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺴﺠل ﺍﻟﺘﺤﻜﻡ ﻤﻊ ﻭﻀﻊ ‪ 0‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭ ﻤﻥ ﺍﻟﻜﻠﻤﺔ‪ .‬ﻴﻤﻜﻥ ﻓﻲ ﻨﻤـﻁ ﺍﻹﺩﺨـﺎل ﺒﺎﻟﻘـﺩﺡ‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺘﺘﻴﻥ ‪ PC6‬ﻭ ‪ PC7‬ﻜﺒﻭﺍﺒﺎﺕ ﺩﺨل ﺃﻭ ﺨﺭﺝ‪.‬‬

‫ﻤﺜﺎل‪ :‬ﺍﻜﺘﺏ ﺇﺠﺭﺍﺌﻴﺔ ﺘﻌﻤل ﻋﻠﻰ ﻗﺭﺍﺀﺓ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻜﻠﻤﺎ ﺠﺭﻯ ﺍﻟـﻀﻐﻁ ﻋﻠـﻰ ﺃﺤـﺩ‬
‫ﻤﻔﺎﺘﻴﺤﻬﺎ‪ ،‬ﺒﻔﺭﺽ ﺃﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻟﻠﺩﺍﺭﺓ ‪ 8255A‬ﻫﻭ ‪ ،20h‬ﻋﻠﻤﹰﺎ ﺃﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺘـﻀﻊ ﻋﻠـﻰ‬
‫ﻤﺨﺎﺭﺠﻬﺎ ﺘﺭﻤﻴﺯ ‪ ASCII‬ﻟﻠﻤﻔﺘﺎﺡ ﺍﻟﻤﻀﻐﻭﻁ ﻭﻤﻥ ﺜﻡ ﺘﻭﻟﺩ ﻨﺒﻀﺔ ﺴـﺎﻟﺒﺔ ﻤـﺩﺘﻬﺎ ‪ِ 1‬ﻤﻜﺭﻭﺜﺎﻨﻴـﺔ ﻋﻠـﻰ‬
‫ﻜﻠﻤﺎ ﺠﺭﻯ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﻤﻔﺎﺘﻴﺤﻬﺎ‪.‬‬ ‫‪DAV‬‬ ‫ﺍﻟﻤﺨﺭﺝ‬

‫ﺇﻟﻰ ‪ PC4‬ﻭﻤﺨﺎﺭﺝ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺇﻟﻰ ﺍﻟﺒﻭﺍﺒﺔ ‪ ،A‬ﻜﻤﺎ ﻫﻭ ﻤﺒـﻴﻥ ﻓـﻲ ﺍﻟـﺸﻜل‪.‬‬ ‫ﻨﻭﺼل ‪DAV‬‬ ‫ﺍﻟﺤل‪:‬‬
‫ﻨﻔﺤﺹ ﻓﻲ ﺍﻹﺠﺭﺍﺌﻴﺔ‪ ،‬ﻋﻠﻰ ﻨﺤﻭ ﻤﺴﺘﻤﺭ‪ ،‬ﻗﻴﻤﺔ ‪ PC5‬ﺤﺘﻰ ﺘﺼﺒﺢ ‪ 1‬ﻋﻨﺩﻫﺎ ﻨﻘﺭﺃ ﺘﺭﻤﻴﺯ ‪ ASCII‬ﻟﻠﻤﻔﺘﺎﺡ‬
‫ﺍﻟﻤﻀﻐﻭﻁ‪.‬‬
‫‪BIT5‬‬ ‫‪EQU 20h‬‬
‫‪PORTC‬‬ ‫‪EQU 22h‬‬
‫‪PORTA‬‬ ‫‪EQU 20h‬‬

‫‪READ PROC NEAR‬‬


‫‪IN‬‬ ‫‪AL, PORTC‬‬
‫‪TEST AL, BIT5‬‬ ‫?‪;check on IBF‬‬
‫‪JZ‬‬ ‫‪READ‬‬
‫‪IN AL, PORTA‬‬
‫‪RET‬‬
‫‪READ ENDP‬‬

‫‪16‬‬
‫ﺒﻭﺍﺒﺎﺕ ﺨﺭﺝ ﺘﻌﻤل ﺒﺎﻟﻘﺩﺡ‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺍﻟﺘﻭﺼﻴﻑ ﺍﻟﺩﺍﺨﻠﻲ ﻟﻠﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻋﻨﺩﻤﺎ ﺘﻌﻤل ﻜل ﻤﻨﻬﻤﺎ ﻜﺒﻭﺍﺒﺔ ﺨﺭﺝ ﺘﻌﻤل‬
‫ﺒﺎﻟﻘﺩﺡ‪ ،‬ﻜﻤﺎ ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﻨﻔﺴﻪ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﻼﺯﻤﺔ ﻟﺒﺭﻤﺠﺔ ﻜل ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﻜﺒﻭﺍﺒﺔ ﺨﺭﺝ‬
‫ﻓﻲ ﺍﻟﻨﻤﻁ ‪.1‬‬

‫‪17‬‬
‫ﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺍﻹﺨﺭﺍﺝ ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 1‬ﻜﻤﺎ ﻴﻠﻲ‪ ،‬ﺍﻨﻅﺭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺯﻤﻨﻲ‪:‬‬
‫ﺍﻟ ‪‬ﻤﺨﺭﺝ ﺼﻨﻭﺍﻥ ﺍﻟﺨﺭﺝ ﻤﻤﺘﻠﺊ‬ ‫‪WR‬‬ ‫‪ -1‬ﻋﻨﺩﻤﺎ ﻴﻜﺘﺏ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ‪ ،‬ﺘﻔ ‪‬ﻌل ﺇﺸﺎﺭﺓ ﺍﻟﻘﺭﺍﺀﺓ‬
‫‪OBF‬‬ ‫)‪ ،(output buffer full‬ﺃﻱ ﺘﺠﻌﻠﻪ ﻴﺴﺎﻭﻱ ‪ .0‬ﺘﺘﻘﺼﻰ ﺘﺠﻬﻴﺯﺓ ﺍﻟﺨـﺭﺝ ﺤﺎﻟـﺔ ﺍﻟﻤﺨـﺭﺝ‬ ‫‪OBF‬‬

‫ﻭﻋﻨﺩﻤﺎ ﺘﺠﺩﻩ ﻤﺴﺎﻭﻴﹰﺎ ﺍﻟـ ‪ 0‬ﹶﺘﻌﻠﻡ ﺒﺠﺎﻫﺯﻴﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﻤﺨﺎﺭﺝ ﺍﻟﺒﻭﺍﺒﺔ‪.‬‬
‫‪ -2‬ﻋﻨﺩﻤﺎ ﹶﺘﻘﺒل ﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺭﺝ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺘﻘﺭﺅﻫﺎ‪ ،‬ﺘﻭﻟﺩ ﻨﺒﻀﺔ ﺇﺸﻌﺎﺭ ‪ acknowledge‬ﺴﺎﻟﺒﺔ ﻋﻠﻰ ﺍﻟﻤﺩﺨل‬
‫‪. ACK‬‬
‫‪ -3‬ﺘﻌﻴﺩ ﺍﻟﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟ ‪‬ﻤﺩﺨل ‪ ACK‬ﺍﻟ ‪‬ﻤﺨﺭﺝ ‪ OBF‬ﺇﻟﻰ ﺍﻟﺤﺎﻟﺔ ﻏﻴﺭ ﺍﻟﻔﻌﺎﻟﺔ‪ ،‬ﺃﻱ ‪ ،1‬ﻭﺘﻭﻟﺩ ﺍﻟﺩﺍﺭﺓ ‪8255A‬‬
‫ﺠﺒﻬﺔ ﺼﺎﻋﺩﺓ ﻋﻠﻰ ﺍﻟﻤﺨﺭﺝ ‪ ، INTR‬ﺇﺫﺍ ﻜﺎﻥ ﻁﻠﺏ ﺍﻟﻤﻘﻁﻌﺔ ﻤﺅﻫل‪ .‬ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﺒﻬﺔ ﺍﻟـﺼﺎﻋﺩﺓ‬
‫ﻋﻠﻰ ﺍﻟﻤﺨﺭﺝ ‪ INTR‬ﻟﻤﻘﺎﻁﻌﺔ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ‪.‬‬

‫ﻴﺠﺭﻱ ﺘﺄﻫﻴل ﺃﻭ ﺤﺠﺏ ﺇﺸﺎﺭﺓ ﺘﻭﻟﻴﺩ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ INTRA‬ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﺒﻭﺍﺒﺔ ‪ A‬ﻭﺇﺸﺎﺭﺓ ‪ INTRB‬ﺍﻟﺨﺎﺼـﺔ‬
‫ﺒﺎﻟﺒﻭﺍﺒﺔ ‪ B‬ﺒﻭﻀﻊ ‪ 1‬ﺃﻭ ‪ 0‬ﻓﻲ ﺍﻟﺒﺕ ‪ PC6‬ﻭﻓﻲ ﺍﻟﺒﺕ ‪ PC2‬ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪ ،‬ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺘﺤﻜـﻡ‬
‫ﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺴﺠل ﺍﻟﺘﺤﻜﻡ ﻤﻊ ﻭﻀﻊ ‪ 0‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭ ﻤﻥ ﺍﻟﻜﻠﻤﺔ‪ .‬ﻴﻤﻜﻥ ﻓﻲ ﻨﻤﻁ ﺍﻹﺨـﺭﺍﺝ ﺒﺎﻟﻘـﺩﺡ‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺘﺘﻴﻥ ‪ PC3‬ﻭ ‪ PC4‬ﻜﺒﻭﺍﺒﺎﺕ ﺩﺨل ﺃﻭ ﺨﺭﺝ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺒﻔﺭﺽ ﺃﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻤﻥ ﺍﻟﺩﺍﺭﺓ ‪ 8255A‬ﻤﻭﺼﻭﻟﺔ ﺇﻟﻰ ﻁﺎﺒﻌﺔ‪ ،‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠـﹰﺎ ﻴﻌﻤـل ﻋﻠـﻰ‬
‫ﻁﺒﺎﻋﺔ ﺍﻟﻨﺹ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫?‪Hi, how are you‬‬
‫?‪I am fine, How are you‬‬

‫‪18‬‬
:‫ﺍﻟﺤل‬

MY_DATA DB "Hi, how are you?",CR,LF


DB "I am fine, How are you?",CR,LF,"$"
PA EQU 300H ; port A address
PB EQU 301H ; port B address
PC EQU 302H ; port C address
CWP EQU 303H ; control word address
LF EQU 0AH ; line feed
CR EQU 0DH ; carriage return

MOV AL, 1010000B ; control word PA= out mode 1


MOV DX, CWP ; DX=303 control word port
OUT DX, AL ; issue contol word
MOV SI,OFFSET MY_DATA
AGAIN:
MOV AH, [SI]
CMP AH,’$’
JZ OVER
BACK:
MOV DX, PC ;check port C
IN AL, DX
AND AL, 80 ;check OBF
JZ BACK
MOV DX, PA
MOV AL, AH
OUT DX, AL
INC SI
JMP AGAIN
OVER: …

19
‫ﺍﻟﻌﻤل ﻓﻲ ﺍﻟﻨﻤﻁ ‪2‬‬
‫ﻴﻤﻜﻥ ﻓﻘﻁ ﺒﺭﻤﺠﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻟﺘﻌﻤل ﻓﻲ ﺍﻟﻨﻤﻁ ‪ ،2‬ﻋﻨﺩﻫﺎ ﺘﺼﺒﺢ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺜﻨﺎﺌﻴﺔ ﺍﻻﺘﺠﺎﻩ ﻤﻤﺎ ﻴـﺴﻤﺢ‬
‫ﻟﻨﺎ ﺒﺈﺩﺨﺎل ﻭﺇﺨﺭﺍﺝ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻨﻔﺴﻬﺎ ﻟﻠﺒﻭﺍﺒﺔ ‪.A‬‬
‫ﹸﺘﻤﺴﻙ ﺍﻟﺒﻭﺍﺒﺔ ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟ ‪‬ﻤﺩﺨﻠﺔ ﺇﻟﻴﻬﺎ ﻤﻥ ﺍﻟﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺎﺭﺠﻴﺔ ﺃﻭ ﺍﻟ ‪‬ﻤﺨﺭﺠﺔ ﻋﻠﻴﻬـﺎ ﻤـﻥ‬
‫ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﻴﺠﺭﻱ‪ ،‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻨﻤﻁ‪ ،‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺘﺎﺕ ‪ PC3-PC7‬ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ C‬ﻜﺈﺸﺎﺭﺍﺕ ﺘﺤﻜﻡ ﺃﻭ ﺤﺎﻟـﺔ‬
‫ﻹﺘﻤﺎﻡ ﻋﻤﻠﻴﺔ ﺍﻟﻨﻘل ﺒﺎﻟﻤﺼﺎﻓﺤﺔ‪ ،‬ﺒﻴﻨﻤﺎ ﻴﻤﻜﻥ ﺒﺭﻤﺠﺔ ﺍﻟﻤﻐﺎﺭﺯ ‪ PC0-PC2‬ﻟﺘﻌﻤل ﻜﻤﻐﺎﺭﺯ ﺩﺨل ﺃﻭ ﺨﺭﺝ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺍﻟﺘﻭﺼﻴﻑ ﺍﻟﺩﺍﺨﻠﻲ ﻟﻠﺩﺍﺭﺓ ‪ 8255A‬ﻋﻨﺩﻤﺎ ﺘﻌﻤل ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪.2‬‬

‫ﻛﻠﻤﺔ ﲢﻜﻢ‬

‫‪20‬‬
‫ﺘﺠﺭﻱ ﻋﻤﻠﻴﺔ ﺇﺭﺴﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﺒﺭ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 2‬ﻜﻤﺎ ﻴﻠﻲ‪ ،‬ﺍﻨﻅﺭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺯﻤﻨﻲ‪:‬‬
‫ﻓﺈﺫﺍ ﻜﺎﻥ ﻤﺴﻭﻴﹰﺎ ‪ 1‬ﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﺼﻭﺍﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﺎﺭﻏﹰﺎ‪ ،‬ﻴﻜﺘﺏ‬ ‫‪OBF‬‬ ‫ﻻ ﺍﻟﻤﻌﺎﻟﺞ ﺤﺎﻟﺔ‬
‫‪ -1‬ﻴﻔﺤﺹ ﺃﻭ ﹰ‬
‫ﺘﺴﺎﻭﻱ ﺍﻟـ ‪.0‬‬ ‫‪OBF‬‬ ‫ﺍﻟﻤﻌﺎﻟﺞ ﺤﻴﻨﺌﺫ ﻤﻌﻁﻴﺎﺘﻪ ﻓﻲ ﺍﻟﺒﻭﺍﺒﺔ ‪ ،A‬ﻭﺍﻟﺫﻱ ﻴﺅﺩﻱ ﺇﻟﻰ ﺠﻌل‬
‫ﻟﺘﺤﺩﺩ ﻓﻴﻤﺎ ﺇﺫﺍ ﻗﺎﻡ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻜﺘﺎﺒﺔ ﻤﻌﻁﻴـﺎﺕ ﺠﺩﻴـﺩﺓ‬ ‫‪OBF‬‬ ‫‪ -2‬ﺘﺭﺍﻗﺏ ﺍﻟﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺎﺭﺠﻴﺔ ﺃﻴﻀﹰﺎ ﺤﺎﻟﺔ‬
‫ﺘﺭﺴل ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ـﺩﺨل ‪. ACK‬‬ ‫‪OBF‬‬ ‫ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ‪ .‬ﻋﻨﺩﻤﺎ ﺘﻜﺘﺸﻑ ﺍﻟﺘﺠﻬﻴﺯﺓ ﻭﺠﻭﺩ ‪ 0‬ﻋﻠﻰ‬
‫ﺼﻭﺍﻥ ﺍﻟﺨﺭﺝ ﺍﻟﺜﻼﺜﻲ ﺍﻟﺤﺎﻻﺕ ﻟﻠﺒﻭﺍﺒـﺔ ‪ ،A‬ﻭﺘﻅﻬـﺭ‬ ‫‪ACK‬‬ ‫ﻴﺅﻫل ﺍﻟﻤﺴﺘﻭﻯ ‪ 0‬ﻟﻠﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺩﺨل‬
‫ﺒﺎﻟﺘﺎﻟﻲ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺼﻭﺍﻥ ﻋﻠﻰ ‪‬ﻤﺨﺭﺝ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻤﻤـﺎ ﻴـﺴﻤﺢ ﻟﻠﺘﺠﻬﻴـﺯﺓ ﺍﻟﺨﺎﺭﺠﻴـﺔ‬
‫ﻤﺴﺎﻭﻴﹰﺎ ‪ ،1‬ﻜﻤـﺎ‬ ‫‪ACK‬‬ ‫ﺒﻘﺭﺍﺀﺘﻬﺎ‪ .‬ﻭﺘﻌﻭﺩ ﻤﺨﺎﺭﺝ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺇﻟﻰ ﺍﻟﺤﺎﻟﺔ ﺍﻟﻌﺎﺌﻤﺔ ﻋﻨﺩﻤﺎ ﻴﺼﺒﺢ ﺍﻟﻤ‪‬ﺩﺨل‬
‫ﺇﻟﻰ ﺤﺎﻟﺘﻬﺎ ﻏﻴﺭ ﺍﻟﻔﻌﺎﻟﺔ ﻭﺍﻟﺘﻲ ﺘﺴﺎﻭﻱ ‪.1‬‬ ‫‪OBF‬‬ ‫ﺃﻴﻀﹰﺎ ﺍﻟﺒﺕ‬ ‫‪ACK‬‬ ‫ﺘﻌﻴﺩ ﺍﻟﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺩﺨل‬

‫ﻤﺜﺎل‪ :‬ﺘﻌﻤل ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﺇﺭﺴﺎل ﻤﺤﺘﻭﻯ ‪ AH‬ﻋﺒﺭ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺜﻨﺎﺌﻴﺔ ﺍﻻﺘﺠﺎﻩ‪:‬‬

‫‪MasterW‬‬ ‫‪PROC NEAR‬‬


‫‪TRANS:‬‬
‫‪IN‬‬ ‫‪AL, PORTC‬‬ ‫‪; read port C‬‬
‫‪TEST‬‬ ‫‪AL, 80h‬‬ ‫‪; check if PC7=1‬‬
‫‪JZ‬‬ ‫‪TRANS‬‬ ‫‪; re-read port C if PC7=0‬‬
‫‪MOV‬‬ ‫‪AL, AH‬‬ ‫‪; move AH in AL‬‬
‫‪OUT‬‬ ‫‪PORTA, AL‬‬ ‫‪; out AL into port A‬‬
‫‪RET‬‬

‫‪21‬‬
‫ﻭﻻﺴﺘﻘﺒﺎل ﻤﻌﻁﻴﺎﺕ ﻋﺒﺭ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ 2‬ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫ ﻤﺎ ﻴﻠﻲ‪ ،‬ﺍﻨﻅﺭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺯﻤﻨﻲ ﺍﻟﺴﺎﺒﻕ‪:‬‬
‫ﻻ ﺘﺠﻬﻴﺯﺓ ﺍﻹﺩﺨﺎل ﻤﻌﻁﻴﺎﺘﻬﺎ ﻋﻠﻰ ﺍﻟﺒﻭﺍﺒﺔ‪ ،‬ﻭﻤﻥ ﺜﻡ ﺘﻭﻟﺩ ﺇﺸﺎﺭﺓ ﺍﻟﻘﺩﺡ ﻋﻠﻰ ‪ . STB‬ﺘﺄﺨـﺫ‬
‫‪ -1‬ﺘﻀﻊ ﺃﻭ ﹰ‬
‫ﺍﻟﺒﺕ ‪ ،IBF‬ﻨﺘﻴﺠﺔ ﻹﺸﺎﺭﺓ ﺍﻟﻘﺩﺡ‪ ،‬ﺍﻟﻘﻴﻤﺔ ‪ 1‬ﻭﻴﺠﺭﻱ ﻤﺴﻙ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ﺼﻭﺍﻥ ﻀﻤﻥ ﺍﻟﺭﻗﺎﻗﺔ ‪.8255A‬‬
‫‪ -2‬ﻴﺘﻘﺼﻰ ﺍﻟﻤﻌﺎﻟﺞ ﺒﺭﻤﺠﻴﹰﺎ ﺤﺎﻟﺔ ‪ IBF‬ﺤﺘﻰ ﺘﺼﺒﺢ ﻤﺴﺎﻭﻴﺔ ‪ ،1‬ﻭﺍﻟﺫﻱ ﻴﻌﻨﻲ ﻭﺠﻭﺩ ﻤﻌﻁﻴﺎﺕ ﺠﺩﻴﺩﺓ ﻓﻲ‬
‫ﺼﻭﺍﻥ ﺍﻟﺩﺨل‪ .‬ﻴ‪‬ﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ﺤﻴﻨﺌﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IN‬ﻟﻘﺭﺍﺀﺓ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺼﻭﺍﻥ‪ .‬ﻴﺠـﺭﻱ ﺨـﻼل ﺘﻨﻔﻴـﺫ‬
‫ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ ﺇﻋﺎﺩﺓ ﻗﻴﻤﺔ ﺍﻟﺒﺕ ‪ IBF‬ﺇﻟﻰ ‪ 0‬ﻭﻨﻘل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ‪.AL‬‬

‫ﻤﺜﺎل‪ :‬ﺘﻌﻤل ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﻗﺭﺍﺀﺓ ﻤﻌﻁﻴﺎﺕ ﻤﻥ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﺜﻨﺎﺌﻴﺔ ﺍﻻﺘﺠﺎﻩ ﻭﺘﻀﻌﻬﺎ ﻓﻲ ‪: AL‬‬

‫‪MasterR‬‬ ‫‪PROC NEAR‬‬


‫‪Read:‬‬
‫‪IN‬‬ ‫‪AL, PORTC‬‬ ‫‪; read port C‬‬
‫‪TEST‬‬ ‫‪AL, 20h‬‬ ‫‪; check if PC5=1‬‬
‫‪JZ‬‬ ‫‪Read‬‬ ‫‪; re-read port C if PC5=0‬‬
‫‪IN‬‬ ‫‪AL, PORTA‬‬ ‫‪; read port A into AL‬‬
‫‪RET‬‬

‫‪‬ﻴﻤﻜﻨﻨﺎ ﹶﺘﻔﻌﻴل ﺇﺸﺎﺭﺓ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ INTR‬ﻋﺒﺭ ﺍﻟﻤﻐﺭﺯ ‪ PC3‬ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺎﻻﺘﺠـﺎﻫﻴﻥ ﺒـﻴﻥ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫ﻭﺘﺠﻬﻴﺯﺓ ﺨﺎﺭﺠﻴﺔ‪.‬‬
‫ﻋﻨﺩ ﻭﻀﻊ ‪ 1‬ﻓﻲ ‪ INTE 1‬ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﻤﻘﺎﻁﻌﺔ ﻋﻨﺩﻤﺎ ﺘﻘﺭﺃ ﺘﺠﻬﻴﺯﺓ ﺨﺎﺭﺠﻴـﺔ ﺍﻟﻤﻌﻁﻴـﺎﺕ ﻤـﻥ‬
‫ﺼﻭﺍﻥ ﺍﻟﺨﺭﺝ‪ .‬ﻭﻋﻨﺩ ﻭﻀﻊ ‪ 1‬ﻓﻲ ‪ INTE 2‬ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﻤﻘﺎﻁﻌﺔ ﻋﻨﺩﻤﺎ ﺘﻘﺩﺡ ﺘﺠﻬﻴﺯﺓ ﺨﺎﺭﺠﻴـﺔ‬
‫ﻤﻌﻁﻴﺎﺕ ﺠﺩﻴﺩﺓ ﻓﻲ ﺼﻭﺍﻥ ﺍﻟﺩﺨل‪ .‬ﻴﻤﻜﻨﻨﺎ ﺘﻐﻴﻴﺭ ﺤﺎﻟﺔ ﺍﻟﺒﺘﺘﻴﻥ ‪ INTE 1‬ﻭ ‪ INTE 2‬ﻤﻥ ﺨﻼل ﻜﺘﺎﺒـﺔ ‪0‬‬
‫ﺃﻭ ‪ 1‬ﻓﻲ ‪ PC6‬ﻭ ‪ PC4‬ﻋﻠﻰ ﺍﻟﺘﺭﺘﻴﺏ‪ ،‬ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﻜﺘﺎﺒﺔ ﻜﻠﻤﺔ ﺘﺤﻜﻡ ﻤﻨﺎﺴﺒﺔ ﻓﻲ ﺴﺠل ﺍﻟﺘﺤﻜﻡ ﻤﻊ ﻭﻀﻊ‬
‫‪ 0‬ﻓﻲ ﺍﻟﺒﺕ ﺍﻷﺨﻴﺭ ﻤﻥ ﺍﻟﻜﻠﻤﺔ‪.‬‬

‫ﺘﻭﺍﺠﻪ ﺍﻟﻤﺒﺩﻻﺕ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﺒﺩﻻﺕ ﺍﻟﺘﻤﺎﺜﻠﻴﺔ‪/‬ﺍﻟﺭﻗﻤﻴﺔ ‪ ADC‬ﻭﺍﻟﻤﺒﺩﻻﺕ ﺍﻟﺭﻗﻤﻴﺔ‪/‬ﺍﻟﺘﻤﺎﺜﻠﻴﺔ ‪ DAC‬ﻟﺭﺒﻁ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻤﻊ ﺍﻟﻌﺎﻟﻡ‬


‫ﺍﻟﺘﻤﺎﺜﻠﻲ‪ .‬ﺇﻥ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻅﻭﺍﻫﺭ ﻭﺍﻷﺤﺩﺍﺙ ﺍﻟﺘﻲ ﻴﻌﻤل ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﻤﺭﺍﻗﺒﺘﻬﺎ ﺃﻭ ﺍﻟﺘﺤﻜﻡ ﺒﻬﺎ ﻫﻲ ﺘﻤﺎﺜﻠﻴﺔ‬

‫‪22‬‬
‫ﻓﻲ ﻁﺒﻴﻌﺘﻬﺎ‪ .‬ﺘﺘﻨﻭﻉ ﺍﻟﻅﻭﺍﻫﺭ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﺘﻌﺎﻤل ﻤﻌﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻥ ﻤﺭﺍﻗﺒﺔ ﺍﻟﻜﻼﻡ ﺇﻟﻰ ﺍﻟﺘﺤﻜﻡ ﺒﻌﻤـل‬
‫ﺍﻟﻤﺤﺭﻜﺎﺕ ﻭﻏﻴﺭﻫﺎ‪.‬‬

‫ﺍﻟﻤﺒﺩل ﺍﻟﺭﻗﻤﻲ‪/‬ﺍﻟﺘﻤﺎﺜﻠﻲ ‪DAC0830‬‬


‫ﺍﻟﻤﺒﺩل ‪ ،DAC0830‬ﻤﻥ ﺸﺭﻜﺔ ‪ ،National Instrument‬ﻤﺒﺩل ﻭﺍﺴﻊ ﺍﻻﻨﺘﺸﺎﺭ ﺭﺨﻴﺹ ﺍﻟـﺜﻤﻥ‪ .‬ﹸﺘﺒـﺩل‬
‫ﺍﻟﺭﻗﺎﻗﺔ ‪ DAC0830‬ﺍﻷﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﻨﻴﺔ ﺒﻁﻭل ‪-8‬ﺒﺕ ﻋﻠﻰ ﻤﺩﺨﻠﻬﺎ ﺇﻟﻰ ﻓﹸﻠﻁﻴﺔ ﺘﻤﺎﺜﻠﻴﺔ ﻤﻜﺎﻓﺌﺔ‪.‬‬
‫ﺘﹸﺤﺩﺩ ﻋﺩﺩ ﺍﻟﺘﺭﺍﻜﻴﺏ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﻠﻤﺩﺍﺨل ﺍﻻﺜﻨﺎﺌﻴﺔ ﻟﻠﻤﺒﺩل ﻋﺩﺩ ﻗﻴﻡ ﺍﻟﻔﹸﻠﻁﻴﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺃﻥ ﻴﻭﻟـﺩﻫﺎ‬
‫ﺍﻟﻤﺒﺩل ﻋﻠﻰ ﻤﺨﺭﺠﻪ ﺍﻟﺘﻤﺎﺜﻠﻲ‪ .‬ﻓﻤﺜﻼﹰ‪ ،‬ﻴﻭﻟﺩ ﻤﺒﺩل ﺒـ ‪-8‬ﺒﺕ ‪ 256 = 28‬ﻤﺴﺘﻭﻯ ﹸﻓﻠﻁﻴﺔ ﻤﺨﺘﻠﻑ‪ ،‬ﻓﻲ ﺤﻴﻥ‬
‫ﻴﻭﻟﺩ ﻤﺒﺩل ﺒـ ‪ 10‬ﺒﺕ ‪ 1024‬ﻤﺴﺘﻭﻯ ﻤﺨﺘﻠﻑ‪.‬‬

‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺘﻭﺯﻉ ﻤﻐﺎﺭﺯ ﺍﻟﻤﺒﺩل ‪:DAC0830‬‬

‫ﻴ‪‬ﻨﺘﺞ ﺍﻟﻤﺒﺩل ﻋﻠﻰ ﺍﻟﻤﺨﺭﺠﻴﻥ ‪ IOUT1‬ﻭ ‪ ،IOUT2‬ﺍﻟﻤﺼﻤﻤﻴﻥ ﻟﻴﻜﻭﻨﺎ ‪‬ﻤﺩﺨﻠﻴﻥ ﻟﻤﻜﺒﺭ ﻋﻤﻠﻴﺎﺕ ﺨﺎﺭﺠﻲ‪،‬‬
‫ﹸﻓﻠﻁﻴﺔ ﺘﻤﺎﺜﻠﻴﺔ ﺘﻜﺎﻓﺊ ﺍﻟﺩﺨل ﺍﻟﺭﻗﻤﻲ ﻋﻠﻰ ﺍﻟﻤﺩﺍﺨل ‪.DI0-DI7‬‬
‫ﺘﺤﺩﺩ ‪ VREF‬ﺍﻟﻔﻠﻁﻴﺔ ﺍﻟﻌﻅﻤﻰ ﻟﺨﺭﺝ ﺍﻟﻤﺒﺩل ﻭﺍﻟﺘﻲ ﹶﺘﻨﺘﺞ ﻤﻥ ﺃﺠل ﻗﻴﻤﺔ ﻋﻅﻤﻰ ﻋﻠﻰ ﺍﻟ ‪‬ﻤﺩﺨل ﺍﻟﺭﻗﻤـﻲ‬
‫ﻭﺍﻟﺘﻲ ﺘﺴﺎﻭﻱ ‪ .1111 1111b‬ﻨﹸﻌﺭﻑ ﺨﻁﻭﺓ ﺍﻟﺘﻜﻤﻴﺔ ﺃﻭ ﺘﻤﻴ‪‬ﺯﻴﺔ ﺍﻟﻤﺒﺩل ﺒﺄﻨﻪ ﺃﺼـﻐﺭ ﻓﻠﻁﻴـﺔ ﻴﻤﻜـﻥ ﺃﻥ‬
‫ﻴﻨﺘﺠﻬﺎ ﺍﻟﻤﺒﺩل ﻏﻴﺭ ﺍﻟﺼﻔﺭ‪ ،‬ﻭﺘﺴﺎﻭﻱ‪ . − VREF :‬ﺘﺴﺎﻭﻱ ﺍﻟﻔﻠﻁﻴﺔ ﻋﻠﻰ ﻤﺨﺭﺝ ﺍﻟﻤﺒﺩل ﻨﺎﺘﺞ ﺠﺩﺍﺀ ﺨﻁﻭﺓ‬
‫‪255‬‬
‫ﺍﻟﺘﻜﻤﻴﺔ ﺒﺎﻟﻘﻴﻤﺔ ﻋﻠﻰ ﺍﻟﻤﺩﺍﺨل ﺍﻟﺭﻗﻤﻴﺔ ﻟﻠﻤﺒﺩل‪ .‬ﺒﻔﺭﺽ ﺃﻥ ‪ VREF = -5.0 v‬ﻓﺈﻥ ﺨﻁﻭﺓ ﺍﻟﺘﻜﻤﻴﺔ ﺘـﺴﺎﻭﻱ‬
‫‪ 0.0196‬ﹸﻓﻠﻁ‪ ،‬ﻭﺇﺫﺍ ﻁﺒﻘﻨﺎ ﺍﻟﻘﻴﻤﺔ ‪ 1001 0110b‬ﻋﻠﻰ ﺍﻟ ‪‬ﻤﺩﺍﺨل ﺍﻟﺭﻗﻤﻴﺔ ﻟﻠﻤﺒﺩل ﻓﺈﻥ ﻓﻠﻁﻴﺔ ﺍﻟﺨﺭﺝ ﺘﺴﺎﻭﻱ‬
‫ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ‪ 0.0196 × 150‬ﺃﻭ ‪ +2.94‬ﻓﻠﻁ‪.‬‬

‫‪23‬‬
‫ﺍﻟﺒﻨﻴﺔ ﺍﻟﺩﺍﺨﻠﻴﺔ ﻟﻠﻤﺒﺩل ‪DAC0830‬‬
‫ﺴﻙ ﻁﻭل ﻜل ﻤﻨﻬﺎ ‪ 8‬ﺒﺕ‪ ،‬ﻴﺴﻤﺢ ﻜل ﻤﻨﻬﻤﺎ ﺒﻤﺴﻙ ﺒﺎﻴﺕ ﺒﻴﻨﻤﺎ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﺒﺩل ‪ DAC0830‬ﻋﻠﻰ ﺩﺍﺭﺘﻲ ‪‬ﻤ ْ‬
‫ﻴﺠﺭﻱ ﺘﺒﺩﻴل ﺒﺎﻴﺕ ﺃﺨﺭﻯ‪ .‬ﻓﻲ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺤﺎﻻﺕ ﻨﻌﻤل ﻋﻠﻰ ﻋﺩﻡ ﺘﺄﻫﻴل ﺍﻟﻤﺎﺴﻙ ﺍﻷﻭل ﻭﻨﺴﺘﺨﺩﻡ ﻓﻘﻁ‬
‫ﺍﻟﻤﺎﺴﻙ ﺍﻟﺜﺎﻨﻲ ﻹﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺍﻟﻤﺒﺩل‪ ،‬ﻭﻴﺠﺭﻱ ﺫﻟﻙ ﺒﺘﻁﺒﻴﻕ ﺍﻟﻤﻨﻁﻕ ‪ 1‬ﻋﻠﻰ ‪ ILE‬ﻭﺍﻟﻤﻨﻁـﻕ ‪0‬‬
‫ﻋﻠﻰ ‪. CS‬‬

‫ﺘﻭﺍﺠﻪ ﺍﻟﻤﺒﺩل ‪ DAC0830‬ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬


‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻤﻭﺍﺠﻬﺔ ﺍﻟﻤﺒﺩل ‪ DAC0830‬ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ .8086‬ﺠﺭﻯ‪ ،‬ﻓـﻲ‬
‫ﻫﺫﺍ ﺍﻟﺸﻜل‪ ،‬ﺍﺴﺘﺨﺩﺍﻤﻨﺎ ﺩﺍﺭﺓ ﻤﻨﻁﻘﻴﺔ ﻗﺎﺒﻠﺔ ﻟﻠﺒﺭﻤﺠﺔ ‪2 16L8‬ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪ ،‬ﻭﺤﺠﺯ ﺍﻟﻌﻨﻭﺍﻥ‬
‫‪ 20h‬ﻤﻥ ﻓﻀﺎﺀ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﻟﻠﻤﻌﺎﻟﺞ ﻟﻌﻨﻭﻨﺔ ﺍﻟﻤﺒﺩل‪ .‬ﻴﻤﻜﻥ ﺘﺤﻭﻴل ﻤﻌﻁﻴﺎﺕ ﺍﺜﻨﺎﻨﻴﺔ ﺇﻟﻰ ﺘﻤﺎﺜﻠﻴﺔ ﺒﺘﻨﻔﻴـﺫ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،OUT 20h, AL‬ﺒﻌﺩ ﻭﻀﻊ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻓﻲ ‪ .AL‬ﻴﺘﺤﻜﻡ ﻤﻜﺒﺭ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻭﺼﻭل ﻋﻠﻰ ﻤﺨﺭﺝ‬
‫ﺍﻟﻤﺒﺩل‪ ،‬ﻓﻲ ﻤﺜﺎﻟﻨﺎ‪ ،‬ﺒﻌﻤل ﻤﺤﺭﻙ ﻤﺴﺘﻤﺭ‪.‬‬

‫‪ 16L8 2‬هﻲ دارة ﻣﻨﻄﻘﻴﺔ ﻣﺘﻜﺎﻣﻠﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﺒﻮاﺑﺎت اﻟﻤﻨﻄﻘﻴﺔ اﻟﺘﻲ ﻳﻤﻜﻦ ﺑﺮﻣﺠﺘﻬﺎ ﻟﺘﺤﻘﻴﻖ ﺗﺎﺑﻊ أو ﻋﺪة‬
‫ﺗﻮاﺑﻊ ﻣﻨﻄﻘﻴﺔ ﻣﺤﺪدة‪.‬‬

‫‪24‬‬
‫ﺍﻟﻤﺒﺩل ﺍﻟﺘﻤﺎﺜﻠﻲ‪/‬ﺍﻟﺭﻗﻤﻲ ‪ADC0804‬‬
‫ﺇﻥ ﻁﻭل ﻜﻠﻤﺔ ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﻫﻭ ﺃﻴﻀﹰﺎ ‪-8‬ﺒﺕ‪ ،‬ﻭﻫﻭ ﻤﺒﺩل ﺭﺨﻴﺹ ﺍﻟﺜﻤﻥ ﻤﻥ ﺸـﺭﻜﺔ ‪National‬‬
‫‪ Instrument‬ﻤﺘﻭﺍﻓﻕ ﻤﻊ ﻁﻴﻑ ﻭﺍﺴﻊ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﻤﺜل ﻋﺎﺌﻠﺔ ‪ .Intel‬ﻴ‪‬ﻼﺌﻡ ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﺍﻟﻜﺜﻴﺭ‬
‫ﻤﻥ ﺍﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻻ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺩﻗﺔ ﺘﺒﺩﻴل ﻋﺎﻟﻴﺔ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺘﻭﺯﻉ ﻤﻐﺎﺭﺯ ﺍﻟﻤﺒﺩل ‪.ADC0804‬‬

‫ﻴﺒﺩﺃ ﺍﻟﻤﺒﺩل ﺒﺘﺤﻭﻴل ﻋﻴﻨﺔ ﻤﻥ ﺍﻹﺸﺎﺭﺓ ﺍﻟﻤﻁﺒﻘﺔ ﻋﻠﻰ ﻤﺩﺨﻠﻪ ﺍﻟﺘﻤﺎﺜﻠﻲ ﺇﻟﻰ ﻗﻴﻤﺔ ﺭﻗﻤﻴﺔ ﺒﺎﻟﺘﺯﺍﻤﻥ ﻤﻊ ﻜـل‬

‫‪25‬‬
‫ﻭ ‪ . CS‬ﻭﺒﺎﻟﺭﺠﻭﻉ ﺇﻟﻰ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺯﻤﻨﻲ ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻨﺠـﺩ‬ ‫‪WR‬‬ ‫ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ‪‬ﻤﻭﻟﺩﺓ ﻋﻠﻰ ﻜل ﻤﻥ ﺍﻟ ‪‬ﻤﺩﺨﻠﻴﻥ‬
‫ﺃﻥ ﺍﻟﻤ‪‬ﺒﺩل ﻴ‪‬ﻨﺘﺞ ﻨﺒﻀﺔ ﻤﻭﺠﺒﺔ ﻋﻠﻰ ﻤﺨﺭﺠﻪ ‪ INTR‬ﺨﻼل ﻤﺩﺓ ﺍﻟﺘﺒﺩﻴل‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺍﻻﻨﺘﻅـﺎﺭ‬
‫ﺤﺘﻰ ﺘﻌﻭﺩ ﺤﺎﻟﺔ ‪ INTR‬ﺇﻟﻰ ﺍﻟﻤﻨﻁﻕ ‪ 0‬ﺤﺘﻰ ﻨﺘﻤﻜﻥ ﻤﻥ ﻗﺭﺍﺀﺓ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ ﻋﻠﻰ ﺍﻟﻤﺨﺎﺭﺝ ﺍﻟﺭﻗﻤﻴﺔ‬
‫ﻟﻠﻤﺒﺩل‪ ،‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ .IN‬ﻴﻤﻜﻨﻨﺎ ﺃﻴﻀﹰﺎ ﻭﺼل ﺍﻟﻤﺨﺭﺝ ‪ INTR‬ﺇﻟﻰ ﻤ‪‬ﺩﺨل ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﺤﻴـﺙ‬
‫ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﺒﻌﺩ ﺍﺴﺘﻜﻤﺎل ﻜل ﻋﻤﻠﻴﺔ ﺘﺒﺩﻴل‪.‬‬

‫ﻭﺼل ﺇﺸﺎﺭﺓ ﺍﻟﺩﺨل ﺍﻟﺘﻤﺎﺜﻠﻲ‬


‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﻋﻠﻰ ﻤﺩﺨﻠﻴﻥ ﺘﻤـﺎﺜﻠﻴﻴﻥ )‪ VIN(+‬ﻭ )‪ VIN(-‬ﻤﻭﺼـﻭﻟﻴﻥ ﺇﻟـﻰ ﻤـﺩﺨﻠﻴﻥ‬
‫ﺘﻔﺎﻀﻠﻴﻴﻥ ﻟﻤﻜﺒﺭ ﻋﻤﻠﻴﺎﺕ ﺩﺍﺨﻠﻲ‪ ،‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪ .‬ﻴﺠﺭﻱ ﺩﺍﺨﻠﻴﹰﺎ ﺘﻭﻟﻴﺩ ﺇﺸـﺎﺭﺓ ﺩﺨـل‬
‫ﺍﻟﻤﺒﺩل ﺒﺠﻤﻊ ﺍﻹﺸﺎﺭﺘﻴﻥ ﻋﻠﻰ ﺍﻟﻤﺩﺨﻠﻴﻥ ﺍﻟﺘﻔﺎﻀﻠﻴﻴﻥ‪ .‬ﻴﻤﻜﻥ ﻭﺼل ﺇﺸﺎﺭﺓ ﺍﻟﺩﺨل ﺇﻟﻰ ﻤﻜﺒﺭ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺒﻌﺩﺓ‬
‫ﻁﺭﻕ‪ ،‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺇﺤﺩﻯ ﻫﺫﻩ ﺍﻟﻁﺭﻕ ﺍﻟﻤﻤﻜﻨﺔ‪.‬‬

‫ﻣ‪‬ﺪﺧﻞ ﲤﺎﺛﻠﻲ‬

‫‪26‬‬
‫ﺘﻭﻟﻴﺩ ﺇﺸﺎﺭﺓ ﺍﻟﺴﺎﻋﺔ‬
‫ﻴﺤﺘﺎﺝ ﻋﻤل ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﺇﻟﻰ ﻨﺒﻀﺎﺕ ﺴﺎﻋﺔ‪ .‬ﻴﻤﻜﻨﻨﺎ ﺘﻭﻟﻴﺩ ﺍﻟﻨﺒﻀﺎﺕ ﺨﺎﺭﺠﻴـﹰﺎ ﻭﻭﺼـﻠﻬﺎ ﺇﻟـﻰ‬
‫ﺍﻟﻤﺒﺩل ﻋﺒﺭ ﻤﺩﺨﻠﻪ ‪ ،CLK IN‬ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﺘﻭﻟﻴﺩﻫﺎ ﻋﺒﺭ ﺩﺍﺭﺓ ‪ ،RC‬ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﻓﻲ ﺍﻟـﺸﻜل ﺍﻟﺘـﺎﻟﻲ‪.‬‬
‫ﻴﻌﻁﻰ ﺘﺭﺩﺩ ﺴﺎﻋﺔ ﺍﻟﻤﻬﺘﺯ ﺍﻟﺩﺍﺨﻠﻲ ﺒﺎﻟﻌﻼﻗﺔ‪:‬‬
‫‪1‬‬
‫= ‪Fclk‬‬
‫‪1.1 RC‬‬

‫ﻴﺠﺏ ﺃﻥ ﻴﺴﺎﻭﻱ ﺘﺭﺩﺩ ﻨﺒﻀﺎﺕ ﺍﻟﺴﺎﻋﺔ ﺒﻴﻥ ‪ 100‬ﻭ ‪ 1460‬ﻜﻴﻠﻭﻫﺭﺘﺯ‪ ،‬ﻭﺤﺘﻰ ﻨﺠﻌـل ﺯﻤـﻥ ﺍﻟﺘﺒـﺩﻴل‬
‫ﺃﺼﻐﺭﻱ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﺘﺭﺩﺩ ﺃﻗﺭﺏ ﻤﺎ ﻴﻜﻭﻥ ﺇﻟﻰ ‪ 1460‬ﻜﻴﻠﻭﻫﺭﺘﺯ‪.‬‬

‫ﻭﺼل ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬


‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺇﺤﺩﻯ ﺍﻟﻁﺭﻕ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻭﺼل ﺍﻟﻤﺒﺩل ‪ ADC0804‬ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ ،8086‬ﺠﺭﻯ ﺃﻴـﻀﹰﺎ‬
‫ﻓﻲ ﻫﺫﺍ ﺍﻟﺸﻜل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺭﻗﺎﻗﺔ ﺍﻟﻤﻨﻁﻘﻴﺔ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﺒﺭﻤﺠﺔ ‪ 16L8‬ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪.‬‬

‫‪27‬‬
‫ﻨﻔﺘﺭﺽ‪ ،‬ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺴﺎﺒﻕ‪ ،‬ﺃﻥ ﺍﻟﻤﺒﺩل ﻴﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪ ،40h‬ﻓﻲ ﺤﻴﻥ ﻴﻤﻜﻨﻨﺎ ﻗـﺭﺍﺀﺓ ﺤﺎﻟـﺔ ﺍﻟﻤﺨـﺭﺝ‬
‫‪ INTR‬ﺒﻘﺭﺍﺀﺓ ﺍﻟﺒﻭﺍﺒﺔ ﺫﺍﺕ ﺍﻟﻌﻨﻭﺍﻥ ‪.42h‬ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻤﺎ ﺴﺒﻕ‪ ،‬ﻓﺈﻥ ﺍﻹﺠﺭﺍﺌﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺘﻘﺭﺃ ﻋﻴﻨـﺔ ﻤـﻥ‬
‫ﺨﺭﺝ ﺍﻟﻤﺒﺩل ﻭﺘﻀﻌﻬﺎ ﻓﻲ ‪:AL‬‬

‫‪ADC‬‬ ‫‪PROC‬‬ ‫‪NEAR‬‬


‫‪OUT‬‬ ‫‪40H, AL‬‬ ‫‪; start of conversion‬‬
‫‪test_INTR:‬‬ ‫‪IN‬‬ ‫‪AL,42H‬‬ ‫‪; test INTR‬‬
‫‪AND‬‬ ‫‪AL,80H‬‬
‫‪CMP‬‬ ‫‪AL, 80h‬‬
‫‪JNE‬‬ ‫‪test_INTR‬‬ ‫‪; jump if the converter is busy‬‬
‫‪IN‬‬ ‫‪AL,40H‬‬ ‫‪; read sample‬‬
‫‪RET‬‬
‫‪ADC‬‬ ‫‪ENDP‬‬

‫ﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪8088/8086‬‬

‫ﺍﻟﻐﺎﻴﺔ ﻤﻥ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‬
‫ﻻ ﻋﻠﻰ ﺭﺒﻁ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻤﻊ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺭﻗﺎﻗﺔ ‪ .82C55‬ﻴﺘﻘـﺼﻰ‬
‫ﺒﻴﻨﺎ ﺴﺎﺒﻘﹰﺎ ﻤﺜﺎ ﹰ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﻓﻲ ﺫﻟﻙ ﺍﻟﻤﺜﺎل‪ ،‬ﺤﺎﻟﺔ ﺍﻟﺒﺕ ‪ IBF‬ﻟﻠﺩﺍﺭﺓ ‪ 8255‬ﻤﻥ ﺃﺠل ﻤﻌﺭﻓﺔ ﻓﻴﻤﺎ ﺇﺫﺍ ﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ‬
‫ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ .‬ﺒﻔﺭﺽ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻤﺭﺓ ﻜل ﺜﺎﻨﻴﺔ‪ ،‬ﻓﺴﻭﻑ ﻴﻨﺘﻅﺭ ﺍﻟﺒﺭﻨـﺎﻤﺞ‬
‫ﺜﺎﻨﻴﺔ ﻜﺎﻤﻠﺔ ﺤﺘﻰ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﻤﻔﺘﺎﺡ ﺁﺨﺭ‪ .‬ﻭﻫﺫﺍ ﺒﺎﻟﻁﺒﻊ ﻤﻀﻴﻌﺔ ﻜﺒﻴﺭﺓ ﻟﻠﻭﻗﺕ ﻷﻨﻪ ﻓﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺤﺎﻟﺔ ﻻ ﻴﻤﻜﻥ ﻟﻠﻤﻌﺎﻟﺞ ﺘﻨﻔﻴﺫ ﻋﻤﻠﻴﺎﺕ ﺃﺨﺭﻯ ﺒﺎﻨﺘﻅﺎﺭ ﺃﻥ ﻴ‪‬ﻨﻬﻲ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﻜل ﻤﺎ ﻴﺭﻴـﺩ‪ .‬ﻴﻤﻜـﻥ‬
‫ﺘﺠﺎﻭﺯ ﻫﺫﻩ ﺍﻟﻤﺴﺄﻟﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‪.‬‬
‫ﻋﻠﻰ ﻋﻜﺱ ﻁﺭﻴﻘﺔ ﺍﻟﺘﻘﺼﻲ ‪ polling‬ﺍﻟﺴﺎﺒﻘﺔ‪ ،‬ﺘﺴﻤﺢ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻟﻠﻤﻌﺎﻟﺞ‪ ،‬ﻤﺜﻼﹰ‪ ،‬ﺒﺘﻨﻔﻴﺫ ﺒﺭﻨـﺎﻤﺞ ﺁﺨـﺭ‬
‫ﺒﻴﻨﻤﺎ ﻴﻔﻜﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻤﻔﺘﺎﺡ ﺍﻟﺫﻱ ﺴﻴﻀﻐﻁ ﻋﻠﻴﻪ ﻻﺤﻘﹰﺎ‪ .‬ﻋﻨﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﹸﺘﻭﻟﺩ ﻟﻭﺤـﺔ‬
‫ﺍﻟﻤﻔﺎﺘﻴﺢ ﻨﺒﻀﺔ ﺘﻘﺎﻁﻊ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺫﻱ ﻴ‪‬ﻨﻔﺫ ﺒﺭﻨﺎﻤﺠﹰﺎ ﺁﺨﺭﹰﺍ‪ .‬ﻴﻘﺭﺃ ﺍﻟﻤﻌـﺎﻟﺞ ﻀـﻤﻥ ﺒﺭﻨـﺎﻤﺞ ﺨﺩﻤـﺔ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﺭﻤﺎﺯ ‪ ASCII‬ﻟﻠﻤﻔﺘﺎﺡ ﺍﻟﻤﻀﻐﻭﻁ ﺜﻡ ﻴ‪‬ﻌﻭﺩ ﻟﻴﺘﺎﺒﻊ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨـﺎﻤﺞ ﺍﻟـﺫﻱ ﺠـﺭﻯ ﻤﻘﺎﻁﻌﺘـﻪ‪.‬‬
‫ﻭﺒﺎﻟﻨﺘﻴﺠﺔ ﻴﻤﻜﻥ ﻁﺒﺎﻋﺔ ﺘﻘﺭﻴﺭ ﺃﻭ ﺘﻨﻔﻴﺫ ﻤﻬﺎﻡ ﺃﺨﺭﻯ ﺒﻴﻨﻤﺎ ﻴ‪‬ﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﺜﻴﻘﺔ ﻤﺴﺘﻘﻠﺔ‪ ،‬ﺁﺨﺫﹰﺍ ﻭﻗﺘﻪ ﻓﻲ‬
‫ﺍﻟﺘﻔﻜﻴﺭ ﻓﻴﻤﺎ ﻴﺭﻴﺩ ﺃﻥ ﻴﻜﺘﺏ ﺘﺎﻟﻴﹰﺎ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺨﻁﻁﹰﺎ ﺯﻤﻨﻴﹰﺎ ﻴﻭﻀﺢ ﻜﻴﻑ ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺃﻭ ﻴﻁﺒﻊ ﻤﺤﺭﻓﹰﺎ ﺒﻴﻨﻤـﺎ ﻴﻨﻔـﺫ‬
‫ﺒﺭﻨﺎﻤﺠﹰﺎ ﺭﺌﻴﺴﺎﹰ‪ ،‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺎﺼﺔ ﺒﺨﺩﻤﺔ ﻤﻘﺎﻁﻌﺔ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﺇﺠﺭﺍﺌﻴـﺔ ﺨﺎﺼـﺔ ﺒﺨﺩﻤـﺔ‬

‫‪28‬‬
‫ﻤﻘﺎﻁﻌﺔ ﺍﻟﻁﺒﺎﻋﺔ‪.‬‬

‫ﻣﻘﺎﻃﻌﺔ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ‬ ‫ﻣﻘﺎﻃﻌﺔ ﺍﻟﻄﺎﺑﻌﺔ‬ ‫ﻣﻘﺎﻃﻌﺔ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ‬

‫ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺲ‬

‫ﻣﻘﺎﻃﻌﺔ ﺍﻟﻄﺎﺑﻌﺔ‬

‫ﹸﺘﺴﺘﺨﺩﻡ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻓﻲ ﺍﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ ﻋﻠﻰ ﻨﺤﻭ ﻜﺜﻴﻑ ﻟﻴﺘﻤﻜﻥ ﻤﻥ ﺘﻨﻔﻴﺫ ﻋﺩﺓ ﻤﻬﺎﻡ ﻋﻠﻰ ﺍﻟﺘﻔﺭﻉ‪.‬‬

‫ﺃﻨﻭﺍﻉ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‬
‫ﻴﺤﺘــﻭﻱ ﺍﻟﻤﻌــﺎﻟﺞ ‪ 8088/8086‬ﻋﻠــﻰ ‪ 256‬ﻤﻘﺎﻁﻌــﺔ ﻤﺨﺘﻠﻔــﺔ ﻟﻜــل ﻤﻨﻬــﺎ ﺇﺠﺭﺍﺌﻴــﺔ ﺨﺩﻤــﺔ‬
‫ﺹ ﺒﻬﺎ‪ .‬ﻴﻤﻜﻥ ﻤﻘﺎﻁﻌﺔ ﻋﻤل ﺍﻟﻤﻌﺎﻟﺞ ﺇﻤﺎ‪:‬‬
‫ﻤﻘﺎﻁﻌﺔ ‪ Interrupt Service Procedure‬ﺨﺎ ٌ‬
‫ƒ ﺩﺍﺨﻠﻴﹰﺎ‪ ،‬ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﻁﻔﺢ ﻓﻲ ﻋﻤﻠﻴﺔ ﺤﺴﺎﺒﻴﺔ ﺃﻭ ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﺨﻁﺄ ﻓﻲ ﻋﻤﻠﻴﺔ ﺘﻘﺴﻴﻡ‪.‬‬
‫ƒ ﺒﺭﻤﺠﻴﹰﺎ‪ ،‬ﻋﻥ ﻁﺭﻴﻕ ﺘﻨﻔﻴﺫ ﺃﺤﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ INTO‬ﺃﻭ ‪ INT 3‬ﺃﻭ ‪ INT nn‬ﺤﻴﺙ ‪ nn‬ﻨﻤﻁ ﺍﻟﻤﻘﺎﻁﻌـﺔ‬
‫ﻭﺘﺘﺭﺍﻭﺡ ﻗﻴﻤﺘﻪ ﺒﻴﻥ ‪ 00h‬ﻭ ‪.FFh‬‬
‫ƒ ﺃﻭ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻜﻴﺎﻥ ﺍﻟﺼﻠﺏ‪ ،‬ﻭﺫﻟﻙ ﺒﺘﻭﻟﻴﺩ ﻨﺒﻀﺔ ﻤﻨﺎﺴﺒﺔ ﻋﻠﻰ ﺍﻟﻤـﺩﺨل ‪ INTA‬ﺃﻭ ‪ .NMI‬ﻜﻤـﺎ‬
‫ﻴﻤﻜﻨﻨﺎ ﺍﻋﺘﺒﺎﺭ ﺍﻟﻤﺩﺨل ‪ Reset‬ﺃﻴﻀﹰﺎ ﻤﺩﺨل ﻤﻘﺎﻁﻌﺔ ﻟﻪ ﺍﻷﻭﻟﻭﻴﺔ ﻋﻠﻰ ﺠﻤﻴﻊ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻷﺨﺭﻯ‪.‬‬

‫ﺇﺠﺭﺍﺌﻴﺎﺕ ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‬


‫ﻴﻨﻔﺫ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻨﺩﻤﺎ ﻴﺴﺘﺠﻴﺏ ﻹﺤﺩﻯ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻤﺎ ﻴﻠﻲ‪:‬‬
‫ƒ ﻴﺩﻓﻊ ﺒﺴﺠل ﺍﻟﺭﺍﻴﺔ ‪ FR‬ﺇﻟﻰ ﺍﻟﻤﻜﺩﺱ‪.‬‬
‫ƒ ﻴﺼﻔﺭ ﻗﻴﻤﺔ ﺍﻟﺭﺍﻴﺔ ‪ IF‬ﻭ ‪.TF‬‬
‫ƒ ﻴﺩﻓﻊ ﺒﻘﻴﻤﺔ ﺍﻟﺴﺠل ‪ CS‬ﻭ ‪ IP‬ﺇﻟﻰ ﺍﻟﻤﻜﺩﺱ‪.‬‬
‫ﺤﻤِل ﺍﻟﺴﺠﻠﻴﻥ ‪ CS‬ﻭ ‪ IP‬ﺒﻌﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻭﺍﻓﻘﺔ‪.‬‬
‫ƒ ‪‬ﻴ ‪‬‬

‫ﻟﻜل ﻨﻤﻁ ﻤﻘﺎﻁﻌﺔ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﺨﺎﺼﺔ ﺒﻬﺎ‪ ،‬ﻴﺠﺭﻱ ﻭﻀﻊ ﻋﻨﻭﺍﻥ ﺃﻭل ﺘﻌﻠﻴﻤﺔ ﻟﻜل ﺇﺠﺭﺍﺌﻴـﺔ ﻀـﻤﻥ‬

‫‪29‬‬
‫ﺠﺩﻭل ﺃﺸﻌﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ .Interrupt Vector Table‬ﻴﺘﻜﻭﻥ ﺠﺩﻭل ﺃﺸﻌﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻤﻥ ‪ 256‬ﻗﻴﻤﺔ ﻜل ﻤﻨﻬﺎ‬
‫ﻤﻤﺜﻠﺔ ﻋﻠﻰ ‪ 4‬ﺒﺎﻴﺕ؛ ﺒﺎﻴﺘﺎﻥ ﻟﺘﺨﺯﻴﻥ ﻋﻨﻭﺍﻥ ﺍﻻﻨﺯﻴﺎﺡ ‪ offset address‬ﻭﺒﺎﻴﺘﺎﻥ ﻟﺘﺨﺯﻴﻥ ﻋﻨﻭﺍﻥ ﺍﻟﻤﻘﺘﻁـﻊ‬
‫‪3‬‬
‫ﻤﻥ ﺫﺍﻜﺭﺓ ﺍﻟﻤﻌـﺎﻟﺞ ‪8088/8086‬؛ ﺃﻱ‬ ‫‪ .segment address‬ﻴﺤﺘل ﺍﻟﺠﺩﻭل ﺃﻭل ‪ 1024‬ﺒﺎﻴﺕ )ﻟﻤﺎﺫﺍ؟(‬
‫ﻴﺤﺘل ﺍﻟﻌﻨﺎﻭﻴﻥ )‪.(000000h-003FFh‬‬
‫ﺘﺤﺘﻭﻱ ﺍﻟﻤﻭﺍﻗﻊ ﺍﻷﺭﺒﻌﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺍﻟﺠﺩﻭل ‪ 000000h-000003h‬ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺇﺠﺭﺍﺌﻴـﺔ‬
‫ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺼﻔﺭ ‪ 00h‬ﺒﻴﻨﻤﺎ ﺘﺤﺘﻭﻱ ﺍﻟﻤﻭﺍﻗﻊ ﺍﻷﺭﺒﻌﺔ ﺍﻟﺘـﻲ ﺘﻠﻴﻬـﺎ ‪ 000004h-000007h‬ﻋﻨـﻭﺍﻥ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ ،01h‬ﻭﻫﻜﺫﺍ‪ .‬ﻭﺒﺎﻟﻨﺘﻴﺠﺔ‪ ،‬ﻓﺈﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﺫﻱ ﻴـﺫﻫﺏ ﺇﻟﻴـﻪ‬
‫ﺍﻟﻤﻌﺎﻟﺞ ﻟﺸﺤﻥ ﻋﻨﻭﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻤﻥ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻴﺴﺎﻭﻱ ﻨﻤﻁ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻀﺭﺏ ‪.4‬‬
‫ﺇﻥ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﺸﻌﺎﻉ ‪ 0‬ﻟﻬﺎ ﺃﻭﻟﻭﻴﺔ ﻋﻠﻰ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﺸﻌﺎﻉ ‪ 1‬ﻭﺍﻟﺘﻲ ﺒﺩﻭﺭﻫﺎ ﻟﻬﺎ ﺃﻭﻟﻭﻴﺔ ﻋﻠـﻰ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﺸﻌﺎﻉ ‪ ،3‬ﺃﻱ ﻜﻠﻤﺎ ﺍﺯﺩﺍﺩ ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻨﺨﻔﻀﺕ ﺃﻭﻟﻭﻴﺘﻬﺎ‪.‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﻓﻲ ﺃﻱ ﻤﻭﺍﻗﻊ ﻴﺠﺭﻱ ﺘﺨﺯﻴﻥ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪12h‬؟‬


‫ﺍﻟﺠﻭﺍﺏ‪ :‬ﻴﺒﺩﺃ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ 12h‬ﺃﻭ ‪ 18‬ﺒـﺎﻟﻌﻨﻭﺍﻥ ﺍﻟﻔﻴﺯﻴـﺎﺌﻲ ‪ (18×4=64) 40h‬ﺃﻭ ‪ .64‬ﻭﺒﺎﻟﺘـﺎﻟﻲ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﻭﻗﻌﺎﻥ ‪ 0040h‬ﻭ‪ 0041‬ﻗﻴﻤﺔ ﺍﻻﻨﺯﻴﺎﺡ‪ ،‬ﻭﻴﺤﺘﻭﻱ ﺍﻟﻤﻭﻗﻌﺎﻥ ‪ 0042h‬ﻭ ‪ 0043h‬ﻤﻘﺘﻁﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ‬
‫ﻹﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪.12h‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺠﺩﻭل ﺃﺸﻌﺔ ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ ‪ .8088/8086‬ﻭﻜﻤـﺎ ﻴﺒـﻴﻥ ﺍﻟـﺸﻜل‪ ،‬ﻓﻘـﺩ ﺤ‪‬ﺠـﺯﺕ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟـ ‪ 32‬ﺍﻷﻭﻟﻰ ﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺨﺘﻠﻔﺔ‪ ،‬ﺒﻴﻨﻤﺎ ﺒﻘﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟـ ‪ 224‬ﺍﻟﺒﺎﻗﻴـﺔ ﻤﺘﺎﺤـﺔ‬
‫ﻟﺘﻁﺒﻴﻘﺎﺕ ﺍﻟﻤﺴﺘﺜﻤﺭ‪.‬‬

‫‪ 3‬ﻷن ‪256 × 4 = 1024‬‬

‫‪30‬‬
‫ﻋﻨﻮﺍﻥ ﺍﻟﺬﺍﻛﺮﺓ‬ ‫ﳏﺘﻮﻯ ﺍﳉﺪﻭﻝ‬ ‫ﺗﻌﺮﻳﻒ ﺍﻷﺷﻌﺔ‬

‫ﻣﺘﺎﺣﺔ ﻟﻠﻤﺴﺘﺨﺪﻡ‬

‫ﳏﺠﻮﺯﺓ‬

‫ﺍﻟﻄﻔﺢ‬
‫ﻧﻘﻄﺔ ﺍﻟﺘﻮﻗﻒ‬
‫ﻣﻘﺎﻃﻌﺔ ﻏﲑ ﻗﺎﺑﻠﺔ ﻟﻠﺤﺠﺐ‬
‫ﺍﳋﻄﻮﺓ ﺍﻟﻮﺍﺣﺪﺓ‬
‫ﺧﻄﺄ ﺗﻘﺴﻴﻢ‬

‫ﺘﺨﺯﻴﻥ ﺸﻌﺎﻉ ﺇﺠﺭﺍﺌﻴﺔ ﻤﻘﺎﻁﻌﺔ ﻓﻲ ﺠﺩﻭل ﺍﻷﺸﻌﺔ‬


‫ﻟﺠﻌل ﺇﺠﺭﺍﺌﻴﺔ ﻤﺎ ﺘﹸﻨﻔﺫ ﻋﻨﺩ ﻁﻠﺏ ﺇﺤﺩﻯ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻴﺠﺏ ﺘﺨﺯﻴﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﺒﺩﺍﻴﺔ ﺍﻹﺠﺭﺍﺌﻴﺔ ﻫﺫﻩ‬
‫ﺍﻹﺠﺭﺍﺌﻴﺔ ﻓﻲ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﻤ‪‬ﺨﺼﺹ ﻟﺘﻠﻙ ﺍﻟﻤﻘﺎﻁﻌﺔ‪.‬‬

‫‪31‬‬
‫ﻴﻌﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻋﻠﻰ ﺘﺨﺯﻴﻥ ﺍﻟﻌﻨﻭﺍﻥ ﺍﻟﻤﻨﻁﻘﻲ ﻟﺒﺩﺍﻴﺔ ﺍﻹﺠﺭﺍﺌﻴﺔ ‪ NEW40‬ﻓﻲ ﺸـﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌـﺔ‬
‫ﻻ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﻘـﺩﻴﻡ‬
‫‪ ،40h‬ﺃﻱ ﻓﻲ ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﻔﻴﺯﻴﺎﺌﻴﺔ ﺃﻭ ﺍﻟﺤﻘﻴﻘﺔ ‪ .100h-103h‬ﻴﺨﺯﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻭ ﹰ‬
‫ﻓﻲ ﺍﻟﻤﺘﺤﻭل ‪ِ ،OLD‬ﻟﻨﺘﻤﻜﻥ ﻤﻥ ﺍﺴﺘﻌﺎﺩﺓ ﻫﺫﺍ ﺍﻟﺸﻌﺎﻉ ﻋﻨﺩ ﺍﻨﺘﻬﺎﺀ ﻋﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺜـﻡ ﹸﻨﺨـﺯﻥ ﺍﻨﺯﻴـﺎﺡ‬
‫ﻭﻤﻘﺘﻁﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﻟﻰ ﻟﻺﺠﺭﺍﺌﻴﺔ ‪ NEW40‬ﻓﻲ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ .40h‬ﻋﻨﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺘﺨﺯﻴﻥ ﺸﻌﺎﻉ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﺠﺩﻴﺩ‪ ،‬ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫ ﺍﻹﺠﺭﺍﺌﻴﺔ ‪ NEW40‬ﻤﻥ ﺃﺠل ﻜل ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻤﻥ ﺍﻟـﻨﻤﻁ ‪ ،40h‬ﻤﺜـل‬
‫‪.INT 40h‬‬
‫‪.MODEL TINY‬‬
‫‪.CODE‬‬
‫‪JMP START‬‬
‫‪OLD‬‬ ‫‪DD‬‬ ‫?‬ ‫‪; space for old vector‬‬
‫‪NEW40 PROC‬‬ ‫‪FAR‬‬

‫;‬
‫‪; interrupt software for INT 40h‬‬
‫;‬
‫‪IRET‬‬
‫‪NEW40 ENDP‬‬

‫‪; start installation‬‬


‫‪START:‬‬
‫‪MOV AX,0‬‬ ‫‪; address segment 0000h‬‬
‫‪MOV DS, AX‬‬
‫]‪MOV AX, DS:[100h‬‬ ‫‪; get INT 40h offset‬‬
‫‪MOV WORD PTR CS:OLD,AX ; save it‬‬
‫]‪MOV AX, DS:[102h‬‬ ‫‪; get INT 40h‬‬
‫‪MOV WORD PTR CS:OLD+2,AX ; save it‬‬
‫‪MOV DS:[100], OFFSET NEW40 ; save offset‬‬
‫‪MOV DS:[102], CS‬‬ ‫‪; save segment‬‬
‫‪.‬‬
‫‪.‬‬

‫ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ‬
‫ﻴﻭﻟﺩ ﺍﻟﻤﻌﺎﻟﺞ ﺁﻟﻴﹰﺎ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻨﻤﻁ ‪ :0‬ﺨﻁﺄ ﺘﻘﺴﻴﻡ ‪ ،Divide Error‬ﺘﺤﺩﺙ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺩﺍﺨﻠﻴﹰﺎ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻨﺎﺘﺞ ﻋﻤﻠﻴـﺔ‬
‫ﺍﻟﻘﺴﻤﺔ ﺃﻜﺒﺭ ﻤﻥ ﺴﻌﺔ ﺴﺠل ﺍﻟﻭﺠﻬﺔ ﺃﻭ ﻋﻨﺩ ﻤﺤﺎﻭﻟﺔ ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ ‪.0‬‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻨﻤﻁ ‪ :1‬ﻤﻘﺎﻁﻌﺔ ﺍﻟﺨﻁﻭﺓ ﺍﻟﻭﺍﺤﺩﺓ ‪ ،Single Step Interrupt‬ﻴﻭﻟﺩ ﺍﻟﻤﻌـﺎﻟﺞ ﻤﻘﺎﻁﻌـﺔ ﻤـﻥ‬

‫‪32‬‬
‫ﺍﻟﻨﻤﻁ ‪ 1‬ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻜل ﺘﻌﻠﻴﻤﺔ‪ ،‬ﺇﺫﺍ ﻜﺎﻥ ‪ .،TF=0‬ﻴﺴﺘﺨﺩﻡ ﻫﺫﺍ ﻨﻤﻁ ﻤﻥ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﺎﺩﺓ ﻓﻲ ﺘﻨﻘﻴﺢ ‪debug‬‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ‪ .‬ﻴﻤﻜﻨﻨﺎ‪ ،‬ﻤﺜﻼﹰ‪ ،‬ﺇﻅﻬﺎﺭ ﺃﻭ ﻁﺒﺎﻋﺔ ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺩﺍﺨﻠﻴﺔ‪ ،‬ﻀـﻤﻥ ﺇﺠﺭﺍﺌﻴـﺔ ﺨﺩﻤـﺔ ﻫـﺫﻩ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ‪.‬‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻨﻤﻁ ‪ :3‬ﻤﻘﺎﻁﻌﺔ ﻨﻘﻁﺔ ﺍﻟﺘﻭﻗﻑ ‪ ،Breakpoint Interrupt‬ﻴﺠﺭﻱ ﻋﺎﺩﺓ ﺇﻗﺤﺎﻡ ﻁﻠـﺏ ﻫـﺫﻩ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﺒﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ INT 3‬ﻋﻨﺩ ﻨﻘﻁﺔ ﺤﺭﺠﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺨﻼل ﻤﺭﺤﻠﺔ ﺘﻨﻘﻴﺤﻪ‪ ،‬ﻹﻅﻬﺎﺭ ﻤﺤﺘﻭﻯ‬
‫ﺴﺠﻼﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺃﻭ ﺍﻟﺫﺍﻜﺭﺓ ﺃﻭ ﻏﻴﺭ ﺫﻟﻙ‪.‬‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻨﻤﻁ ‪ :4‬ﻤﻘﺎﻁﻌﺔ ﺍﻟﻁﻔﺢ ‪ ،Overflow‬ﺘﺴﺒﺏ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ INTO‬ﻤﻘﺎﻁﻌﺔ ﻤـﻥ ﺍﻟـﻨﻤﻁ ‪ 4‬ﺒﻌـﺩ‬
‫ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ ﺇﺫﺍ ﻜﺎﻥ ‪.OF=1‬‬

‫ﻟﻠﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ )ﻤﺎ ﻋﺩﺍ ﻤﻘﺎﻁﻌﺔ ﺍﻟﺨﻁﻭﺓ ﺍﻟﻭﺍﺤﺩﺓ( ﺃﻭﻟﻭﻴﺔ ﻋﻠﻰ ﺍﻟﻤﻘﺎﻁﻌـﺎﺕ ﺍﻟﺨﺎﺭﺠﻴـﺔ‪ ،‬ﻜﻤـﺎ ﻻ‬
‫ﻴﻤﻜﻨﻨﺎ‪ ،‬ﺒﺎﺴﺘﺜﻨﺎﺀ ﻤﻘﺎﻁﻌﺔ ﺍﻟﺨﻁﻭﺓ ﺍﻟﻭﺍﺤﺩﺓ‪ ،‬ﺘﺤﺠﻴﺏ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﺘﻨﺘﺞ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DIV‬ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﺎﻟﻲ ﻤﻘﺎﻁﻌﺔ ﻤﻥ ﻨﻤﻁ ‪ 0‬ﻷﻨﻬﺎ ﺘﻘﺴﻡ ﻤﺤﺘﻭﻯ ‪ CL‬ﻋﻠﻰ ﺼﻔﺭ‪.‬‬

‫‪MOV AL,92‬‬
‫‪SUB CL, CL‬‬
‫‪DIV CL‬‬ ‫‪; 92/0 undefined‬‬

‫‪33‬‬
‫ﻜﻠﻤﺎ ﺠـﺭﺕ ﻤﺤﺎﻭﻟـﺔ‬ ‘Division by zero attempted’ ‫ ﺍﻜﺘﺏ ﺇﺠﺭﺍﺌﻴﺔ ﺘﻁﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‬:‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‬
.‫ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ ﺍﻟﺼﻔﺭ‬
:‫ﺍﻟﺠﻭﺍﺏ‬
.MODEL TINY
.CODE
JMP START
OLD DD ? ; space for old vector
Prompt DB 'Division by zero attempted$'

Diverr PROC FAR ; procedure print Prompt


PUSH DX
MOV AH, 09h
MOV DX, offset prompt
INT 21h
POP DX
IRET
Diverr ENDP

; start installation
START:
MOV AX,0 ; address segment 0000h
MOV DS, AX
MOV AX, DS:[00h] ; get INT 00h offset
MOV WORD PTR CS:OLD,AX ; save it
MOV AX, DS:[02h] ; get INT 00h
MOV WORD PTR CS:OLD+2,AX ; save it
MOV DS:[100], OFFSET Diverr ; save offset
MOV DS:[102], CS ; save segment
.

34
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﻤﻘﺎﻁﻌﺎﺕ‬
‫ﺘﺘﻀﻤﻥ ﻤﺤﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺘﻌﻠﻴﻤﺎﺕ ﺨﺎﺼﺔ ﺒﺎﻟﻤﻘﺎﻁﻌﺎﺕ‪ ،‬ﻭﻫﻲ‪:‬‬
‫ƒ ‪ :CLI‬ﹶﺘﻀﻊ ﺼﻔﺭﹰﺍ ﻓﻲ ﺍﻟﺭﺍﻴﺔ ‪ ،IF‬ﻭﺘﺴﺘﺨﺩﻡ ﻟﺤﺠﺏ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ‪.‬‬
‫ƒ ‪ :STI‬ﹶﺘﻀﻊ ﻭﺍﺤﺩﹰﺍ ﻓﻲ ﺍﻟﺭﺍﻴﺔ ‪ ،IF‬ﻭﺘﺴﺘﺨﺩﻡ ﻟﺘﺄﻫﻴل ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ‬
‫ƒ ‪ :INT nn‬ﹶﺘﻁﻠﺏ ﺒﺭﻤﺠﻴﹰﺎ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﻨﻤﻁ ‪.nn‬‬
‫ƒ ‪ :IRET‬ﹸﺘﻨﻬﻲ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ‪ .‬ﻴﺠﺏ ﺍﻻﻨﺘﺒﺎﻩ ﻫﻨﺎ ﺇﻟﻰ ﺃﻨﻪ ﻴﺠﺏ ﺍﺴـﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫‪ IRET‬ﻭﻟﻴﺱ ‪ RET‬ﻹﻨﻬﺎﺀ ﺇﺠﺭﺍﺌﻴﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻭﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟ ‪‬ﻤﻘﺎﻁﻊ‪ ،‬ﻷﻥ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪IRET‬‬
‫ﺘﻌﻴﺩ ﺘﺤﻤﻴل ﺴﺠل ﺍﻟﺭﺍﻴﺔ ﻗﺒل ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤ‪‬ﻘﺎﻁﻊ ﺒﻴﻨﻤﺎ ﻻ ﺘﻔﻌل ﺫﻟﻙ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪.RET‬‬
‫ƒ ‪ :INTO‬ﹸﺘﻨﻔﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﻨﻤﻁ ‪ 4‬ﻓﻲ ﺤﺎل ﺤﺩﻭﺙ ﻁﻔﺢ ﻨﺘﻴﺠ ﹰﺔ ﻟﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﺴﺎﺒﻘﺔ‬
‫ﺃﺩﺕ ﺇﻟﻰ ﻭﻀﻊ ‪ 1‬ﻓﻲ ﺍﻟﺭﺍﻴﺔ ‪ .OF‬ﻴﻔﻀل ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺒﻌﺩ ﻜل ﻋﻤﻠﻴﺔ ﺤﺴﺎﺒﻴﺔ ﻴﻤﻜـﻥ ﺃﻥ‬
‫ﹸﺘﻨﺘﺞ ﻁﻔﺤﹰﺎ‪.‬‬
‫ƒ ‪ :HLT‬ﻴﻨﺘﻅﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺤﺩﻭﺙ ﻤﻘﺎﻁﻌﺔ ﺨﺎﺭﺠﻴﺔ ﺃﻭ ﺇﻋﺎﺩﺓ ﺘﺸﻐﻴل ‪.reset‬‬
‫‪TEST‬‬ ‫ƒ ‪ :WAIT‬ﻴﻨﺘﻅﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺒﻌﺩ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺤﺘﻰ ﻴﺼﺒﺢ ﺍﻟﺩﺨل ﻋﻠﻰ ﻤﻐـﺭﺯ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫ﻤﺴﺎﻭﻴﹰﺎ ‪.1‬‬

‫ﺍﺨﺘﺒﺎﺭ ﺫﺍﺘﻲ‪ :‬ﻻ ﺘﺘﻀﻤﻥ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺘﻌﻠﻴﻤﺔ ﺘﺴﻤﺢ ﺒﺘﻐﻴﻴﺭ ﺤﺎﻟﺔ ﺍﻟﺭﺍﻴﺔ ‪،TF‬‬
‫ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﹸﻌﻜﺱ ﺤﺎﻟﺔ ﺍﻟﺭﺍﻴﺔ ‪.TF‬‬
‫ﺍﻟﺠﻭﺍﺏ‪:‬‬
‫‪PUSHF‬‬
‫‪POP A‬‬
‫‪XOR AX, 0000000100000000B‬‬
‫‪PUSH AX‬‬
‫‪POPF‬‬

‫ﺃﻭﻟﻭﻴﺎﺕ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻠﻰ ﺨﻤﺴﺔ ﺃﻨﻭﺍﻉ ﻤﻥ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‪:‬‬
‫‪Reset .1‬‬
‫‪ .2‬ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺩﺍﺨﻠﻴﺔ‬
‫‪ .3‬ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺔ‬
‫‪ .4‬ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻏﻴﺭ ﻗﺎﺒﻠﺔ ﻟﻠﺤﺠﺏ ‪NMI‬‬

‫‪35‬‬
‫‪ .5‬ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪INTR‬‬
‫ﻭﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﻤﺭﺘﺒﺔ ﺒﺤﺴﺏ ﺃﻭﻟﻭﻴﺘﻬﺎ ﻤﻥ ﺍﻷﻋﻠﻰ ﺇﻟﻰ ﺍﻷﺩﻨﻰ‪ .‬ﻓﺈﺫﺍ ﺤﺩﺙ ﺃﻜﺜﺭ ﻤﻥ ﻤﻘﺎﻁﻌﺔ ﺒﺂﻥ ﻭﺍﺤﺩ‬
‫ﻓﺈﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻴ‪‬ﺨﺩﻡ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻷﻋﻠﻰ ﺃﻭﻟﻭﻴﺔ ﺜﻡ ﺍﻷﻗل ﻭﻫﻜﺫﺍ‪ .‬ﻴ‪‬ﻤﻜﻥ ﻟﻤﻘﺎﻁﻌﺔ ﺃﻥ ﺘﻘـﺎﻁﻊ ﻤﻘﺎﻁﻌـﺔ ﻟﻬـﺎ‬
‫ﺃﻭﻟﻭﻴﺔ ﺃﺩﻨﻰ ﻤﻨﻬﺎ‪ ،‬ﺒﻴﻨﻤﺎ ﻋﻠﻰ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻨﺘﻅﺎﺭ ﺍﻨﺘﻬﺎﺀ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻷﻋﻠﻰ ﻤﻨﻬﺎ ﺃﻭﻟﻭﻴـﺔ ﺤﺘـﻰ ﻴﺠـﺭﻱ‬
‫ﺘﺨﺩﻴﻤﻬﺎ‪.‬‬

‫ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﺨﺎﺭﺠﻴﺔ‬
‫ﻴﺤﺘﻭﻱ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﻋﻠﻰ ﺜﻼﺙ ﻤﻘﺎﻁﻌﺎﺕ ﺨﺎﺭﺠﻴﺔ‪ :‬ﺇﻋﺎﺩﺓ ﺘﺸﻐﻴل ﺍﻟﻨﻅﺎﻡ ‪ ،RESET‬ﻤﻘﺎﻁﻌـﺔ‬
‫ﻏﻴﺭ ﻗﺎﺒﻠﺔ ﻟﻠﺤﺠﺏ ‪ NMI‬ﻭﺍﻟﻤﻘﺎﻁﻌﺔ ‪.INTR‬‬
‫ﺇﻋﺎﺩﺓ ﺘﺸﻐﻴل ﺍﻟﻨﻅﺎﻡ ‪ :System Reset‬ﻴﻤﻜﻥ ﺍﻋﺘﺒﺎﺭ ﻤﻐﺭﺯ ﺇﻋـﺎﺩﺓ ﺘـﺸﻐﻴل ﺍﻟﻨﻅـﺎﻡ ‪ RESET‬ﺇﺤـﺩﻯ‬
‫ﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﻏﻴﺭ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﺤﺠﺏ‪ .‬ﻋﻨﺩﻤﺎ ﻴﻜﺘﺸﻑ ﺍﻟﻤﻌﺎﻟﺞ ‪ 8088/8086‬ﺠﺒﻬﺔ ﺼﺎﻋﺩﺓ ﻤﻭﺠﺒﺔ ﻋﻠﻰ‬
‫ﺍﻟﻤﻐﺭﺯ ‪ RESET‬ﻓﺈﻨﻪ ‪‬ﻴﻨﻬﻲ ﻜل ﻨﺸﺎﻁ ﻟﻠﻤﻌﺎﻟﺞ ﺒﺎﻨﺘﻅﺎﺭ ﺃﻥ ﺘﻌﻭﺩ ﺍﻹﺸﺎﺭﺓ ﻋﻠﻰ ﺍﻟﻤﻐـﺭﺯ ‪ RESET‬ﺇﻟـﻰ‬
‫ﺼ ﱠﻔﺭ ﺭﺘل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭ ‪‬ﻴﺸﺤﻥ ﺍﻟﻘﻴﻡ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺴﺠﻼﺘﻪ ﺍﻟﺩﺍﺨﻠﻴﺔ‪.‬‬
‫ﺍﻟـ ‪ .0‬ﻋﻨﺩﻫﺎ ‪‬ﻴ ‪‬‬

‫ﺍﻟﻘﻴﻤﺔ‬ ‫ﺍﻟﺴﺠل‬
‫‪00h‬‬ ‫ﺍﻟﺭﺍﻴﺎﺕ‬
‫‪0000h‬‬ ‫‪IP‬‬
‫‪FFFFh‬‬ ‫‪CS‬‬
‫‪0000H‬‬ ‫‪DS‬‬
‫‪0000H‬‬ ‫‪SS‬‬
‫‪0000H‬‬ ‫‪ES‬‬

‫ﻭﺒﺎﻟﺘﺎﻟﻲ‪ ،‬ﻓﺈﻥ ﺃﻭل ﺘﻌﻠﻴﻤﺔ ﻴﻨﻔﺫﻫﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺒﻌﺩ ﺇﻋﺎﺩﺓ ﺍﻟﺘﺸﻐﻴل‪ ،‬ﺘﺒﺩﺃ ﺒﺎﻟﻤﻭﻗﻊ ﺍﻟﻔﻴﺯﻴﺎﺌﻲ ‪.FFFF0h‬‬

‫ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ :NMI‬ﻻ ﻴﻤﻜﻥ ﺤﺠﺏ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻭ ﹶﺘﺤﺩﺙ ﻤﻥ ﺃﺠل ﻜل ﺠﺒﻬﺔ ﺼﺎﻋﺩﺓ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪NMI‬‬
‫ﻟﻠﻤﻌﺎﻟﺞ‪ .‬ﻋﻨﺩﻤﺎ ﻴﺴﺘﺠﻴﺏ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻬﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻓﺈﻨﻪ ﻴﻨﻔﺫ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟﻨﻤﻁ ‪.2‬‬
‫ﹸﺘﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻹﻋﻼﻡ ﺍﻟﻤﻌﺎﻟﺞ ﻋﻥ ﺤﺩﻭﺙ ﺨﻁﺄ ﻓﺎﺩﺡ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﻤﺜل ﺍﻨﻘﻁﺎﻉ ﺍﻟﻜﻬﺭﺒﺎﺀ‪ ،‬ﻭﺒﺎﻟﺘﺎﻟﻲ‬
‫ﹸﺘﻤ ﱢﻜﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻥ ﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻀﺭﻭﺭﻴﺔ ﻀﻤﻥ ﺫﺍﻜﺭﺓ ‪ ،EEPROM‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜـﺎل‪ .‬ﻴﺒـﻴﻥ‬
‫ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺩﺍﺭ ﹰﺓ ﺘﻭﻟﺩ ﻨﺒﻀﺔ ﻤﻭﺠﺒﺔ ﻋﻨﺩﻤﺎ ﻴﺤﺩﺙ ﺍﻨﻘﻁﺎﻉ ﻓﻲ ﺍﻟﺘﻴﺎﺭ ﺍﻟﻜﻬﺭﺒﺎﺌﻲ‪.‬‬

‫‪36‬‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ :INTR‬ﻴﺴﺘﺠﻴﺏ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﻤﻘﺎﻁﻌﺎﺕ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪ INTR‬ﺇﺫﺍ ﻜﺎﻥ ‪ .IF=1‬ﻴﻤﻜﻨﻨﺎ ﺘﺄﻫﻴل ﻫﺫﻩ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ ،STI‬ﻜﻤﺎ ‪‬ﻴﻤﻜﻨﻨﺎ ﺤﺠﺒﻬﺎ ﺒﺘﺼﻔﻴﺭ ﺍﻟﺭﺍﻴﺔ ‪ IF‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤـﺔ ‪ .CLI‬ﻋﻨـﺩﻤﺎ‬
‫ﻴﺴﺘﺠﻴﺏ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻬﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪‬ﻴﺤﺠﺏ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﻥ ﻁﺭﻴﻕ ﺘﺼﻔﻴﺭ ‪ ،IF‬ﻭﻤﻥ ﺜﻡ ﻴﻌﻴـﺩ ﺘﺄﻫﻴﻠﻬـﺎ‬
‫ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ‪ IRET‬ﻤﻊ ﻨﻬﺎﻴﺔ ﺇﺠﺭﺍﺌﻴﺔ ﺨﺩﻤﺔ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ‪.‬‬
‫ﻋﺎﺩ ﹰﺓ ﻤﺎ ﺘﻜﻭﻥ ﻫﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻤﺸﺘﺭﻜﺔ ﺒﻴﻥ ﻋﺩﺓ ﺘﺠﻬﻴﺯﺍﺕ ﻤﺤﻴﻁﻴﺔ ﻓﻲ ﻨﻅﺎﻡ ﺼﻐﺭﻱ ﺃﻭ ﻓﻲ ﺍﻟﺤﺎﺴـﻭﺏ‬
‫ﺍﻟﺸﺨﺼﻲ‪ .‬ﻴﺴﻨﺩ ﻟﻜل ﺘﺠﻬﻴﺯﺓ ﻨﻤﻁ ﻤﻘﺎﻁﻌﺔ ﺨﺎﺹ ﻴﻘﺭﺅﻩ ﺍﻟﻤﻌﺎﻟﺞ ﻤﻥ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﻌﺩ ﺍﻻﺴﺘﺠﺎﺒﺔ‬
‫ﻤﺒﺎﺸﺭﺓ ﻟﻬﺫﻩ ﺍﻟﻤﻘﺎﻁﻌﺔ‪.‬‬
‫ﻋﻨﺩﻤﺎ ‪‬ﻴﻘﺭﺭ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻻﺴﺘﺠﺎﺒﺔ ﻟﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪ INTR‬ﻓﺈﻨﻪ ‪‬ﻴﻭﻟﺩ ﺩﻭﺭﺓ ﺁﻟﺔ ﻤﺴﺭﻯ ﻤﻘﺎﻁﻌﺔ‪،‬‬
‫ﻟﻴ‪‬ﻌﻠﻡ ﺍﻟﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺎﺭﺠﻴﺔ‪ ،‬ﺍﻟﺘﻲ ﻁﻠﺒﺕ ﺍﻟﻤﻘﺎﻁﻌﺔ‪،‬‬ ‫‪INTR‬‬ ‫ﻴﻭﻟﺩ ﺨﻼﻟﻬﺎ ﺍﻟﻤﻌﺎﻟﺞ ﻨﺒﻀﺔ ﺴﺎﻟﺒﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ‬
‫ﺃﻨﻪ ﻗﺩ ﺠﺭﻯ ﺍﻻﺴﺘﺠﺎﺒﺔ ﻟﻬﺫﺍ ﺍﻟﻁﻠﺏ‪ .‬ﺜﻡ ‪‬ﻴﻭﻟﺩ ﺍﻟﻤﻌﺎﻟﺞ‪ ،‬ﻤﺭ ﹰﺓ ﺃﺨﺭﻯ‪ ،‬ﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ﻨﻔـﺴﻪ ﻟﻘـﺭﺍﺀﺓ‬
‫ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﺫﻱ ﺘﻀﻌﻪ ﺍﻟﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺎﺭﺠﻴﺔ‪ .‬ﻴﺠﺏ ﻋﻠﻰ ﺍﻟﺘﺠﻬﻴﺯﺓ ﺍﻟﺨﺎﺭﺠﻴﺔ ﻭﻀﻊ ﺭﻗﻡ ﺸﻌﺎﻉ‬
‫ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﻤﺴﺭﻯ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪ D0-D7‬ﻤﻊ ﺒﺩﺍﻴﺔ ﺍﻟﻨﺒﻀﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺨﺭﺝ ‪ ، INTR‬ﺍﻨﻅﺭ ﺍﻟﻤﺨﻁﻁ‬
‫ﺍﻟﺯﻤﻨﻲ‪ .‬ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺃﻱ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌﺔ ﻤﻥ ‪ 00h‬ﻭﺤﺘﻰ ‪ ،FFh‬ﻭﻟﻜﻨﻨﺎ ﻋﺎﺩﺓ ﻤﺎ ﹶﻨﺴﺘﺨﺩﻡ ﺍﻟﻤﻘﺎﻁﻌـﺎﺕ‬
‫]‪ [20h-FFh‬ﻟﻜﻭﻥ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ]‪ [00h-1Fh‬ﻤﺤﺠﻭﺯﺓ ﺇﻤﺎ ﺩﺍﺨﻠﻴﹰﺎ ﺃﻭ ﻤﻥ ﺃﺠل ﺍﻟﺘﻁﻭﻴﺭ ﺍﻟﻤﺴﺘﻘﺒﻠﻲ ﻟﻠﻤﻌﺎﻟﺞ‪.‬‬

‫‪37‬‬
‫ﺭﻗﻢ ﺷﻌﺎﻉ ﺍﳌﻘﺎﻃﻌﺔ‬
‫ﻁﹸﺭﻕ ﺇﺩﺨﺎل ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ‬
‫‪ -1‬ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﺒﺴﻁ‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺩﺍﺭﺓ ﺒﺴﻴﻁﺔ ﺘﻌﻤل ﻋﻠﻰ ﻭﻀﻊ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ FFh‬ﻋﻠﻰ ﻤﺴﺭﻯ ﻤﻌﻁﻴﺎﺕ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ D0-D7‬ﻋﻨﺩ ﺍﻻﺴﺘﺠﺎﺒﺔ ﻟﻁﻠﺏ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪ .INTR‬ﻻ ﺩﺍﻋﻲ‪ ،‬ﻓﻲ ﻫـﺫﺍ ﺍﻟﻤﺜـﺎل‪ ،‬ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟ ‪‬ﻤﺨﺭﺝ ‪ . INTA‬ﺒﻤﺎ ﺃﻨﻨﺎ ﻭﺼﻠﻨﺎ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺇﻟﻰ ﺍﻟﺘﻐﺫﻴﺔ ﻋﺒﺭ ﻤﻘﺎﻭﻤﺎﺕ ﺭﻓﻊ ﻓﺈﻥ ﺍﻟﻤﻌﺎﻟﺞ ﺴﻭﻑ‬
‫ﻴﻘﺭﺃ ﺍﻟﻘﻴﻤﺔ ‪ FFh‬ﻋﻨﺩﻤﺎ ﻴﺴﺘﺠﻴﺏ ﻟﻠﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤﻐﺭﺯ ‪.INTR‬‬

‫‪38‬‬
‫‪ -2‬ﺍﺴﺘﺨﺩﺍﻡ ﻋﺎﺯل ﺜﻼﺜﻲ ﺍﻟﺤﺎﻻﺕ‬
‫ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺩﺍﺭﺓ ﻋﺯل ﺜﻼﺜﻲ ﺍﻟﺤﺎﻻﺕ ‪ 74LS244‬ﻟﺘﻁﺒﻴﻕ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌـﺔ ﺭﻗـﻡ‬
‫‪ 80h‬ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻨﺩﻤﺎ ﻴﺴﺘﺠﻴﺏ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤﻐـﺭﺯ ‪ .INTR‬ﺘـﻀﻊ ﺍﻟـﺩﺍﺭﺓ‬
‫‪ 74LS244‬ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺒﺎﻟﺘﺯﺍﻤﻥ ﻤﻊ ﺍﻟﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟﻤ‪‬ﺨـﺭﺝ ‪. INTA‬‬
‫‪‬ﻴﻤﻜﻨﻨﺎ ﻤﻥ ﺨﻼل ﺍﻟﺒﺩ‪‬ﺍﻟﺔ ‪ DIP‬ﺘﻐﻴﻴﺭ ﻨﻤﻁ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺒﺴﻬﻭﻟﺔ‪.‬‬

‫‪39‬‬
‫‪ -3‬ﺘﻭﺴﻌﺔ ﺒﻨﻴﺎﻥ ﺍﻟﻤﻘﺎﻁﻌﺔ‬
‫ﺒﻴﻨﺎ ﺴﺎﺒﻘﹰﺎ ﻁﺭﻴﻘﺘﻴﻥ ﻹﺩﺨﺎل ﺭﻗﻡ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌﺔ ﻭﺤﻴﺩ‪ .‬ﻴﻤﻜﻨﻨﺎ ﻋﻤﻠﻴﹰﺎ ﺘﻭﺴﻌﺔ ﻋﻤـل ﻤﻘﺎﻁﻌـﺔ ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ 8088/8086‬ﺒﺤﻴﺙ ﻴﻘﺒل ﺍﻟﻤ‪‬ﺩﺨل ‪ INTR‬ﺴﺒﻊ ﻤﻘﺎﻁﻌﺎﺕ ﻤﺨﺘﻠﻔﺔ ﻟﻜل ﻤﻨﻬﺎ ﺭﻗﻡ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌﺔ ﻤﺨﺘﻠـﻑ‪،‬‬
‫ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫‪40‬‬
‫ﻋﺒﺭ ﺒﻭﺍﺒﺔ ‪ NAND‬ﻟﻬﺎ ﺴﺒﻊ ﻤﺩﺍﺨل )ﻴﻤﻜﻨﻨﺎ ﺍﺴـﺘﺨﺩﺍﻡ‬ ‫‪IR0 − IR6‬‬ ‫ﻨﹸﺭﺒﻁ ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﻨﻴﺎﻥ ﺴﺒﻊ ﻤﻘﺎﻁﻌﺎﺕ‬
‫ﺍﻟﺩﺍﺭﺓ ﺍﻟﻤﺘﻜﺎﻤﻠﺔ ‪ 74LS30‬ﻟﻬﺫﺍ ﺍﻟﻐﺭﺽ(‪ .‬ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻋﺒﺭ ﺍﻟﻤﺩﺨل ‪ INTR‬ﺇﺫﺍ ﺃﺼـﺒﺢ‬
‫ﻴﺴﺎﻭﻱ ﺍﻟـ ‪ .0‬ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺒـﺎﻟﺘﺯﺍﻤﻥ ﻤـﻊ‬ ‫‪IR0 − IR6‬‬ ‫ﻋﻠﻰ ﺍﻷﻗل ﺃﺤﺩ ﺍﻟﻤﺩﺍﺨل‬
‫ﺍﻟﻨﺒﻀﺔ ﻋﻠﻰ ﺍﻟﻤﺨﺭﺝ ‪ . INTA‬ﺘﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺘﺒﻌﹰﺎ ﻟﻠﻤـﺩﺨل ﺍﻟـﺫﻱ ﻁﻠـﺏ ﺍﻟﻤﻘﺎﻁﻌـﺔ‪.‬‬
‫ﻴﺒﻴﻥ ﺍﻟﺠﺩﻭل ﺍﻟﺘﺎﻟﻲ ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻓﻲ ﺤﺎل ﻭﺠﻭﺩ ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻭﺍﺤﺩ ﺒﺂﻥ ﻭﺍﺤﺩ‪.‬‬

‫‪IR6‬‬ ‫‪IR5‬‬ ‫‪IR4‬‬ ‫‪IR3‬‬ ‫‪IR2‬‬ ‫‪IR1‬‬ ‫‪IR0‬‬ ‫‪Vector‬‬


‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪FEH‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪FDH‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪FBH‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪F7H‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪EFH‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪DFH‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪BFH‬‬

‫ﻭﻟﻜﻥ ﻋﻨﺩﻤﺎ ﺘﻁﻠﺏ ﺃﻜﺜﺭ ﻤﻥ ﺘﺠﻬﻴﺯﺓ ﻤﻘﺎﻁﻌﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺒﺂﻥ ﻭﺍﺤﺩ ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﺭﻗﻡ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌـﺔ‬
‫ﻭ‬ ‫‪IR0‬‬ ‫ﺠﺩﻴﺩ )ﻏﻴﺭ ﻤﺘﻀﻤﻥ ﻓﻲ ﺍﻟﺠﺩﻭل(‪ .‬ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل‪ ،‬ﺇﺫﺍ ﺠﺭﻯ ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤـﺩﺨﻠﻴﻥ‬
‫‪4‬‬
‫‪ ، IR1‬ﻓﺈﻨﻪ ﻴﺠﺭﻱ ﺘﻭﻟﻴﺩ ﺭﻗﻡ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ ،FCH‬ﻟﻤﺎﺫﺍ؟‬
‫ﻓـﻲ ﺍﻟﻤﻭﻗـﻊ‬ ‫‪IR0‬‬ ‫ﺍﻷﻭﻟﻭﻴﺔ ﺍﻷﻋﻠﻰ‪ ،‬ﻓﺈﻨﻪ ﻴﺠﺏ ﺘﺨﺯﻴﻥ ﻋﻨﻭﺍﻥ ﺸﻌﺎﻉ ﻤﻘﺎﻁﻌﺔ‬ ‫‪IR0‬‬ ‫ﺇﺫﺍ ﻜﺎﻥ ﻟﻠﻤﻘﺎﻁﻌﺔ‬
‫‪ FCH‬ﻤﻥ ﺠﺩﻭل ﺃﺸﻌﺔ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ‪ .‬ﻭﻴﺠﺏ‪ ،‬ﻓﻲ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ‪ ،‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻨﺼﻑ ﺍﻷﻋﻠﻰ ﻤـﻥ ﺍﻟﺠـﺩﻭل‬
‫ﺍﻟﻤﻜﻭﻥ ﻤﻥ ‪ 128‬ﻤﻭﻗﻊ ﻟﻸﺨﺫ ﺒﺎﻟﺤﺴﺒﺎﻥ ﺠﻤﻴﻊ ﺍﻟﺘﺭﺍﻜﻴﺏ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻁﻠﺒﺎﺕ ﺍﻟﻤﻘﺎﻁﻌﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ‪ .‬ﺒـﺎﻟﻁﺒﻊ‬
‫ﻼ ﻭﺴﻁﹰﺎ ﺒﻴﻥ ﺘﻌﻘﻴﺩ ﺍﻟﻨﻅﺎﻡ ﻭﻜﻠﻔﺘﻪ‪.‬‬
‫ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻟﻴﺴﺕ ﺍﻟﻤﺜﻠﻰ ﻭﻤﻊ ﺫﻟﻙ ﻓﺈﻥ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺘﻤﺜل ﺤ ﹰ‬
‫ﻻ ﻋﻠﻰ ﺭﺒﻁ ﻟﻭﺤﺔ ﻤﻔﺎﺘﻴﺢ ﻤﻊ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﻓﻲ ﻨﻅﺎﻡ ﺼـﻐﺭﻱ ﻤﺒﻨـﻲ‬
‫ﻤﺜﺎل‪ :‬ﻴﺒﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺜﺎ ﹰ‬
‫ﺤﻭل ﺍﻟﻤﻌﺎﻟﺞ ‪ .8086‬ﻴﺴﺒﺏ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﻱ ﻤﻔﺘﺎﺡ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺘﻭﻟﻴﺩ ﻤﻘﺎﻁﻌﺔ ﺫﺍﺕ ﺍﻟـﻨﻤﻁ ‪40h‬‬
‫ﻋﺒﺭ ﻤﺩﺨل ﺍﻟﻤﻘﺎﻁﻌﺔ ‪.INTR‬‬
‫ﺘﺤﺘل ﺴﺠﻼﺕ ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﺍﻟﻌﻨﺎﻭﻴﻥ‪ 0504h ،0502h ،0500h :‬ﻭ ‪ ،0506h‬ﺠـﺭﻯ‬

‫ﻭﺑﺎﻟﺘﺎﱄ ﻓﺈﻥ ﻗﻴﻤﺔ ﺷﻌﺎﻉ ﺍﳌﻘﺎﻃﻌﺔ ﰲ‬ ‫‪IR1‬‬ ‫ﻭ‬ ‫‪IR0‬‬ ‫‪ 4‬ﻷﻥ ﲨﻴﻊ ﻣﺪﺍﺧﻞ ﺍﳌﻘﺎﻃﻌﺔ ﺗﺴﺎﻭﻱ ‪ 1‬ﻣﻨﻄﻘﻲ ﻣﺎ ﻋﺪﺍ‬
‫ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﻳﺴﺎﻭﻱ ‪ 11111100b‬ﺃﻭ ‪FCh‬‬

‫‪41‬‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺭﻗﺎﻗﺔ ‪ 16L8‬ﻟﻔﻙ ﺘﺭﻤﻴﺯ ﺨﻁﻭﻁ ﺍﻟﻌﻨﻭﻨﺔ‪ .‬ﺘﻌﻤل ﺍﻟﺭﻗﺎﻗﺔ ‪ 8255A‬ﺒـﺎﻟﻨﻤﻁ ‪) 1‬ﻨﻤـﻁ ﺩﺨـل‬
‫ﻤﻘﺩﻭﺡ(‪ ،‬ﻟﺫﻟﻙ ﻜﻠﻤﺎ ﺠﺭﻯ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻴﺼﺒﺢ ﺍﻟﻤﺨﺭﺝ ‪ (PC3) INTR‬ﻟﻠﺭﻗﺎﻗـﺔ ‪8255A‬‬
‫ﻤﺴﺎﻭﻴﹰﺎ ﺍﻟـ ‪ ،1‬ﻭﻴﺠﺭﻱ ﺒﺎﻟﺘﺎﻟﻲ ﺘﻭﻟﻴﺩ ﻁﻠﺏ ﻤﻘﺎﻁﻌﺔ ﻤﻥ ﺍﻟﻨﻤﻁ ‪ 40h‬ﻋﺒﺭ ﺍﻟﻤﺩﺨل ‪ INTR‬ﻟﻠﻤﻌﺎﻟﺞ‪ .‬ﻴﺒﻘﻰ‬
‫ﺍﻟﻤ‪‬ﺨﺭﺝ ‪ INTR‬ﻟﻠﺭﻗﺎﻗﺔ ‪ 8255A‬ﻤﺴﺎﻭﻴﹰﺎ ﺍﻟـ ‪ 1‬ﺤﺘﻰ ﻴﻘﺭﺃ ﺍﻟﻤﻌﺎﻟﺞ ﺘﺭﻤﻴـﺯ ‪ ASCII‬ﻟﻠﻤﻌﻁﻴـﺎﺕ ﻋﻠـﻰ‬
‫ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﺘﹸﻤﺴﻙ ﺍﻟﺒﻭﺍﺒـﺔ ‪ A‬ﺍﻟﻤﻌﻁﻴـﺎﺕ‬ ‫ﺍﻟﻤﺨﺭﺝ ‪DAV‬‬ ‫ﻤ‪‬ﺩﺨل ﺍﻟﺒﻭﺍﺒﺔ ‪ .A‬ﻨﺘﻴﺠﺔ ﻟﻠﻨﺒﻀﺔ ﻋﻠﻰ‬
‫ﻋﻠﻰ ﻤﺩﺍﺨﻠﻬﺎ ﻜﻠﻤﺎ ﺠﺭﻯ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺤﺩ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻭﺘﺠﻌل ‪.INTR=1‬‬

‫‪42‬‬
‫ ﺘﺭﻤﻴـﺯ‬،‫ ﻓﻲ ﻜل ﻤﺭ ٍﺓ ﻴﺠﺭﻱ ﻓﻴﻬﺎ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺃﺤـﺩ ﻤﻔـﺎﺘﻴﺢ ﺍﻟﻠﻭﺤـﺔ‬،‫ﻴﻘﺭﺃ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺍﻟﺘﺎﻟﻲ‬
256 ‫ﻴﻜﺘﺸﻑ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻘﺎﻁﻌﺔ ﺒﻌﺩ ﻗـﺭﺍﺀﺓ‬ .FIFO ‫ ﻟﻠﻤﻔﺘﺎﺡ ﺍﻟﻤﻀﻐﻭﻁ ﻭﻴﻀﻌﻪ ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﺔ‬ASCII
.‫ ﻟﻠﻤﻌﺎﻟﺞ‬INTR ‫ﺩﺨل‬‫ﻴﺠﺏ ﺒﺎﻟﺘﺎﻟﻲ ﺍﻟﻤﻘﺎﻁﻌﺔ ﻋﻠﻰ ﺍﻟﻤ‬ ‫ ﻗﺩ ﺍﻤﺘﻸﺕ ﹶﻓ‬FIFO ‫ﺒﺎﻴﺕ ﺃﻥ ﺍﻟﻤﺼﻔﻭﻓﺔ‬

; interrupt service routine to read a key from the keyboard


PORTA EQU 500h
CNTR EQU 506h
FIFO DB 256 DUP (?)
INP DW ? ; SET AS OFFSET FIFO IN MAIN PROG
FIFOSize DW 256

KEY PROC FAR


PUSH AX
PUSH BX
PUSH DI
PUSH DX
MOV BX, INP
MOV DX, PORTA
IN AL,DX ; read the key
MOV [BX], AL
INC BX
CMP BX, FIFOSize ;test for queue full
JE FULL ; if queue is full
INC WORD PTR INP
JMP DONE
FULL: MOV AL, 8 ;DISABLE THE INTERRUPT
MOV DX, CNTR
OUT DX,AL
POP DX
POP DI
POP BX
POP AX
DONE: IRET
KEY END

43
‫ﺘﻤﺎﺭﻴﻥ‬
‫ﺃﺠﺏ ﻋﻠﻰ ﺍﻷﺴﺌﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -1‬ﺃﻴﻥ ﻴﻤﻜﻨﻨﺎ ﺘﺨﺯﻴﻥ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻋﻨﺩﻤﺎ ﻨﺘﻌﺎﻤل ﻤﻊ ﺒﻭﺍﺒﺔ ﺘﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪20h‬؟‬
‫‪ -2‬ﺃﻴﻥ ﻴﻤﻜﻨﻨﺎ ﺘﺨﺯﻴﻥ ﺭﻗﻡ ﺍﻟﺒﻭﺍﺒﺔ ﻋﻨﺩﻤﺎ ﻨﺘﻌﺎﻤل ﻤﻊ ﺒﻭﺍﺒﺔ ﺘﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪120h‬؟‬
‫‪ -3‬ﺃﻴﻥ ﺘﹸﺨﺯﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻨﺩ ﻗﺭﺍﺀﺓ ﺒﻭﺍﺒﺔ ﺒﻁﻭل ‪ 16‬ﺒﺕ؟‬
‫‪ -4‬ﺃﻴﻥ ﺘﹸﺨﺯﻥ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻨﺩ ﺇﺨﺭﺍﺠﻬﺎ ﻋﻠﻰ ﺒﻭﺍﺒﺔ ﺒﻁﻭل ‪ 8‬ﺒﺕ؟‬
‫‪ -5‬ﻤﺎ ﻫﻲ ﺍﻟﺩﺍﺭﺓ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟ ‪‬ﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺩﺨل؟‬
‫‪ -6‬ﻤﺎ ﻫﻲ ﺍﻟﺩﺍﺭﺓ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟ ‪‬ﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺘﺼﻤﻴﻡ ﺒﻭﺍﺒﺔ ﺨﺭﺝ؟‬
‫‪ -7‬ﻤﺎ ﻫﻲ ﻋﺩﺩ ﻤﻐﺎﺭﺯ ﺍﻟﺩﺨل‪/‬ﺍﻟﺨﺭﺝ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﺒﺭﻤﺠﺔ ﻓﻲ ﺍﻟﺩﺍﺭﺓ ‪ 8255A‬؟‬
‫‪ -8‬ﻤﺎ ﻫﻲ ﻤﻐﺎﺭﺯ ﺍﻟﺩﺍﺭﺓ ‪ 8255A‬ﺍﻟﺘﻲ ﺘﻨﺘﻤﻲ ﻟﻠﻤﺠﻤﻭﻋﺔ ‪A‬؟ ﻭﻤﺎ ﻫﻲ ﺍﻟﻤﻐﺎﺭﺯ ﺍﻟﺘﻲ ﺘﻨﺘﻤﻲ ﻟﻠﻤﺠﻤﻭﻋﺔ‬
‫‪B‬؟‬
‫‪ -9‬ﻤﻊ ﺃﻱ ﻤﻐﺭﺯ ﻤﻥ ﻤﻐﺎﺭﺯ ﻤﺴﺭﻯ ﺍﻟﻨﻅﺎﻡ ﻴﺠﺏ ﻭﺼل ﺍﻟﻤﻐﺭﺯ ‪ RD‬ﻟﻠﺩﺍﺭﺓ ‪8255A‬؟‬
‫‪ -10‬ﻤﺎ ﻫﻲ ﺃﻨﻤﺎﻁ ﺍﻟﻌﻤل ﺍﻟﻤﺘﺎﺤﺔ ﻟﻠﺩﺍﺭﺓ ‪8255A‬؟‬
‫‪ -11‬ﻤﺎ ﻫﻲ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﺘﺒﺭﻤﺞ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﺩﺨل ﻭﺍﻟﻤﺠﻤﻭﻋﺔ ‪ B‬ﺨﺭﺝ‪ ،‬ﻓﻲ ﺍﻟﺩﺍﺭﺓ ‪8255A‬؟‬
‫‪ -12‬ﻤﺎ ﻫﻲ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﺘﺒﺭﻤﺞ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ A‬ﺩﺨل ﻭﺍﻟﻤﺠﻤﻭﻋﺔ ‪ B‬ﺨﺭﺝ‪ ،‬ﻓﻲ ﺍﻟﺩﺍﺭﺓ ‪8255A‬؟‬
‫‪ -13‬ﻤﺎ ﻫﻲ ﻜﻠﻤﺔ ﺍﻟﺘﺤﻜﻡ ﺍﻟﺘﻲ ﺘﺒﺭﻤﺞ ﺍﻟﺒﻭﺍﺒﺔ ‪ A‬ﻓﻲ ﺍﻟﻨﻤﻁ ‪ ،2‬ﻭﺍﻟﺒﻭﺍﺒﺔ ‪ B‬ﺨﺭﺝ ﻭﺍﻟﻤﻐـﺎﺭﺯ ‪PC0-PC2‬‬
‫ﺩﺨل ﻓﻲ ﺍﻟﻨﻤﻁ ‪ ،0‬ﻓﻲ ﺍﻟﺩﺍﺭﺓ ‪8255A‬؟‬
‫‪ -14‬ﻫل ﺘﻭﻟﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DIV‬ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻤﻘﺎﻁﻌﺔ؟‬
‫‪MOV AL,192‬‬
‫‪SUB CL, CL‬‬
‫‪DIV CL‬‬
‫‪ -15‬ﻫل ﺘﻭﻟﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ DIV‬ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻤﻘﺎﻁﻌﺔ؟‬
‫‪MOV AX,0FFFh‬‬
‫‪MOV BL,2‬‬
‫‪DIV BL‬‬
‫‪ -16‬ﻤﺎ ﻫﻲ ﺍﻟﻤﻭﺍﻗﻊ ﺍﻟﺘﻲ ﻴﺠﺭﻱ ﻓﻴﻬﺎ ﺘﺨﺯﻴﻥ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪10h‬؟ ﺍﻟﺠﻭﺍﺏ‪.00040h-00043h :‬‬
‫‪ -17‬ﻤﺎ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ‪ IRET‬ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ‪RET‬؟‬
‫‪ -18‬ﺼ‪‬ﻤﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺩﺍﺭﺓ ‪ 74LS138‬ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﻋﻨﺎﻭﻴﻥ‪ ،‬ﻓﻲ ﻨﻅﺎﻡ ﺼﻐﺭﻱ ﻤﺒﻨﻲ ﺤـﻭل ﺍﻟﻤﻌـﺎﻟﺞ‬

‫‪44‬‬
‫‪ ،8086‬ﺘﻨﺘﺨﺏ ‪ 8‬ﺒﻭﺍﺒﺎﺕ ﺘﺤﺘل ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺘﺎﻟﻴﺔ‪.1Eh ،1Ch ،1Ah ،18h ،16h ،14h ،12h ،10h :‬‬
‫‪ -19‬ﺼ‪‬ﻤﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺩﺍﺭﺓ ‪ 74LS138‬ﺩﺍﺭﺓ ﻤﻔﻜﻙ ﻋﻨﺎﻭﻴﻥ‪ ،‬ﻓﻲ ﻨﻅﺎﻡ ﺼﻐﺭﻱ ﻤﺒﻨﻲ ﺤـﻭل ﺍﻟﻤﻌـﺎﻟﺞ‬
‫‪ ،8086‬ﺘﻨﺘﺨﺏ ‪ 8‬ﺒﻭﺍﺒﺎﺕ ﺘﺤﺘل ﺍﻟﻌﻨﺎﻭﻴﻥ ﺍﻟﺘﺎﻟﻴﺔ‪.1Fh ،1Dh ،1Bh ،19h ،17h ،15h ،13h ،11h :‬‬
‫‪ -20‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﹸﺨﺭﺝ ﻤﺤﺘﻭﻯ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ‪ DATA‬ﻋﻠﻰ ﺒﻭﺍﺒﺔ ﺒﻁﻭل ‪ 8-bit‬ﻋﻨﻭﺍﻨﻬﺎ ‪.50h‬‬
‫‪ -21‬ﺍﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺕ ﺘﻘﺭﺃ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻠﻰ ﺒﻭﺍﺒﺔ ﻋﻨﻭﺍﻨﻬﺎ ‪ 800Eh‬ﻭﺘﻀﻌﻬﺎ ﻓﻲ ﻤﻭﻗﻊ ﺍﻟﺫﺍﻜﺭﺓ ‪.DATA‬‬
‫‪ -22‬ﺒﻴﻥ ﻜﻴﻑ ﻴﻤﻜﻥ ﺭﺒﻁ ﺍﻟﻤﺒﺩل ‪ DAC0830‬ﻤﻊ ﻤﻌﺎﻟﺞ ‪ 8086‬ﺒﺤﻴﺙ ﻴﺤﺘل ﺍﻟﻌﻨﻭﺍﻥ ‪ 400h‬ﻤﻥ ﻓﻀﺎﺀ‬
‫ﺍﻟﺒﻭﺍﺒﺎﺕ‪.‬‬
‫‪ -23‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴ‪‬ﺨﺭﺝ ﺇﺸﺎﺭﺓ ﺴﻥ ﻤﻨﺸﺎﺭ ﻋﻠﻰ ﻤﺨﺭﺝ ﺍﻟﻤﺒﺩل ‪ DAC0830‬ﻓﻲ ﺍﻟﻁﻠﺏ ﺍﻟﺴﺎﺒﻕ‪.‬‬
‫‪ -24‬ﺒﻴﻥ ﻜﻴﻑ ﻴﻤﻜﻥ ﺭﺒﻁ ﺍﻟﻤﺒﺩل ‪ ADC804‬ﻤﻊ ﻤﻌﺎﻟﺞ ‪ 8086‬ﺒﺤﻴﺙ ﺘﺤﺘل ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻌﻨﻭﺍﻥ ‪0260h‬‬
‫ﻭﻴ‪‬ﺤﺠﺯ ﺍﻟﻌﻨﻭﺍﻥ ‪ 0270h‬ﻟﻘﺭﺍﺀﺓ ﺤﺎﻟﺔ ﺍﻟﻤﻐﺭﺯ ‪ INTR‬ﻟﻠﻤﺒﺩل‪.‬‬
‫‪ -25‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻘﺭﺃ ﻋﻴﻨﺔ ﻤﻥ ﺇﺸﺎﺭﺓ ﺍﻟﺩﺨل ﻜل ‪ 100‬ﻤﻠﻲ ﺜﺎﻨﻴﺔ ﻭﻴﻀﻊ ﺍﻟﻘﻴﻡ ﺍﻟﻤﻘﺭﻭﺀﺓ ﻓﻲ ﻤﺼﻔﻭﻓﺔ‬
‫ﻁﻭﻟﻬﺎ ‪ 100h‬ﺒﺎﻴﺕ‪.‬‬
‫ﺼﻤﻡ ﺩﺍﺭ ﹰﺓ ﺘﻀﻊ ﺸﻌﺎﻉ ﺍﻟﻤﻘﺎﻁﻌﺔ ‪ 86h‬ﻋﻠﻰ ﺨﻁﻭﻁ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻋﻨﺩ ﺍﻻﺴﺘﺠﺎﺒﺔ ﻟﻤﻘﺎﻁﻌـﺔ ﻋﻠـﻰ‬
‫‪ -26‬‬
‫ﺍﻟﻤﺩﺨل ‪.INTR‬‬
‫‪ -27‬ﺍﻜﺘﺏ ﺒﺭﻨﺎﻤﺠﹰﺎ ﻴﻁﺒﻊ ﺍﻟﺭﺴﺎﻟﺔ '‪ 'Overflow error‬ﻜﻠﻤﺎ ﺤﺩﺙ ﻁﻔﺢ ﻓﻲ ﻋﻤﻠﻴﺔ ﺤﺴﺎﺒﻴﺔ ﻤﺎ‪.‬‬

‫‪45‬‬

You might also like