Professional Documents
Culture Documents
ﻣﻘﺩﻣﺔ
ﺍﻻﻋﺗﺭﺍﺿﺎﺕ ﻋﺑﺎﺭﺓ ﻋﻥ ﺁﻟﻳﺎﺕ ﻓﻲ ﻣﺳﺗﻭﻯ ﺍﻟﻣﻌﺎﻟﺞ ﺗﺳﺗﻌﻣﻝ ﻋﺎﻣﺔ ﻟﻠﺣﻭﺍﺭ ﺍﻟﻠﻭﺍﺣﻖ ﻭ ﺍﻟﻣﻌﺎﻟﺞ ,ﺍﻟﻌﺑﻭﺭ ﻣﻥ
ﻣﺳﺗﻭﻯ ﺑﺭﺍﻣﺞ ﺇﻟﻰ ﻣﺳﺗﻭﻯ ﺁﺧﺭ ,ﻭ ﻣﻌﺎﻟﺟﺔ ﺍﻷﺧﻁﺎء ﺍﻟﺩﺍﺧﻠﻳﺔ ﻟﻠﻣﻌﺎﻟﺞ ﺃﺛﻧﺎء ﺍﻟﺗﻧﻔﻳﺫ ﺃﻭ ﺗﺩﻋﻰ ﺍﻻﺳﺗﺛﻧﺎءﺍﺕ ﺃﻭ
:exceptions
• ﺍﻋﺗﺭﺍﺿﺎﺕ ﻋﺗﺎﺩ
• ﺍﻋﺗﺭﺍﺿﺎﺕ ﺑﺭﻣﺟﻳﺔ
• ﺍﻋﺗﺭﺍﺿﺎﺕ ﺩﺍﺧﻠﻳﺔ ﺃﻭ ﺇﺳﺗﺛﻧﺎءﺍﺕ
ﻓﻌﻝ ﺍﻹﻋﺗﺭﺍﺽ ﺍﻷﺳﺎﺳﻲ ﻣﻬﻣﺎ ﻛﺎﻧﺕ ﻁﺑﻳﻌﺗﻪ ﻫﻭ ﺇﻳﻘﺎﻑ ﺍﻟﺑﺭﻧﺎﻣﺞ ﺍﻟﺟﺎﺭﻱ ﺗﻧﻔﻳﺫﻩ ﺑﻁﺭﻳﻘﺔ ﻋﺷﻭﺍﺋﻳﺔ ﻓﻲ ﺣﺎﻟﺔ
ﺇﻋﺗﺭﺍﺽ ﻋﺗﺎﺩ ,ﺃﻭ ﻣﻧﺗﻅﺭﺓ ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﺑﺭﻣﺟﻲ ﺃﻭ ﺍﻹﺳﺗﺛﻧﺎء ,ﻭ ﺫﻟﻙ ﻟﺗﻐﻳﻳﺭ ﻣﺳﺎﺭ ﺍﻟﻣﻌﺎﻟﺞ ﺇﻟﻰ ﺑﺭﻧﺎﻣﺞ ﺁﺧﺭ.
ﺍﻟﻣﻌﺎﻟﺞ ﻣﺟﻬﺯ ﺑﺂﻟﻳﺎﺕ ﺩﺍﺧﻠﺑﺔ )ﻣﺛﻝ (Intel8x86ﺗﻣﻛﻧﻪ ﻣﻥ ﺍﻟﺗﻌﺭﻑ ﻟﻰ ﻣﺻﺩﺭ ﺍﻻﻋﺗﺭﺍﺽ ﻭ ﻁﺭﻳﻘﺔ
ﺍﻟﺗﻭﺟﻪ ﺇﻟﻰ ﺍﻟﺑﺭﻧﺎﻣﺞ ﺍﻟﺟﺩﻳﺩ ﻭ ﺫﻟﻙ ﺑﺈﺳﺗﺧﺭﺍﺝ ﻋﻧﻭﺍﻥ ﺑﺭﻧﺎﻣﺞ ﺍﻹﻋﺗﺭﺍﺽ ﺍﻟﻣﻭﺍﻓﻖ.
ﺗﺣﺗﻭﻱ ﻫﺫﻩ ﺍﻟﻣﻌﺎﻟﺟﺎﺕ ﻋﻠﻰ 256ﻣﺳﺗﻭﻯ ﺇﻋﺗﺭﺍﺽ ﺑﻳﻥ ﺍﻋﺗﺭﺍﺿﺎﺕ ﻋﺗﺎﺩ ,ﺑﺭﻣﺟﻳﺔ ﻭ ﺇﺳﺗﺛﻧﺎءﺍﺕ.
2.1.1ﺍﻋﺗﺭﺍﺿﺎﺕ ﻋﺗﺎﺩ
ﻋﺑﺎﺭﺓ ﻋﻥ ﺗﻌﻠﻳﻣﺔ Int n°ﺗﻐﻳﺭ ﻣﺳﺎﺭ ﺗﻧﻔﻳﺫ ﺍﻟﻣﻌﺎﻟﺞ ﺇﻟﻰ ﺑﺭﻧﺎﻣﺞ ﺧﺎﺹ .ﺗﺣﺩﺩ ﺃﺭﻗﺎﻡ ﻫﺫﻩ ﺍﻟﺗﻌﻠﻳﻣﺔ ﻣﻥ
ﻁﺭﻑ ﻧﻅﺎﻡ ﺍﻟﺗﺷﻐﻳﻝ ﻋﺎﺩﺓ ﻹﺳﺗﻌﻣﺎﻟﻬﺎ ﻛﻧﺩﺍءﺍﺕ ﺇﻟﻰ ﻭﻅﺎﺋﻑ ﻧﻅﺎﻡ ﺍﻟﺗﺷﻐﻳﻝ Operating System Calls
ﻣﺛﻝ Int 21hﺍﻟﺧﺎﺻﺔ ﺑــ ,MSDOSﻭ ﻛﺫﻟﻙ ﻧﺩﺍءﺍﺕ )BIOS(Basic Input/Output System
ﺍﻟﺧﺎﺻﺔ ﺑﺟﻬﺎﺯ ﺍﻟــ ) PC(IBM compatibleﻭ ﺍﻟﻣﻧﺟﺯﺓ ﻣﻥ ﻁﺭﻑ ﻣﺻﻣﻡ ﺍﻟﺑﻁﺎﻗﺔ ﺍﻷﻡ.
3.1.2ﺍﻹﺳﺗﺛﻧﺎءﺍﺕ Exceptions
ﻫﺫﻩ ﺍﻹﻋﺗﺭﺍﺿﺎﺕ ﺍﻟﺩﺍﺧﻠﻳﺔ ﻧﺎﺗﺟﺔ ﻋﻧﺩ ﺗﻧﻔﻳﺫ ﺑﻌﺽ ﺍﻟﺗﻌﻠﻳﻣﺎﺕ ﻓﻲ ﺣﺎﻻﺕ ﺧﺎﺻﺔ ﻣﺛﻝ ﺍﻟﻘﺳﻣﺔ ﻋﻠﻰ .0ﺑﺭﺍﻣﺞ
ﻫﺫﻩ ﺍﻻﺳﺗﺛﻧﺎءﺍﺕ ﺗﺧﺭﺝ ﻋﺎﺩﺓ ﺇﻣﺎ ﺻﻭﺕ bipﺃﻭ ﻧﺹ ﻓﻲ ﺍﻟﺷﺎﺷﺔ ﻣﺛﻝ divide/0ﺍﻟﺗﻲ ﺗﺳﺎﻋﺩ ﻓﻲ ﺇﻋﺎﺩﺓ
ﺿﺑﻁ ﺍﻟﺑﻳﺎﻧﺎﺕ ﺍﻟﺑﺭﻧﺎﻣﺞ ﺍﻟﻣﺗﻭﻗﻑ ﺃﻭ ﺇﻋﺎﺩﺓ ﺍﻟﻧﻅﺭ ﻓﻲ ﺗﺻﻣﻳﻡ ﺍﻟﺑﺭﻧﺎﻣﺞ.
.
.
Int FF
ﻟﻛﻝ ﻣﺳﺗﻭﻯ ﺍﻋﺗﺭﺍﺽ ﻳﺳﺗﻭﺟﺏ ﻭﺟﻭﺩ ﺃﻭ ﺗﺣﺩﻳﺩ ﻋﻧﻭﺍﻥ ﺑﺭﻧﺎﻣﺟﻪ ﺍﻟﺧﺎﺹ .ﻋﻠﻣﺎ ﺑﺄﻥ ﻋﻧﻭﺍﻥ ﺑﺭﻧﺎﻣﺞ ﻋﺑﺎﺭﺓ
ﻋﻥ ﻗﻳﻣﺗﻳﻥ CS :IP 16bitsﻳﺷﻳﺭﺇﻟﻰ ﻣﻭﻗﻊ ﻓﻲ ﻣﺟﺎﻝ ﻋﻧﺎﻭﻳﻥ ﺍﻟﻣﻌﺎﻟﺞ .ﻓﻲ ﻫﻧﺩﺳﺔ 80x86ﺗﺧﺻﺹ
ﻣﻧﻁﻘﺔ ﻹﺣﺗﻭﺍء ﻋﻧﺎﻭﻳﻥ ﺑﺭﺍﻣﺞ ﺍﻻﻋﺗﺭﺍﺿﺎﺕ ﺍﻟﻣﺧﺗﻠﻔﺔ .ﺗﺑﺩﺃ ﻫﺫﻩ ﺍﻟﻣﻧﻁﻘﺔ ﻓﻲ ﺍﻟﻌﻧﻭﺍﻥ 0000:0000ﻭ
ﺗﺧﺯﻥ ﻓﻳﻬﺎ CS :IPﻟﻛﻝ ﺑﺭﻧﺎﻣﺞ ﺣﺳﺏ ﺍﻟﺷﻛﻝ ﺍﻟﺳﺎﺑﻖ.
ﺑﺎﻗﻲ ﻣﺳﺗﻭﻳﺎﺕ ﺍﻻﻋﺗﺭﺍﺿﺎﺕ ﺗﻭﺯﻉ ﻏﻠﻰ ﺍﻋﺗﺭﺍﺿﺎﺕ ﺍﻟﻌﺗﺎﺩ ﺣﺳﺏ ﺗﺻﻣﻳﻡ ﻫﻧﺩﺳﺔ PCﺍﻟﺗﻲ ﺗﺣﺩﺩ ﻋﺩﺩﻫﺎ ﻭ
ﺃﻭﻟﻭﻳﺎﺗﻬﺎ ﻣﻥ ﺟﻬﺔ ,ﻭ ﺍﻻﻋﺗﺭﺍﺿﺎﺕ ﺍﻟﺑﺭﻣﺟﻳﺔ ﺍﻟﻣﺣﺩﺩﺓ ﻣﻥ ﻁﺭﻑ ﻧﻅﺎﻡ ﺍﻟﺗﺷﻐﻳﻝ ﻭ ﻣﻥ ﺑﺭﺍﻣﺞ ﺍﻟﺑﻁﺎﻗﺔ ﺍﻷﻡ
).(RomBIOS
ﺗﻌﺗﺑﺭ ﺑﺭﺍﻣﺞ ﺍﻻﻋﺗﺭﺍﺿﺎﺕ ﻛﺑﺭﺍﻣﺞ "ﻗﺻﻳﺭﺓ" ﺧﺎﺻﺔ ﻷﺩﺍء ﻣﻬﻣﺔ ﻣﺣﺩﺩﺓ ,ﺃﻭ ﻛﺑﺭﺍﻣﺞ ﻓﺭﻋﻳﺔ ﺃﺳﺎﺳﻳﺔ
ﻛﺧﺩﻣﺎﺕ ﻟﺑﻘﻳﺔ ﺍﻟﺑﺭﺍﻣﺞ ,ﻛﻣﺎ ﺫﻛﺭ ﻓﻲ ﺑﺩﺍﻳﺔ ﺍﻟﻔﺻﻝ.
ﻛﻝ ﺑﺭﻧﺎﻣﺞ ﺇﻋﺗﺭﺍﺽ ﻳﺳﺗﻌﻣﻝ ﻋﺩﺩ ﻣﺣﺩﺩ ﻣﻥ ﺍﻟﺳﺟﻼﺕ ﺣﺳﺏ ﺩﻭﺭﻩ .ﻗﺑﻝ ﺑﺩﺍﻳﺔ ﻣﻌﺎﻟﺟﺔ ﺍﻹﻋﺗﺭﺍﺽ •
ﻳﺟﺏ ﺗﺧﺯﻳﻥ ﻣﺣﺗﻭﻯ ﺍﻟﺳﺟﻼﺕ ﺍﻟﻣﺳﺗﻌﻣﻠﺔ ,ﺃﺛﻧﺎء ﺍﻟﻣﻌﺎﻟﺟﺔ ,ﻓﻲ ﺍﻟﻣﻛﺩﺱ ﻣﺅﻗﺗﺎ .ﻳﺳﺗﻌﻣﻝ ﺍﻟﻣﺑﺭﻣﺞ
ﺗﻌﻠﻳﻣﺔ pushﻟﻬﺫﺍ ﺍﻟﻐﺭﺽ ,ﻣﺭﻓﻘﺔ ﺑﺈﺳﻡ ﻟﺳﺟﻝ)….(push ax, push dx, push cx
ﺑﻌﺩ ﺍﻟﺗﺧﺯﻳﻥ ﻳﻭﺍﺻﻝ ﺍﻟﺑﺭﻧﺎﻣﺞ ﻣﻌﺎﻟﺟﺔ ﺍﻹﻋﺗﺭﺍﺽ . •
ﻗﺑﻝ ﺍﻹﻧﺗﻬﺎء ﻳﺟﺏ ﺇﺭﺟﺎﻉ ﻗﻳﻡ ﺍﻟﺳﺟﻼﺕ ﺍﻟﻣﺧﺯﻧﺔ ﻓﻲ ﺍﻟﺑﺩﺍﻳﺔ ) ,(push..ﺑﻭﺍﺳﻁﺔ ﺗﻌﻠﻳﻣﺔ pop reg •
ﻣﺭﻓﻘﺔ ﺑﺈﺳﻡ ﺍﻟﺳﺟﻝ,ﻭ ﻟﻛﻥ ﺑﺎﻟﺗﺭﺗﻳﺏ ﺍﻟﻌﻛﺳﻲ )… (push cx, push dx, push axﻧﻅﺭﺍ ﻟﺧﺎﺻﻳﺔ
ﺍﻟﻣﻛﺩﺱ ﺍﻷﺳﺎﺳﻳﺔ ,ﺧﻳﺙ ﺁﺧﺭ ﺩﺍﺧﻝ ﻟﻠﻣﻛﺩﺱ ﻫﻭ ﺃﻭﻝ ﺧﺭﺝ ﻣﻧﻪ ).(LIFO Last In First Out
ﻹﺳﺗﺈﻧﺎﻑ ﺍﻟﺑﺭﻧﺎﻣﺞ ﺍﻟﻣﺗﻭﻗﻑ ﻟﻺﻋﺗﺭﺍﺽ ﻳﺟﺏ ﺇﺿﺎﻓﺔ ﺗﻌﻠﻳﻣﺔ )iret (return from interrupt •
ﺑﺣﻳﺙ ﺗﻧﻔﻳﺫ iretﻳﻘﻭﻡ ﺑﺎﻟﻔﻌﻝ ﺍﻟﻌﻛﺳﻲ ﻟﻺﻋﺗﺭﺍﺽ ,ﻫﻭ ﺇﺳﺗﺧﺭﺍﺝ ﺣﺎﻟﺔ ﺍﻟﺑﺭﻧﺎﻣﺞ ﺍﻟﻣﺗﻭﻗﻑ ﺑﺎﻟﺗﺭﺗﻳﺏ
ﺍﻟﻌﻛﺳﻲ ,ﺃﻱ ﺳﺟﻝ ﺍﻟﺣﺎﻻﺕ ﺛﻡ ﻋﻧﻭﺍﻥ cs,ipﻟﻠﺗﻌﻠﻳﻣﺔ ﺍﻟﻣﻭﺍﻟﻳﺔ ﻟﻺﻋﺗﺭﺍﺽ.
ﻣﻼﺣﻅﺔ:
• ﻓﻲ ﺣﺎﻻﺕ ﺧﺎﺻﺔ )ﺑﻌﺽ ﺑﺭﺍﻣﺞ ﻧﻅﺎﻡ ﺍﻟﺗﺷﻐﻳﻝ( ﻟﻺﻋﺗﺭﺍﺿﺎﺕ ,ﺣﻳﺙ ﻳﺗﻭﺟﺏ ﻋﺩﻡ ﺗﻭﻗﻳﻑ ﺑﺭﻧﺎﻣﺞ
ﺍﻹﻋﺗﺭﺍﺽ ,ﻳﺳﺗﻠﺯﻡ ﺗﺣﻳﺩ ﺃﻭ "ﺇﺧﻔﺎء" ﺍﻹﻋﺗﺭﺍﺿﺎﺕ ﺑﻭﺍﺳﻁﺔ ﺗﻌﻠﻳﻣﺔ ) cli(clear interrptﻓﻲ ﺑﺩﺍﻳﺔ
ﺍﻟﺑﺭﻧﺎﻣﺞ .ﻗﺑﻝ ﺇﻧﻬﺎء ﺑﺭﻧﺎﻣﺞ ﺍﻹﻋﺗﺭﺍﺽ ﻳﺟﺏ ﺣﺗﻣﺎ ﺇﺭﺟﺎﻉ ﺍﻟﺣﺎﻟﺔ ﻵﺻﻠﻳﺔ ,ﺃﻱ ﺗﻔﻌﻳﻝ ﻣﺩﺧﻝ intr
ﺑﻭﺍﺳﻁﺔ ﺗﻌﻠﻳﻣﺔ ).sti(set interrupt
• ﺟﻣﻳﻊ ﺁﻟﻳﺎﺕ ﺍﻹﻋﺗﺭﺍﺽ ,ﻣﺎ ﻋﺩﺍ ﻣﺭﺣﻠﺔ ﺍﻟﺗﻌﺭﻑ ﻋﻥ ﺭﻗﻡ ﺍﻹﻋﺗﺭﺍﺽ ﻣﻥ ﻣﺭﺍﻗﺏ ﺍﻹﻋﺗﺭﺍﺿﺎﺕ,
ﺗﻛﻭﻥ ﻣﻣﺎﺛﻠﺔ ﻟﻛﻝ ﺃﻧﻭﺍﻉ ﺍﻹﻋﺗﺭﺍﺿﺎﺕ.