Professional Documents
Culture Documents
دروس ا ا
ا
ا
http://www.arabteam2000.com
"! ا ق
ا
إدارة ا
ا$ %& روس إ*
)ذن+ ا,- ه$ /0 ا1ان ا أو ا34 %5 6
3 3
:89:
<9
ات+3 ه15 !>? ا35ج اA3 $ 5 روس ه
س+ ا,-ه
ء اولCا
اE +
-1-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
-2-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
-3-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
$4ا<
ﻳﻌﺮﻑ ﺍﳊﺎﺳﺐ ﺍﻟﺮﻗﻤﻲ ﺑﺄﻧﻪ ﻧﻈﺎﻡ ﺇﻟﻜﺘﺮﻭﱐ ﳌﻌﺎﳉﺔ ﺍﳌﻌﻄﻴﺎﺕ ،ﻭ ﻳﺘﺄﻟﻒ ﻣﻦ ﻗﺴﻤﲔ ﺃﺳﺎﺳﻴﲔ:
ﺍﻟﻘﺴﻢ ﺍﻷﻭﻝ :ﺍﻟﱪﳎﻴﺎﺕ . SOFTWARE
ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ
ﺍﻟﻘﺴﻢ ﺍﻟﺜﺎﱐ :ﺍﻟﻜﻴﺎﻥ ﺍﻟﺼﻠﺐ HARDWARE
ﻭ ﻳﻘﺴﻢ ﺍﻟﻜﻴﺎﻥ ﺍﻟﺼﻠﺐ ﺇﱃ ﺃﻗﺴﺎﻡ
ﻭﺣﺪﺓ ﺍﻟﺪﺧﻞ C.P.U ﻭﺣﺪﺓ ﺍﳋﺮﺝ
ﺭﺋﻴﺴﻴﺔ ﻫﻲ :
(1ﻭﺣﺪﺓ ﺍﻟﺪﺧﻞ :ﺗﺘﻢ ﻣﻦ ﺧﻼﳍﺎ ﺇﺩﺧﺎﻝ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺮﻗﻤﻴﺔ.
(2ﻭﺣﺪﺓ ﺍﳋﺮﺝ :ﺗﺘﻢ ﻣﻦ ﺧﻼﳍﺎ ﺇﻇﻬﺎﺭ ﺍﻟﻨﺘﺎﺋﺞ ﺑﻌﺪ ﻣﻌﺎﳉﺔ ﺍﳌﻌﻄﻴﺎﺕ.
(3ﻭﺣﺪﺓ ﺍﳌﻌﺎﳉﺔ ﺍﳌﺮﻛﺰﻳﺔ :ﻫﻲ ﺍﳌﺴﺆﻭﻟﺔ ﻋﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ ﻭ ﺍﳌﻨﻄﻘﻴﺔ ﻭ ﻣﻌﺎﳉﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ.
(4ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ :ﲣﺰﻥ ﺍﻟﱪﺍﻣﺞ ﻭ ﺍﳌﻌﻄﻴﺎﺕ.
ﺍﻟﺒﻨﻴﺔ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﻠﻤﻌﺎﰿ 8086
ADDRESS BUS
15 8 7 1 )(20 BITS
AH AL
BH BL
GENERAL
CH CL
REGISTERS DH DL DATA BUS
BP CS
DI DS BUS
CONTROL
SI SS LOGIC
ES
ALU DATA BUS IP
)(16 BITS INTERNAL
COMUNICATION
REGISTERS
TEMPORARY REGISTERS
INSTRUCTION QUE
O BUS
EU
ALU CONTROL
)(8 BITS 1 2 3 4 5 6
SYSTEM
FLAGS
-5-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﲡﻠﺐ ﻭﺣﺪﺓ ﺍﻟﺘﻨﻔﻴﺬ EUﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻣﻦ ﻣﻘﺪﻣﺔ ﺭﺗﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﰲ ﻭﺣﺪﺓ ﻣﻼﺋﻤﺔ ﺍﳌﻤﺮﺍﺕ BIUﻭ ﺗﻔﻚ ﺷﻴﻔﺮﺎ ﻭ ﺗﻘﻮﻡ ﺑﺎﻟﻌﻤـﻞ
ﺍﻟﺬﻱ ﲤﻠﻴﻪ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﻓﺈﺫﺍ ﺍﺣﺘﺎﺟﺖ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺓ ) ( EUﺇﱃ ﻣﻌﻠﻮﻣﺔ ﳐﺰﻧﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻓﺈﺎ ﺗﺄﻣﺮ ﻭﺣﺪﺓ ﻣﻼﺋﻤﺔ ﺍﳌﻤـﺮﺍﺕ BIU
ﺑﺈﺣﻀﺎﺭﻫﺎ ﻭ ﺫﻟﻚ ﻋﻦ ﻃﺮﻳﻖ ﺇﻋﻄﺎﺋﻬﺎ ﻋﻨﻮﺍﻥ ﻫﺬﻩ ﺍﳌﻌﻠﻮﻣﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ.
ﺇﻥ ﻣﻦ ﺃﺣﺪ ﺃﻫﻢ ﻭﻇﺎﺋﻒ EUﻫﻮ ﺗﻨﻔﻴﺬ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ ﻭ ﺍﳌﻨﻄﻘﻴﺔ ﻋﻠﻰ ﺍﳌﻌﻠﻮﻣﺎﺕ ،ﻭ ﺃﺛﻨﺎﺀ ﺳﲑ ﺍﻟﺘﻨﻔﻴﺬ ﺗﻘـﻮﻡ EUﺑﻔﺤـﺺ
ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﺑﻌﺪ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ) ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ :ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺳﺘﺔ ﻋﺸﺮ ﺑﺖ ﺗﻌﱪ ﻋﻦ ﺣﺎﻟﺔ ﺍﳌﻌﺎﰿ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ( .
ﻣﺴﺠﻼﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ ﻫﻲ ﲦﺎﻧﻴـﺔ ﻣـﺴﺠﻼﺕ ﻃـﻮﻝ ﻛـﻞ ﻣـﺴﺠﻞ ﻣﻨـﻬﺎ 2ﺑﺎﻳـﺖ ﻭ ﻫـﺬﻩ ﺍﳌـﺴﺠﻼﺕ ﻫـﻲ
. AX,BX,CX,DX,SI,DI,BP,SP
ﺑﻨﻴﺔ ﺍﻟﺬﺍﻛﺮﺓ
ﺗﺘﺄﻟﻒ ﺍﻟﺬﺍﻛﺮﺓ ﻣﻦ ﺣﺠﺮﺍﺕ ﻣﺘﺴﻠﺴﻠﺔ ﺳﻌﺔ ﻛﻞ ﻣﻨﻬﺎ 8ﺑﺖ )ﻭﺍﺣﺪ ﺑﺎﻳﺖ( ،ﺗﺮﻗﻢ ﻫﺬﻩ ﺍﳊﺠﺮﺍﺕ ﻣﻦ ﺍﻟﺼﻔﺮ ﻭ ﺣﱴ ﺎﻳﺔ ﺍﻟﺬﺍﻛﺮﺓ
ﻭ ﻳﺴﺘﺨﺪﻡ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺴﺖ ﻋﺸﺮﻱ ﻋﺎﺩﺓ ﰲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﻗﻴﻢ ﻭ ﺑﺬﻟﻚ ﻳﻜﻮﻥ ﻟﻜﻞ ﺣﺠﺮﺓ ﺭﻗﻢ ﳝﻴﺰﻫﺎ ﻋﻦ ﻏﲑﻫﺎ ،ﻳﺪﻋﻰ ﻫﺬﺍ ﺍﻟﺮﻗﻢ ﺑﻌﻨﻮﺍﻥ
ﺗﻠﻚ ﺍﳊﺠﺮﺓ.
ﻳﻮﺿﻊ ﺩﺍﺧﻞ ﻛﻞ ﺣﺠﺮﺓ ﺭﻗﻢ ﺳﺖ ﻋﺸﺮﻱ ﻳﺘﺮﺍﻭﺡ ﺑﲔ 0ﻭ FFﻭ ﻳﺪﻋﻰ ﻫﺬﺍ ﺍﻟﺮﻗﻢ ﲟﺤﺘﻮﻯ ﺗﻠﻚ ﺍﳊﺠﺮﺓ.
ﻳﻮﺟﺪ ﺑﲔ ﺍﳌﻌﺎﰿ ﻭ ﺍﻟﺬﺍﻛﺮﺓ ﳑﺮﺍﻥ ﳘﺎ ﳑﺮ ﺍﳌﻌﻄﻴﺎﺕ ﺑﻌﺮﺽ 16ﺑﺖ ﻭ ﳑﺮ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺑﻌﺮﺽ 20ﺑﺖ.
ﻼ ﻋﻨﺪﻣﺎ ﳛﺘﺎﺝ ﺍﳌﻌﺎﰿ ﺇﱃ ﺍﻟﻘﻴﻤﺔ ﺍﳌﺨﺰﻧﺔ ﰲ ﺍﳊﺠﺮﺓ ﺫﺍﺕ ﺍﻟﺮﻗﻢ ) 100ﻋﻨﻮﺍﺎ ( 100ﻓﺈﻥ ﺍﻟﺮﻗﻢ 100ﳝﺜﻞ ﺑﺸﻜﻞ ﺛﻨﺎﺋﻲ ﻭ ﻓﻤﺜ ﹰ
ﻳﻮﺿﻊ ﻋﻠﻰ ﳑﺮ ﺍﻟﻌﻨﺎﻭﻳﻦ ﻭ ﻳﺮﺳﻞ ﺇﱃ ﺍﻟﺬﺍﻛﺮﺓ ،ﻭ ﺣﺎﳌﺎ ﺗﺴﺘﻠﻢ ﺍﻟﺬﺍﻛﺮﺓ ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ ﻓﺈﻥ ﳏﺘﻮﻯ ﺍﳊﺠﺮﺓ 100ﻳﺮﺳﻞ ﺇﱃ ﺍﳌﻌﺎﰿ ﻋﻦ
ﻃﺮﻳﻖ ﳑﺮ ﺍﳌﻌﻄﻴﺎﺕ.
ﺇﻥ ﻛﻮﻥ ﳑﺮ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺫﻭ ﻋﺮﺽ 20ﺑﺖ ) 20ﺧﻂ ﻧﻘﻞ( ﻫﺬﺍ ﻳﻌﲏ ﺃﻧﻪ ﻳﺴﺘﻄﻴﻊ ﻧـﻘﻞ ﺭﻗﻢ ﺛﻨﺎﺋﻲ ﺫﻭ 20ﺧﺎﻧﺔ ﺃﻱ ﺃﻥ ﺃﻛﱪ ﻗﻴﻤﺔ
ﳝﻜﻦ ﻭﺿﻌﻬﺎ ﻋﻠﻰ ﳑﺮ ﺍﻟﻌﻨﺎﻭﻳﻦ ﻫﻲ :
2 20 = 1048576 ≈ 1MB
ﻭ ﺑﺬﻟﻚ ﻳﺴﺘﻄﻴﻊ ﺍﳌﻌﺎﰿ 8086ﻋﻨﻮﻧﺔ ﻭﺍﺣﺪ ﻣﻴﻐﺎ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﻓﻘﻂ.
-6-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
FFFFFh
Memory ﺁﻟﻴﺔ ﻋﻤﻞ ﺍﳌﻜﺪﺱ ) Last In First Out LIFOﺁﺧﺮ ﻣﺎ ﻳﺪﺧﻞ
ﺃﻭﻝ ﻣﺎ ﳜﺮﺝ ( :ﺃﻱ ﺃﻥ ﺃﻭﻝ ﻋﻨﺼﺮ ﻳﺪﺧﻞ ﺇﱃ ﺍﳌﻜﺪﺱ ﻳﺼﺒﺢ ﰲ ﻗﻌﺮﻩ ﻭ ﺁﺧﺮ ﻋﻨﺼﺮ ﻳﺪﺧﻞ
ﺍﳌﻜﺪﺱ ﻳﺼﺒﺢ ﰲ ﻗﻤﺘﻪ ﻭ ﻳﺘﻢ ﺳﺤﺐ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻣﻦ ﺍﳌﻜﺪﺱ ﻣﻦ ﻗﻤﺘﻪ ﺣﻴﺚ ﻟﺪﻳﻨﺎ ﻣﺴﺠﻞ ﺍﲰﻪ Stack Pointer SPﻳﺸﲑ ﺩﻭﻣﹰﺎ
ﺇﱃ ﻗﻤﺔ ﺍﳌﻜﺪﺱ ﻓﻬﻮ ﻳﺘﻐﲑ ﺣﺴﺐ ﺍﳊﺎﻟﺔ ﺍﻟﱵ ﻳﺘﻢ ﺎ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﳌﻜﺪﺱ ) ﺇﺩﺧﺎﻝ ﻣﻌﻠﻮﻣﺎﺕ ﺃﻭ ﺇﺧﺮﺍﺝ ( .ﻓﻌﻨﺪ ﺇﺩﺧﺎﻝ ﻣﻌﻠﻮﻣـﺔ
ﺑﻄﻮﻝ 2ﺑﺎﻳﺖ ﻓﺈﻥ ﻗﻤﺔ ﺍﳌﻜﺪﺱ ﺗﻘﺘﺮﺏ ﻣﻦ ﺑﺪﺍﻳﺔ ﺍﻟﺬﺍﻛﺮﺓ )ﺍﻧﻈﺮ ﺍﻟﺸﻜﻞ( ﻭ ﺑﺬﻟﻚ ﺗﻨﻘﺺ ﻗﻴﻤﺔ SPﲟﻘﺪﺍﺭ 2ﻷﻥ ﺇﻣﻼﺀ ﺍﳌﻜﺪﺱ
ﻳﻌﲏ ﺍﻻﻗﺘﺮﺍﺏ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﺻﻐﺮ ﻭ ﺍﻟﻌﻜﺲ ﺑﺎﻟﻌﻜﺲ ﺃﻱ ﻋﻨﺪﻣﺎ ﻧﺴﺤﺐ ﻣﻌﻠﻮﻣﺔ ﻣﻦ ﺍﳌﻜﺪﺱ ﻓﺈﻥ ﻗﻤﺘﻪ ﺗﺒﺘﻌﺪ ﻋﻦ ﺑﺪﺍﻳﺔ ﺍﻟﺬﺍﻛﺮﺓ ﻭ
ﺑﺬﻟﻚ ﺗﺰﻳﺪ SPﲟﻘﺪﺍﺭ 2ﻷﻥ ﺇﻓﺮﺍﻍ ﺍﳌﻜﺪﺱ ﻳﻌﲏ ﺍﻻﻗﺘﺮﺍﺏ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﻛﱪ.
(4ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻹﺿﺎﰲ Extra Segment ES
ﻳﺴﺘﺨﺪﻡ ﻋﻨﺪ ﺍﳊﺎﺟﺔ ﺇﱃ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻘﻄﻌﻲ ﻣﻌﻄﻴﺎﺕ ﺑﻨﻔﺲ ﺍﻟﻮﻗﺖ ﻭ ﺑﺬﻟﻚ ﻧﺴﺘﻄﻴﻊ ﺍﻻﺳﺘﻔﺎﺩﺓ ﻣﻦ ﻣﺴﺎﺣﺔ ﺃﻛﱪ ﰲ ﺍﻟـﺬﺍﻛﺮﺓ .ﻭ
ﻳﺴﺎﻋﺪﻩ ﺍﳌﺴﺠﻞ Destination Index DIﺍﳌﻮﺟﻮﺩ ﰲ ﺍﳌﻌﺎﰿ ﻭ ﺍﻟﺬﻱ ﻳﺸﲑ ﺇﱃ ﺍﻹﺯﺍﺣﺔ ﺑﺎﻟﻨﺴﺒﺔ ﺇﱃ ﺑﺪﺍﻳﺘﻪ.
ﻣﻼﺣﻈﺔ :ﳚﺐ ﺍﻟﺘﻤﻴﻴﺰ ﺑﲔ ﺍﳌﻘﻄﻊ ﻭ ﻣﺴﺠﻞ ﺍﳌﻘﻄﻊ ﺣﻴﺚ ﺍﳌﻘﻄﻊ ﻫﻮ ﺟﺰﺀ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺑﻴﻨﻤﺎ ﻣﺴﺠﻞ ﺍﳌﻘﻄﻊ ﻳﺘﺄﻟﻒ ﻣﻦ ﺑﺎﻳﺘﲔ ﻭ ﻫﻮ
ﻣﻮﺟﻮﺩ ﰲ ﺍﳌﻌﺎﰿ.
ا:5ت Registers
ﳝﻠﻚ ﺍﳌﻌﺎﰿ 8086ﺃﺭﺑﻌﺔ ﳎﻤﻮﻋﺎﺕ ﻣﻦ ﺍﳌﺴﺠﻼﺕ ﺫﺍﺕ 16ﺑﺖ ﻳﺴﺘﻄﻴﻊ ﺍﳌﱪﻣﺞ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﻭ ﻫﻲ:
(1ﻣﺆﺷﺮ ﺍﻟﺘﻌﻠﻴﻤﺔ IP
(2ﺃﺭﺑﻌﺔ ﻣﺴﺠﻼﺕ ﻣﻌﻄﻴﺎﺕ . AX,BX,CX,DX
(3ﺃﺭﺑﻌﺔ ﻣﺴﺠﻼﺕ ﺗﺄﺷﲑ ﻭ ﻓﻬﺮﺳﺔ . SI,DI,BP,SP
(4ﺃﺭﺑﻌﺔ ﻣﺴﺠﻼﺕ ﻣﻘﺎﻃﻊ . CS,DS,SS,ES
ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ﻳﻮﺟﺪ ﻣﺴﺠﻞ ﺁﺧﺮ ﻫﻮ ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﻭ ﻳﺪﻋﻰ ﺃﻳﻀﹰﺎ ﻣﺴﺠﻞ ﺍﳊﺎﻟﺔ ﻭ ﻫﻮ ﻣﺴﺠﻞ ﺫﻭ 16ﺑﺖ ﻭ ﻟﻜﻦ ﻧﺴﺘﺨﺪﻡ
ﻣﻨﻪ 9ﺧﺎﻧﺎﺕ ﻓﻘﻂ.
ﺳﻨﺸﺮﺡ ﻛ ﹴﻞ ﻣﻦ ﻫﺬﻩ ﺍﳌﺴﺠﻼﺕ ﺑﺎﻟﺘﻔﺼﻴﻞ :
-7-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
FFFFFh
-8-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
(4ﻣﺴﺠﻞ ﻣﺆﺷﺮ ﺍﻟﻘﺎﻋﺪﺓ : Base Pointer BPﳛﻮﻱ ﻗﻴﻤﺔ ﺗﺪﻝ ﻋﻠﻰ ﺍﻹﺯﺍﺣﺔ ﺑﺎﻟﻨﺴﺒﺔ ﳌﻘﻄﻊ ﺍﳌﻜﺪﺱ SSﻭ ﻫﻮ ﻳـﺴﺘﺨﺪﻡ
ﻟﻘﺮﺍﺀﺓ ﺍﳌﻌﻄﻴﺎﺕ ﺿﻤﻦ ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ ﺑﺪﻭﻥ ﺇﺯﺍﻟﺘﻬﺎ ﻣﻦ ﺍﳌﻜﺪﺱ.
ﺍﻤﻮﻋﺔ ﺍﻟﺜﺎﻟﺜﺔ :ﻣﺴﺠﻼﺕ ﺍﳌﻌﻄﻴﺎﺕ
ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﳌﺴﺠﻼﺕ ﻣﻦ ﺃﺟﻞ ﺍﻟﺘﺨﺰﻳﻦ ﺍﳌﺆﻗﺖ ﻟﻠﻨﺘﺎﺋﺞ ﺍﳌﺮﺣﻠﻴﺔ ﺃﺛﻨﺎﺀ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺣﻴﺚ ﺃﻥ ﲣـﺰﻳﻦ ﺍﳌﻌﻄﻴـﺎﺕ ﰲ ﻫـﺬﻩ
ﺍﳌﺴﺠﻼﺕ ﳝﻜﻨﻨﺎ ﻣﻦ ﺍﻟﻮﻟﻮﺝ ﺇﱃ ﺗﻠﻚ ﺍﳌﻌﻄﻴﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﳑﺎ ﻟﻮ ﻛﺎﻧﺖ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ،ﻭ ﺗﻘﺴﻢ ﺍﳌﺴﺠﻼﺕ ﺇﱃ :
(1ﻣﺴﺠﻞ ﺍﳌﺮﺍﻛﻢ Accumulatorﻭ ﻳﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺮﻣﺰ . A
(2ﻣﺴﺠﻞ ﺍﻟﻘﺎﻋﺪﺓ Baseﻭ ﻳﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺮﻣﺰ . B
(3ﻣﺴﺠﻞ ﺍﻟﻌﺪ Countﻭ ﻳﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺮﻣﺰ . C
(4ﻣﺴﺠﻞ ﺍﳌﻌﻄﻴﺎﺕ Dataﻭ ﻳﺮﻣﺰ ﻟﻪ ﺑﺎﻟﺮﻣﺰ . D
ﻭ ﻛﻞ ﻣﺴﺠﻞ ﻣﻦ ﺍﳌﺴﺠﻼﺕ ﺍﻟﺴﺎﺑﻘﺔ ﳝﻜﻦ ﺍﺳﺘﻌﻤﺎﻟﻪ ﺇﻣﺎ ﻛﻜﻠﻤﺔ 16ﺑﺖ ﻭ ﻳﺪﻝ ﻋﻠﻰ ﺫﻟﻚ ﺑﻜﺘﺎﺑﺔ ﺍﳊﺮﻑ Xﺑﻌﺪ ﺍﺳﻢ ﺍﳌﺴﺠﻞ
ﺃﻭ ﳝﻜﻦ ﺍﺳﺘﻌﻤﺎﻟﻪ ﻛﺒﺎﻳﺘﲔ ﻛﻞ ﻣﻨﻬﻤﺎ 8ﺑﺖ ﻭ ﻳﺪﻝ ﻋﻠﻰ ﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳊﺮﻓﲔ H,Lﺣﻴﺚ :
Lﻟﻠﺒﺎﻳﺖ ﺫﻭ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﺻﻐﺮ ،ﻣﺜﺎﻝ . AL
Hﻟﻠﺒﺎﻳﺖ ﺫﻭ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﻛﱪ ،ﻣﺜﺎﻝ . BH
ﻼ ﻣﻦ ﻫﺬﻩ ﺍﳌﺴﺠﻼﺕ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺃﻭ ﺍﳌﻨﻄﻘﻴﺔ ﰲ ﻟﻐﺔ ﺍﻷﲰﺒﻠﻲ ﻣﺜﻞ . And, Add ﻫﻜﺬﺍ ﻭ ﺇﻥ ﻛ ﹰ
ﻭ ﻣﻦ ﺃﺟﻞ ﺑﻌﺾ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻣﺜﻞ ﺍﻟﱪﺍﻣﺞ ﺍﻟﱵ ﲢﺘﻮﻱ ﻋﻠﻰ ﺗﻌﻠﻴﻤﺎﺕ ﺳﻼﺳﻞ ﻓﺈﺎ ﺗﺴﺘﻌﻤﻞ ﻣﺴﺠﻼﺕ ﻣﻌﻴﻨﺔ ﻣﺜﻞ ﺍﺳﺘﻌﻤﺎﻝ ﺍﳌﺴﺠﻞ
Cﻟﺘﺨﺰﻳﻦ ﺍﻟﻌﺪﺩ ﺍﻟﺬﻱ ﳝﺜﻞ ﻋﺪﺩ ﺍﻟﺒﺎﻳﺘﺎﺕ ﺍﻟﱵ ﺳﺘﻨﻔﺬ ﻋﻠﻴﻬﺎ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﻼﺳﻞ ) ﻋﺪﺩ ﻣﺮﺍﺕ ﺗﻜﺮﺍﺭ ﺗﻌﻠﻴﻤﺔ ﺍﻟﺴﻠﺴﻠﺔ (
ﻭ ﻛﻤﺎ ﻧﻼﺣﻆ ﻣﻦ ﺍﻟﺸﻜﻞ ﺍﻟﺴﺎﺑﻖ ﺃﻧﻪ ﻳﻮﺟﺪ ﺳﺘﺔ ﺃﻋﻼﻡ ﻟﻠﺤﺎﻟﺔ ﻫﻲ ، CF, PF, AF, ZF, SF, OFﻭ ﻛﺬﻟﻚ ﻳﻮﺟـﺪ ﺛﻼﺛـﺔ
ﺃﻋﻼﻡ ﻟﻠﺘﺤﻜﻢ . DF, IF, TF
ﺃ( ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
ﺗﺸﲑ ﺇﱃ ﺍﳊﺎﻻﺕ ﺍﻟﻨﺎﲡﺔ ﻛﻨﺘﻴﺠﺔ ﻟﺘﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ ﺃﻭ ﺭﻳﺎﺿﻴﺔ ﺣﻴﺚ ﺗﻜﻮﻥ ﺇﻣﺎ ﰲ ﺣﺎﻟﺔ ﻭﺍﺣﺪ ﻣﻨﻄﻘﻲ Setﺃﻭ ﺗﻜﻮﻥ ﰲ ﺣﺎﻟﺔ
ﺻﻔﺮ ﻣﻨﻄﻘﻲ ، Resetﻭ ﺳﻨﻠﺨﺺ ﻓﻴﻤﺎ ﻳﻠﻲ ﻋﻤﻞ ﻛ ﹴﻞ ﻣﻨﻬﺎ:
ﻻ :ﻋﻠﻢ ﺍﻹﻧﺰﻳﺎﺡ Carry Flag
ﺃﻭ ﹰ
-9-
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻳﻜﻮﻥ ﰲ ﺣﺎﻟﺔ ﺍﻟﻮﺍﺣﺪ ﺍﳌﻨﻄﻘﻲ ﺇﺫﺍ ﻭﺟﺪ ﺍﻧﺰﻳﺎﺡ ﺧﺎﺭﺟﻲ ) ﲪﻞ ( ﺃﻭ ﺍﺳﺘﻌﺎﺭﺓ ﻣﻦ ﺃﺟﻞ ﺍﳋﺎﻧﺔ ﺍﻷﺧﲑﺓ )ﺍﻟﺒﺖ ﺍﻷﺧﲑ( ﻭ ﺫﻟﻚ ﺃﺛﻨﺎﺀ
ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ.
ﻭ ﻳﻜﻮﻥ ﰲ ﺣﺎﻟﺔ ﺍﻟﺼﻔﺮ ﺍﳌﻨﻄﻘﻲ ﺇﺫﺍ ﱂ ﻳﻮﺟﺪ ﲪﻞ ﺃﻭ ﺍﺳﺘﻌﺎﺭﺓ ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺖ ﺍﻷﺧﲑ.
ﺃﻣﺜﻠﺔ:
ﺃﻭ ﹰﻻ :ﺣﺎﻟﺔ ﺍﻹﻧﺰﻳﺎﺡ
7 6 5 4 3 2 1 0 ﻻﺣﻆ ﺑﺄﻥ ﺍﻟﻨﺘﻴﺠﺔ ﱂ ﺗﺘﺴﻊ ﰲ ﲦﺎﻧﻴﺔ ﺑﺘﺎﺕ ﻭ ﺇﳕﺎ ﲢﺘﺎﺝ ﺇﱃ ﺗﺴﻊ
1 1 0 0 0 1 1 0 ﺑﺘﺎﺕ ﻭ ﻧﻌﱪ ﻋﻦ ﺫﻟﻚ ﺑﺜﻤﺎﻧﻴﺔ ﺑﺘﺎﺕ ﻭ CF=1ﺃﻱ ﺃﻧﻪ ﻟﺪﻳﻨﺎ ﰲ
ﺍﻟﻴﺪ ﻭﺍﺣﺪ.
1 1 0 0 0 1 1 1 +
ﺑﺒﺴﺎﻃﺔ :ﻓﻤﻬﻤﺎ ﹶﻛﺒ ﺮ ﺍﻟﻌﺪﺩﺍﻥ ﻓﺈﻥ ﺗﺴﻌﺔ ﺑﺘﺎﺕ ﳝﻜﻦ ﺃﻥ
ﺗﺴﺘﻮﻋﺒﻬﺎ.
1 0 0 0 1 1 0 1
CF=1
ﻭ ﰲ ﺍﳌﺜﺎﻟﲔ ﺍﻟﺴﺎﺑﻘﲔ ﻧﻄﺒﻖ ﻧﻔﺲ ﺍﻟﻜﻼﻡ ﻣﻦ ﺃﺟﻞ 2ﺑﺎﻳﺖ ﻭ ﻟﻜﻦ ﺍﻹﻧﺰﻳﺎﺡ ﺍﳋﺎﺭﺝ ﻭ ﺍﻻﺳﺘﻌﺎﺭﺓ ﺗﻜﻮﻥ ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺖ ﺍﳋـﺎﻣﺲ
ﻋﺸﺮ )ﺍﻷﺧﲑ(.
ﺛﺎﻧﻴﹰﺎ :ﻋﻠﻢ ﺍﻻﺯﺩﻭﺍﺟﻴﺔ Parity Flag PF
ﻳﺼﺒﺢ ﰲ ﺣﺎﻟﺔ ﻭﺍﺣﺪ ﻣﻨﻄﻘﻲ ﺇﺫﺍ ﻛﺎﻧﺖ ﻧﺘﻴﺠﺔ ﺁﺧﺮ ﺗﻌﻠﻴﻤﺔ ﲢﻮﻱ ﻋﻠﻰ ﻋﺪﺩﹰﺍ ﺯﻭﺟﻴﹰﺎ ﻣﻦ ﺍﳋﺎﻧﺎﺕ ﺍﻟﻮﺍﺣﺪﻳﺔ ) ﺑﻌﺪ ﺍﻟﺘﺤﻮﻳﻞ ﺇﱃ ﺍﻟﻨﻈﺎﻡ
ﺍﻟﺜﻨﺎﺋﻲ ﻃﺒﻌﹰﺎ ( ﻭ ﺇﻻ ﻳﻜﻮﻥ ﰲ ﺣﺎﻟﺔ ﺍﻟﺼﻔﺮ ﺍﳌﻨﻄﻘﻲ.
ﻧﻼﺣﻆ ﺃﻥ ﻋﻠﻢ PFﻳﻔﺤﺺ ﺍﻟﺒﺎﻳﺖ ﺍﻟﺴﻔﻠﻲ ﻓﻘﻂ ﺣﱴ ﻟﻮ ﻛﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻛﻠﻤﺔ ) 2ﺑﺎﻳﺖ ( ،ﺃﻣﺎ ﻋﻨﺪﻣﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﺑﺎﻳﺖ ﻭﺍﺣﺪ
ﻓﻘﻂ ﻓﺈﻧﻪ ﻳﻔﺤﺼﻪ ﻛﻠﻪ.
ﺛﺎﻟﺜﹰﺎ :ﻋﻠﻢ ﺍﻹﻧﺰﻳﺎﺡ ﺍﳌﺴﺎﻋﺪ Auxiliary Flag AF
ﻳﻜﻮﻥ ﰲ ﺣﺎﻟﺔ ﺍﻟﻮﺍﺣﺪ ﺍﳌﻨﻄﻘﻲ ﺇﺫﺍ ﻭﺟﺪ ﺇﻧﺰﻳﺎﺡ ﻣﻦ ﺍﻟﻨﺼﻒ ﺍﻟﺴﻔﻠﻲ ﺇﱃ ﺍﻟﻨﺼﻒ ﺍﻟﻌﻠﻮﻱ ﺃﻭ ﺍﺳﺘﻌﺎﺭﺓ ﻣﻦ ﺍﻟﻨﺼﻒ ﺍﻟﻌﻠﻮﻱ ﺇﱃ ﺍﻟﻨﺼﻒ
ﺍﻟﺴﻔﻠﻲ ﻭ ﺫﻟﻚ ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺎﻳﺖ ﺍﻟﺴﻔﻠﻲ ﻣﻦ ﺍﻟﻜﻠﻤﺔ ) 2ﺑﺎﻳﺖ ( ﻭ ﲟﻌﲎ ﺁﺧﺮ ﺃﻧﻪ ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺇﻧﺰﻳﺎﺡ ﻣﻦ ﺍﳋﺎﻧﺔ 3ﺇﱃ ﺍﳋﺎﻧﺔ 4
ﻓﺈﻥ AF=1ﻭ ﺫﻟﻚ ﰲ ﺣﺎﻝ ﻛﺎﻧﺖ ﺍﳌﻌﻄﻴﺎﺕ ﺑﺎﻳﺖ ﻭﺍﺣﺪ ﺃﻭ ﺑﺎﻳﺘﲔ )ﻛﻠﻤﺔ( ،ﻭ ﻓﻴﻤﺎ ﻋﺪﺍ ﺫﻟﻚ ﻳﻜﻮﻥ . AF=0
ﻣﺜﺎﻝ:
- 10 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 11 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 12 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
1B6C
A0 ﳏﺘﻮﻯ IP
ﺟﺎﻣﻊ
ﺍﻟﻌﻨﺎﻭﻳﻦ
- 13 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺍﳊﻞ :ﺣﺴﺐ ﺍﻟﻄﺮﻳﻘﺔ ﺑﺄﺧﺬ ﺍﳋﺎﻧﺎﺕ ﺍﻷﺭﺑﻌﺔ ﺍﻷﻭﱃ ﻣﻦ ﻋﻠﻰ ﺍﻟﻴﻤﲔ ﺗﻜﻮﻥ ﻗﻴﻤﺔ SIﺗﺴﺎﻭﻱ 1000hﻭ ﻫﻲ ﺍﻹﺯﺍﺣﺔ.
DS = 4000h ( 3-2
ﻃﺮﻳﻘﻪ ﺃﺧﺮﻯ
-1ﻧﺄﺧﺬ ﺍﳋﺎﻧﺔ ﺍﻷﻭﱃ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻭﻧﻌﺘﱪﻫﺎ ﺇﺯﺍﺣﺔ.
-2ﳓﺬﻑ ﺗﻠﻚ ﺍﳋﺎﻧﺔ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻓﻴﺼﺒﺢ ﺍﻟﺮﻗﻢ ﺍﻟﻨﺎﺗﺞ ﻣﺆﻟﻒ ﻣﻦ ﺃﺭﺑﻊ ﺧﺎﻧﺎﺕ ﻭ ﻫﻮ ﳝﺜﻞ ﻗﻴﻤﺔ ﻣﺴﺠﻞ ﺍﳌﻘﻄﻊ.
ﻣﺜﺎﻝ :ﺑﻔﺮﺽ ﻛﺎﻥ PA = 41000h
ﺍﳊﻞ :ﺑﺄﺧﺬ ﺍﳋﺎﻧﺔ ﺍﻷﻭﱃ
)1 SI=0
)2 ﺃﺧﺬﻧﺎ ﺍﳋﺎﻧﺎﺕ ﺍﳌﺘﺒﻘﻴﺔ ﻣﻦ ﺍﻟﺮﻗﻢ DS=4100
ﺃﻱ ﺃﻥ
4100:0000 4000:1000
ﺇﺯﺍﺣﺘﻪ ﻋﻨﻮﺍﻥ ﺇﺯﺍﺣﺘﻪ ﻋﻨﻮﺍﻥ
- 14 -
(anas_kurdy@hotmail.com) أ ا آدي:
وإاد
http://www.arabteam2000.com
00000h
IP
ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ
CS 64KB
DS
SS
ES
ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ
64KB
AH AL AX
BH BL BX
CH CL CX
ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ
DH DL DX 64KB
SP
BP
- 15 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
أ!< ا>3
ﻣﻘﺪﻣﺔ:
ﺇﻥ ﺣﻴﺰ ﺍﻟﺬﺍﻛﺮﺓ ﻣﻨﻈﻢ ﻋﻠﻰ ﺷﻜﻞ ﺑﺎﻳﺘﺎﺕ ﻣﻌﻨﻮﻧﺔ ﻣﻦ 00000hﺇﱃ FFFFFhﻟﺬﻟﻚ ﻣﻦ ﺃﺟﻞ ﻛﻠﻤﺎﺕ ﺍﳌﻌﻄﻴﺎﺕ 16ﺑﺖ ﻳـﺘﻢ
ﲣﺰﻳﻦ ﺍﻟﺒﺎﻳﺖ ﺍﻟﺴﻔﻠﻲ ﰲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﺻﻐﺮ ﻭ ﺍﻟﺒﺎﻳﺖ ﺍﻟﻌﻠﻮﻱ ﰲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻷﻛﱪ ﻛﻤﺎ ﻧﻌﻠﻢ ﺃﻥ ﺍﻟﺬﺍﻛﺮﺓ ﲢﺘﻮﻱ ﺃﺭﺑﻊ ﻣﻘﺎﻃﻊ ﻛﻞ ﻣﻨـﻬﺎ
64KBﻭ ﻫﻲ ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ﻭ ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ ﻭ ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ ﻭ ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻹﺿﺎﰲ ،ﺣﻴﺚ ﻳﺘﻢ ﺍﻟﺮﺟﻮﻉ ﺇﱃ ﻫﺬﻩ ﺍﳌﻘﺎﻃﻊ
ﲟﺴﺎﻋﺪﺓ ﻣﺴﺠﻼﺕ ﺍﳌﻘﺎﻃﻊ ﺫﺍﺕ ﺍﻟـ 16ﺑﺖ ﻭ ﻫﻲ CS, DS, SS, ESﻭ ﻛﻞ ﻣﻦ ﻫﺬﻩ ﺍﳌﺴﺠﻼﺕ ﳛﺘﻮﻱ ﻋﻨﻮﺍﻧﹰﺎ ﻗﺎﻋﺪﻳﹰﺎ ﺫﺍ 16
ﺑﺖ ﻭ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﰲ ﺗﻮﻟﻴﺪ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺬﺍﻛﺮﺓ ﻭ ﺍﻟﺬﻱ ﻳﺸﲑ ﺇﱃ ﺑﺪﺍﻳﺔ ﺍﳌﻘﻄﻊ ﺍﳌﻄﺎﺑﻖ ﰲ ﺍﻟﺬﺍﻛﺮﺓ.
ﻼ :ﳝﻜﻦ ﻴﺌﺔ ﻣﻘﻄﻊ ﻣﻌﻄﻴﺎﺕ ﺟﺪﻳﺪ ﺑﺒﺴﺎﻃﺔ ﻭ ﺫﻟﻚ ﺑﺘﺒﺪﻳﻞ ﻗﻴﻤـﺔ ﻳﺴﺘﻄﻴﻊ ﺍﳌﱪﻣﺞ ﺗﺒﺪﻳﻞ ﺍﻟﻘﻴﻢ ﰲ ﻣﺴﺠﻼﺕ ﺍﳌﻘﺎﻃﻊ ﺑﺮﳎﻴﺎﹰ ،ﻓﻤﺜ ﹰ
ﺍﳌﺴﺠﻞ DSﻋﻦ ﻃﺮﻳﻖ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﺍﻟﺘﺎﻟﻴﺘﲔ :
Mov AX,A000
Mov DS,AX
ﻭ ﺳﺒﺐ ﻭﺟﻮﺩ ﻫﺎﺗﲔ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﻫﻮ ﻋﺪﻡ ﻭﺟﻮﺩ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ ﻟﺘﺤﻤﻴﻞ ﻣﺴﺠﻞ ﻣﻘﻄﻊ ﺑﻌﺪﺩ ﺛﺎﺑﺖ.
ﺇﻥ ﺍﳌﻌﺎﰿ 8086ﻣﺰﻭﺩ ﺑﺘﺴﻌﺔ ﺃﻧﻈﻤﺔ ﻋﻨﻮﻧﺔ ﳐﺘﻠﻔﺔ ،ﻭ ﻫﻲ :ﺍﻟﻌﻨﻮﻧﺔ ﺑﺎﳌﺴﺠﻞ – ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻔﻮﺭﻳﺔ – ﺍﻟﻌﻨﻮﻧﺔ ﺍﳌﺒﺎﺷﺮﺓ – ﺍﻟﻌﻨﻮﻧﺔ ﻏﲑ
ﺍﳌﺒﺎﺷﺮﺓ ﺑﺎﳌﺴﺠﻞ – ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻘﺎﻋﺪﻳﺔ – ﺍﻟﻌﻨﻮﻧﺔ ﺍﳌﻔﻬﺮﺳﺔ -ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻘﺎﻋﺪﻳﺔ ﺍﳌﻔﻬﺮﺳﺔ – ﺍﻟﻌﻨﻮﻧﺔ ﺑﺎﻟﺴﻠﺴﻠﺔ – ﺍﻟﻌﻨﻮﻧﺔ ﺑﺎﻟﻨﺎﻓﺬﺓ.
ﻭ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﺴﻌﺔ ﻋﺪﺍ ﺍﻟﻌﻨﻮﻧﺔ ﺑﺎﳌﺴﺠﻞ ﻭ ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻔﻮﺭﻳﺔ ﺗﺘﻄﻠﺐ ﺍﻟﺮﺟﻮﻉ ﺇﱃ ﺍﳌﺘﺤﻮﻝ ﺍﳌﺨﺰﻥ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻟﺬﻟﻚ ﳓﺘـﺎﺝ ﻷﻥ
ﺗﺒﺪﺃ ﻭﺣﺪﺓ ﻣﻼﺋﻤﺔ ﺍﳌﻤﺮﺍﺕ BIUﺑﺪﻭﺭﺓ ﳑﺮ ﻟﻘﺮﺍﺀﺓ ﺃﻭ ﻛﺘﺎﺑﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭ ﻫﻜﺬﺍ ﻓﺈﻥ ﻛﻞ ﻧﻈﺎﻡ ﻋﻨﻮﻧﺔ ﻟﻪ ﻃﺮﻳﻘﺔ ﳐﺘﻠﻔﺔ ﳊـﺴﺎﺏ
ﻼ ﻣﻦ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ: ﻋﻨﻮﺍﻥ ﺍﳌﺘﺤﻮﻝ ﺍﻟﺬﻱ ﺳﻴﺨﺮﺝ ﻋﻠﻰ ﳑﺮ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺃﺛﻨﺎﺀ ﺩﻭﺭﺓ ﺍﳌﻤﺮ ،ﻭ ﺳﻨﺪﺭﺱ ﺍﻵﻥ ﻛ ﹰ
ﻣﻼﺣﻈﺔ :ﲨﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺳﺘﺸﺮﺡ ﻻﺣﻘﹰﺎ.
ﻧﻼﺣﻆ ﻣﻦ ﺍﻟﺸﻜﻠﲔ ﺍﻟﺴﺎﺑﻘﲔ ﻭ ﰲ ﺍﻟﺸﻜﻞ ﺍﻷﻭﻝ ﳒﺪ ﺃﻧﻪ ﻗﺪ ﰎ ﺗﻮﻟﻴﺪ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟــ IPﻭ ﺍﻟــ CS
ﺣﻴﺚ ﻳﺘﻢ ﺇﺣﻀﺎﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﱃ ﺍﳌﻌﺎﰿ ﻭ ﺗﺘﻢ ﻓﻚ ﺷﻴﻔﺮﺎ ) 8BC3ﻣﻦ ﺍﳉﺪﻭﻝ ( .
- 16 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 17 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 18 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﲢﺴﺒﻪ ﺍﻟـ BIUﻭ ﻣﻦ ﰒ ﺗﻄﻠﺐ ﺍﻟـ EUﺑﺪﺀ ﺩﻭﺭﺓ ﳑﺮ ﻛﺘﺎﺑﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭ ﻫﻜﺬﺍ ﻳﻜﺘﺐ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ
ALﰲ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺫﺍﺕ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ 04234hﺃﻱ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺗﺼﺒﺢ ﺣﺎﻟﺔ ﺍﳌﻌﺎﰿ ﻛﻤﺎ ﻫﻮ ﻭﺍﺿﺢ ﰲ ﺍﻟـﺸﻜﻞ
ﺍﻟﺴﺎﺑﻖ.
ﺳﺎﺩﺳﹰﺎ :ﻧﻈﺎﻡ ﺍﻟﻌﻨﻮﻧﺔ ﺍﳌﻔﻬﺮﺳﺔ
ﰲ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻣﻦ ﺍﻟﻌﻨﻮﻧﺔ ﻳﺘﻢ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻧﺘﻴﺠﺔ ﲨﻊ ﳏﺘﻮﻯ ﻣﺴﺠﻞ ﺍﻟﻔﻬﺮﺱ ﺇﻣﺎ DIﺃﻭ SIﺇﱃ ﻋﻨﻮﺍﻥ ﺍﻹﺯﺍﺣﺔ
) disp ( displacementﻭ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻌﻨﻮﻧﺔ ﻳﻨﺎﺳﺐ ﺃﻏﺮﺍﺽ ﺍﳉﺪﺍﻭﻝ ﺣﻴﺚ ﻳﻜﻮﻥ ﻋﻨﻮﺍﻥ ﺍﻹﺯﺍﺣﺔ ﰲ ﺑﺪﺍﻳﺔ ﺃﻭﻝ ﻋﻨﻮﺍﻥ ﻣﻦ
ﺍﳉﺪﻭﻝ ﻭ ﻣﺴﺠﻞ ﺍﻟﻔﻬﺮﺱ ﻳﺆﺷﺮ ﺇﱃ ﺃﻱ ﻋﻨﺼﺮ ﻣﻦ ﳏﺘﻮﻳﺎﺕ ﺍﳉﺪﻭﻝ.
ﻣﺜﺎﻝ :ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻭ ﺍﻟﱵ ﺷﻴﻔﺮﺎ 8A443412ﻭ ﻫﻲ ]. MOV AL,array[SI
ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻳﺘﻢ ﻓﻴﻬﺎ ﲢﺪﻳﺪ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻌﻨﻮﻧﺔ ﺍﳌﻔﻬﺮﺳﺔ ﺍﳌﺒﺎﺷﺮﺓ ﺣﻴﺚ ﺃﻥ arrayﲤﺜﻞ ﺍﻹﺯﺍﺣﺔ ﺍﳌﺒﺎﺷﺮﺓ ﻭ ﻫﻲ ﺗﺴﺒﻖ
ﻣﺴﺠﻞ ﺍﻟﺪﻟﻴﻞ ﺍﳌﻮﺟﻮﺩ ﺿﻤﻦ ﻗﻮﺳﲔ ﻣﺘﻮﺳﻄﲔ ،ﺣﻴﺚ ﻳﺘﻢ ﺗﻮﻟﻴﺪ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﺍﻟﺘﺎﱄ:
PA = ( DS x 10h ) + EA
; EA = ( SI ) + disp => EA = 2000 + 1234 = 3234h
PA = ( DS x 10h ) + EA = 02000 + 3234 = 05234h
ﺇﻥ ﻧﺘﻴﺠﺔ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻲ ﺃﻥ ﳏﺘﻮﻳﺎﺕ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺫﺍﺕ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ 05234hﺗﻨﻘﻞ ﺇﱃ ALﻭ ﺗﺼﺒﺢ ﺣﺎﻟﺔ ﺍﳌﻌﺎﰿ
ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﰲ ﺍﻟﺸﻜﻞ ﺍﻟﺴﺎﺑﻖ.
ﺳﺎﺑﻌﹰﺎ :ﻧﻈﺎﻡ ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻘﺎﻋﺪﻳﺔ ﺍﳌﻔﻬﺮﺳﺔ :
ﰲ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻌﻨﻮﻧﺔ ﻳﺘﻢ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻧﺘﻴﺠﺔ ﲨﻊ ﳏﺘﻮﻯ ﻣﺴﺠﻞ ﺍﻟﻘﺎﻋﺪﺓ ﻣﻊ ﻣﺴﺠﻞ ﺍﻟﻔﻬﺮﺱ ﻭ ﰲ ﺣﺎﻝ ﻭﺟﻮﺩ
ﻋﻨﻮﺍﻥ ﳚﺐ ﺇﺿﺎﻓﺔ ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ ﺇﱃ ﳏﺘﻮﻯ ﺍﳌﺴﺠﻠﲔ ﺍﳌﺬﻛﻮﺭﻳﻦ.
ﻣﺜﺎﻝ :ﺍﻟﺘﻌﻠﻴﻤﺔ ] MOV AH,[BX].Beta[SIﻳﺘﻢ ﻓﻴﻬﺎ ﺣﺴﺎﺏ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﳌﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﻛﻤﺎ ﻳﻠﻲ:
EA = BX + Beta + SI
PA = ( DS x 10h ) + EA = 02000 + 4234 = 06234h
ﻭ ﻳﺒﲔ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ ﺣﺎﻟﺔ ﺍﳌﻌﺎﰿ ﻗﺒﻞ ﻭ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﺣﻴﺚ ﻧﻼﺣﻆ ﺃﻧﻪ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺗﺼﺒﺢ ﳏﺘﻮﻳﺎﺕ AH = BEhﻭ ﺍﻟﱵ ﲤﺜﻞ ﳏﺘﻮﻳﺎﺕ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺫﺍﺕ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳـﺎﺋﻲ
. 06234h
- 20 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺇﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﻠﺴﻠﺔ ﰲ ﳎﻤﻮﻋﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺍﳌﻌﺎﰿ 8086ﺗﺴﺘﻌﻤﻞ ﺃﻭﺗﻮﻣﺎﺗﻴﻜﻴﹰﺎ ﻣﺴﺠﻞ ﺩﻟﻴﻞ ﺍﳌﺼﺪﺭ ﻭ ﻣﺴﺠﻞ ﺩﻟﻴﻞ ﺍﳍﺪﻑ ﻟﺘﻌﻴﲔ
ﻼ ﺗﻌﻠﻴﻤﺔ MOVSﻫﻲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻨﻘﻞ ﻟﻠﺴﻠﺴﻠﺔ ،ﻭ ﻫﻲ ﺗﺴﺘﺨﺪﻡ SIﻭ ﺍﳌﻘﻄﻊ DSﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﻔﻌﺎﻟﺔ ﳌﺘﺤﻮﱄ ﺍﳌﺼﺪﺭ ﻭ ﺍﳍﺪﻑ .ﻓﻤﺜ ﹰ
ﻣﻦ ﺃﺟﻞ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﻭ DIﻭ ﺍﳌﻘﻄﻊ ESﻣﻦ ﺃﺟﻞ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ .ﻭ ﻧﻼﺣﻆ ﺃﻧﻪ ﻻ SIﻭ ﻻ DIﺗﻈﻬﺮﺍﻥ ﰲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﺴﻠﺴﻠﺔ.
- 21 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
:89:
ه ,-ا+روس ه
س A3 $ 5ج ا 35ا?>! 15ه +3ات
<9
اCء ا?>
!6ت ا8086 J
- 22 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
E +ا
ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻣﺰﻭﺩﺓ ﻟﻮﺻﻒ ﻛﻞ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﱵ ﳝﻜﻦ ﺇﳒﺎﺯﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﳌﻌﺎﰿ ﺍﳌﺼﻐﺮ ،ﺗﻜﺘﺐ ﺗﻌﻠﻴﻤـﺎﺕ ﻫـﺬﻩ ﺍﻟﻠﻐـﺔ
ﺑﺎﺳﺘﻌﻤﺎﻝ ﺍﻟﺮﻣﻮﺯ ﺍﳍﺠﺎﺋﻴﺔ ﺃﻭ ﻣﺎ ﻳﺪﻋﻰ ALPHANUMERICﺑﺪ ﹰﻻ ﻣﻦ ﺍﻷﺻﻔﺎﺭ ﻭ ﺍﻟﻮﺍﺣﺪﺍﺕ ﰲ ﺷﻴﻔﺮﺓ ﺍﻵﻟـﺔ ﻟﻠﻤﻌـﺎﰿ .ﺇﻥ
ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻜﺘﺎﺑﺔ ﺍﻷﻣﺮ )ﺍﻟﺘﻌﻠﻴﻤﺔ( ﰲ ﻟﻐﺔ ﺍﻷﲰﺒﻠﻲ ﻫﻲ:
ﺗﻌﻠﻴﻖ ; ﺗﻌﻠﻴﻤﺔ :ﻻﻓﺘﺔ
ﻋﺎﺩﺓ ﻓﺈﻥ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺃﻭ ﺍﳌﻼﺣﻈﺎﺕ ﺍﻟﱵ ﺗﺼﻒ ﺍﻷﻭﺍﻣﺮ ﺗﻮﺿﻊ ﻋﻠﻰ ﺍﻟﻄﺮﻑ ﺍﻷﳝﻦ .ﻭ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﺘﻮﺛﻴﻖ ﺑﲔ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭ ﺍﻟﺘﻌﻠﻴﻖ
ﳚﻌﻞ ﻣﻦ ﺍﻟﺴﻬﻞ ﻋﻠﻰ ﺍﳌﱪﻣﺞ ﻛﺘﺎﺑﺔ ﻭ ﻗﺮﺍﺀﺓ ﻭ ﺗﺼﺤﻴﺢ ﺍﻟﺸﻴﻔﺮﺓ .ﻭ ﻧﻘﺼﺪ ﺑﻜﻠﻤﺔ ﺍﻟﺸﻴﻔﺮﺓ ﺃﻥ ﺍﻟﱪﻧﺎﻣﺞ ﻣﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﻵﻟﺔ ﻟﻠﻤﻌﺎﰿ ﻭ
ﺍﻟﺬﻱ ﻳﻌﺮﻑ ﺑﺸﻴﻔﺮﺓ ﺍﳍﺪﻑ object codeﺃﻣﺎ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﻷﲰﺒﻠﻲ ﻓﻴﺪﻋﻰ ﺑﺸﻴﻔﺮﺓ ﺍﳌﺼﺪﺭ . source codeﻫﺬﺍ ﻭ
ﺇﻥ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﰲ ﺑﺮﻧﺎﻣﺞ ﺍﳌﺼﺪﺭ ﺗﻄﺎﺑﻖ ﺃﻣﺮﹰﺍ ﻭﺍﺣﺪﹰﺍ ﰲ ﻟﻐﺔ ﺍﻷﲰﺒﻠﻲ ﺣﻴﺚ ﺃﻥ ﺍﻷﻣﺮ ﳚﺐ ﺃﻥ ﳛﺪﺩ ﺃﻱ ﻋﻤﻠﻴﺔ ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻭ ﻣـﺎ
ﻫﻲ ﻣﺘﺤﻮﻻﺕ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﺳﺘﻌﺎﰿ .ﳍﺬﺍ ﺍﻟﺴﺒﺐ ﺗﻘﺴﻢ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺇﱃ ﻗﺴﻤﲔ ﻣﻨﻔﺼﻠﲔ :ﺭﻣﺰ ﺍﻟﺘﻌﻠﻴﻤﺔ opcode = operation
ﻼ ﻧﺬﻛﺮ ﺑﻌﺾ ﺍﻟﻌﻤﻠﻴﺎﺕ codeﻭ ﺍﳌﺘﺤﻮﻻﺕ . operandsﺭﻣﺰ ﺍﻟﻌﻤﻠﻴﺔ ﻫﻮ ﺟﺰﺀ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻭ ﺍﻟﺬﻱ ﳛﺪﺩ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﱵ ﺳﺘﻨﻔﺬ ﻓﻤﺜ ﹰ
ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ﻛﺎﳉﻤﻊ ﻭ ﺍﻟﻄﺮﺡ ﻭ ﺍﻟﻨﻘﻞ.
ﻼ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﻌﺎﰿ 8086ﻓﺎﻟﻜﻠﻤﺎﺕ ﺍﳌﺨﺘﺰﻟﺔ ﰲ ﻟﻐﺔ ﺍﻷﲰﺒﻠﻲ ﺗﺴﺘﺨﺪﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﳌﺨﺘﺰﻟﺔ mnemonicﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻤﺜ ﹰ
ﰲ ﻟﻐﺔ ﺍﻷﲰﺒﻠﻲ ﻟﻌﻤﻠﻴﺎﺕ ﺍﳉﻤﻊ ﻭ ﺍﻟﻄﺮﺡ ﻭ ﺍﻟﻨﻘﻞ ﻫﻲ ﻋﻠﻰ ﺍﻟﺘﺮﺗﻴﺐ ADDﻭ SUBﻭ . MOVﺃﻣﺎ ﺍﳌﺘﺤﻮﻻﺕ ﻓﺘﺤﺪﺩ ﺍﳌﻌﻄﻴﺎﺕ
ﻼ ﰲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺗﻀﻴﻒ ﳏﺘﻮﻳﺎﺕ ﻣﺴﺠﻞ ﺍﻟﻘﺎﻋـﺪﺓ ﺇﱃ ﳏﺘﻮﻳـﺎﺕ ﺍﻟﱵ ﺳﺘﻌﺎﰿ ﻣﻦ ﻗﺒﻞ ﺍﳌﻌﺎﰿ ﺑﻮﺍﺳﻄﺔ ﺭﻣﺰ ﺍﻟﻌﻤﻠﻴﺔ ﻟﻠﺘﻌﻠﻴﻤﺔ ﻓﻤﺜ ﹰ
ﺍﳌﺮﺍﻛﻢ ﻓﺈﻥ BXﻭ AXﻫﻲ ﺍﳌﺘﺤﻮﻻﺕ ﻭ ﺗﻜﺘﺐ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ ADD AX,BXﻓﻔﻲ ﻫﺬﺍ ﺍﳌﺜﺎﻝ ﺗﻀﺎﻑ ﳏﺘﻮﻳﺎﺕ
BXﺇﱃ AXﻭ ﻳﻮﺿﻊ ﻧﺎﺗﺞ ﺍﳉﻤﻊ ﰲ AXﻭ ﻟﺬﻟﻚ ﻳﻌﺘﱪ BXﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﻭ AXﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ.
- 23 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 24 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
MOV DS,AX
ﻣﺜﺎﻝ ﻋﺎﻡ MOV AL,[SI] :ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺗﻌﲏ ﻧﻘﻞ ﳏﺘﻮﻳﺎﺕ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﺸﺎﺭ ﺇﻟﻴﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺍﳌﺴﺠﻞ SIﺇﱃ ﺍﳌﺴﺠﻞ AL
ﻭ ﺇﻥ ﻧﻈﺎﻡ ﺍﻟﻌﻨﻮﻧﺔ ﰲ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻮ ﻋﻨﻮﻧﺔ ﻏﲑ ﻣﺒﺎﺷﺮﺓ ﺑﺎﳌﺴﺠﻞ ﻭ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﻋﻨﻮﺍﻧﻪ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻫﻮ PA = DS x 10h +
SIﺃﻣﺎ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﻓﻬﻮ . AL
(2ﺗﻌﻠﻴﻤﺔ ﺍﻟﺘﺒﺪﻳﻞ XCHG
ﺗﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻻﺳﺘﺒﺪﺍﻝ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﲟﺘﺤﻮﻝ ﺍﳍﺪﻑ ﻭ ﻻﺳﺘﺒﺪﺍﻝ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﲟﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ.
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
XCHG ﺗﺒﺪﻳﻞ XCHG D,S
S→D
D→S
ﻻ ﻳﻮﺟﺪ
ﺍﳍﺪﻑ D ﺍﳌﺼﺪﺭ S ﻭ ﻳﺒﲔ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ ﳐﺘﻠﻒ ﺃﻧﻮﺍﻉ ﻣﺘﺤﻮﻻﺕ ﺍﳌﺼﺪﺭ ﻭ ﺍﳍﺪﻑ ﻟﺘﻌﻠﻴﻤـﺔ
Acc Reg16 . XCHG
Mem Reg
Reg Reg ﻣﺜﺎﻝ:
XCHG AX,BX
ﰲ ﻫﺬﺍ ﺍﳌﺜﺎﻝ ﻳﺘﻢ ﺍﻟﺘﺒﺪﻳﻞ ﺑﲔ ﳏﺘﻮﻳﺎﺕ AXﻭ .BX
XCHG [SUM],BX
ﻳﺘﻢ ﺍﻟﺘﺒﺪﻳﻞ ﺑﲔ ﳏﺘﻮﻯ ﺍﳊﺠﺮﺓ SUMﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭ ﺑﲔ ﺍﳌﺴﺠﻞ . BX
(3ﺗﻌﻠﻴﻤﺔ XLAT
ﺗﺘﻌﺎﻣﻞ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻣﻊ ALﻓﻘﻂ ،ﺇﻥ ﺗﻌﺎﻣﻞ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻳﺘﻢ ﻣﻊ ﺍﳉﺪﺍﻭﻝ ﺍﳌﺨﺰﻧﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻓﻠﻮ ﻭﺿﻌﻨﺎ ﰲ BXﺇﺯﺍﺣﺔ ﺑﺪﺍﻳﺔ
ﺍﳉﺪﻭﻝ ﻧﺴﺒﺔ ﺇﱃ ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ DSﻭ ﻭﺿﻌﻨﺎ ﰲ ALﺇﺯﺍﺣﺔ ﺍﻟﻌﻨﺼﺮ ﻧﺴﺒﻪ ﺇﱃ ﺑﺪﺍﻳﺔ ﺍﳉﺪﻭﻝ ،ﻋﻨﺪﻫﺎ ﺗﻘﻮﻡ ﺗﻌﻠﻴﻤﺔ XLATﲜﻤﻊ
ﳏﺘﻮﻳﺎﺕ ﺍﳌﺴﺠﻞ ALﻣﻊ ﳏﺘﻮﻳﺎﺕ ﺍﳌﺴﺠﻞ BXﻭ ﺗﻌﺘﱪ ﺍﻟﻨﺎﺗﺞ ﺇﺯﺍﺣﺔ ﺑﺎﻟﻨﺴﺒﺔ ﺇﱃ ﻣﻘﻄﻊ ﺍﳌﻌﻄﻴﺎﺕ ،ﰒ ﺗﻘﻮﻡ ﺑﻮﺿﻊ ﻗﻴﻤﺔ ﺍﳊﺠـﺮﺓ
ﺍﳌﻌﻄﻰ ﺇﺯﺍﺣﺘﻬﺎ ﰲ . AL
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
]( DS x 10h ) + [AL+BX
XLAT ﺗﺮﲨﺔ ﺟﺪﻭﻝ ﺍﳌﺼﺪﺭ XLAT ﻻ ﻳﻮﺟﺪ
→ AL
ﻣﺜﺎﻝ:
ﺑﻔﺮﺽ ﺃﻧﻪ ﻟﺪﻳﻨﺎ ﺟﺪﻭﻝ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﳛﺘﻮﻱ ﻋﻠﻰ ﻣﺮﺑﻌﺎﺕ ﺍﻷﻋﺪﺍﺩ ﻣﻦ 1ﺇﱃ 9ﺃﻱ ﺃﻧﻪ ﰲ ﺃﻭﻝ ﺣﺠﺮﺓ ﻣﻦ ﺍﳉﺪﻭﻝ ﻳﻮﺿﻊ ﻣﺮﺑﻊ ﺍﻟﻌﺪﺩ
DS
1ﻭ ﰲ ﺍﳊﺠﺮﺓ ﺍﻟﺜﺎﻧﻴﺔ ﻳﻮﺿﻊ ﻣﺮﺑﻊ ﺍﻟﻌﺪﺩ ) 2ﺃﻱ ، (4ﻭ ﻫﻜﺬﺍ … ﻭﻣﻦ ﻫـﺬﺍ ﻧـﺮﻯ ﺃﻥ
ﺍﳉﺪﻭﻝ ﻃﻮﻟﻪ ﺗﺴﻊ ﺑﺎﻳﺘﺎﺕ ﺇﺯﺍﺣﺔ ﺑﺪﺍﻳﺘﻪ ﻋﻦ ﺑﺪﺍﻳﺔ ﻣﻘﻄﻊ ﺍﻟـ DSﻫﻲ . 100
100 ﻋﻨﺪﻣﺎ ﻳﻄﻠﺐ ﻣﻨﺎ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﻣﺮﺑﻊ ﺃﺣﺪ ﻫﺬﻩ ﺍﻷﻋﺪﺍﺩ ﻭ ﻟﻴﻜﻦ ﺍﻟﻌﺪﺩ 4ﺃﻱ ﺃﻥ ﺍﳌﻄﻠﻮﺏ ﻫﻮ
1
4 ﺃﻥ ﺗﺼﺒﺢ ﻗﻴﻤﺔ AL = 16ﻟﺬﻟﻚ ﻧﻘﻮﻡ ﲟﺎ ﻳﻠﻲ:
9 (1ﻧﻀﻊ AL = 3ﻭ . BX = 100
16
(2ﻧﻌﻄﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ . XLAT
ﻭ ﺑﻌﺪ ﺗﻨﻔﻴﺬﻫﺎ ﻳﺼﺒﺢ AL = 16ﻭ ﻫﻮ ﺍﳌﻄﻠﻮﺏ.
109
- 25 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
100 00
LEA SI,[100] => SI = 1000
10
300 30
40
00
30
- 26 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
INC ﺍﻟﺰﻳﺎﺩﺓ ﲟﻘﺪﺍﺭ ﻭﺍﺣﺪ INC D D+1 → D ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
ﺗﺼﺤﻴﺢ ﻧﺎﺗﺞ ﲨﻊ
AAA ﻋﺪﺩﻳﻦ ﺑﺸﻴﻔﺮﺓ AAA ﺳﻴﺘﻢ ﺷﺮﺣﻬﺎ ﻻﺣﻘﹰﺎ AF,CF
ﺍﻵﺳﻜﻲ
ﻣﺜﺎﻝ :ﺑﻔﺮﺽ AX = 4F3Dhﻭ BX = FD81hﻭ CF = 1ﻓﻤﺎ ﻫﻲ ﻧﺘﻴﺠﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ADC AX,BX؟ ﻣﺒﻴﻨﹰﺎ ﺣﺎﻟـﺔ
ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ ﺍﳉﻤﻊ ﻫﺬﻩ .
ﺍﳊﻞ :ﺳﻨﻜﺘﺐ ﺍﻟﺸﻴﻔﺮﺓ ﺍﻟﺜﻨﺎﺋﻴﺔ ﻟﻠﻤﺘﺤﻮﻻﺕ ﻣﻦ ﺃﺟﻞ ﺗﻮﺿﻴﺢ ﺣﺎﻟﺔ ﺍﻷﻋﻼﻡ
1111 111 1
AX = 0100 1111 0011 1101 b
BX = 1111 1101 1000 0001 b
= CF 0001 b +
1 0100 1100 1011 1111 b
CF
ﻭ ﺍﻵﻥ ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ ﻫﻲ:
PF = 0ﻷﻥ ﻋﺪﺩ ﺍﻟﻮﺍﺣﺪﺍﺕ ﻓﺮﺩﻱ ﰲ ﺍﻟﺒﺎﻳﺖ ﺍﻷﻭﻝ ﻣﻦ ﻧﺎﺗﺞ ﺍﳉﻤﻊ
AF = 0ﻷﻧﻪ ﻻ ﻳﻮﺟﺪ ﺍﻧﺰﻳﺎﺡ ﻣﻦ ﺍﳋﺎﻧﺔ 3ﺇﱃ ﺍﳋﺎﻧﺔ 4ﰲ ﺍﻟﺒﺎﻳﺖ ﺍﻷﻭﻝ ﻣﻦ ﻧﺎﺗﺞ ﺍﳉﻤﻊ ) ﺣﻴﺚ ﻳﺘﻢ ﺗﺮﻗﻴﻢ ﺍﳋﺎﻧﺎﺕ ﺑﺪﺀﹰﺍ ﻣـﻦ
ﺍﻟﺼﻔﺮ (
SF = 0ﻭ ﻫﻲ ﺁﺧﺮ ﺧﺎﻧﺔ ﻣﻦ ﻧﺘﻴﺠﺔ ﺍﳉﻤﻊ ) ﺍﻟﻨﺎﺗﺞ ﻣﻮﺟﺐ (
CF = 1ﺑﺴﺒﺐ ﻭﺟﻮﺩ ﺍﻧﺰﻳﺎﺡ ﺧﺎﺭﺟﻲ
OF = 0ﻷﻧﻪ ﻳﻮﺟﺪ ﺇﻧﺰﻳﺎﺡ ﺩﺍﺧﻠﻲ ﻭ ﺇﻧﺰﻳﺎﺡ ﺧﺎﺭﺟﻲ
- 27 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
+ 0 1 2 3 4 5 6 7 8 9
0 9
1 9 10
2 9 10
3 9 10
4 9 10
5 9 10
6 9 10 15
7 9 10 15 16
8 9 10 15 16
9 9 10 15 16 18
ﻼ
ﺍﳌﻨﻄﻘﺔ ﺍﻷﻭﱃ ﺃﺭﻗﺎﻣﻬﺎ ﻣﻦ 0ﺇﱃ 9ﻭ ﻓﻴﻬﺎ ﺗﻜﻮﻥ ﻧﺘﻴﺠﺔ ﺍﳉﻤﻊ ﺻﺤﻴﺤﺔ ﻭ ﻻ ﲢﺘﻮﻱ ﻋﻠﻰ ﺍﻧﺰﻳﺎﺡ ﻭ ﻟﻴﺴﺖ ﲝﺎﺟﺔ ﺇﱃ ﺗﺼﺤﻴﺢ ﻣﺜ ﹰ
7+2=9ﻭ ﻫﻲ ﺃﺭﻗﺎﻡ ﻭﺍﻗﻌﺔ ﺿﻤﻦ ﻧﻄﺎﻕ ﺍﳌﻨﻄﻘﺔ ﺍﻷﻭﱃ.
ﺍﳌﻨﻄﻘﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺃﺭﻗﺎﻣﻬﺎ ﻣﻦ 10ﺇﱃ 15ﻭ ﻓﻴﻬﺎ ﺗﻜﻮﻥ ﻧﺘﻴﺠﺔ ﺍﳉﻤﻊ ﻏﲑ ﺻﺤﻴﺤﺔ ﻭ ﲝﺎﺟﺔ ﺇﱃ ﺗﺼﺤﻴﺢ ﺑﺈﺿﺎﻓﺔ ﺍﻟﻌﺪﺩ 6ﻓﻨﺤـﺼﻞ
ﻼ 9+5=Eﻓﺒﺈﺿﺎﻓﺔ 6ﺇﱃ ﺍﻟﻌﺪﺩ Eﻳﻜﻮﻥ ﺍﻟﻨﺎﺗﺞ 6+E=14ﻭ ﺑـﺬﻟﻚ ﺗﻜـﻮﻥ ﺍﻟﻨﺘﻴﺠـﺔ ﻋﻠﻰ ﺭﻗﻢ ﻭ ﲪﻞ ﺇﱃ ﺍﻟﻌﺪﺩ ﺍﻟﺜﺎﱐ ﻓﻤﺜ ﹰ
ﺻﺤﻴﺤﺔ.
ﺍﳌﻨﻄﻘﺔ ﺍﻟﺜﺎﻟﺜﺔ ﺃﺭﻗﺎﻣﻬﺎ ﻣﻦ 16ﻭ ﺣﱴ 18ﻭ ﻓﻴﻬﺎ ﺗﻜﻮﻥ ﻧﺘﻴﺠﺔ ﺍﳉﻤﻊ ﻏﲑ ﺻﺤﻴﺤﺔ ﻭ ﲝﺎﺟﺔ ﺇﱃ ﺗﺼﺤﻴﺢ ﻭ ﻫﻨﺎ ﺗﺘﻜﻮﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻣﻦ
ﺣﺎﺻﻞ ﲨﻊ ﻣﻊ ﺍﻧﺰﻳﺎﺡ.
ﲟﺎ ﺃﻥ ﻧﺎﺗﺞ ﺍﳉﻤﻊ ﻣﻮﺟﻮﺩ ﰲ ALﺣﻴﺚ ﳕﺜﻞ AL = Bit7 … Bit0
ﺇﻥ ﻗﺎﻋﺪﺓ ﺍﻟﺘﺼﺤﻴﺢ ﰲ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻲ :
1) if Bit3 Bit2 Bit1 Bit0 of AL > 9 or AF = 1
then AL = AL + 6 , AF = 1
2) if AL > 9Fh or CF = 1
then AL = AL + 60h , CF =1
- 28 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 29 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺗﺬﻛﺮﺓ ﺑﺎﳌﺘﻤﻢ ﺍﻟﺜﻨﺎﺋﻲ ) ﻭ ﺍﻟﺬﻱ ﻳﺸﺎﺭ ﺇﻟﻴﻪ ﺑﻮﺿﻊ ﺧﻄﲔ ﻓﻮﻕ ﺍﻟﻌﺪﺩ ﺍﻟﺬﻱ ﻧﺮﻳﺪ ﺇﳚﺎﺩ ﺍﳌﺘﻤﻢ ﺍﻟﺜﻨﺎﺋﻲ ﻟﻪ ( :
ﺇﺫﺍ ﺃﺭﺩﺕ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺍﳌﺘﻤﻢ ﺍﻟﺜﻨﺎﺋﻲ ﻟﻠﻌﺪﺩ 03F8hﻓﺎﻋﻤﻞ ﻣﺎ ﻳﻠﻲ:
(1ﲢﻮﻳﻞ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺇﱃ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺜﻨﺎﺋﻲ ﻓﻴﺼﺒﺢ 0000 0011 1111 1000
(2ﺃﻗﻠﺐ ﺍﻷﺻﻔﺎﺭ ﻭﺍﺣﺪﺍﺕ ﻭ ﺍﻟﻮﺍﺣﺪﺍﺕ ﺃﺻﻔﺎﺭﹰﺍ ﻓﻴﻨﺘﺞ 1111 1100 0000 0111
(3ﺃﺿﻒ ﻭﺍﺣﺪ ﺇﱃ ﺍﻟﺮﻗﻢ ﺍﻟﻨﺎﺗﺞ ﻓﺘﺤﺼﻞ ﻋﻠﻰ ﺍﳌﺘﻤﻢ ﺍﻟﺜﻨﺎﺋﻲ – 03F8h = 1111 1100 0000 1000
then AL = AL – 06 , AF = 1
2) if AL > 9Fh or CF=1
then AL = AL – 60h , CF = 1
ﻣﺜﺎﻝ :ﺑﻔﺮﺽ ﺃﻥ AL = 86 BCDﻭ ، AH = 07 BCDﺑﲔ ﻧﺘﻴﺠﺔ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﺍﻟﺘﺎﻟﻴﺘﲔ:
SUB AL,AH
DAS
ﺍﳊﻞ:
- 31 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
AL.S8 → AX
MUL ﺿﺮﺏ ﺑﺪﻥ ﺇﺷﺎﺭﺓ MUL S ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
AX.S16 → DX,AX
ﺣﺎﻟﺔ ﺑﺎﻳﺖ
Q[AX/S8] → AL
ﺗﻘﺴﻴﻢ ﺑﺪﻭﻥ R[AX/S8] → AH
DIV DIV S ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
ﺣﺎﻟﺔ ﻛﻠﻤﺔ
ﺇﺷﺎﺭﺓ Q[(DX,AX)/S16] → AX
R[(DX,AX)/S16] → DX
ﺑﺒﺴﺎﻃﺔ :ﺍﻟﻨﻘﻄﺔ ﺗﻌﲎ ﻋﻤﻠﻴﺔ ﺍﻟﻀﺮﺏ ﺍﻟﻌﺎﺩﻳﺔ ،ﻭ ﺍﻟﺮﻣﺰ S8ﻳﻌﲏ ﻣﺘﺤﻮﻝ ﻣﺼﺪﺭ ﻋﺒﺎﺭﺓ ﻋﻦ ﺑﺎﻳﺖ ﺃﻣﺎ ﺍﻟﺮﻣﺰ Rﻓﻴﻌﲏ ﺑﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﻭ
ﺍﻟﺮﻣﺰ Qﻣﺎ ﻫﻮ ﺇﻻ ﺣﺎﺻﻞ ﻗﺴﻤﺔ.
ﻣﻼﺣﻈﺔ :ﺇﺫﺍ ﻛﺎﻧﺖ ﻗﻴﻤﺔ Qﰲ ﺍﳊﺎﻟﺔ ﺍﻷﻭﱃ ) ﺣﺎﻟﺔ ﺑﺎﻳﺖ ( ﻣﺴﺎﻭﻳﺔ ﻟـ FFﺃﻭ ﻛﺎﻧﺖ ﻗﻴﻤﺔ Qﰲ ﺍﳊﺎﻟﺔ ﺍﻟﺜﺎﻧﻴﺔ ) ﺣﺎﻟﺔ ﻛﻠﻤـﺔ (
ﻣﺴﺎﻭﻳﺔ ﺇﱃ FFFFhﻓﺘﺤﺪﺙ ﻣﻘﺎﻃﻌﺔ ﻣﻦ ﺍﻟﻨﻮﻉ ﺻﻔﺮ ،ﻭ ﺗﻌﺮﻑ ﻫﺬﻩ ﺍﳌﻘﺎﻃﻌﺔ ﲞﻄﺄ ﺍﻟﺘﻘﺴﻴﻢ.
ﻣﻼﺣﻈﺔ :ﺑﺎﻟﻨﺴﺒﺔ ﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻀﺮﺏ ﻭ ﺍﻟﺘﻘﺴﻴﻢ ﻟﻸﻋﺪﺍﺩ ﺫﺍﺕ ﺍﻹﺷﺎﺭﺓ ﻓﻬﻲ ﻣﺸﺎﺔ ﲤﺎﻣﹰﺎ ﻟﻠﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ﻭ ﺗﻌﺮﻑ ﻛﻤﺎ ﻳﻠﻲ:
IMULﻫﻲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻀﺮﺏ ﻣﻊ ﺃﺧﺬ ﺍﻹﺷﺎﺭﺓ ﺑﻌﲔ ﺍﻻﻋﺘﺒﺎﺭ.
IDIVﻫﻲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﺘﻘﺴﻴﻢ ﻣﻊ ﺃﺧﺬ ﺍﻹﺷﺎﺭﺓ ﺑﻌﲔ ﺍﻻﻋﺘﺒﺎﺭ.
ﻭ ﺗﻜﻮﻥ ﺇﺷﺎﺭﺓ ﺍﻟﻨﺎﺗﺞ ﰲ ﻛﻠﺘﺎ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﺁﺧﺮ ﺧﺎﻧﺔ ﻣﻨﻪ ﺃﻱ ﺧﺎﻧﺔ ﺍﻟـ . MSB
ﻭ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ﻫﻨﺎﻙ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ )ﺗﺎﺑﻊ ﳉﺪﻭﻝ ﺍﻟﻀﺮﺏ ﻭ ﺍﻟﻘﺴﻤﺔ(:
ﺍﻟﻜﻠﻤﺔ
ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
ﺍﳌﺨﺘﺰﻟﺔ
Q[AL/10d] → AH
ﺗﺼﺤﻴﺢ ﺍﻟﻨﺎﺗﺞ ﰲ ALﻣﻦ ﺿﺮﺏ
AAM AAM R[AL/10d] → AL ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
ﻋﺪﺩﻳﻦ BCDﺃﻭ ﻋﺪﺩﻳﻦ ﺛﻨﺎﺋﻴﲔ
ﺗﺼﺤﻴﺢ AXﻣﻦ ﺃﺟﻞ ﺍﻟﻘﺴﻤﺔ
ﺣﻴﺚ AXﻟﻴﺲ ﻧﺎﺗﺞ ﺍﻟﻘﺴﻤﺔ ﻭ ﺇﳕﺎ
ﻫﻮ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﰲ ﻋﻤﻠﻴﺔ AH.10d + AL → AL
AAD AAD SF, ZF, PF
ﺍﻟﻘﺴﻤﺔ .ﻟﺬﻟﻚ ﻧﻄﺒﻖ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ 00 → AH
ﻗﺒﻞ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ ﻋﻜﺲ ﺑﺎﻗﻲ
ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺼﺤﻴﺢ
→ MSB of AL
CBW ﲢﻮﻳﻞ ﺑﺎﻳﺖ ﺇﱃ ﻛﻠﻤﺔ CBW ﻻ ﻳﻮﺟﺪ
All bits of AH
→ MSB of AX
CWD ﲢﻮﻳﻞ ﻛﻠﻤﺔ ﺇﱃ ﻛﻠﻤﺔ ﻣﻀﺎﻋﻔﺔ CBW ﻻ ﻳﻮﺟﺪ
All bits of DX
15 0
0 0
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
32ﺑﺖ ﻋﻠﻰ 16ﺑﺖ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﺘﻘﺴﻴﻢ ﻣﻘﺴﻮﻡ ﺫﻱ 16ﺑﺖ ﰲ AXﻋﻠﻰ ﻣﻘﺴﻮﻡ ﻋﻠﻴﻪ ﺫﻱ 16ﺑﺖ ﻭ ﺫﻟﻚ ﺑﺘﺤﻮﻳـﻞ
ﺍﻟﻜﻠﻤﺔ ﺇﱃ ﻛﻠﻤﺔ ﻣﻀﺎﻋﻔﺔ ﻭ ﻳﺘﻢ ﻫﺬﺍ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ .CWD
ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﹰﺎ ﻓﺈﻥ ﺍﻷﻋﺪﺍﺩ ﻏﲑ ﺍﻤﻌﺔ ﻳﺘﻢ ﺣﻔﻈﻬﺎ ﻛﺎﻟﺘﺎﱄ:
ﺍﻟﻘﺴﻢ ﺍﻟﻌﻠﻮﻱ ﻣﻦ ﺍﻟﺒﺎﻳﺖ ﺍﻟﺬﻱ ﳛﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻌﺪﺩ ﻏﲑ ﺍﻤﻊ ﳚﺐ ﺃﻥ ﺗﻜﻮﻥ ﻗﻴﻤﺘﻪ ﻣﺴﺎﻭﻳﺔ ﺇﱃ ﺍﻟﺼﻔﺮ.
ﺇﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ AAMﺗﺴﺘﺨﺪﻡ ﻟﺘﺼﺤﻴﺢ ﻧﺎﺗﺞ ﺿﺮﺏ ﻋﺪﺩﻳﻦ ﻏﲑ ﳎﻤﻌﲔ ﻷﻧﻪ ﻋﻨﺪ ﺿﺮﺏ ﻋﺪﺩﻳﻦ ﻏﲑ ﳎﻤﻌﲔ ﳓﺼﻞ ﻋﻠـﻰ ﻧﺘﻴﺠـﺔ
ﳎﻤﻌﺔ ﻭ ﺍﻟﻨﺘﻴﺠﺔ ﳚﺐ ﺃﻥ ﺗﻜﻮﻥ ﻏﲑ ﳎﻤﻌﺔ ،ﻟﺬﻟﻚ ﻧﺼﺤﺤﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ . AAM
ﻣﺜﺎﻝ :ﺑﻔﺮﺽ ﺃﻥ BL = 09ﻭ AL = 07ﻓﻤﺎ ﻫﻲ ﻧﺘﻴﺠﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ :
MUL BL
AAM
ﺍﳊﻞ:
AX = 00 07
BX = 00 09
MUL 00 3F AX
AAM 06 03 AX
ﻗﺎﻋﺪﺓ ﺍﻟﺘﺼﺤﻴﺢ ﰲ ﺗﻌﻠﻴﻤﺔ AADﻫﻲ :
ﺇﻥ ﺍﻟﺘﻘﺴﻴﻢ ﺑﺎﻟﻨﺴﺒﺔ ﺇﱃ ﺍﻷﻋﺪﺍﺩ ﻏﲑ ﺍﻤﻌﺔ ﻳﺆﺩﻱ ﺇﱃ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﻧﺘﺎﺋﺞ ﺧﺎﻃﺌﺔ ﻭ ﻟﺬﻟﻚ ﳚﺐ ﲡﻤﻴﻊ ﺍﻷﻋﺪﺍﺩ ﻗﺒـﻞ ﻗـﺴﻤﺘﻬﺎ .ﻭ
ﺑﻔﺮﺽ ﺃﻥ ) AX = 0604hﻭ ﻫﻲ ﺃﻋﺪﺍﺩ ﻏﲑ ﳎﻤﻌﺔ ( ﻓﻨﺘﻴﺠﺔ ﺗﻄﺒﻴﻖ ﺗﻌﻠﻴﻤﺔ ﺍﻟﺘﺼﺤﻴﺢ ) AADﻭ ﺍﻟﱵ ﻳﺘﻢ ﺗﻄﺒﻴﻘﻬﺎ ﻗﺒﻞ ﻋﻤﻠﻴـﺔ
ﺍﻟﺘﻘﺴﻴﻢ ( ﻫﻲ:
- 33 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻫﻨﺎﻙ ﻧﻮﻋﺎﻥ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺣﺔ ﳘﺎ ﺍﻹﺯﺍﺣﺔ ﺍﳌﻨﻄﻘﻴﺔ ﻭ ﺍﻹﺯﺍﺣﺔ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻛﻤﺎ ﻫﻮ ﻭﺍﺿﺢ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻫﻲ ﺇﺯﺍﺣﺔ ﳏﺘﻮﻳﺎﺕ Dﳓﻮ ﺍﻟﻴﺴﺎﺭ ﺑﺎﲡﺎﻩ CFﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳋﺎﻧﺎﺕ ﻣﺴﺎﻭﻳﹰﺎ ﻟﻘﻴﻤﺔ countﻭ ﻣﻞﺀ ﲨﻴﻊ ﺍﳋﺎﻧﺎﺕ ﺍﻟـﻴﻤﲎ
ﺍﳌﻔﺮﻏﺔ ﺑﺄﺻﻔﺎﺭ.
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺘﺄﺛﲑ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﻋﻠﻢ : OFﺇﺫﺍ ﺗﺒﺪﻟﺖ ﺧﺎﻧﺔ ﺍﻹﺷﺎﺭﺓ ﻧﺘﻴﺠﺔ ﺍﻹﺯﺍﺣﺔ ﻓﺈﻥ . OF = 1
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
ﺇﺯﺍﺣﺔ ﻣﻨﻄﻘﻴﺔ ﳓﻮ SHR D,count OF,CF
SHR
ﺍﻟﻴﻤﲔ
0 CF
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻫﻲ ﺇﺯﺍﺣﺔ ﳏﺘﻮﻳﺎﺕ Dﳓﻮ ﺍﻟﻴﻤﲔ ﺑﺎﲡﺎﻩ CFﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳋﺎﻧﺎﺕ ﻣﺴﺎﻭﻳﹰﺎ ﻟﻘﻴﻤﺔ countﻭ ﻣﻞﺀ ﲨﻴﻊ ﺍﳋﺎﻧﺎﺕ ﺍﻟﻴـﺴﺮﻯ
ﺍﳌﻔﺮﻏﺔ ﺑﺄﺻﻔﺎﺭ.
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺘﺄﺛﲑ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﻌﻠﻢ : OFﺇﺫﺍ ﺗﺒﺪﻟﺖ ﺧﺎﻧﺔ ﺍﻹﺷﺎﺭﺓ ﻧﺘﻴﺠﺔ ﺍﻹﺯﺍﺣﺔ ﻓﺈﻥ OF = 1
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻫﻲ ﺇﺯﺍﺣﺔ ﳏﺘﻮﻳﺎﺕ Dﳓﻮ ﺍﻟﻴﻤﲔ ﺑﺎﲡﺎﻩ CFﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳌﺮﺍﺕ ﻣﺴﺎﻭﻳﹰﺎ ﻟﻘﻴﻤﺔ countﻭ ﻣﻞﺀ ﺍﳋﺎﻧﺎﺕ ﲨﻴﻊ ﺍﳋﺎﻧـﺎﺕ
ﺍﻟﻴﺴﺮﻯ ﺑﻘﻴﻤﺔ ﺍﳋﺎﻧﺔ ) MSBﺧﺎﻧﺔ ﺍﻹﺷﺎﺭﺓ ﺃﻭ ﺁﺧﺮ ﺧﺎﻧﺔ (.
- 34 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻣﻼﺣﻈﺔ :ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺘﻌﻠﻴﻤﺘﲔ : SHL, SALﺇﺫﺍ ﻃﺒﻘﻨﺎ ﻫﺎﺗﲔ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﻣﻦ ﺃﺟﻞ ﺍﻹﺯﺍﺣﺔ ﺑﻌﺪﺩ ﻣﻦ ﺍﳋﺎﻧﺎﺕ count = Nﻓﻬـﺬﺍ
ﻳﻌﲏ ﺿﺮﺏ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﺑـ 2 nﻭ ﺍﻟﺬﻱ ﻫﻮ ﻣﻀﺎﻋﻔﺎﺕ ﺍﻟﻌﺪﺩ . 2
ﻣﻼﺣﻈﺔ :ﺇﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ SHRﺗﻌﲏ ﺗﻘﺴﻴﻢ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﻋﻠﻰ ﺍﻟﻌﺪﺩ 2 countﲢﺖ ﻛﻮﻥ LSB = 0ﻛﻞ ﻣـﺮﺓ ﻭ ﰲ ﺣــﺎﻟﺔ
LSB = 1ﻓﻌﻨﺪﻫﺎ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ ﺑﺎﻗﻲ ﻣﻮﺿﻮﻉ ﰲ ﺍﻟﻌﻠﻢ . CF
ﻣﺜﺎﻝ :ﺍﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﲝﺴﺎﺏ ﺍﻟﻌﻼﻗﺔ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﺴﺘﺨﺪﻣﹰﺎ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺣﺔ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ :
3.(AX) + 7.(BX) → DX
MOV SI,AX ; copy AX into SI
SAL SI,1 ; 2 AX
ADD SI,AX ; 3 AX
MOV DX,BX ; copy BX into DX
MOV CL,03H ; load shift count
SAL DX,CL ; 8 BX
SUB DX,BX ; 7 BX
ADD DX,SI ; result
ﺇﻥ ﺍﳌﺘﺤﻮﻻﺕ ﺍﳌﺴﻤﻮﺣﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺣﺔ ﻫﻲ:
D Count
Reg 1 ﺃﻱ ﻋﻨﺪﻣﺎ Countﻻ ﻳﺴﺎﻭﻱ ﺍﻟﻮﺍﺣﺪ ﻓﻌﻨﺪﺋﺬ ﳚﺐ ﲢﻤﻴﻞ ﻗﻴﻤـﺔ countﰲ
Reg CL
Mem 1 ﺍﳌﺴﺠﻞ CLﰒ ﻛﺘﺎﺑﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺯﺍﺣﺔ ﺃﻱ :ﻋﻨﺪﻣﺎ countﻳﺴﺎﻭﻱ ﺍﻟﻮﺍﺣـﺪ
Mem CL ﻓﻴﻤﻜﻦ ﺃﻥ ﻧﻜﺘﺐ :
SAL AX,1
ﻭ ﻋﻨﺪﻣﺎ <= count =/ 1ﳚﺐ ﺃﻥ ﻧﻜﺘﺐ :
MOV CL,count
SAL AX,CL
ﻫﺬﺍ ﻭ ﺇﻥ ﻗﻴﻤﺔ countﳏﺪﺩﺓ ﺑﺎﺎﻝ ] [1,FFﻭ ﺍﻷﻗﻮﺍﺱ ﺍﶈﻴﻄﻴﺔ ﻟﻴﺲ ﳍﺎ ﻋﻼﻗﺔ ﲟﻔﻬﻮﻡ ﺍﻹﺯﺍﺣﺔ ﻃﺒﻌﹰﺎ.
ﺧﺎﻣﺴﹰﺎ -ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺪﻭﻳﺮ
ﻭ ﻫﻲ ﻣﺒﻴﻨﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
ROL ﺗﺪﻭﻳﺮ ﳓﻮ ﺍﻟﻴﻤﲔ ROL D,count OF,CF
CF
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻫﻲ ﺗﺪﻭﻳﺮ ﳏﺘﻮﻳﺎﺕ Dﳓﻮ ﺍﻟﻴﺴﺎﺭ ﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳌﺮﺍﺕ ﻣﺴﺎﻭﻳﹰﺎ ﻟﻘﻴﻤﺔ . countﻭ ﻛﻞ ﺧﺎﻧﺔ ﺗﺰﺍﺡ ﺧﺎﺭﺝ ﺍﻟــ MSB
ﺗﻮﺿﻊ ﰲ ﺍﳋﺎﻧﺔ LSBﻭ ﰲ . CF
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺘﺄﺛﲑ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺍﻟﻌﻠﻢ OFﻓﻬﻮ ﻧﻔﺲ ﺍﳌﻨﺎﻗﺸﺔ ﰲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ.
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
- 35 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
CF
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻫﻲ ﺗﺪﻭﻳﺮ ﳏﺘﻮﻳﺎﺕ Dﳓﻮ ﺍﻟﻴﻤﲔ ﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳌﺮﺍﺕ ﻣﺴﺎﻭﻳﹰﺎ ﻟﻘﻴﻤﺔ . countﻭ ﻛﻞ ﺧﺎﻧﺔ ﺗﺰﺍﺡ ﺧﺎﺭﺝ ﺍﻟـ LSBﺗﻮﺿﻊ
ﰲ ﺍﳋﺎﻧﺔ MSBﻭ ﰲ . CF
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟـ OFﻓﻬﻮ ﻧﻔﺲ ﺍﳌﻨﺎﻗﺸﺔ ﰲ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ.
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
ﺗﺪﻭﻳﺮ ﳓﻮ ﺍﻟﻴﺴﺎﺭ
RCL RCL D,count OF,CF
ﻋﱪ ﺍﻟـ CF
CF
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻣﺸﺎﺔ ﻟﺘﻌﻠﻴﻤﺔ ROLﻣﺎ ﻋﺪﺍ ﺃﻥ ﺍﶈﺘﻮﻯ ﺍﻷﺻﻠﻲ ﻟـ CFﻳﻮﺿﻊ ﰲ ﺍﳋﺎﻧﺔ LSBﺃﻣﺎ ﺍﳋﺎﻧﺔ ﺍﳌﺰﺍﺣﺔ ﺧﺎﺭﺝ ﺍﻟـ MSB
ﻓﺘﻮﺿﻊ ﰲ . CF
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟـ OFﻧﻔﺲ ﺍﳌﻨﺎﻗﺸﺔ ﺍﻟﺴﺎﺑﻘﺔ.
CF
ﺍﻟﻌﻤﻠﻴﺔ ﻫﻨﺎ ﻣﺸﺎﺔ ﻟﺘﻌﻠﻴﻤﺔ RORﻣﺎ ﻋﺪﺍ ﺃﻥ ﺍﶈﺘﻮﻯ ﺍﻷﺻﻠﻲ ﻟـ CFﻳﻮﺿﻊ ﰲ ﺍﳋﺎﻧﺔ MSBﺃﻣﺎ ﺍﳋﺎﻧﺔ ﺍﳌﺰﺍﺣﺔ ﺧﺎﺭﺝ ﺍﻟـ LSB
ﻓﺘﻮﺿﻊ ﰲ . CF
ﻭ ﺑﺎﻟﻨﺴﺒﺔ ﻟـ OFﻧﻔﺲ ﺍﳌﻨﺎﻗﺸﺔ ﺍﻟﺴﺎﺑﻘﺔ.
ﺳﺎﺩﺳﹰﺎ -ﺗﻌﻠﻴﻤﺎﺕ ﻣﺴﺠﻼﺕ ﺍﻷﻋﻼﻡ
ﻭ ﻫﻲ ﻣﺒﻴﻨﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ :
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
- 36 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
Flags → AH
ﲢﻤﻴﻞ AHﻣﻦ ﺍﻟﻨﺼﻒ ﺍﻷﻭﻝ ﻣﻦ ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﻳﻮﺿﻊ
LAHF LAHF ﻻ ﻳﻮﺟﺪ
ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﰲ AH
AH → Flags
ﲣﺰﻳﻦ ﻗﻴﻤﺔ AHﰲ ﻳﻮﺿﻊ AHﰲ ﺍﻟﻨﺼﻒ ﺍﻷﻭﻝ ﻣﻦ ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
SAHF SAHF
ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﻣﺴﺠﻞ ﺍﻷﻋﻼﻡ ﻋﺪﺍ OF
- 37 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺑﻮﺍﺳﻄﺔ ﺍﳌﺘﺤﻮﻝ
operand
ﻫﻨﺎﻙ ﻧﻮﻋﺎﻥ ﺃﺳﺎﺳﻴﺎﻥ ﻣﻦ ﺍﻟﻘﻔﺰ ﻏﲑ ﺍﳌﺸﺮﻭﻁ ﺍﻷﻭﻝ ﻳﺪﻋﻰ ﺑﺎﻟﻘﻔﺰ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ،ﻭ ﺍﻟﺜﺎﱐ ﻫﻮ ﺍﻟﻘﻔﺰ ﺑﲔ ﺍﳌﻘﺎﻃﻊ ﺍﳉﺰﺋﻴـﺔ ﺃﻱ
ﻳ ﻤ ﻜﻨﻨﺎ ﻣﻦ ﺍﻟﻘﻔﺰ ﻣﻦ ﺃﺣﺪ ﻣﻘﺎﻃﻊ ﺍﻟﺸﻴﻔﺮﺓ ﺇﱃ ﻣﻘﻄﻊ ﺁﺧﺮ ﻭ ﺇﻥ ﲢﻘﻴﻖ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻘﻔﺰ ﻳﺘﻄﻠﺐ ﻣﻨﺎ ﺗﻌﺪﻳﻞ ﳏﺘﻮﻳﺎﺕ ﻛـﻞ ﻣـﻦ
ﻣﻘﻄﻊ ﺍﻝ CSﻭ ﻣﺴﺠﻞ ﻣﺆﺷﺮ ﺍﻟﺘﻌﻠﻴﻤﺔ ، IPﺃﻣﺎ ﺍﻟﻘﻔﺰ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ﻓﺈﻧﻪ ﻳﺘﻄﻠﺐ ﻣﻨﺎ ﺗﻌﺪﻳﻞ ﻗﻴﻤﺔ ﺍﻝ IPﻓﻘﻂ.
ﺇﻥ ﺍﳌﺘﺤﻮﻻﺕ ﺍﳌﺴﻤﻮﺣﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﻏﲑ ﺍﳌﺸﺮﻭﻁ ﻫﻲ :
Operand
ﻣﺘﺤﻮﻝ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺼﲑﺓ
Short_Label
ﻣﺘﺤﻮﻝ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺮﻳﺒﺔ
Near_Label ﻟﻠﻘﻔﺰ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ
ﻣﺘﺤﻮﻝ ﻣﺆﺷﺮ ﺫﺍﻛﺮﻱ 16ﺑﺖ
Memptr16
ﻣﺘﺤﻮﻝ ﻣﺆﺷﺮ ﻣﺴﺠﻠﻲ 16ﺑﺖ
Regptr16
ﻣﺘﺤﻮﻝ ﺍﻟﻼﻓﺘﺔ ﺍﻟﺒﻌﻴﺪﺓ
Far_Labrl ﻟﻠﻘﻔﺰ ﺑﲔ ﺍﳌﻘﺎﻃﻊ ﺍﳉﺰﺋﻴﺔ
ﻣﺘﺤﻮﻝ ﻣﺆﺷﺮ ﺫﺍﻛﺮﻱ 32ﺑﺖ
Memptr32
ﺍﻟﻘﻔﺰ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ
ﻼ ﰲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔـﺰ ﺑﺎﻟﻼﻓﺘـﺔ ﺃ ( ﺇﻥ ﻣﺘﺤﻮﻻﺕ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺼﲑﺓ ﻭ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺮﻳﺒﺔ ﲢﺪﺩ ﺍﻟﻘﻔﺰ ﺍﻟﻨﺴﱯ ﻟﻌﻨﻮﺍﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﻧﻔﺴﻬﺎ ﻓﻤﺜ ﹸ
ﺍﻟﻘﺼﲑﺓ ﻳﺘﻢ ﺗﺸﻔﲑ ﺍﻟﻌﺪﺩ ﺫﻱ 8ﺑﺖ ﻛﻤﺘﺤﻮﻝ ﻓﻮﺭﻱ ﻟﺘﺤﺪﻳﺪ ﺍﻹﺯﺍﺣﺔ ) (Dispﺫﺍﺕ ﺍﻹﺷﺎﺭﺓ ﺍﻟﱵ ﺗﺸﲑ ﺇﱃ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟـﱵ
ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻣﻦ ﺣﺠﺮﺓ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ،ﻭ ﻋﻨﺪﻣﺎ ﺗﻨﻔﺬ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﻳﻌﺎﺩ ﺷﺤﻦ ﺍﻝ IPﺑﻘﻴﻤﺔ ﺟﺪﻳﺪﺓ ﻣﻮﺿﺤﺔ ﻛﻤﺎ ﻳﻠﻲ:
ﻗﻴﻤﺔ IPﺍﳉﺪﻳﺪﺓ = ]) ﻗﻴﻤﺔ + IPﻃﻮﻝ ﺷﻴﻔﺮﺓ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ( +ﻣﻘﺪﺍﺭ ﺍﻹﺯﺍﺣﺔ ﺫﺍﺕ ﺍﻹﺷﺎﺭﺓ ﺑﻌﺪ ﲤﺪﻳﺪﻫﺎ ﲜﻌﻞ ﻣﺘﺤﻮﻝ 8ﺑﺘﺎﺕ
ﺑﺎﻟﺸﻜﻞ 16ﺑﺖ [
ﺇﻥ ﺍﻟﻘﻴﻤﺔ ﺍﳉﺪﻳﺪﺓ ﻟـ IPﻣﻊ ﻗﻴﻤﺔ CSﺍﳊﺎﻟﻴﺔ ﺗﻌﻄﻲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﱵ ﺳﺘﺠﻠﺐ ﻭ ﺗﻨﻔﺬ.
ﻣﺜﺎﻝ:
ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ
IP = 0112h
JMP disp ; disp = 0F2h
ﺇﻥ ﻋﻨﻮﺍﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ) ﻣﻮﺟﻮﺩ ﲢﺖ ﺍﻟﻌﻨﻮﺍﻥ ﺍﳌﺨﺰﻥ ﰲ ، ( IPﺇﺫﻥ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﱃ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺫﺍﺕ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﺘﺎﱄ:
)ﺃﳘﻠﻨﺎ ﺧﺎﻧﺔ ﺍﳊﻤﻞ( ) = 0112 + 2 + FFF2 = 0106hﺑﻌﺪ ﲤﺪﻳﺪ ﺇﺷﺎﺭﺎ ( = IP + 2 + dispﺍﻟﻌﻨﻮﺍﻥ ﺍﳌﻨﻄﻘﻲ address
ﲟﺎ ﺃﻥ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻨﺎﺗﺞ ﺃﺻﻐﺮ ﻣﻦ ﻋﻨﻮﺍﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﻓﻬﺬﺍ ﻳﻌﲏ ﺃﻧﻨﺎ ﻧﻘﻔﺰ ﺇﱃ ﺗﻌﻠﻴﻤﺔ ﺗﺴﺒﻖ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﺃﻱ ﺍﻟﻘﻔﺰ ﳓـﻮ ﺍﻟـــﻮﺭﺍﺀ
. 0106 < 0112
ﻣﺜﺎﻝ ﺁﺧﺮ:
IP = 0112h
JMP 04
Address = 0112 + 2 + 0004 = 0118h
ﻧﻼﺣﻆ ﺃﻥ 0118 > 0112ﻓﻬﺬﺍ ﻳﻌﲏ ﺃﻥ ﺍﻟﻘﻔﺰ ﳓﻮ ﺍﻷﻣﺎﻡ.
ﻭ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﳚﺐ ﺇﺿﺎﻓﺔ ﻣﻘﺪﺍﺭ ﺍﻝ CSﻟﻘﻴﻤﺔ . address
ﻣﻼﺣﻈﺔ :ﲟﺎ ﺃﻥ ﻣﺘﺤﻮﻝ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺼﲑﺓ ﺫﻭ 8ﺑﺘﺎﺕ ﻓﻬﻮ ﻳﺴﻤﺢ ﺑﺎﻟﻘﻔﺰ ﰲ ﺍﺎﻝ ﻣﻦ -126ﺇﱃ +129ﻭ ﺳﺒﺐ ﺫﻟﻚ ﺃﻧـﻪ ﺇﺫﺍ
ﺃﺿﻔﻨﺎ ﻃﻮﻝ ﺷﻴﻔﺮﺓ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﻭ ﻫﻮ 2ﺑﺎﻳﺖ ﺇﱃ ﺍﺎﻝ ﺍﻟﺘﺎﱄ ﻣﻦ -128ﺇﱃ +127ﺳﻨﺤﺼﻞ ﻋﻠﻰ ﺍﺎﻝ ﺍﻟﺴﺎﺑﻖ .ﺃﻣﺎ ﻣﺘﺤﻮﻝ
- 38 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺮﻳﺒﺔ ﻓﻬﻮ ﻣﺘﺤﻮﻝ ﻓﻮﺭﻱ ﺫﻭ 16ﺑﺖ ﻭ ﻟﺬﻟﻚ ﻳﺴﻤﺢ ﺑﺎﻟﻘﻔﺰ ﺿﻤﻦ ﳎﺎﻝ ﻳﺴﺎﻭﻱ 32KBﳓﻮ ﺍﳋﻠﻒ ﺃﻭ ﳓﻮ ﺍﻷﻣﺎﻡ ﻣـﻦ
ﻋﻨﻮﺍﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ.
ﻣﺜﺎﻝ:
JMP label
ﻫﺬﺍ ﻳﻌﲏ ﺍﻟﻘﻔﺰ ﺇﱃ ﻧﻘﻄﺔ ﰲ ﺍﻟﱪﻧﺎﻣﺞ ﻣﻘﺎﺑﻠﺔ ﻟﻠﻤﺘﺤﻮﻝ labelﺣﻴﺚ ﺗﺘﻢ ﺇﺿﺎﻓﺔ ﻫﺬﺍ ﺍﳌﺘﺤﻮﻝ ) ﺍﻹﺯﺍﺣﺔ 16ﺑﺖ ( ﺇﱃ ﻗﻴﻤﺔ ﺍﻝIP
ﻭ ﺍﻟﻘﻴﻤﺔ ﺍﳉﺪﻳﺪﺓ ﻟـ IPﻭ ﺍﻟﻘﻴﻤﺔ ﺍﳊﺎﻟﻴﺔ ﰲ CSﺗﻌﻄﻲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺳﺘﻨﻔﺬ .
ﺏ( ﳝﻜﻦ ﲢﺪﻳﺪ ﺍﻟﻘﻔﺰ ﺇﱃ ﻋﻨﻮﺍﻥ ﺑﺸﻜﻞ ﻏﲑ ﻣﺒﺎﺷﺮ ﺑﻮﺍﺳﻄﺔ ﳏﺘﻮﻳﺎﺕ ﺣﺠﺮﺓ ﺫﺍﻛﺮﺓ ﺃﻭ ﳏﺘﻮﻳﺎﺕ ﻣﺴﺠﻞ ﺃﻱ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺤـﻮﻝ
ﻣﺆﺷﺮ ﺫﺍﻛﺮﻱ 16ﺑﺖ ﺃﻭ ﻣﺘﺤﻮﻝ ﻣﺆﺷﺮ ﻣﺴﺠﻠﻲ 16ﺑﺖ ﻭ ﻫﻨﺎ ﺃﻳﻀﹰﺎ ﻳﺘﻢ ﺍﻟﻘﻔﺰ ﺿﻤﻦ ﳎﺎﻝ . ± 32 KB
ﻣﺜﺎﻝ:
JMP BX
ﰲ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻳﺴﺘﻌﻤﻞ ﻣﻀﻤﻮﻥ ﺍﳌﺴﺠﻞ BXﻣﻦ ﺃﺟﻞ ﺍﻹﺯﺍﺣﺔ ﻭ ﻫﺬﺍ ﻳﻌﲏ ﺃﻥ ﻗﻴﻤﺔ BXﻳﺘﻢ ﲢﻤﻴﻠﻬﺎ ﰲ IPﰒ ﳛﺴﺐ ﺍﻟﻌﻨﻮﺍﻥ
ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﻟﻴﻬﺎ ﺑﺎﺳﺘﻌﻤﺎﻝ ﺍﶈﺘﻮﻳﺎﺕ ﺍﳊﺎﻟﻴﺔ ﻟـ CSﻭ ﺍﻟﻘﻴﻤﺔ ﺍﳉﺪﻳﺪﺓ ﻟـ . IP
ﺑﻔﺮﺽ ﺃﻥ :
BX = 0200h ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﻟﻴﻬﺎ
CS = 0100h
PA = ( CS x 10h ) + BX = 01000 + 0200 = 01200h
ﻼ ] JMP [SIﻓﻔﻲ ﻫـﺬﻩﻣﻼﺣﻈﺔ :ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﳐﺘﻠﻒ ﺃﻧﻮﺍﻉ ﺃﻧﻈﻤﺔ ﺍﻟﻌﻨﻮﻧﺔ ﻟﺘﺤﺪﻳﺪ ﺍﳌﺘﺤﻮﻝ ﺍﳌﺴﺘﻌﻤﻞ ﻛﻤﺆﺷﺮ ﺫﺍﻛﺮﻱ ﻓﻤﺜ ﹰ
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺗﺴﺘﻌﻤﻞ ﳏﺘﻮﻳﺎﺕ SIﻛﻌﻨﻮﺍﻥ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﱵ ﲢﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ،ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ ﻳﺘﻢ ﲢﻤﻴﻠـﻪ ﰲ IPﻭ ﺍﻟـﺬﻱ
ﻳﺴﺘﻌﻤﻞ ﻣﻊ ﳏﺘﻮﻳﺎﺕ CSﺍﳊﺎﻟﻴﺔ ﳊﺴﺎﺏ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﻟﻴﻬﺎ ﻭ ﻋﺎﺩﺓ ﰲ ﻫـﺬﻩ ﺍﳊﺎﻟـﺔ ﺗـﺴﺘﺨﺪﻡ
ﺍﳌﺴﺠﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ . DI, SI, BX:
ﺍﻟﻘﻔﺰ ﺑﲔ ﺍﳌﻘﺎﻃﻊ ﺍﳉﺰﺋﻴﺔ ﺃﻭ ﺍﻟﻘﻔﺰ ﺧﺎﺭﺝ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻴﺔ
ﺃ( ﺗﺴﺘﻌﻤﻞ ﺍﻟﻼﻓﺘﺔ ﺍﻟﺒﻌﻴﺪﺓ ﻣﺘﺤﻮ ﹰﻻ ﻓﻮﺭﻳﹰﺎ ﺫﺍ 32ﺑﺖ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻘﻔﺰ ﺇﱃ ﻋﻨﻮﺍﻥ ﻣﺎ .ﺣﻴﺚ ﻳﺘﻢ ﲢﻤﻴﻞ ﺍﻟـ 16ﺑﺖ ﺍﻷﻭﱃ ﻣﻦ ﻫـﺬﺍ
ﺍﳌﺘﺤﻮﻝ ﰲ IPﻭ ﺗﻜﻮﻥ ﻫﻲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻧﺴﺒﺔ ﶈﺘﻮﻳﺎﺕ ﺍﳌﺴﺠﻞ CSﺃﻣﺎ ﺍﻟـ 16ﺑﺖ ﺍﻟﺜﺎﻧﻴﺔ ﻓﻴﺘﻢ ﲢﻤﻴﻠﻬﺎ ﰲ ﺍﳌﺴﺠﻞ CSﻭ
ﺍﻟﱵ ﲢﺪﺩ ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ﺍﳉﺪﻳﺪ.
ﻣﺜﺎﻝ:
JMP farlabel
ﺣﻴﺚ farlabelﻫﻮ ﻣﺘﺤﻮﻝ ﺑـ 32ﺑﺖ ) ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﻝ ﺗﺸﺤﻦ ﰲ IPﻭ ﺍﻟﻜﻠﻤﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺗﺸﺤﻦ ﰲ ﺍﻟـ .( CS
ﺏ( ﺇﻥ ﺍﻟﻄﺮﻳﻘﺔ ﻏﲑ ﺍﳌﺒﺎﺷﺮﺓ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻭ ﻋﻨﻮﺍﻥ ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ﻣﻦ ﺃﺟﻞ ﺍﻟﻘﻔﺰ ﺑﲔ ﺍﳌﻘﺎﻃﻊ ﺍﳉﺰﺋﻴﺔ ﻫـﻲ ﺑﺎﺳـﺘﻌﻤﺎﻝ
ﻣﺘﺤﻮﻝ ﻣﺆﺷﺮ ﺫﺍﻛﺮﻱ ﺑـ 32ﺑﺖ .ﻭ ﰲ ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﻓﺈﻥ ﺃﺭﺑﻊ ﺑﺎﻳﺘﺎﺕ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﻣﺘﺘﺎﺑﻌﺔ ﺍﻋﺘﺒﺎﺭﹰﺍ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﶈﺪﺩ ﲢﺘﻮﻱ ﻋﻠﻰ
ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻭ ﻋﻨﻮﺍﻥ ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ﺍﳉﺪﻳﺪ ﻋﻠﻰ ﺍﻟﺘﺮﺗﻴﺐ .ﻭ ﻫﻨﺎ ﺃﻳﻀﹰﺎ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻱ ﻧﻮﻉ ﻣﻦ ﺃﻧﻮﺍﻉ ﺃﻧﻈﻤﺔ ﺍﻟﻌﻨﻮﻧﺔ ﺍﳌﺨﺘﻠﻔﺔ،
ﻣﺜﺎﻝ:
] JMP farseg [DIﻓﻔﻲ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺗﺴﺘﻌﻤﻞ ﳏﺘﻮﻳﺎﺕ DS, DIﳊﺴﺎﺏ ﻋﻨﻮﺍﻥ ﺣﺠﺮﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﱵ ﺗﺘﻀﻤﻦ ﺍﻟﻜﻠﻤﺔ ﺍﻷﻭﱃ
ﻟﻠﻤﺆﺷﺮ ﺍﻟﺬﻱ ﻳﻌﺮﻑ ﺍﳊﺠﺮﺓ ﺍﻟﱵ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﻟﻴﻬﺎ ،ﻓﺈﺫﺍ ﻛﺎﻥ :
ﺇﻥ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﻤﺆﺷﺮ ﻫﻮ : DI = 0200h
PA = DS x 10h + DI = 01000 + 0200 = 01200h DS = 0100h
- 39 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻭ ﻟﺘﻜﻦ ﳏﺘﻮﻳﺎﺕ ﻫﺬﻩ ﺍﳊﺠﺮﺓ ﻭ ﺍﳊﺠﺮﺍﺕ ﺍﻟﱵ ﺗﻠﻴﻬﺎ ﻛﻤﺎ ﻫﻮ ﻭﺍﺿﺢ ﰲ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ:
) Address ( h Content ﻗﻴﻤﺔ IPﺍﳉﺪﻳﺪﺓ ﻫﻲ IP = 3010h
01200 10 ﻗﻴﻤﺔ CSﺍﳉﺪﻳﺪﺓ ﻫﻲ CS = 0400h
01201 30 ﺇﺫﻥ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺳﻴﺘﻢ ﺍﻟﻘﻔﺰ ﺇﻟﻴﻬﺎ ﻫﻮ:
01202 00 PA = CS x 10h + IP = 07010h
01203 04
(2ﺗﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ ﺍﳌﺸﺮﻭﻁ
ﻭ ﻫﻲ ﻣﺸﺮﻭﺣﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﻷﻋﻼﻡ
ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ
ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﺘﺄﺛﺮﺓ
ﻗﻔﺰ ﺇﺫﺍ ﲢﻘﻖ ﺍﻟﺸﺮﻁ ccﻓﺈﻧﻪ ﻳﺘﻢ ﺍﻟﻘﻔﺰ ﺇﱃ ﺍﻟﻌﻨﻮﺍﻥ ﺍﶈﺪﺩ ﺑﻮﺍﺳﻄﺔ
Jcc ﻣﺘﺤﻮﻝ Jcc ﻻ ﻳﻮﺟﺪ
ﻣﺸﺮﻭﻁ ﺍﳌﺘﺤﻮﻝ ﻭ ﺇﻻ ﻓﻴﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺰ
ﻫﻨﺎﻙ 18ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺰ ﺍﳌﺸﺮﻭﻁ ﻭ ﻫﻲ ﻣﺸﺮﻭﺣﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ
JC ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ CF = 1
JNC ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ CF = 0
JO ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ OF = 1
JNO ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ OF = 0
JS ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ SF = 1
JNS ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ SF = 0
JCXZ ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ CX = 0000
JE/JZ ﺍﻟﻘﻔﺰ ﰲ ﺣﺎﻟﺔ ﺍﻟﺘﺴﺎﻭﻱ/ﺃﻭ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟﻨﺎﺗﺞ ﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ
JGE/JNL ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﺃﻛﱪ ﺃﻭ ﻳﺴﺎﻭﻱ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﺃﺻﻐﺮ
JA/JNBE ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﻓﻮﻕ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﲢﺖ ﺃﻭ ﻳﺴﺎﻭﻱ
JAE/JNB ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﻓﻮﻕ ﺃﻭ ﻳﺴﺎﻭﻱ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﲢﺖ
JB/JNAE ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﲢﺖ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﻓﻮﻕ ﺃﻭ ﻳﺴﺎﻭﻱ
JBE/JNA ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﲢﺖ ﺃﻭ ﻳﺴﺎﻭﻱ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﻓﻮﻕ
JG/JNLE ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﺃﻛﱪ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﺃﺻﻐﺮ ﺃﻭ ﻳﺴﺎﻭﻱ
JLE/JNG ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﺃﺻﻐﺮ ﺃﻭ ﻳﺴﺎﻭﻱ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﺃﻛﱪ
JNE/JNZ ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﱂ ﻳﻜﻦ ﻳﺴﺎﻭﻱ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟﻨﺎﺗﺞ ﻳﺴﺎﻭﻱ ﻗﻴﻤﺔ ﻏﲑ ﺻﻔﺮﻳﺔ
JNB/JBO ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻧﺖ ﺧﺎﻧﺔ Parityﻏﲑ ﻣﻮﺟﻮﺩﺓ/ﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ PF = 0
JP/JPE ﺍﻟﻘﻔﺰ ﰲ ﺣﺎﻟﺔ ﻭﺟﻮﺩ ﺧﺎﻧﺔ /Parityﺍﻟﻘﻔﺰ ﺇﺫﺍ ﻛﺎﻥ PF = 1
- 40 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻣﻼﺣﻈﺔ:
ﻟﻠﺘﻤﻴﻴﺰ ﺑﲔ ﻣﻘﺎﺭﻧﺔ ﺍﻷﻋﺪﺍﺩ ﺫﺍﺕ ﺍﻹﺷﺎﺭﺓ ﻭ ﺍﻷﻋﺪﺍﺩ ﺑﺪﻭﻥ ﺇﺷﺎﺭﺓ ﻓﺈﻥ ﻫﻨﺎﻙ ﺍﲰﲔ ﳐﺘﻠﻔﲔ ﻳﺒﺪﻭ ﺃﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻲﺀ ﰲ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻘﻔﺰ
ﻭ ﳘﺎ ﻓﻮﻕ ) ( Aﻭ ﲢﺖ ) ( Bﻣﻦ ﺃﺟﻞ ﻣﻘﺎﺭﻧﺔ ﺍﻷﻋﺪﺍﺩ ﺑﺪﻭﻥ ﺇﺷﺎﺭﺓ ،ﻭ ﺃﺻﻐﺮ ) ( Lﻭ ﺃﻛﱪ ) ( Gﻣﻦ ﺃﺟﻞ ﻣﻘﺎﺭﻧﺔ ﺍﻷﻋﺪﺍﺩ
ﻼ ﺍﻟﻌﺪﺩ ABCDhﻫﻮ ﻓﻮﻕ ﺍﻟﻌﺪﺩ 1234hﺇﺫﺍ ﺍﻋﺘﱪﻧﺎﳘﺎ ﻋﺪﺩﻳﻦ ﺑﺪﻭﻥ ﺇﺷﺎﺭﺓ .ﺃﻣﺎ ﺇﺫﺍ ﺍﻋﺘﱪﻧﺎﳘﺎ ﺑﺈﺷﺎﺭﺓ ﻓـﺈﻥ
ﺫﺍﺕ ﺍﻹﺷﺎﺭﺓ .ﻓﻤﺜ ﹰ
ABCDhﻫﻮ ﻋﺪﺩ ﺳﺎﻟﺐ ﻭ 1234hﻫﻮ ﻋﺪﺩ ﻣﻮﺟﺐ ﻭ ﻟﺬﻟﻚ ABCDhﻫﻮ ﺃﺻﻐﺮ ﻣﻦ .1234h
- 41 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
2
1
CALL SUB
6
7
3 5
8
9
RETURN
ﻣﻼﺣﻈﺔ:
ﺇﻥ ﺍﻟﻔﺮﻕ ﺑﲔ ﺍﻟﻌﻤﻞ ﳌﻨﺎﺩﺍﺓ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻭ ﺍﻟﻘﻔﺰ ﻫﻮ ﺃﻥ ﻣﻨﺎﺩﺍﺓ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻻ ﺗﻨﺘﺞ ﻗﻔﺰﹰﺍ ﻓﻘﻂ ﺇﱃ ﺍﻟﻌﻨﻮﺍﻥ ﺍﳌﻨﺎﺳﺐ ﰲ ﺫﺍﻛﺮﺓ
ﲣﺰﻳﻦ ﺍﻟﱪﻧﺎﻣﺞ ﻭ ﻟﻜﻨﻬﺎ ﺃﻳﻀﹰﺎ ﲤﻠﻚ ﺗﻘﻨﻴﺔ ﻣﻦ ﺃﺟﻞ ﺣﻔﻆ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻣﺜﻞ IPﻭ CSﺍﻟﱵ ﺗﻜﻮﻥ ﻣﻄﻠﻮﺑـﺔ ﻟﻠﻌـﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧـﺎﻣﺞ
ﺍﻟﺮﺋﻴﺴﻲ.
ﺗﻌﻠﻴﻤﺎﺕ ﺍﳌﻨﺎﺩﺍﺓ ﻭ ﺍﻟﻌﻮﺩﺓ
ﻼ ﻫﺎﺗﲔ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﻣﻌﺎﹰ ﺗﺰﻭﺩﺍﻥ ﺗﻘﻨﻴﺔ ﻣﻦ ﺃﺟﻞ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺇﱃ ﺍﻟﻌﻤﻞ ﻭ ﺇﻋﺎﺩﺓ ﺍﻟﺘﺤﻜﻢ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻷﺳﺎﺳﻲ ﳌﺘﺎﺑﻌﺔ
ﻛﹰ
ﺗﻨﻔﻴﺬﻩ .ﺇﻥ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﻣﺸﺮﻭﺣﺔ ﰲ ﺍﳉﺪﻭﻝ:
ﺍﻟﻜﻠﻤﺔ
ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
ﺍﳌﺨﺘﺰﻟﺔ
ﻳﺘﺎﺑﻊ ﺍﻟﺘﻨﻔﻴﺬ ﰲ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ
ﻣﻨﺎﺩﺍﺓ ﺑﺮﻧﺎﻣﺞ ﺍﶈﺪﺩ ﺑﻮﺍﺳﻄﺔ ﺍﳌﺘﺤﻮﻝ operandﺍﳌﻮﺟﻮﺩ ﰲ
CALL CALL operand ﻻ ﻳﻮﺟﺪ
ﻓﺮﻋﻲ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ .ﻭ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﳌﻄﻠﻮﺑﺔ ﻣﻦ ﺃﺟﻞ
ﺍﻟﻌﻮﺩﺓ ﻣﺜﻞ IPﻭ CSﺗﺤﻔﻆ ﰲ ﺍﳌﻜﺪﺱ
ﻫﻨﺎﻙ 5ﺃﻧﻮﺍﻉ ﻟﻠﻤﺘﺤﻮﻻﺕ ﺍﳌﺴﻤﻮﺡ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻊ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﻭ ﻫﻲ:
- 42 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
OPERAND
Near_pro
ﻟﻠﻤﻨﺎﺩﺍﺓ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ
Memptr16
Regptr16
Far_proc ﻟﻠﻤﻨﺎﺩﺍﺓ ﺧﺎﺭﺝ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ
Memptr32
ﺇﻥ ﺍﳌﺘﺤﻮﻻﺕ ﺍﻟﺜﻼﺛﺔ ﺍﻷﻭﱃ ﳐﺼﺼﺔ ﻟﻠﻤﻨﺎﺩﺍﺓ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ﻟﻠﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ) ﺃﻱ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻭ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋـﻲ
ﻳﻘﻌﺎﻥ ﰲ ﻧﻔﺲ ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ( ﺣﻴﺚ ﺃﻥ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﻳﺴﺒﺐ ﺣﻔﻆ ﳏﺘﻮﻳﺎﺕ IPﰲ ﺍﳌﻜﺪﺱ ﻷﻧﻪ ﺳﻮﻑ ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﻗﻴﻤﺔ
IPﺁﻟﻴﹰﺎ ﻟﺘﺘﻼﺋﻢ ﻣﻊ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ .ﻭ ﻋﻨﺪﺋﺬ ﻳﻨﻘﺺ ﻣﺆﺷﺮ ﺍﳌﻜﺪﺱ ﲟﻘﺪﺍﺭ ، 2ﺇﻥ ﺍﻟﻘﻴﻤﺔ ﺍﶈﻔﻮﻇﺔ ﰲ IPﺿﻤﻦ ﺍﳌﻜـﺪﺱ ﻫـﻲ
ﻋﻨﻮﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺗﻠﻲ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ.
ﺑﻌﺪ ﻭﺿﻊ ﻗﻴﻤﺔ IPﰲ ﺍﳌﻜﺪﺱ ) ﺃﻱ ﺣﻔﻆ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﺬﻱ ﺳﻨﻌﻮﺩ ﺇﻟﻴﻪ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ( ﻳﺘﻢ ﺷﺤﻦ IPﺑﻌﻨﻮﺍﻥ ﻭ ﺑﻘﻴﻤﺔ
ﺟﺪﻳﺪﺓ ﺫﺍﺕ 16ﺑﺖ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﺗﺸﲑ ﺇﱃ ﻋﻨﻮﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﱃ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺍﳌﺨﺰﻧﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ،ﻭ ﳝﻜﻦ ﺫﻛﺮ
ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ ﻛﺄﻣﺜﻠﺔ ﻋﻠﻰ ﻣﺘﺤﻮﺍﺕ ﺍﳉﺪﻭﻝ ﺍﻟﺴﺎﺑﻖ ﻭ ﻋﻠﻰ ﺍﻟﺘﺮﺗﻴﺐ:
CALL near_proc
]CALL [SI
CALL BX
ﺃﻣﺎ ﺍﻟﻨﻮﻉ ﺍﻵﺧﺮ ﻟﺘﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ) ﺍﳌﻨﺎﺩﺍﺓ ﺧﺎﺭﺝ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ( ﻓﻬﻮ ﻳﺴﻤﺢ ﻟﻠﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺑﺄﻥ ﻳﻜﻤﻦ ﰲ ﻣﻘﻄﻊ ﺷﻴﻔﺮﺓ ﺁﺧﺮ ،ﻭ
ﰲ ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﺗﺴﺘﺨﺪﻡ ﺍﳌﺘﺤﻮﻻﺕ ﺍﻟﺘﺎﻟﻴﺔ Memptr32 ، Far_proﻛﻤﺎ ﻫﻮ ﻭﺍﺿﺢ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺴﺎﺑﻖ .ﲢﺪﺩ ﻫﺬﻩ ﺍﳌﺘﺤـﻮﻻﺕ
ﻼ ﻣﻦ ﺍﻟﻌﻨﻮﺍﻥ ﺍﳉﺪﻳﺪ ﻟـ IPﻭ ﻋﻨﻮﺍﻥ ﺍﳌﻘﻄﻊ ﺍﳉﺪﻳﺪ ﻟـ . CSﰲ ﻛﻠﺘﺎ ﺍﳊﺎﻟﺘﲔ ﻓﺈﻥ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﻳﺴﺒﺐ ﺣﻔﻆ ﳏﺘﻮﻳﺎﺕ ﻛﹰ
ﺍﳌﺴﺠﻼﺕ CSﰒ IPﰲ ﺍﳌﻜﺪﺱ ﻭ ﻣﻦ ﰒ ﲢﻤﻴﻞ ﺍﻟﻘﻴﻢ ﺍﳉﺪﻳﺪﺓ ﺍﶈﺪﺩﺓ ﺑﺎﳌﺘﺤﻮﻝ operandﰲ IPﻭ . CSﺇﻥ ﺍﻟﻘﻴﻢ ﺍﳌﺨﺘﺰﻧﺔ ﻟـ
CSﻭ IPﰲ ﺍﳌﻜﺪﺱ ﺗﺴﻤﺢ ﺑﺎﻟﻌﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻣﻦ ﻣﻘﻄﻊ ﺷﻴﻔﺮﺓ ﺁﺧﺮ .ﺇﻥ ﺍﳌﺘﺤﻮﻝ Far_procﳝﺜﻞ ﻣﺘﺤﻮ ﹰﻻ ﻓﻮﺭﻳـﹰﺎ
ﺑـ 32ﺑﺖ ﻭ ﺍﻟﺬﻱ ﻳﻜﻮﻥ ﳐﺰﻧﹰﺎ ﰲ ﺍﻟﺒﺎﻳﺘﺎﺕ ﺍﻷﺭﺑﻌﺔ ﺍﻟﱵ ﺗﻠﻲ ﺭﻣﺰ ﺍﻟﺘﻌﻠﻴﻤﺔ ) ( opcodeﻟﺘﻌﻠﻴﻤﺔ ﺍﳌﻨﺎﺩﺍﺓ ﰲ ﺫﺍﻛﺮﺓ ﺍﻟﱪﻧﺎﻣﺞ.
ﻣﺜﺎﻝ :
CALL 01234321ﺣﻴﺚ ﺃﻥ ﻫﺎﺗﺎﻥ ﺍﻟﻜﻠﻤﺘﺎﻥ ﻳﺘﻢ ﲢﻤﻴﻠﻬﻤﺎ ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﺫﺍﻛﺮﺓ ﲣﺰﻳﻦ ﺍﻟﱪﻧﺎﻣﺞ ﰲ IPﻭ CSﺣﻴﺚ CSﻫـﻮ
ﻣﻘﻄﻊ ﺍﻟﺸﻴﻔﺮﺓ ﻟﻠﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ .ﺇﻥ ﻋﻨﻮﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﱃ ﰲ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻳﻜﻮﻥ ﳏﺪﺩﹰﺍ ﺑﺎﻟﻜﻠﻤﺔ ﺍﻷﻭﱃ ﺑﻌﺪ ﺗﻌﻠﻴﻤﺔ CALLﺃﻱ
ﳜﺰﻥ ﺿﻤﻦ . IPﺃﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﳌﺘﺤﻮﻝ ﺍﳌﺆﺷﺮ ﻣﻦ ﻧﻮﻉ ﺫﺍﻛﺮﻱ ﺑـ 32ﺑﺖ ﻓﺈﻥ ﺍﳌﺆﺷﺮ ﻟﻠﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻳﻜﻮﻥ ﳐﺰﻧﹰﺎ ﻛﺄﺭﺑﻌﺔ ﺑﺎﻳﺘﺎﺕ
ﰲ ﺫﺍﻛﺮﺓ ﺍﳌﻌﻄﻴﺎﺕ ،ﻭ ﺍﳊﺠﺮﺓ ﺍﻷﻭﱃ ﻟﻠﻤﺆﺷﺮ ﳝﻜﻦ ﲢﺪﻳﺪﻫﺎ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﺑﻮﺍﺳﻄﺔ ﺃﺣﺪ ﺍﳌﺴﺠﻼﺕ ) ﺍﳌﺜﺎﻝ ﻫﻨﺎ ﻫﻮ ﻧﻔﺲ ﻣﺜـﺎﻝ
ﺍﻟﻘﻔﺰ ] JMP farseg [DIﺍﻟﺴﺎﺑﻖ (.
ﺇﻥ ﻛﻞ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﳚﺐ ﺃﻥ ﻳﻨﺘﻬﻲ ﺑﺘﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﱵ ﺗﻌﻴﺪ ﺍﻟﺘﺤﻜﻢ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻭ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻲ ﺗﻌﻠﻴﻤـﺔ ﺍﻟﻌـﻮﺩﺓ
RETﻭ ﻫﻲ ﻣﺸﺮﻭﺣﺔ ﺑﺎﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
RET ﺍﻟﻌﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﹸﺴﺘﺪﻋﻲ RET/RET operand ﻻ ﻳﻮﺟﺪ
- 43 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺍﻟﻌﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﺴﺘﺪﻋﻲ ﻋﻦ ﻃﺮﻳﻖ ﺇﻋﺎﺩﺓ ﲣﺰﻳﻦ ﻗﻴﻢ IPﻓﻘﻂ ﺃﻭ IPﻭ CSﻣﻌﹰﺎ )ﺣﺴﺐ ﻧـﻮﻉ ﺗﻌﻠﻴﻤـﺔ
ﺍﳌﻨﺎﺩﺍﺓ ﺃﻱ ﺿﻤﻦ ﺍﳌﻘﻄﻊ ﺍﳉﺰﺋﻲ ﺃﻭ ﺧﺎﺭﺟﻪ( ﻣﻦ ﺃﺟﻞ ﺍﳌﺘﺤﻮﻝ . Far_proﻭ ﺇﺫﺍ ﻛﺎﻥ ﺍﳌﺘﺤﻮﻝ ) (operandﻣﻮﺟﻮﺩﹰﺍ ﰲ ﺗﻌﻠﻴﻤـﺔ
ﺍﻟﻌﻮﺩﺓ RETﻓﻴﺠﺐ ﺇﺿﺎﻓﺘﻪ ﺇﱃ ﳏﺘﻮﻳﺎﺕ . SPﻫﺬﺍ ﻭ ﺇﻥ ﺍﳌﺘﺤﻮﻝ ﺇﺫﺍ ﻭﺟﺪ ﰲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﻌﻮﺩﺓ ﻓﻬﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺘﺤﻮﻝ ﺇﺯﺍﺣﺔ ﺑـ
16ﺑﺖ.
ﺗﺎﺳﻌﹰﺎ -ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺪﻓﻊ ﻭ ﺍﻟﺴﺤﺐ
ﺇﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﳌﺴﺘﺨﺪﻣﺔ ﳊﻔﻆ ﺍﻟﺒﺎﺭﺍﻣﺘﺮﺍﺕ ﰲ ﺍﳌﻜﺪﺱ ﻫﻲ ﺗﻌﻠﻴﻤﺔ ﺍﻟﺪﻓﻊ PUSHﻭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻻﺳﺘﺮﺟﺎﻋﻬﺎ ﻫﻲ ﺗﻌﻠﻴﻤـﺔ
. POPﺑﻌﺪ ﺳﻴﺎﻕ ﺍﻟﺘﺤﻮﻳﻞ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﳒﺪ ﺃﻧﻪ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﻋﺎﺩﺓ ﺣﻔﻆ ﳏﺘﻮﻳﺎﺕ ﺍﳌـﺴﺠﻼﺕ ﺍﻟﺮﺋﻴـﺴﻴﺔ ﺃﻭ ﺑﻌـﺾ
ﺑﺎﺭﺍﻣﺘﺮﺍﺕ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻫﺬﻩ ﺍﻟﻘﻴﻢ ﻳﺘﻢ ﺣﻔﻈﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺩﻓﻌﻬﺎ ﺇﱃ ﺍﳌﻜﺪﺱ .ﻭ ﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻳﺘﻢ ﺣﻔﻆ ﺍﶈﺘﻮﻳـﺎﺕ ﺳـﻠﻴﻤﺔ ﰲ
ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ ﻟﻠﺬﺍﻛﺮﺓ ﺃﺛﻨﺎﺀ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ،ﻭ ﻗﺒﻞ ﺍﻟﻌﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻓﺈﻥ ﺍﳌﺴﺠﻼﺕ ﺍﶈﻔﻮﻇـﺔ ﻭ ﺑـﺎﺭﺍﻣﺘﺮﺍﺕ
ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺋﻴﺴﻲ ﻳﻌﺎﺩ ﲣﺰﻳﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺳﺤﺐ ﺍﻟﻘﻴﻢ ﺍﶈﻔﻮﻇﺔ ﻣﻦ ﺍﳌﻜﺪﺱ .ﻟﺬﻟﻚ ﻓﺈﻥ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ﻟﻠﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋـﻲ ﺗﻜـﻮﻥ
ﻛﺎﻟﺘﺎﱄ:
PUSH xx
ﳊﻔﻆ ﺍﳌﺴﺠﻼﺕ ﻭ ﺍﻟﺒﺎﺭﺍﻣﺘﺮﺍﺕ ﰲ ﺍﳌﻜﺪﺱ PUSH yy
PUSH zz
-----------
ﺟﺴﻢ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ -----------
-----------
POP zz
ﻻﺳﺘﺮﺟﺎﻉ ﺍﳌﺴﺠﻼﺕ ﻭ ﺍﻟﺒﺎﺭﺍﻣﺘﺮﺍﺕ ﻣﻦ ﺍﳌﻜﺪﺱ POP yy ﻧﻼﺣﻆ ﺃﻧﻪ ﻳﺘﻢ ﺍﻻﺳﺘﺮﺟﺎﻉ ﻫﻨﺎ ﺑﺸﻜﻞ
POP xx ﻋﻜﺴﻲ ﻭ ﺫﻟﻚ ﻷﻥ ﻣﺒﺪﺃ ﻋﻤﻞ ﺍﳌﻜﺪﺱ
ﻟﻠﻌﻮﺩﺓ ﺇﱃ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﺴﺘﺪﻋﻲ ﻫﻮ RET LIFO
ﻣﻼﺣﻈﺔ :ﻳﺘﻌﺎﻣﻞ ﺍﳌﻜﺪﺱ ﻣﻊ ﻛﻠﻤﺎﺕ ﻭ ﻟﻴﺲ ﻣﻊ ﺑﺎﻳﺘﺎﺕ.
ﺗﻌﻠﻴﻤﺎﺕ PUSH, POP
ﻭ ﻫﻲ ﻣﺸﺮﻭﺣﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
PUSH ﺩﻓﻊ ﻛﻠﻤﺔ ﺇﱃ ﺍﳌﻜﺪﺱ PUSH S ))S → ((SP ﻻ ﻳﻮﺟﺪ
POP ﺳﺤﺐ ﻛﻠﻤﺔ ﻣﻦ ﺍﳌﻜﺪﺱ POP D ((SP)) → D ﻻ ﻳﻮﺟﺪ
- 44 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺃﻭﺗﻮﻣﺎﺗﻴﻜﻲ ﻳﺪﻓﻊ ﲟﺴﺠﻞ ﺍﻷﻋﻼﻡ ،ﺍﻟﻘﻴﻤﺔ ﺍﳊﺎﻟﻴﺔ ﰲ ، CSﻭ ﺍﻟﻘﻴﻤﺔ ﺍﳊﺎﻟﻴﺔ ﰲ IPﺇﱃ ﺍﳌﻜﺪﺱ .ﳝﻜﻦ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﻣﻘﻄﻊ ﻣﻜﺪﺱ
ﺟﺪﻳﺪ ﺑﺒﺴﺎﻃﺔ ﺑﻌﻨﻮﻧﺔ SSﺑﺮﳎﻴﹰﺎ ﻣﻦ ﺟﺪﻳﺪ .ﻭ ﺇﻥ ﻣﺆﺷﺮ ﺍﳌﻜﺪﺱ SPﳛﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻧﺴﺒﺔ ﻟﻠﻘﻴﻤﺔ ﰲ . SSﻭ ﺍﻟﻌﻨﻮﺍﻥ
ﺍﳌﺸﺘﻖ ﻣﻦ ﳏﺘﻮﻳﺎﺕ SSﻭ SPﻫﻮ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﳊﺠﺮﺓ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻷﺧﲑﺓ ﰲ ﺍﳌﻜﺪﺱ )ﻗﻤﺔ ﺍﳌﻜﺪﺱ( ﺍﻟﱵ ﱠﰎ ﺩﻓـﻊ ﺍﳌﻌﻄﻴـﺎﺕ
ﺇﻟﻴﻬﺎ .ﺇﻥ ﺍﻟﻘﻴﻤﺔ ﰲ ﻣﺆﺷﺮ ﺍﳌﻜﺪﺱ ﺗﺒﺪﺃ ﺑـ FFFFhﻋﻨﺪ ﺑﺪﺀ ﺗﺸﻐﻴﻞ ﺍﳌﻌﺎﰿ .ﻭ ﺇﻥ ﲨﻊ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﻣﻊ ﺍﻟﻘﻴﻤﺔ ﺍﳊﺎﻟﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ
SSﻳﻌﻄﻲ ﺍﳊﺠﺮﺓ ﺫﺍﺕ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻌﻠﻮﻱ ﰲ ﺍﳌﻜﺪﺱ )ﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ( .ﲟﺎ ﺃﻥ ﺍﳌﻌﻄﻴﺎﺕ ﺍﳌﻨﻘﻮﻟﺔ ﻣﻦ ﻭ ﺇﱃ ﺍﳌﻜﺪﺱ ﻋﺎﺩﺓ ﻫﻲ ﻛﻠﻤﺎﺕ
ﻓﺈﻧﻨﺎ ﻧﺘﺼﻮﺭ ﺍﳌﻜﺪﺱ ﻋﻠﻰ ﺷﻜﻞ ﺣﺠﺮﺍﺕ ﺫﺍﺕ 2ﺑﺎﻳﺖ ،ﻛﻤﺎ ﺃﻧﻪ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺃﻥ ﺗﻜﻮﻥ ﲨﻴﻊ ﺣﺠﺮﺍﺕ ﺍﳌﻜـﺪﺱ ﰲ ﺣـﺪﻭﺩ
ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺰﻭﺟﻴﺔ ﻭ ﺫﻟﻚ ﻹﻧﻘﺎﺹ ﻋﺪﺩ ﺩﻭﺭﺍﺕ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﻄﻠﻮﺑﺔ ﻟﺪﻓﻊ ﺃﻭ ﺳﺤﺐ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺍﳌﻜﺪﺱ .ﻳﻘـﻮﻡ ﺍﳌﻌـﺎﰿ ﺑـﺪﻓﻊ
ﺍﳌﻌﻄﻴﺎﺕ ﻭ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺇﱃ ﺍﳌﻜﺪﺱ ﻛﻠﻤﺔ ﰲ ﻛﻞ ﻣﺮﺓ ،ﻭ ﰲ ﻛﻞ ﻣﺮﺓ ﻳﺘﻢ ﺩﻓﻊ ﻗﻴﻤﺔ ﻣﺴﺠﻞ ﻣﺎ ﺇﱃ ﻗﻤﺔ ﺍﳌﻜﺪﺱ ﻓﺈﻥ ﺍﻟﻘﻴﻤﺔ ﰲ ﻣﺆﺷﺮ
ﺍﳌﻜﺪﺱ ﺃﻭ ﹰﻻ ﺗﻨﻘﺺ ﲟﻘﺪﺍﺭ 2ﻭ ﻣﻦ ﰒ ﺗﻜﺘﺐ ﳏﺘﻮﻳﺎﺕ ﺫﻟﻚ ﺍﳌﺴﺠﻞ ﰲ ﺫﺍﻛﺮﺓ ﺍﳌﻜﺪﺱ .ﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻓﺈﻥ ﺍﳌﻜﺪﺱ ﻳﻨﻤـﻮ ﳓـﻮ
ﺍﻷﺳﻔﻞ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ ﺍﻟﱵ ﺗﻄﺎﺑﻖ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﺍﳌﺸﺘﻖ ﻣﻦ SSﻭ ﺍﻟﻘﻴﻤﺔ FFFFhﺇﱃ ﺎﻳـﺔ )ﻗﻤـﺔ(
ﺍﳌﻜﺪﺱ ﻭ ﺍﻟﱵ ﺗﻄﺎﺑﻖ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﺍﳌﺸﺘﻖ ﻣﺖ SSﻭ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ 0000hﻭ ﻋﻨﺪﻣﺎ ﺗﺴﺤﺐ ﺍﻟﻘﻴﻤﺔ ﻣﻦ ﻗﻤﺔ ﺍﳌﻜﺪﺱ ﻓﺈﻥ
ﺍﻟﻌﻜﺲ ﳍﺬﺍ ﺍﻟﺘﺴﻠﺴﻞ ﳛﺪﺙ .ﺇﻥ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﺍﳌﻌﺮﻑ ﺑﻮﺍﺳﻄﺔ SSﻭ SPﺩﺍﺋﻤﹰﺎ ﻳﺸﲑ ﺇﱃ ﺣﺠﺮﺓ ﺍﻟﻘﻴﻤﺔ ﺍﻷﺧﲑﺓ ﺍﳌﺪﻓﻮﻋﺔ ﺇﱃ
ﺍﳌﻜﺪﺱ ﺣﻴﺚ ﺃﻥ ﳏﺘﻮﻳﺎﺎ ﺗﺴﺤﺐ ﺃﻭ ﹰﻻ ﻣﻦ ﺍﳌﻜﺪﺱ ﺇﱃ ﺍﳌﺴﺠﻞ ﺍﳌﻌﲏ ﺿﻤﻦ ﺍﳌﻌﺎﰿ ﰒ ﻳﺰﺩﺍﺩ SPﲟﻘﺪﺍﺭ . 2ﺇﻥ ﻗﻤـﺔ ﺍﳌﻜـﺪﺱ
ﺍﳉﺪﻳﺪﺓ ﺗﻄﺎﺑﻖ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﺍﳌﺪﻓﻮﻋﺔ ﺇﱃ ﺍﳌﻜﺪﺱ.
ﻣﺜﺎﻝ :ﺗﺒﲔ ﺍﻷﺷﻜﺎﻝ ﺍﻟﺜﻼﺛﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺣﺎﻻﺕ ﺍﳌﻜﺪﺱ:
Tosﻗﻤﺔ ﺍﳌﻜﺪﺱ
Bosﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ
ﻫﺬﺍ ﻫﻮ ﻋﻨﻮﺍﻥ ﺍﳊﺠﺮﺓ ﺍﻟﻴﻤﲎ ﺍﻟﱵ ﲢﻮﻱ 12hﻭ ﻟﻴﺲ ﻋﻨﻮﺍﻥ ﺍﳊﺠﺮﺓ ﺍﻟﻴﺴﺮﻯ AX 12 34
- 45 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻧﻼﺣﻆ ﺃﻥ ﻣﺴﺠﻞ ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ ﳛﻮﻱ ﻋﻠﻰ 0105hﻭ ﻛﻤﺎ ﺃﺷﺮﻧﺎ ﺳﺎﺑﻘﹰﺎ ﻓﺈﻥ ﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ ﺗﻜﻤﻦ ﰲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ ﺍﳌﺸﺘﻖ
ﻣﻦ SSﻣﻊ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ FFFFhﻭ ﻫﺬﺍ ﻳﻌﻄﻲ ﻋﻨﻮﺍﻥ ﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ : BOS
A (bos) = 0105h + FFFF = 1104Fh
ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ﻓﺈﻥ ﻣﺆﺷﺮ ﺍﳌﻜﺪﺱ ﺍﻟﺬﻱ ﳝﺜﻞ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻌﺎﻝ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﳌﻜﺪﺱ ﺇﱃ ﻗﻤﺘﻪ ﻳﺴﺎﻭﻱ 0008hﻟﺬﻟﻚ ﻓﺎﻟﻘﻤﺔ ﺍﳊﺎﻟﻴﺔ
ﻟﻠﻤﻜﺪﺱ ﻫﻲ ﰲ ﺍﻟﻌﻨﻮﺍﻥ ﺍﻟﻔﻴﺰﻳﺎﺋﻲ:
A (tos) = 01050 + 0008 = 01058h
ﺇﻥ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺫﺍﺕ ﺍﻟﻘﻴﻢ ﺍﻷﻋﻠﻰ ﻣﻦ ﻗﻤﺔ ﺍﳌﻜﺪﺱ 01058hﲢﺘﻮﻱ ﻋﻠﻰ ﻣﻌﻄﻴﺎﺕ ﺣﻘﻴﻘﻴﺔ ﻟﻠﻤﻜﺪﺱ ﺑﻴﻨﻤﺎ ﺍﳌﻌﻄﻴﺎﺕ ﺫﺍﺕ ﺍﻟﻌﻨـﺎﻭﻳﻦ
ﺍﻷﺩﱏ ﻣﻦ ﻗﻤﺔ ﺍﳌﻜﺪﺱ ﻟﻴﺴﺖ ﻣﻌﻄﻴﺎﺕ ﺣﻘﻴﻘﻴﺔ ﻟﻠﻤﻜﺪﺱ ) ﺑﺎﻟﺘﻌﺮﻳﻒ :ﺍﳌﻜﺪﺱ ﻫﻮ ﺍﻟﻘﻴﻢ ﺍﶈﺼﻮﺭﺓ ﺑﲔ ﺍﻟﻘﺎﻋـﺪﺓ ﻭ ﺍﻟﻘﻤـﺔ ( .
ﻧﻼﺣﻆ ﺃﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻷﺧﲑﺓ ﺍﳌﺪﻓﻮﻋﺔ ﺇﱃ ﺍﳌﻜﺪﺱ ﰲ ﺍﻟﺸﻜﻞ ﺍﻷﻭﻝ ﻣﻦ ﺍﻟﺸﻜﻞ ﺍﻟﺴﺎﺑﻖ ﻫﻲ . BBAAhﻭ ﻳﺒﲔ ﺍﻟﺸﻜﻞ ﺍﻟﺜﺎﱐ ﻣـﺎ
ﺍﻟﺬﻱ ﳛﺪﺙ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺔ . PUSH AXﻫﻨﺎ ﳒﺪ ﺃﻥ ﳏﺘﻮﻳﺎﺕ AXﻫﻲ 1234hﻭ ﺃﻥ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤـﺔ PUSHﻳـﺴﺒﺐ
ﺇﻧﻘﺎﺹ ﳏﺘﻮﻳﺎﺕ SPﲟﻘﺪﺍﺭ 2ﻭ ﻟﻜﻨﻬﺎ ﻻ ﺗﺆﺛﺮ ﻋﻠﻰ ﳏﺘﻮﻳﺎﺕ ﻣﺴﺠﻞ ﻣﻘﻄﻊ ﺍﳌﻜﺪﺱ SSﻟﺬﻟﻚ ﻓﺈﻥ ﺍﳊﺠﺮﺓ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟـﱵ ﻳـﺘﻢ
ﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﰲ ﺍﳌﻜﺪﺱ ﺗﻘﺎﺑﻞ ﺍﻟﻌﻨﻮﺍﻥ . 01056hﺇﱃ ﻫﺬﻩ ﺍﳊﺠﺮﺓ ﻳﺘﻢ ﺩﻓﻊ ﺍﻟﻘﻴﻤﺔ ﺍﳌﺨﺰﻧﺔ ﰲ AXﺇﱃ ﺍﳌﻜﺪﺱ .ﻧﻼﺣـﻆ ﺃﻥ
ﺍﻟﺒﺎﻳﺖ ﺍﻟﻌﻠﻮﻱ ﻣﻦ ﺍﳌﺴﺠﻞ ) AXﻭ ﺍﻟﺬﻱ ﻗﻴﻤﺘﻪ ﺗﺴﺎﻭﻱ ( 12hﻳﻜﻤﻦ ﺍﻵﻥ ﰲ ﺍﻟﺒﺎﻳﺖ ﺍﻟﺴﻔﻠﻲ ﻟﻠﻜﻠﻤﺔ ﰲ ﺍﳌﻜﺪﺱ ﻭ ﻛـﺬﻟﻚ
ﻓﺎﻟﺒﺎﻳﺖ ﺍﻟﺴﻔﻠﻲ ﻣﻦ ﺍﳌﺴﺠﻞ ) AXﻭ ﺍﻟﺬﻱ ﻗﻴﻤﺘﻪ ﺗﺴﺎﻭﻱ ( 34hﻳﻜﻤﻦ ﺍﻵﻥ ﰲ ﺍﻟﺒﺎﻳﺖ ﺍﻟﻌﻠﻮﻱ ﻟﻠﻜﻠﻤﺔ ﰲ ﺍﳌﻜﺪﺱ.
ﻳﺒﲔ ﺍﻟﺸﻜﻞ ﺍﻟﺜﺎﻟﺚ ﻣﺎ ﺍﻟﺬﻱ ﳛﺪﺙ ﻋﻨﺪﻣﺎ ﺗﺴﺤﺐ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺍﳌﻜﺪﺱ ﺇﱃ ﺍﳌﺴﺠﻞ ﺍﻟﺬﻱ ﺩﻓﻌﺖ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻨﻪ ﺇﱃ ﺍﳌﻜـﺪﺱ ﻭ
ﺫﻟﻚ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ POP AXﰒ POP BXﻋﻠﻰ ﺍﻟﺘﺮﺗﻴﺐ .ﻧﻔﺲ ﺍﳌﻨﺎﻗﺸﺔ ﺑﺎﻟﻨﺴﺒﺔ ﺇﱃ ﺩﻓﻊ ﻗﻴﻤﺔ ﻓﻮﺭﻳﺔ ﺇﱃ ﺍﳌﻜﺪﺱ.
ﻋﺎﺷﺮﹰﺍ -ﺗﻌﻠﻴﻤﺎﺕ ﺍﳊﻠﻘﺎﺕ
ﻫﻨﺎﻙ ﺛﻼﺙ ﺗﻌﻠﻴﻤﺎﺕ ﻣﺼﻤﻤﺔ ﺑﺸﻜﻞ ﺧﺎﺹ ﻟﺘﺤﻘﻴﻖ ﻋﻤﻠﻴﺔ ﺍﳊﻠﻘﺔ .ﻭ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﳝﻜﻦ ﺍﺳﺘﻌﻤﺎﳍﺎ ﺑﺪ ﹰﻻ ﻣﻦ ﺗﻌﻠﻴﻤـﺎﺕ ﺍﻟﻘﻔـﺰ
ﺍﻟﺸﺮﻃﻲ .ﻭ ﻫﻲ ﻣﺒﻴﻨﺔ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ:
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ ﺍﻟﻌﻤﻠﻴﺔ
LOOP ﺣﻠﻘﺔ LOOP short_label ﻻ ﻳﻮﺟﺪ
ﺇﻧﻘﺎﺹ CXﲟﻘﺪﺍﺭ ﻭﺍﺣﺪ ﺩﻭﻥ ﺍﻟﺘﺄﺛﲑ ﻋﻠﻰ ﺍﻷﻋﻼﻡ ﰒ ﺍﻟﻘﻔﺰ ﺇﱃ ﺍﳊﺠﺮﺓ ﺍﳌﻌﺮﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘـﺼﲑﺓ ﺇﺫﺍ
ﻛﺎﻥ CXﻻ ﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ ﻭ ﺇﻻ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﳊﻠﻘﺔ .ﻭ ﻫﻨﺎ ﻳﻜﻮﻥ IP = IP + dispﺣﻴﺚ dispﺃﺧﺬﻧﺎﻫﺎ
ﺑﻌﺪ ﲤﺪﻳﺪ ﺇﺷﺎﺭﺎ ) ﺃﻱ ﺟﻌﻠﻬﺎ ﺑـ 16ﺑﺖ (.
ﺍﻟﻜﻠﻤﺔ ﺍﳌﺨﺘﺰﻟﺔ ﺍﳌﻌﲎ ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﻋﻼﻡ ﺍﳌﺘﺄﺛﺮﺓ
LOOPE/ LOOPE/ﺣﻠﻘﺔ ﻃﺎﳌﺎ ﻳﺴﺎﻭﻱ/
ﻻﻓﺘﺔ ﻗﺼﲑﺓ ﻻ ﻳﻮﺟﺪ
LOOPZ ﺃﻭ ﻃﺎﳌﺎ ﺻﻔﺮ LOOPZ
ﺇﻧﻘﺎﺹ CXﲟﻘﺪﺍﺭ ﻭﺍﺣﺪ ﺩﻭﻥ ﺍﻟﺘﺄﺛﲑ ﻋﻠﻰ ﺍﻷﻋﻼﻡ ﰒ ﺍﻟﻘﻔﺰ ﺇﱃ ﺍﳊﺠﺮﺓ ﺍﳌﻌﺮﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘـﺼﲑﺓ ﺇﺫﺍ
ﻛﺎﻥ CXﻻ ﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ ﻭ ZFﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ ﻭ ﺇﻻ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﳊﻠﻘﺔ.
ﻭ ﻫﻨﺎ ﺟﺴﻢ ﺍﳊﻠﻘﺔ ﻓﻘﻂ ﻫﻮ ﺍﻟﺬﻱ ﻳﺆﺛﺮ ﻋﻠﻰ ﺍﻷﻋﻼﻡ.
- 46 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺇﻧﻘﺎﺹ CXﲟﻘﺪﺍﺭ ﻭﺍﺣﺪ ﰒ ﺍﻟﻘﻔﺰ ﺇﱃ ﺍﳊﺠﺮﺓ ﺍﶈﺪﺩﺓ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻼﻓﺘﺔ ﺍﻟﻘﺼﲑﺓ ﺇﺫﺍ ﻛﺎﻥ CXﻻ ﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ ﻭ
ZFﻳﺴﺎﻭﻱ ﺍﻟﺼﻔﺮ ﻭ ﺇﻻ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﳊﻠﻘﺔ.
ﻭ ﻫﻨﺎ ﺃﻳﻀﹰﺎ ﺟﺴﻢ ﺍﳊﻠﻘﺔ ﻓﻘﻂ ﻫﻮ ﺍﻟﺬﻱ ﻳﺆﺛﺮ ﻋﻠﻰ ﺍﻷﻋﻼﻡ.
ﻣﺜﺎﻝ:
ﻼ 8,9,4,5,7 :ﻭ ﺍﻟﻌﻨﺼﺮ ﺍﳌﺮﺍﺩ ﺇﳚﺎﺩﻩ ﻫﻮ . 4ﻫﻨﺎ
ﻧﺮﻳﺪ ﺍﻟﺒﺤﺚ ﻋﻦ ﻋﻨﺼﺮ ﺿﻤﻦ ﻣﺘﺠﻬﺔ ﻣﻦ ﺍﻟﻌﻨﺎﺻﺮ ) ﻣﺼﻔﻮﻓﺔ ﺃﺣﺎﺩﻳﺔ ﺍﻟﺒﻌﺪ ( ﻣﺜ ﹰ
CX = 5ﻭ ﻫﻮ ﻋﺪﺩ ﺍﻟﻌﻨﺎﺻﺮ .ﻭ ﻳﻜﻮﻥ ﺟﺴﻢ ﺍﳊﻠﻘﺔ ﻛﺎﻟﺘﺎﱄ:
MOV CX, 5
Nxt: ---------------
--------------- ﻷﻧﻪ ﻫﻨﺎ ﻳﺘﻢ ﺍﳋﺮﻭﺝ ﻣﻦ ﺍﳊﻠﻘﺔ ﺑﺎﻟﺮﻏﻢ ﻣﻦ ﺃﻥ CX =/ 0
ﺟﺴﻢ ﺍﳊﻠﻘﺔ
--------------- ﺣﺼﻞ ﺗﻄﺎﺑﻖ ﻭ ﺃﺻﺒﺤﺖ . ZF = 1
LOOPNE Nxt
ً - 11ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﻠﺴﻠﺔ
ﻧﻘﺼﺪ ﺑﻜﻠﻤﺔ ﺍﻟﺴﻠﺴﻠﺔ ﺃﻥ ﺑﺎﻳﺘﺎﺕ ﺃﻭ ﻛﻠﻤﺎﺕ ﻣﻌﻄﻴﺎﺕ ﺗﻜﻤﻦ ﰲ ﺣﺠﺮﺍﺕ ﻣﺘﻌﺎﻗﺒﺔ ﻟﻠﺬﺍﻛﺮﺓ .ﺇﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﻠﺴﻠﺔ ﺗﺴﻤﺢ ﻟﻠﻤﱪﻣﺞ
ﺑﺘﻨﻔﻴﺬ ﻋﻤﻠﻴﺎﺕ ﻣﺜﻞ ﻧﻘﻞ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﺑﻠﻮﻙ ﺫﺍﻛﺮﺓ ﺇﱃ ﺑﻠﻮﻙ ﺁﺧﺮ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ،ﻣﺴﺢ ﺃﻭ ﻛﻨﺲ SCANﺳﻠـﺴﻠﺔ ﻣـﻦ ﻋﻨﺎﺻـﺮ
ﺍﳌﻌﻄﻴﺎﺕ ﺍﳌﺨﺰﻧﺔ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭ ﺍﻟﺒﺤﺚ ﻋﻦ ﻗﻴﻤﺔ ﻣﻌﻴﻨﺔ ،ﻣﻘﺎﺭﻧﺔ ﻋﻨﺎﺻﺮ ﺳﻠﺴﻠﺘﲔ ﻟﺘﺤﺪﻳﺪ ﻓﻴﻤﺎ ﺇﺫﺍ ﻛﺎﻧﺎ ﻣﺘﻄﺎﺑﻘﺘﲔ ﺃﻭ ﳐﺘﻠﻔﺘﲔ.
ﻭ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻫﻲ:
- 47 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﺍﻟﻌﻤﻠﻴﺔ :ﻳﺘﻢ ﻃﺮﺡ ﻣﺘﺤﻮﻝ ﺍﳍﺪﻑ ﻣﻦ ﻣﺘﺤﻮﻝ ﺍﳌﺼﺪﺭ ﻭ ﻻ ﺗﺨﺰﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺇﳕﺎ ﺗﻌﺪﻝ ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ
ﻓﻘﻂ ،ﺃﻱ:
ﺃﻋﻼﻡ ﺍﳊﺎﻟﺔ → ) ( ( DS x 10h ) + SI ) – ( ( ES x 10h ) + DI
SI ± 1 or 2 → SI
DI ± 1 or 2 → DI
- 48 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
ﻣﺜﺎﻝ:
ﺑﻔﺮﺽ ﺃﻥ :
SI = 0100h DS = 0200h
DI = 0110h ES = 0400h
ﻓﺈﻥ ﻧﺘﻴﺠﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺘﲔ ﺍﻟﺘﺎﻟﻴﺘﲔ :
MOV CX,20h
REP MOVSB
ﻫﻲ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﱃ ﺗﻘﻮﻡ ﺑﺘﺤﻤﻴﻞ ﺍﳌﺴﺠﻞ CXﺑﺎﻟﻘﻴﻤﺔ 20h = 32dﺃﻣﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻓﺘﻨﻘﻞ 32ﺑﺎﻳﺖ ﻣﻦ ﺣﺠﺮﺍﺕ ﺫﺍﻛﺮﺓ
ﺍﳌﺼﺪﺭ ﺍﶈﺪﺩﺓ ﺑﻮﺍﺳﻄﺔ DSﻭ SIﺇﱃ ﺑﻠﻮﻙ ﺣﺠﺮﺍﺕ ﺫﺍﻛﺮﺓ ﺍﳍﺪﻑ ﺍﶈﺪﺩﺓ ﺑﻮﺍﺳﻄﺔ ESﻭ . DI
- 49 -
وإاد :أ ا آدي )(anas_kurdy@hotmail.com
http://www.arabteam2000.com
- 50 -