Professional Documents
Culture Documents
ﭘﻴﺸﮕﻔﺘﺎر 1....................................................................................................................................
ﭘﻴﺸﮕﻔﺘﺎر
ﺑﺎ ﻟﻄﻒ و ﻋﻨﺎﻳﺖ ﭘﺮودﮔﺎر ﻣﺘﻌﺎل ﻛﺘـﺎب زﺑـﺎن ﻣﺎﺷـﻴﻦ و ﺑﺮﻧﺎﻣـﻪ ﺳـﺎزي
ﺳﻴﺴﺘﻢ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻧﻴﺎز داﻧﺸﺠﻮﻳﺎن داﻧﺸﮕﺎه ﭘﻴﺎم ﻧﻮر در رﺷﺘﻪ ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ
ﺑﺼﻮرت ﺧﻮدآﻣﻮز و ﺑﺎ ﻣﺜﺎﻟﻬﺎي زﻳﺎد و ﺳﺎده و روان ﺗﻬﻴﻪ ﮔﺮدﻳﺪه اﺳﺖ .ﻣﻄﺎﻟﺐ
اراﺋﻪ ﺷﺪه ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﺠﺮﺑﻴﺎت ﺗﺪرﻳﺲ در درس ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ زﺑﺎن اﺳﻤﺒﻠﻲ در
ﺳﺎﻟﻴﺎن ﻣﺘﻤﺎدي در داﻧﺸﮕﺎه ﻣﻲﺑﺎﺷﺪ .اﻳﻦ ﻛﺘﺎب در ده ﻓﺼﻞ آﻣﺎده ﺷﺪه ﻛـﻪ ﻫـﺮ
ﻓﺼﻞ داراي اﻫﺪاف ﻓﺼﻞ ،ﺗﻤﺮﻳﻦ و ﻣـﺮوري ﺑـﺮ ﻣﻄﺎﻟـﺐ ﻓـﺼﻞ ﻣـﻲﺑﺎﺷـﺪ .در
اﻧﺘﻬﺎي ﻛﺘﺎب ﺳﺆاﻻت ﭼﻬﺎر ﮔﺰﻳﻨﻪاي و ﻧﻬﺎﻳﺘﺎً واژه ﻧﺎﻣﻪ ﮔﻨﺠﺎﻧﺪه ﺷﺪه اﺳﺖ.
اﻳﻦ ﻛﺘﺎب ﻗﺪرداﻧﻲ و ﺳﭙﺎﺳﮕﺰاري ﻧﻤﻮده و اﻳﻦ ﻛﺘﺎب را ﺑـﻪ ﻫﻤـﺴﺮ ﻣﻬﺮﺑـﺎﻧﻢ و
ﺩﺍﺭﻳﻮﺵ ﻧﻴﻚﻣﻬﺮ
٢
ﻓﺼﻞ اول
ﺳﻴﺴﺘﻢ اﻋﺪاد
ﻫﺪف ﻛﻠﻲ
ﻧﻤﺎﻳﺶ ﻣﻘﺎدﻳﺮ در ﺳﻴﺴﺘﻢ دودوﺋﻲ و ﻧﺤﻮه ﺗﺒﺪﻳﻞ آﻧﻬﺎ ﺑﻪ ﺳﺎﻳﺮ ﺳﻴﺴﺘﻤﻬﺎ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻮارد زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
-1ﻣﻘﺎدﻳﺮ دودوﺋﻲ ﻳﺎ ﺑﺎﻳﻨﺮي.
-2واﺣﺪﻫﺎي ﻣﺨﺘﻠﻒ اﻧﺪازهﮔﻴﺮي ﺣﺎﻓﻈﻪ.
-3ﻧﻤﺎﻳﺶ اﻋﺪاد ﻣﻨﻔﻲ.
-4ﺗﺒﺪﻳﻞ ﻣﻘﺎدﻳﺮ ﺑﺎﻳﻨﺮي ﺑﻪ ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ و ﺑﺮﻋﻜﺲ.
٣
ﻣﺜﺎل 1-1
ﺑﻪ ﻣﻨﻈﻮر ﺗﺒﺪﻳﻞ ﻣﻘﺪاري از ﺳﻴﺴﺘﻢ ﺑﺎﻳﻨﺮي ﺑﻪ ﺳﻴﺴﺘﻢ دﻫـﺪﻫﻲ ،ارﻗـﺎم ﻋـﺪد را
ﻣﻲﺑﺎﻳﺴﺘﻲ ﺑﺘﺮﺗﻴﺐ از راﺳﺖ ﺑﻪ ﭼﭗ در … 16 ،8 ،2 ،1ﺿﺮب ﻧﻤﻮده ﺑـﺎ ﻫـﻢ ﺟﻤـﻊ
ﻧﻤﺎﺋﻴﻢ .ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﻋﺪد 11010در ﺳﻴﺴﺘﻢ دودوﻳﻲ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
ﻣﺜﺎل 1-2
1 1 0 1 0
16 8 4 2 1
16*1+ 16+
8*1 8
4*0 0
2*1 2
1*0 0
26
ﻣﺜﺎل 1-4
ﻋﺪد 1101101را ﺑﻪ ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
64+
32
8
4
1
109
1 Carry
1010+
11
1101
ﻣﺜﺎل 1-5
ﻣﺠﻤﻮع دو ﻣﻘﺪار 20و 17را ﺑﺪﺳﺖ آورﻳﺪ.
اﺑﺘﺪا ﻣﻘﺎدﻳﺮ 17و 20را ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻣﻲﻧﻤﺎﺋﻴﻢ.
1 Carry
10001+
10100
100101
ﻛﻪ اﻳﻦ ﻣﻘﺪار ﻳﻌﻨﻲ 100101اﮔﺮ ﺑﻪ ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺗﺒﺪﻳﻞ ﺷﻮد ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ
32+
4
1
37
-1-3ﺑﺎﻳﺖ )(Byte
در ﺣﺎﻓﻈﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻓﻘﻂ ﻣﻘﺎدﻳﺮ 0و 1ذﺧﻴﺮه ﻣﻴﺸﻮد .ﺑـﻪ ارﻗـﺎم 0و 1ﺑﻴـﺖ
ﮔﻔﺘﻪ ﻣﻴﺸﻮد .ﺑﻴﺖ ﻣﺨﻔﻒ ﻛﻠﻤﺎت binary digitﻣﻲﺑﺎﺷﺪ .ﺑﻪ ﻫﺮ ﻫﺸﺖ ﺑﻴﺖ ﻛﻨﺎر ﻫـﻢ
در ﺣﺎﻓﻈﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺎﻳﺖ ﮔﻔﺘﻪ ﻣﻴﺸﻮد .ﺑﻴﺖﻫﺎي ﻳﻚ ﺑﺎﻳﺖ از 0ﺗـﺎ 7ﺷـﻤﺎره ﮔـﺬاري
ﺷﺪه و ﺑﻴﺖ ﺷﻤﺎره 0ﺑﻴﺖ ﻛﻢ ارزشﺗﺮﻳﻦ ﻳﺎ LSBو ﺑﻴﺖ ﺷﻤﺎره 7ﺑﻴﺖ ﺑﺎ ﺑﻴـﺸﺘﺮﻳﻦ
ارزش ﻳﺎ MSBﻣﻲﺑﺎﺷﺪ.
ﻫﺮ ﺑﺎﻳﺖ 256وﺿﻌﻴﺖ ﻣﺨﺘﻠﻔﻪ از 0و 1را اﻳﺠﺎد ﻣـﻲﻧﻤﺎﻳـﺪ .ﺑﻨـﺎﺑﺮاﻳﻦ اﻋـﺪاد
ﺻﺤﻴﺢ ﺑﻴﻦ 0ﺗﺎ 255را ﻣﻲﺗﻮان در ﻳﻚ ﺑﺎﻳﺖ ﻗﺮار داد .از ﻃﺮف دﻳﮕﺮ در ﻛﺎﻣﭙﻴﻮﺗﺮ از
256ﻛﺎرﻛﺘﺮ ﻣﺨﺘﻠﻒ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد .ﺑﺎ اﺳﺘﻔﺎده از ﺟﺪول ﻛﺪ ASCIIﻣﻲﺗـﻮان
ﺑﻪ ﻫﺮ ﻛﺎراﻛﺘﺮ ﻳﻚ ﻛﺪ ﻣﻨﺤﺼﺮ ﺑﻔﺮد ﺑﻴﻦ 0ﺗﺎ 255ﺗﺨﺼﻴﺺ داد .ﺑﻨﺎﺑﺮاﻳﻦ ﻫﺮ ﻛـﺎراﻛﺘﺮ
ﻋﻤﻼً ﻳﻚ ﺑﺎﻳﺖ اﺷﻐﺎل ﻣﻲﻧﻤﺎﻳﺪ.
-1-4ﻣﻘﺎدﻳﺮ ﻣﻨﻔﻲ
اﻋﺪاد و ﻣﻘﺎدﻳﺮ ﻣﻨﻔﻲ در ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺎ اﺳـﺘﻔﺎده از روش ﻣﻜﻤـﻞ 2ﻧﻤـﺎﻳﺶ داده
ﻣﻲﺷﻮﻧﺪ .ﺑﺮاي ﻧﻤﺎﻳﺶ ﻳﻚ ﻣﻘﺪار ﻣﻨﻔﻲ در ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺎﻳﺴﺘﻲ ﻣﺮاﺣﻞ زﻳﺮ را ﻃﻲ ﻧﻤﻮد.
٩
-1اﺑﺘﺪا ﻋﺪد را ﺑﺪون ﻋﻼﻣﺖ ﺗﺼﻮر ﻧﻤﻮده آﻧﺮا ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-2ﺳﭙﺲ آﻧﻘﺪر رﻗﻢ 0در ﺳﻤﺖ ﭼﭗ ﻧﺘﻴﺠﻪ ﻣﺮﺣﻠﻪ 1ﻗﺮار ﻣﻲدﻫﻴﻢ ﺗﺎ ﺗﻌﺪاد ارﻗـﺎم آن
ﻣﻀﺮﺑﻲ از ﻫﺸﺖ ﮔﺮدد .ﭼﻨﺎﻧﭽﻪ ﻧﺘﻴﺠﻪ ﻣﺮﺣﻠﻪ 1از ﻫﺸﺖ رﻗـﻢ ﺑﻴـﺸﺘﺮ ﺑﺎﺷـﺪ ﺑﺎﻳـﺴﺘﻲ
آﻧﻘﺪر 0در ﺳﻤﺖ ﭼﭗ ﻗﺮار دﻫﻴﻢ ﺗﺎ ﺷﺎﻧﺰده رﻗﻤﻲ ﮔﺮدد.
-3ﺳﭙﺲ ارﻗﺎم ﻧﺘﻴﺠﻪ ﻣﺮﺣﻠﻪ 2را ﻣﻜﻤﻞ ﻣﻲﻧﻤـﺎﺋﻴﻢ ﻳﻌﻨـﻲ 0ﺑـﻪ 1و 1ﺑـﻪ 0ﺗﺒـﺪﻳﻞ
ﻣﻲﻛﻨﻴﻢ.
-4ﻧﺘﻴﺠﻪ ﺑﺪﺳﺖ آﻣﺪه را در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺑﺎ 1ﺟﻤﻊ ﻣﻲﻧﻤﺎﺋﻴﻢ.
ﻣﺜﺎل 1-7
ﻋﺪد –26را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .اﺑﺘـﺪا ﻋـﺪد 26را ﺑـﻪ ﺳﻴـﺴﺘﻢ دودوﻳـﻲ ﺗﺒـﺪﻳﻞ
ﻣﻲﻧﻤﺎﺋﻴﻢ.
26 2 13 0
13 2 6 1
6 2 3 0
3 2 1 1
1 2 0 1
11100101+
1
11100110
١٠
ﻋﺪد 11100110در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻧﻤﺎﻳﺶ –26ﻣﻲ ﺑﺎﺷـﺪ ﻛـﻪ ﻳـﻚ ﺑﺎﻳـﺖ
اﺷﻐﺎل ﻣﻲﻧﻤﺎﻳﺪ .ﻧﻜﺘﻪ ﻣﻬﻤﻲ ﻛﻪ ﺑﺎﻳﺴﺘﻲ در ﻧﻈﺮ داﺷﺖ اﻳـﻦ اﺳـﺖ ﻛـﻪ MSBاﻋـﺪاد
ﻣﻨﻔﻲ در روش ﻣﻜﻤﻞ 2ﻫﻤﻴﺸﻪ 1ﻣﻲﺑﺎﺷﺪ.
ﻣﺜﺎل 1-8
ﻋﺪد –35را ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
1101100 +
1
11011101
ﻣﺜﺎل 1-9
ﻋﻤﻞ زﻳﺮ را ﺑﺎ اﺳﺘﻔﺎده از روش ﻣﻜﻤﻞ 2اﻧﺠﺎم دﻫﻴﺪ.
27-
20
ﻣﻘﺪار 27ﻣﻌﺎدل 11011در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻣﻲﺑﺎﺷﺪ .ﺣﺎل اﺑﺘﺪا ﻣﻘـﺪار 20را
ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﻮد.
11101011+
1
11101100
ﻧﺘﻴﺠﻪ ﻣﻲﺷﻮد ﻛﻪ ﻣﻘﺪار –20ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ 11101100در ﺳﻴﺴﺘﻢ دودوﻳـﻲ.
ﺣﺎل دو ﻣﻘﺪار –20و 27را در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻣﻲﻧﻤﺎﺋﻴﻢ.
11101100 +
11011
100000111
ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ آﻧﻜﻪ ﻧﺘﻴﺠﺔ ﺟﻤﻊ دو ﺑﺎﻳﺖ ﺑﺼﻮرت ﻳـﻚ ﺑﺎﻳـﺖ ﻣـﻲﺑﺎﺷـﺪ ﺑﻴـﺖ 1
ﺳﻤﺖ ﭼﭗ ﺑﺎﻳﺴﺘﻲ ﺣﺬف ﮔﺮدد ،ﻧﺘﻴﺠﻪ ﻣﻲﺷﻮد 111ﻛﻪ ﺑﺮاﺑﺮ ﺑﺎ 7ﻣﻲﺑﺎﺷﺪ.
-1-5ﮔﺮوهﺑﻨﺪي ﺑﻴﺖﻫﺎ
ﺑﻪ ﻫﺮ ﻫﺸﺖ ﺑﻴﺖ ﻛﻨﺎر ﻫﻢ ﺑﺎﻳﺖ ﮔﻔﺘـﻪ ﻣـﻲﺷـﻮد .دو ﺑﺎﻳـﺖ ﻛﻨـﺎر ﻫـﻢ ﻳﻌﻨـﻲ
ﺷﺎﻧﺰده ﺑﻴﺖ ﻣﺘﻮاﻟﻲ را wordﻣﻲﻧﺎﻣﻨﺪ)اﻟﺒﺘﻪ در ﺑﻌﻀﻲ از ﻛﺎﻣﭙﻴﻮﺗﺮ ﻫـﺎ ﻫـﺮ ﻛﻠﻤـﻪ ﻣـﻲ
ﺗﻮاﻧــــﺪ ﺷــــﺎﻣﻞ 4ﺑﺎﻳــــﺖ ﺑﺎﺷــــﺪ( .ﺑﻴــــﺖﻫــــﺎي ﻳــــﻚ wordاز 0ﺗــــﺎ 15
ﺷــﻤﺎرهﮔــﺬاري ﻣــﻲ ﮔــﺮدد .در ﻳــﻚ wordﺑﺎﻳــﺖ ﺳــﻤﺖ راﺳــﺖ را ﺑﺎﻳــﺖ
ﻣﺮﺗﺒــﻪ ﭘــﺎﺋﻴﻦ ) (Low order byteو ﺑﺎﻳــﺖ ﺳــﻤﺖ ﭼــﭗ را ﺑﺎﻳــﺖ ﻣﺮﺗﺒــﻪ ﺑــﺎﻻ
)(High order byteﮔﻔﺘﻪ ﻣﻲﺷﻮد.
ﺟﺪول 1-1
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ ﻋﻤﻠﻴﺎت ﺑﺎﻳﻨﺮي روي ﺑﻴﺖﻫﺎ اﻧﺠﺎم ﻣـﻲﺷـﻮد .ﺟـﺪول
ﻋﻤﻠﮕﺮ ﺟﻤﻊ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
ﺟﺪول 1-2
ﺑﻴﺖ 1 ﺑﻴﺖ 2 ﻧﺘﻴﺠﻪ دوﺑﺮﻳﻚ )(carry
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
ﺟﺪول 1-3
ﺑﻴﺖ 1 ﺑﻴﺖ 2 ﻧﺘﻴﺠﻪ ﻳﻚ ﻗﺮﺿﻲ )(borrow
0 0 0 0
0 1 0 1
1 0 1 0
1 1 0 0
A 10
B 11
C 12
D 13
E 14
F 15
ﺑﺮاي ﺗﺒﺪﻳﻞ ﻣﻘﺪاري از ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺑﻪ ﺳﻴـﺴﺘﻢ ﻣﺒﻨـﺎي ﺷـﺎﻧﺰده آن ﻋـﺪد را
ﺑﻄﻮر ﻣﺘﻮاﻟﻲ ﺑﺮ 16ﺗﻘﺴﻴﻢ ﻣﻲﻧﻤﺎﺋﻴﻢ .ﺑﻌﻨﻮان ﻣﺜﺎل ﻋﺪد 174را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
ﻣﺜﺎل 1-10
ﻣﻘﺪار ﺗﻘﺴﻴﻢ ﺑﺮ ﻧﺘﻴﺠﻪ ﺑﺎﻗﻴﻤﺎﻧﺪه
174 16 10 14 E
10 16 0 10 A
ﻣﺜﺎل 1-11
ﻋﺪد 3740را از ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷﺎﻧﺰده ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
١٥
ﻣﺜﺎل 1-12
ﻣﻘﺪار 27845را ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷﺎﻧﺰده ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
ﻣﻘﺪار ﺗﻘﺴﻴﻢ ﺑﺮ ﻧﺘﻴﺠﻪ ﺑﺎﻗﻴﻤﺎﻧﺪه
27845 16 1740 5
1740 16 108 12 C
108 16 6 11 B
6 16 0 6
ﻣﺜﺎل 1-13
ﻋﺪد 2AF5را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
2 A F 5
163 162 16 1
ﻣﺜﺎل 1-14
ﻣﻘــﺪار 4F2در ﺳﻴــﺴﺘﻢ ﻣﺒﻨــﺎي ﺷــﺎﻧﺰده ﭼــﻪ ﻣﻘــﺪار در ﺳﻴــﺴﺘﻢ دﻫــﺪﻫﻲ
ﻣــﻲﺑﺎﺷــﺪ؟ ﺑــﺮاي اﻳﻨﻜــﺎر اﺑﺘــﺪا رﻗــﻢ 2را در ،1رﻗــﻢ Fرا در 16و رﻗــﻢ 4را
در 162ﺿﺮب ﻣﻲﻧﻤﺎﺋﻴﻢ .ﺳﭙﺲ ﻣﻘﺎدﻳﺮ ﺑﺪﺳﺖ آﻣﺪه را ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻣﻲﻛﻨﻴﻢ.
4*162+
F*16
2*1
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
ﺣﺎل ﺑﺮاي ﺗﺒﺪﻳﻞ ﻳﻚ ﻣﻘﺪار در ﺳﻴـﺴﺘﻢ ﻣﺒﻨـﺎي ﺷـﺎﻧﺰده ﺑـﻪ ﺳﻴـﺴﺘﻢ دودوﻳـﻲ
ﻣﻲﺗﻮان از ﺟﺪول ﻣﺬﻛﻮر اﺳﺘﻔﺎده ﻧﻤﻮده و ارﻗﺎم را ﺑﺎ ﻣﻘﺪار ﻣﻌﺎدل آن ﺟﺎﻳﮕﺰﻳﻦ ﻧﻤﻮد.
ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﻋﺪد 2FA5Bرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .ﺑﺎ ﺟﺎﻳﮕﺰﻳﻨﻲ ﻫﺮ رﻗﻢ ﺑـﺎ ﭼﻬـﺎر رﻗـﻢ
ﻣﻌﺎدل آن در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻧﺘﻴﺠﻪ زﻳﺮ ﺣﺎﺻﻞ ﻣﻲﮔﺮدد.
00101111101001011011
ﺑﻪ ﻣﻨﻈﻮر ﺗﺒﺪﻳﻞ ﻳﻚ ﻣﻘﺪار از ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨـﺎي ﺷـﺎﻧﺰده اﺑﺘـﺪا
ارﻗﺎم را از ﺳﻤﺖ راﺳﺖ ﭼﻬﺎر ﺗﺎ ﭼﻬﺎر ﺗﺎ ﺟﺪا ﻧﻤﻮده ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از ﺟﺪول ﻓـﻮق
ﻣﻘﺎدﻳﺮ ﻣﻌﺎدل را ﻗﺮار ﻣﻲدﻫﻴﻢ.
ﻣﺜﺎل 1-15
111011001011101
ﻛﻪ اﺑﺘﺪا ﺑﺼﻮرت زﻳﺮ در ﻣﻲآورﻳﻢ.
0111 0110 0101 1101
ﻛﻪ ﻣﻌﺎدل 765Dﻣﻲﺑﺎﺷﺪ.
١٨
ﻣﺜﺎل 1-16
ﻣﻘﺪار ﺗﻘﺴﻴﻢ ﺑﺮ ﻧﺘﻴﺠﻪ ﺑﺎﻗﻴﻤﺎﻧﺪه
125 8 15 5
15 8 1 7
1 8 0 1
ﻛﻪ ﻧﺘﻴﺠﻪ ﻣﻲﺷﻮد 175در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ.
ﻣﺜﺎل 1-17
ﺑﻤﻨﻈﻮر ﺗﺒﺪﻳﻞ ﻣﻘﺪاري از ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﺑﻪ ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ،ارﻗﺎم ﻋـﺪد
را از ﺳــﻤﺖ راﺳــﺖ ﺑﺘﺮﺗﻴــﺐ در … ،83 ،82 ،8 ،1ﺿــﺮب ﻧﻤــﻮده ﻧﺘــﺎﻳﺞ ﺣﺎﺻــﻠﻪ
را ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻣﻲﻧﻤﺎﺋﻴﻢ .ﺑﻌﻨﻮان ﻣﺜﺎل ﻋﺪد 237در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫـﺸﺖ را در ﻧﻈـﺮ
ﺑﮕﻴﺮﻳﺪ.
2 3 7
82 8 1
7*1+ 7
3*8 24
2*82 128
159
ﻣﺜﺎل 1-18
ﻋﺪد 4260را از ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
ﻣﺜﺎل 1-19
ﻋﺪد 382را ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
ﻣﺜﺎل 1-20
ﻣﻘﺪار 4327را از ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫـﺸﺖ ﺑـﻪ ﺳﻴـﺴﺘﻢ دﻫـﺪﻫﻲ ﺗﺒـﺪﻳﻞ ﻧﻤﺎﺋﻴـﺪ.
ﺑﺮاي اﻳﻨﻜـﺎر اﺑﺘـﺪا رﻗـﻢ 7را در ،1رﻗـﻢ 2را در ،8رﻗـﻢ 3را در 82و ﻧﻬﺎﻳﺘـﺎً رﻗـﻢ
4را در 83ﺿــﺮب ﻣــﻲﻧﻤــﺎﺋﻴﻢ ﺳــﭙﺲ ﻣﺠﻤــﻮع ﻣﻘــﺎدﻳﺮ ﺑﺪﺳــﺖ آﻣــﺪه را ﻣﺤﺎﺳــﺒﻪ
ﻣﻲﻧﻤﺎﺋﻴﻢ.
٢٠
4327
83 82 8 1
ﻛﻪ ﻧﺘﻴﺠﻪ ﻣﻲﺷﻮد
4*83 +
3*82
2*8
7*1
ﻛﻪ ﻣﻌﺎدل اﺳﺖ ﺑﺎ
4*512+
3*64
2*8
7*1
ﻛﻪ ﻧﻬﺎﻳﺘﺎًﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ
2048+
192
16
7
2263
ﺑﻨﺎﺑﺮاﻳﻦ ﻣﻘﺪار 4327در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ 2263در ﺳﻴـﺴﺘﻢ
دﻫﺪﻫﻲ.
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ ﻧﻤﻮد ﻛﻪ ﻫﺮ رﻗﻢ در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ را ﻣﻲﺗﻮان ﺑﻮﺳﻴﻠﻪ ﺳـﻪ
رﻗﻢ در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻧﻤﺎﻳﺶ داد.
٢١
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
ﺑﺮاي ﺗﺒﺪﻳﻞ ﻣﻘﺪاري از ﺳﻴﺴﺘﻢ ﻫﺸﺖ ﺗﺎﺋﻲ ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻛﺎﻓﻲ اﺳﺖ ﻛـﻪ
ﺑﻪ ﺟﺎي ﻫﺮ رﻗﻢ در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﺳﻪ رﻗﻢ ﻣﻌﺎدل آﻧـﺮا ﻗـﺮار داد .ﺑﻌﻨـﻮان ﻣﺜـﺎل
ﻋﺪد 417در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﻣﻌﺎدل 100001111در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻣﻲﺑﺎﺷﺪ.
ﺑﻤﻨﻈﻮر ﺗﺒﺪﻳﻞ ﻣﻘﺪاري از ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﻛﺎﻓﻲ اﺳﺖ
ﻛﻪ ارﻗﺎم ﻋﺪد از ﻃﺮف راﺳﺖ ﺳﻪ ﺗﺎ ﺳﻪ ﺗﺎ ﺟﺪا ﻧﻤﻮده و ﺑﻪ ﺟﺎي آﻧﻬﺎ ﻣﻘﺪار ﻣﻌـﺎدل در
ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﻗﺮار دﻫﻴﻢ.
ﻣﺜﺎل 1-21
ﻋﺪد 10110111010111در ﺳﻴﺴﺘﻢ دودوﻳﻲ در ﻧﻈﺮ ﺑﮕﻴﺮﻳـﺪ ﻛـﻪ ﻣـﻲﺗـﻮان
ﺑﺼﻮرت زﻳﺮ ﺟﺪا ﻧﻤﻮد.
010 110 111 010 111
ﻣﺜﺎل 1-22
ﻋﺪد 2AFB5را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
2AFB5
2 A F B 5
0010 1010 1111 1011 0101
-1-8ﻣﻘﺎدﻳﺮ اﻋﺸﺎري
ﺑﻪ ﻣﻨﻈﻮر ﺗﺒﺪﻳﻞ ﻳﻚ ﻣﻘﺪار اﻋﺸﺎري ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ اﺑﺘﺪا ﻗـﺴﻤﺖ ﺻـﺤﻴﺢ
آﻧﺮا ﺑﻪ ﻃﺮﻳﻖ ﮔﻔﺘﻪ ﺷﺪه ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﻮده ،ﺳﭙﺲ ﻗﺴﻤﺖ اﻋﺸﺎري آﻧـﺮا
ﺟﺪا ﻧﻤﻮده ﺑﻄﻮر ﻣﻜﺮر در 2ﺿﺮب ﻣﻲﻧﻤﺎﺋﻴﻢ .ﺑﻌﻨﻮان ﻣﺜﺎل ﻋـﺪد 14.725را در ﻧﻈـﺮ
ﺑﮕﻴﺮﻳﺪ .ﻋﺪد 14ﺑﺼﻮرت 1110در ﺳﻴﺴﺘﻢ دودوﻳﻲ ﻣﻲﺑﺎﺷﺪ .ﺑـﺮاي ﺗﺒـﺪﻳﻞ ﻗـﺴﻤﺖ
اﻋﺸﺎري ﻳﻌﻨﻲ 0.725ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ آﻧﺮا در 2ﺿﺮب ﻣﻲﻧﻤﺎﺋﻴﻢ.
ﻣﺜﺎل 1-23
*0.725
2
1.450
ﻗــﺴﻤﺖ ﺻــﺤﻴﺢ ﻳﻌﻨــﻲ 1را ﺟــﺪا ﻧﻤــﻮده ،ﻗــﺴﻤﺖ اﻋــﺸﺎر را در 2ﺿــﺮب
ﻣﻲﻧﻤﺎﺋﻴﻢ.
*0.45
2
0.90
٢٣
ﻗﺴﻤﺖ ﺻﺤﻴﺢ ﻳﻌﻨﻲ 0را ﺟﺪا ﻧﻤﻮده ،ﻗﺴﻤﺖ اﻋﺸﺎر را در 2ﺿﺮب ﻣﻲﻛﻨﻴﻢ.
*0.8
2
1.6
و ﺑﻪ ﻫﻤﻴﻦ روال ﻛﺎر را اداﻣﻪ ﻣﻲدﻫﻴﻢ.
*0.6
2
1.2
ﻣﺜﺎل 1-24
1 1 0 1 . 0 1 0 1 1
1 1 1 1 1
8 4 2 1
2 4 8 16 32
در ﺣﺎﻓﻈﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻓﻘﻂ ارﻗﺎم 0و 1ذﺧﻴﺮه ﻣﻲﮔﺮدد .ﺑﻪ اﻳﻦ ارﻗﺎم 0و 1ﺑﻴﺖ
ﮔﻔﺘﻪ ﻣﻲﺷﻮد .ﺑﻪ ﻫﺮ ﻫﺸﺖ ﻛﻨﺎر ﻫﻢ ﺑﺎﻳﺖ و ﺑﻪ ﻫﺮ ﺷﺎﻧﺰده ﺑﻴﺖ ﻛﻨﺎر ﻫﻢ wordﮔﻔﺘـﻪ
ﻣﻲﺷﻮد .ﺑﺮاي ذﺧﻴﺮه ﻳﻚ ﻣﻘﺪار در ﺣﺎﻓﻈﻪ ﺑﺎﻳﺴﺘﻲ اﺑﺘﺪا آﻧﺮا ﺑﺼﻮرت ﻳﻚﺳـﺮي ﺑﻴـﺖ
درآورد .و ﺑﺮاي ﻧﻤﺎﻳﺶ ﻣﻘﺎدﻳﺮ روي ﺻﻔﺤﻪ ﻣﺎﻧﻴﺘﻮر ﺑﺎﻳﺴﺘﻲ آﻧﻬﺎ را ﺑﻪ ﺳﻴـﺴﺘﻢ دهﺗـﺎﻳﻲ
ﺗﺒﺪﻳﻞ ﻧﻤﻮد .در ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﻓﻘﻂ از ارﻗﺎم 0ﺗﺎ 9اﺳـﺘﻔﺎده ﻣـﻲﮔـﺮدد .در ﺳﻴـﺴﺘﻢ
دودوﻳﻲ ﻓﻘﻂ از ارﻗﺎم 0و 1اﺳﺘﻔﺎده ﻣﻲﮔـﺮدد .اﻋـﺪاد ﻣﻨﻔـﻲ را ﻣـﻲﺗـﻮان در ﺣﺎﻓﻈـﻪ
ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺎ اﺳﺘﻔﺎده از روش ﻣﻜﻤﻞ 2ﻧﺸﺎن داد .اﺳﺘﻔﺎده از ﺳﻴﺴﺘﻢﻫﺎﻳﻲ ﻣﺒﻨﺎي ﺷـﺎﻧﺰده
و ﻣﺒﻨﺎي ﻫﺸﺖ ﻧﻴﺰ اﻣﻜﺎن ﭘﺬﻳﺮ ﻣﻲﺑﺎﺷﺪ .در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷﺎﻧﺰده از ارﻗﺎم 0ﺗﺎ 9و A
ﺗﺎ Fاﺳﺘﻔﺎده ﻣﻴﮕﺮدد .در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ ﻓﻘﻂ از ارﻗﺎم 0ﺗﺎ 7ﻣـﻲﺗـﻮان اﺳـﺘﻔﺎده
ﻧﻤﻮد .ﻣﻘﺎدﻳﺮ اﻋﺸﺎري را ﻧﻴﺰ ﻣﻲﺗﻮان در ﺣﺎﻓﻈﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﻗﺮار داد.
٢٥
ﺗﻤﺮﻳﻦ
-1ﻫﺮ ﺑﺎﻳﺖ از ……… .ﺑﻴﺖ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ.
-2ﻫﺮ ﻛﻠﻴﻮ ﺑﺎﻳﺖ ﻣﻌﺎدل ……… .ﺑﺎﻳﺖ ﻣﻲﺑﺎﺷﺪ.
-3در ﻫﺮ Wordاﻋﺪاد 0ﺗﺎ ……… .را ﻣﻲﺗﻮان ﺟﺎ داد.
-4در ﻫﺮ ﺑﺎﻳﺖ اﻋﺪاد ……… – .ﺗﺎ ……… +.را ﻣﻲﺗﻮانﻗﺮار داد.
-5در ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺮاي ﻧﻤﺎﻳﺶ اﻋﺪاد ﻣﻨﻔﻲ از ……… .اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
-6در ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﻪ ﺟﺎي ﻋﻤﻞ ﺗﻔﺮﻳﻖ از ……… .اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
-7در ﻫﺮ Wordﺑﻪ ﺗﻌﺪاد ……… .وﺿﻌﻴﺖ ﻣﺨﺘﻠﻔﻪ 1و 0وﺟﻮد دارد.
-8ﻋﺪد –20را ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-9ﻋﻤﻞ 25-18را ﺑﺎ اﺳﺘﻔﺎده از روش ﻣﻜﻤﻞ دو اﻧﺠﺎم دﻫﻴﺪ.
-10ﻋﺪد 1101101را ﺑﻪ ﺳﻴﺴﺘﻢ دﻫﺪﻫﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-11ﻋﺪد 101101.11001را ﺑﻪ ﺳﻴﺴﺘﻢ ده ﺗﺎﺋﻲ ﺗﺒﺪﻳﻞ ﻛﻨﻴﺪ.
-12ﻋﺪد 2FABCرا ﺑﻪ ﺳﻴﺴﺘﻢ ﻫﺸﺖ ﺗﺎﺋﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-13ﻋﺪد 43271در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﻫﺸﺖ را ﺑﻪ ﺳﻴﺴﺘﻢ دودوﻳﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-14ﻣــﺸﺨﺺ ﻧﻤﺎﺋﻴــﺪ ﻛــﻪ اﮔــﺮ MSBﻳــﻚ ﻣﻘــﺪاري ﻳــﻚ ﺑﺎﺷــﺪ آﻳــﺎ آن ﻣﻘــﺪار
ﻣﻨﻔﻲ اﺳﺖ؟
-15ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ ﻛﻪ آﻳﺎ ﻣﻲﺗﻮان ﻋﻤﻞ ﺿﺮب و ﺗﻔﺮﻳﻖ و ﺗﻘﺴﻴﻢ را ﺑـﻪ ﻋﻤـﻞ ﺟﻤـﻊ
ﺗﺒﺪﻳﻞ ﻧﻤﻮد؟
-16اﮔﺮ ﻣﻘﺪاري ﻣﻨﻔﻲ ﺑﺎﺷﺪ.
ب MSB-آن ﻳﻚ اﺳﺖ. اﻟﻒ MSB-آن ﺻﻔﺮ اﺳﺖ.
د-.ﻫﻴﭽﻜﺪام. ج LSB-آن ﻳﻚ اﺳﺖ.
٢٦
-17اﮔﺮ ﻣﻘﺪاري از ﻧﻮع double wordداﺷﺘﻪ ﺑﺎﺷـﻴﻢ ﺑـﻪ ﭼﻨـﺪ ﺑﺎﻳـﺖ ﺣﺎﻓﻈـﻪ ﻧﻴـﺎز
اﺳﺖ؟
ب3- اﻟﻒ2-
د-ﻫﻴﭽﻜﺪام ج4-
ﻓﺼﻞ دوم
ﻣﻌﻤﺎري رﻳﺰﭘﺮدازﻧﺪه 80286
ﻫﺪف ﻛﻠﻲ
ﻣﻌﺮﻓﻲ رﻳﺰﭘﺮدازﻧﺪه 80286
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻮارد زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ
-1ﻳﺰﭘﺮدازﻧﺪه 80286و ﻋﻤﻠﻴﺎت آن.
-2ﻣﻌﻤﺎري رﻳﺰﭘﺮدازﻧﺪه 80286و اﺟﺰاء ﺗﺸﻜﻴﻞ دﻫﻨﺪه.
-3ﺛﺒﺎتﻫﺎ
-4ﻓﻠﮓﻫﺎ
-2-1رﻳﺰ ﭘﺮدازﻧﺪه 80286
اﻳﻦ رﻳﺰﭘﺮدازﻧﺪه داراي وﻳﮋﮔﻴﻬﺎي ﭘﻴﺸﺮﻓﺘﻪاي ﺑﺮاي ﻋﻤﻠﻜﺮد در ﺳﻄﺢ ﺑﺎﻻﺋﻲ را
دارد .در ،80286ﻫﻤﭽﻨﻴﻦ اﺳﺘﻔﺎده از وﻳﮋﮔﻲﻫﺎي ذﻳﻞ اﻣﻜﺎن ﭘﺬﻳﺮ ﻣﻲﺑﺎﺷﺪ.
Multitasking -1
٢٨
AX Accumulator
BX Base
CX Count
DX Data
15 0
SP
BP
SI
DI
ﻣﻌﻤﻮﻻً از ﺛﺒﺎﺗﻬﺎي SPو BPدر ﻣﻮرد ﻋﻤﻠﻴﺎت روي ﭘﺸﺘﻪﻫﺎ و از ﺛﺒﺎﺗﻬـﺎي SI
و DIﺑﻌﻨﻮان ﺷﺎﺧﺺ در ﺳـﺎﺧﺘﺎرﻫﺎي ﭘﻴﭽﻴـﺪهﺗـﺮ اﺳـﺘﻔﺎده ﻣـﻲ ﮔـﺮدد .رﻳﺰﭘﺮدازﻧـﺪه
ﻫﻤﭽﻨﻴﻦ داراي ﭼﻬﺎر ﺛﺒﺎت ﺷﺎﻧﺰدهﺑﻴﺘﻲ ﻣﻌﺮوف ﺑـﻪ ﺛﺒﺎﺗﻬـﺎي ﺳـﮕﻤﻨﺖ ﻣـﻲﺑﺎﺷـﺪ ﻛـﻪ
ﺑﻤﻨﻈﻮر آدرس دﻫﻲ از آﻧﻬﺎ اﺳﺘﻔﺎده ﻣﻲﻧﻤﺎﻳﺪ .اﻳـﻦ ﺛﺒـﺎتﻫـﺎ ﺑﻨﺎﻣﻬـﺎي ،SS ، DS،CS
ESﻣﻲﺑﺎﺷﻨﺪ.
15 0
CS
DS
SS
ES
رﺷﺘﻪﻫﺎ اﺳـﺘﻔﺎده ﺷـﻮد آدرس اﺑﺘـﺪاي آن ﻧﺎﺣﻴـﻪ در ﺣﺎﻓﻈـﻪ در ﺛﺒـﺎت ESﻗـﺮار داده
ﻣﻲﺷﻮد.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
// NT IO PL OF DF IF TF SF ZF // AF // PF // CF
ﺻﻔﺮ ﻣﻲﮔﺮدد .ﺑﻌﺒﺎرت دﻳﮕﺮ اﮔﺮ ﺗﻌﺪاد ﺑﻴﺖﻫﺎي ﻳـﻚ در ﺑﺎﻳـﺖ ﻣﺮﺗﺒـﻪ ﭘـﺎﺋﻴﻦ word
زوج ﺑﺎﺷﺪ ﻣﻘﺪار PFﺑﺮاﺑﺮ ﻳﻚ ﻣﻲﮔﺮدد .در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﻘﺪار PFﺑﺮاﺑـﺮ ﺑـﺎ ﺻـﻔﺮ
ﻣﻲﮔﺮدد.
در ﻋﻤﻞ ﺟﻤﻊ دو ﻣﻘﺪار اﮔﺮ ﻛﻠﻴﻪ ﺑﻴﺖﻫﺎي ﻧﺘﻴﺠﻪ ﺻﻔﺮ ﮔﺮدد ﻣﻘـﺪار ZFﺑﺮاﺑـﺮ
ﺑﺎ ﻳﻚ ﻣﻲﮔﺮدد .در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﻘﺪار ZFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻣﻲﺷﻮد.
در ﻋﻤﻞ ﺟﻤﻊ دو ﻣﻘﺪار ﺑﺎﻳﻨﺮي اﮔﺮ از MSBﻧﺘﻴﺠﻪ ﻳﻚ carryﺧﺎرج ﮔـﺮدد
ﻣﻘﺪار CFﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﻣﻲﺷﻮد .در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﻘﺪار CFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻣﻲﺷﻮد.
در ﻋﻤﻞ ﺟﻤﻊ دو ﻣﻘﺪار ﺑﺎﻳﻨﺮي اﮔﺮ MSBﻧﺘﻴﺠﻪ ﺑﺮاﺑـﺮ ﺑـﺎ ﻳـﻚ ﺑﺎﺷـﺪ ﻣﻘـﺪار
ﻓﻠﮓ SFﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﻣﻴﺸﻮد .در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﻘﺪار SFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻣﻲﺑﺎﺷﺪ.
در ﻋﻤﻞ ﺟﻤﻊ دو ﻣﻘﺪار ﺑﺎﻳﻨﺮي اﮔﺮ ﻳﻚ carryدر ﺑﻴﺖ ﻗﺒـﻞ از MSBﻧﺘﻴﺠـﻪ
داﺷﺘﻪ ﺑﺎﺷﻴﻢ وﻟﻲ در ﺑﻴﺖ carry MSBﻧﺪاﺷﺘﻪ ﺑﺎﺷﻴﻢ و ﻳﺎ ﺑﺎﻟﻌﻜﺲ ﻣﻘﺪار ﻓﻠـﮓ OF
1ﻣﻲﺷﻮد .در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﻘﺪار ﻓﻠﮓ OFﺻﻔﺮ ﻣﻲﮔﺮدد .زﻣﺎﻧﻴﻜﻪ OFﺑﺮاﺑﺮ ﺑـﺎ 1
ﻣﻲﺷﻮد ﻳﻌﻨﻲ ﻧﺘﻴﺠﻪ ﻣﺤﺎﺳﺒﻪ در ﻣﺤﻞ ﺗﻌﻴﻴﻦ ﺷﺪه در ﺣﺎﻓﻈﻪ ﺟـﺎ ﻧﻤـﻲﮔﻴـﺮد و ﺑﺎﻋـﺚ
ﻣﻲﺷﻮد ﻛﻪ ﺗﻌﺪادي از ﺑﻴﺖﻫﺎي ﻧﺘﻴﺠﻪ ﺣﺬف ﺷﻮد.
ﻓﻠﮓ AFدر ﻣﻮرد ﻋﻤﻠﻴﺎت BCDﻛﺎرﺑﺮد دارد ﻛﻪ در ﺑﺨﺸﻬﺎي ﺑﻌـﺪي ﺑﺤـﺚ
ﻣﻴﺸﻮد .در ﻋﻤﻞ ﺟﻤﻊ دو ﻣﻘﺪار ﺑﺎﻳﻨﺮي ﻣﻘـﺪار ﻓﻠـﮓ AFﻳـﻚ ﻣﻴـﺸﻮد اﮔـﺮ از ﺑﻴـﺖ
ﺷﻤﺎره 3ﻳﻚ carryﺧﺎرج ﮔﺮدد.
ﻣﺜﺎل 2-1
دو ﻣﻘﺪار 2345و 3219را در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷﺎﻧﺰده در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ و ﺑﺎ ﻫﻢ
ﺟﻤﻊ ﻧﻤﺎﺋﻴﺪ و ﻣﻘﺪار ﻓﻠﮓﻫﺎ را ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ.
00110010 00011001+
0010001101000101
0101010101011110
٣٢
ﻣﺜﺎل 2-2
ﺣﺎل ﻣﺠﻤﻮع دو ﻣﻘﺪار 5439و 456Aدر ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷـﺎﻧﺰده را ﻣﺤﺎﺳـﺒﻪ
ﻧﻤﻮده ﺳﭙﺲ ﻣﻘﺪار ﻓﻠﮓﻫﺎ را ﻣﺸﺨﺺ ﻣﻲﻧﻤﺎﺋﻴﻢ.
(5439)16=(0101010000111001)2
(456A)16=(0100010101101010)2
0101010000111001 +
0100010101101010
1001100110100011
ﻛﻪ ﻓﻠﮓﻫﺎ ﺑﺼﻮرت زﻳﺮ ﺗﻐﻴﻴﺮ ﻣﻲﻳﺎﺑﻨﺪ.
ﻧﻜﺘﻪاي ﻛﻪ ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ اﻳﻦ اﺳـﺖ ﻛـﻪ ﺗﻤـﺎم دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎ ﻣﺤﺘـﻮي
ﻓﻠﮓﻫﺎ را ﺗﻐﻴﻴﺮ ﻧﻤﻲدﻫﻨﺪ .ﺑﻌﻨﻮان ﻣﺜﺎل دﺳﺘﻮراﻟﻌﻤﻞ MOVﻛـﻪ ﺑـﺮاي اﻧﺘﻘـﺎل دادهﻫـﺎ
اﺳﺘﻔﺎده ﻣﻲﺷﻮد روي ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
-2-1-2ﺛﺒــﺎت IP
ﺛﺒﺎت IPﻳﻚ ﺛﺒﺎت ﺷﺎﻧﺰدهﺑﻴﺘﻲ ﻣﻲﺑﺎﺷـﺪ ﻛـﻪ آدرس دﺳـﺘﻮراﻟﻌﻤﻞ ﺑﻌـﺪي ﻛـﻪ
ﺑﺎﻳﺴﺘﻲ اﺟﺮا ﮔﺮدد در اﻳﻦ ﺛﺒﺎت ﻗﺮار داده ﻣﻴﺸﻮد .رﻳﺰﭘﺮدازﻧﺪه ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ آدرس
دﺳﺘﻮراﻟﻌﻤﻞ ﺑﻌﺪي را ﻣﻮرد ﭘﺮدازش ﻗﺮار ﻣﻲدﻫﺪ .ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺑﻪ اﻳﻦ ﺛﺒﺎت دﺳﺘﺮﺳﻲ
ﻧﺪاﺷﺘﻪ و ﻣﺤﺘﻮي آﻧﺮا ﻧﻤﻲﺗﻮاﻧﺪ ﺗﻐﻴﻴﺮ دﻫﺪ.
ﺗﻤﺮﻳﻦ
-1ﺗﻌﺪاد ﺛﺒﺎﺗﻬﺎي ﻫﺸﺖ ﺑﻴﺘﻲ را ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ.
-2ﻛﺎر Flag Registerرا ﺷﺮح دﻫﻴﺪ.
-3ﻣﻜﺎﻧﻴﺰﻣﻬﺎي اﻧﺘﻘﺎل دادهﻫﺎ را ﺑﻨﻮﻳﺴﻴﺪ.
-4دو ﻣﻘﺪار A2FBو CD1Aرا در ﻣﺒﻨﺎي ﺷﺎﻧﺰده ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻧﻤﻮده ﺳـﭙﺲ ﻣﻘـﺪار
ﻓﻠﮓﻫﺎي F، PF، ZF، SF، OF،AFو را ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ.
-5دو ﻣﻘﺪار C2BFو A5B2را در ﻣﺒﻨﺎي ﺷﺎﻧﺰده ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻧﻤـﻮده ﺳـﭙﺲ ﻣﻘـﺪار
ﻓﻠﮓﻫﺎي CF ،ZF ،PF ،SF ،OFو AFرا ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ.
-6ﻣﻮرد اﺳﺘﻔﺎده ﺛﺒﺎﺗﻬﺎي SS ، ES، DS ،CSرا ﺑﻨﻮﻳﺴﻴﺪ.
-7ﺻﻒ دﺳﺘﻮراﻟﻌﻤﻞ و ﻣﻮرد اﺳﺘﻔﺎده آﻧﺮا ﺑﻨﻮﻳﺴﻴﺪ.
-8دو ﻣﻘﺪار 54C2و 3271در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷـﺎﻧﺰده را از ﻫـﻢ ﻛـﻢ ﻧﻤـﻮده ﺳـﭙﺲ
ﻣﻘﺪار ﻓﻠﮓﻫﺎي CF ، PF ، ZF ، SF ، OF ، AFرا ﻣﺸﺨﺺ ﻧﻤﺎﺋﻴﺪ.
-9آﻳﺎ ﺗﻤﺎم دﺳﺘﻮر اﻟﻌﻤﻞﻫﺎ روي ﻓﻠﮓﻫﺎ اﺛﺮدارﻧﺪ؟
-10ﻛﺎر BUSرا ﺑﻨﻮﻳﺴﻴﺪ.
٣٧
ﻓﺼﻞ ﺳﻮم
ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ
ﻫﺪف ﻛﻠﻲ
آﺷﻨﺎﺋﻲ ﺑﺎ ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮر اﻟﻌﻤﻠﻬﺎ و ﺗﻜﻨﻴﻜﻬﺎي اﻧﺘﻘﺎل داده .
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﺧﻮاﻫﻴﺪ ﺷﺪ.
-1ﺑﺮﻧﺎﻣﻪ و ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ.
-2ﻧﺎﻣﮕﺬاري ﻓﻴﻠﺪﻫﺎ.
-3اﻧﻮاع ﻓﻴﻠﺪﻫﺎ و ﻛﺎرﺑﺮد آﻧﻬﺎ.
-4ﺗﻜﻨﻴﻜﻬﺎي آدرس دﻫﻲ.
٣٨
-3-1ﺑﺮﻧﺎﻣﻪ و دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ
در زﺑﺎن اﺳﻤﺒﻠﻲ ﺑﺮﻧﺎﻣﻪ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ از ﺗﻌﺪادي دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي اﺟﺮاﺋـﻲ
ﻛﻪ ﺑﻴﺎﻧﮕﺮ ﻋﻤﻠﻴﺎﺗﻲ اﺳﺖ ﻛﻪ ﺑﺎﻳﺴﺘﻲ اﻧﺠﺎم ﺷﻮد .اﻳﻦ ﺳﺮي دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻫﻤﺎﻧﻄﻮرﻳﻜـﻪ
ﻣﻴﺪاﻧﻴﻢ SOURCE CODEﻳﺎ ﻛﺪ ﻣﻨﺒﻊ ﻧﺎﻣﻴﺪه ﻣﻲﺷﻮد .ﻣﺎﻧﻨﺪ ﻫﺮ زﺑﺎن ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ
دﻳﮕﺮ زﺑﺎن اﺳﻤﺒﻠﻲ ﺷﻜﻞ و ﻗﺎﻟﺐ از ﭘﻴﺶ ﺗﻌﺮﻳﻒ ﺷـﺪهاي ﺑـﺮاي ﻛـﺪ ﻣﻨﺒـﻊ دارد .ﻫـﺮ
دﺳﺘﻮراﻟﻤﻞ اﺳﻤﺒﻠﻲ ﺷﺎﻣﻞ ﭼﻬﺎر ﻓﻴﻠﺪ ﻣﻲﺑﺎﺷﺪ.
ﻓﻴﻠﺪاﺳﻢ ﻓﻴﻠﺪﻋﻤﻠﻴﺎت ﻓﻴﻠﺪ ﻋﻤﻠﻮﻧﺪ ﻓﻴﻠﺪ ﻣﻼﺣﻈﺎت
اﻟﺒﺘﻪ ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟـﻪ داﺷـﺖ ﻛـﻪ در ﺑﻌـﻀﻲ از دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎ از ﺗﻤـﺎم ﻓﻴﻠـﺪﻫﺎ
اﺳﺘﻔﺎده ﻧﻤﻲﮔﺮدد.
-3-2ﻗﺎﻧﻮن ﻧﺎﻣﮕﺬاري
ﻧﺎم در زﺑﺎن اﺳﻤﺒﻠﻲ ﺣﺪاﻛﺜﺮ ﻣﻲﺗﻮاﻧـﺪ ﺷـﺎﻣﻞ 31ﻛـﺎراﻛﺘﺮ ﺑﺎﺷـﺪ .ﻛﺎراﻛﺘﺮﻫـﺎ
ﺷﺎﻣﻞ ﺣﺮوف Zﺗﺎ Aو ارﻗﺎم 9ﺗﺎ 0و ﺳﻴﻤﺒﻠﻬﺎي ﻣﺨـﺼﻮص @ ؟ $ .ـ ﻣـﻲﺑﺎﺷـﺪ.
ﻣﻮارد ذﻳﻞ ﺑﺎﻳﺴﺘﻲ در ﻧﺎﻣﮕﺬاري رﻋﺎﻳﺖ ﮔﺮدد.
-1اﺳﻢ ﻧﻤﻲﺗﻮاﻧﺪ ﺑﺎ ﻳﻚ رﻗﻢ ﺷﺮوع ﮔﺮدد.
-2اﺳﻢ ﻧﺒﺎﻳﺴﺘﻲ ﻳﻜﻲ از ﻛﻠﻤﺎت ذﺧﻴﺮه ﺷﺪه در اﺳﻤﺒﻠﻲ ﺑﺎﺷﺪ.
-3در ﺻﻮرﺗﻴﻜﻪ از 0در ﻧﺎم اﺳﺘﻔﺎده ﮔﺮدد ،ﺑﺎﻳﺴﺘﻲ اوﻟﻴﻦ ﻛﺎراﻛﺘﺮ ﻧـﺎم ﺑﺎﺷـﺪ .ﻛﻠﻤـﺎت
زﻳﺮ اﺳﺎﻣﻲ ﻣﺠﺎز در اﺳﻤﺒﻠﻲ ﻣﻲﺑﺎﺷﻨﺪ.
LOOP1 B@A2
X . XY2
Y2A SUM2
A_5B ADDX
COUNT
ﻛﻠﻤﺎت زﻳﺮ ﻣﺠﺎز ﻧﻤﻲﺑﺎﺷﻨﺪ.
٣٩
LOOP NEAR
LABEL ADD
2AB (5AX
FAR A2.B
-3-3ﻣﺘﻐﻴﺮﻫﺎ )(Variables
ﻧﺎم ﻣﺘﻐﻴﺮ ﻣﺸﺨﺺ ﻛﻨﻨﺪه ﻣﺤﻠﻲ از ﺣﺎﻓﻈﻪ ﻣﻲ ﺑﺎﺷـﺪ ﻛـﻪ ﺑﻮﺳـﻴﻠﻪ ﺑﺮﻧﺎﻣـﻪ ﻗﺎﺑـﻞ
دﺳﺘﺮﺳﻲ ﻣﻲﺑﺎﺷﺪ و ﻣﺤﺘﻮي آﻧﺮا در ﺣﻴﻦ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﻣـﻲﺗـﻮان ﺗﻐﻴﻴـﺮ داد .ﺗﻌﺮﻳـﻒ
ﻣﺘﻐﻴﺮ ﺷﺎﻣﻞ آدرس ،ﻧﻮع داده و اﻧﺪازه آن ﻣﻲﺑﺎﺷﺪ .از ﻣﺘﻐﻴﺮﻫﺎ ﻣﻲﺗﻮان ﺑﻌﻨﻮان ﻋﻤﻠﻮﻧـﺪ
در دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ اﺳﺘﻔﺎده ﻧﻤﻮد .ﺑﺮاي ﻣﺘﻐﻴﺮﻫﺎ از ﻧﻮع ﺑﺎﻳﺖ از ،DBﻣﺘﻐﻴﺮﻫـﺎي از ﻧـﻮع
wordاز DWو ﻣﺘﻐﻴﺮﻫﺎي از ﻧﻮع double wordاز DDاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
-3-4ﺑﺮﭼﺴﺐﻫﺎ )(Labels
از ﺑﺮﭼﺴﺐﻫﺎ ﺑﻌﻨﻮان آدرس دﺳـﺘﻮراﻟﻌﻤﻞ در ﺑﺮﻧﺎﻣـﻪﻫـﺎي ﻛـﺎرﺑﺮدي اﺳـﺘﻔﺎده
ﻣﻲﺷﻮد .از ﺑﺮﭼﺴﺐﻫﺎ ﺑﻪ دو ﺻـﻮرت اﺳـﺘﻔﺎده ﻣـﻲﮔـﺮدد .اﮔـﺮ ﺑﺮﭼـﺴﺐ در ﻫﻤـﺎن
ﺳﮕﻤﻨﺖ ﻛﺪ ﺑﺎﺷﺪ ﻧﻮع آن NEARدر ﻏﻴﺮ اﻳﻨـﺼﻮرت از ﻧـﻮع FARﻣـﻲﺑﺎﺷـﺪ .در
ﺻﻮرﺗﻴﻜﻪ ﻧﻮع آن NEARﺑﺎﺷﺪ ﻣﻲﺗﻮان ﺑﻌـﺪ از ﻧـﺎم ﺑﺮﭼـﺴﺐ از :اﺳـﺘﻔﺎده ﻧﻤـﻮد و
دﻳﮕﺮ ﻧﻴﺎزي ﺑﻪ ﻛﻠﻤﻪ NEARﻧﻤﻲﺑﺎﺷﺪ.
-3-5ﺛﺎﺑﺖﻫﺎ )(Constants
ﺛﺎﺑﺖﻫﺎ ﻣﻘﺎدﻳﺮي ﻫﺴﺘﻨﺪ ﻛﻪ در دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺑﺮﻧﺎﻣﻪﻫـﺎ ﻣـﻮرد اﺳـﺘﻔﺎده ﻗـﺮار
ﻣﻲﮔﻴﺮﻧﺪ .ﺛﺎﺑﺖﻫﺎ از اﻧﻮاع ذﻳﻞ ﻣﻲﺑﺎﺷﻨﺪ.
: Binary -1ﺷﺎﻣﻞ ﻳﻚ ﺳﺮي 0و 1ﻣﻲﺑﺎﺷﺪ ﻛﻪ در اﻧﺘﻬﺎي آﻧﻬـﺎ ﺣـﺮف B
ﻗﺮار داده ﻣﻲﺷﻮد.
ﻣﺜﺎل 3-2
110111 B
1000 B
40
ﻳﺎ
40D
: Hexadecimal -3ﺷﺎﻣﻞ ارﻗﺎم 0ﺗﺎ 9و ﺣﺮوف Aﺗﺎ Fﻣﻲﺑﺎﺷﺪ ﻛـﻪ در
اﻧﺘﻬﺎي آﻧﻬﺎ ﺣﺮف Hاﺿﺎﻓﻪ ﻣﻲﮔﺮدد.
ﻣﺜﺎل 3-4
32H
0FFH
اﮔﺮ ﻣﻘﺪاري در ﺳﻴﺴﺘﻢ ﻣﺒﻨﺎي ﺷﺎﻧﺰده ﺑﺎ ﻳﻜﻲ از ﺣﺮوف Aﺗﺎ Fﺷـﺮوع ﮔـﺮدد
ﺑﺎﻳﺴﺘﻲ 0ﺑﻪ اﺑﺘﺪاي آن اﺿﺎﻓﻪ ﮔﺮدد .در اﻳﻦ ﺻﻮرت ﻛﺎﻣﭙﻴﻮﺗﺮ آﻧﺮا ﺑﺎ ﻧﺎم ﻳﻚ ﺑﺮﭼـﺴﺐ
ﻳﺎ ﻣﺘﻐﻴﺮ اﺷﺘﺒﺎه ﻧﻤﻲﮔﻴﺮد.
٤١
:Octal -4ﺷﺎﻣﻞ ارﻗﺎم 0ﺗﺎ 7ﻣﻲﺑﺎﺷﺪ ﻛـﻪ در اﻧﺘﻬـﺎي آﻧﻬـﺎ ﺣـﺮف Oﻗـﺮار
ﻣﻲﮔﻴﺮد .ﻣﻲﺗﻮان ﺑﻪ ﺟﺎي Oاز ﺣﺮف Qﻧﻴﺰ اﺳﺘﻔﺎده ﻧﻤﻮد.
ﻣﺜﺎل 3-5
6O
24O
12Q
ﻣﺜﺎل 3-5
′B′
″JOHN″
′BOB′
ﻣﺜﺎل 3-6
-3-6ﻓﻴﻠﺪ ﻋﻤﻠﻴﺎت
در ﻓﻴﻠﺪ ﻋﻤﻠﻴﺎت ﻧﺎم دﺳﺘﻮراﻟﻌﻤﻞ واﻗﻌﻲ رﻳﺰﭘﺮدازﻧـﺪه ﻳـﺎ ﻋﻤﻠـﻲ ﻛـﻪ ﺑﺎﻳـﺴﺘﻲ
اﻧﺠﺎم ﺷﻮد ذﻛﺮ ﻣﻲﮔﺮدد .ﻧﺎم دﺳﺘﻮراﻟﻌﻤﻞ ﺑﻴﻦ 2ﺗﺎ 6ﻛﺎراﻛﺘﺮ ﻣﻲﺑﺎﺷﺪ.
ﻣﺜﺎل 3-8
MOV REP
CMP LOOP
REPNE
LEA
-3-7ﻓﻴﻠﺪ ﻋﻤﻠﻮﻧﺪ
اﻳﻦ ﻓﻴﻠﺪ ﺷﺎﻣﻞ آدرس dataﻫﺎﺋﻲ ﻛﻪ ﺑﺎﻳﺴﺘﻲ ﺑﻮﺳـﻴﻠﻪ ﻓﻴﻠـﺪ ﻋﻤﻠﻴـﺎت ﭘـﺮدازش
ﮔﺮدد ﻣﻲﺑﺎﺷﺪ .ﻓﻴﻠﺪ ﻋﻤﻠﻮﻧﺪ ﺑﺎ ﺣﺪاﻗﻞ ﻳﻚ ﻓﺎﺻﻠﻪ از ﻓﻴﻠﺪ ﻋﻤﻠﻴﺎت ﺟﺪا ﻣﻴﺸﻮد .ﺑﻌﻀﻲ
از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻓﺎﻗﺪ ﻋﻤﻠﻮﻧﺪ ﻣﻲﺑﺎﺷﻨﺪ .ﺳﺎﻳﺮ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻳﻚ ﻳﺎ دو ﻋﻤﻠﻮﻧـﺪ دارﻧـﺪ
ﻛﻪ ﺑﺎ ﻛﺎﻣﺎ از ﻫﻢ ﺟﺪا ﻣﻲﺷﻮﻧﺪ .ﻣﺎﻧﻨﺪ
CBW ﻋﻤﻠﻮﻧﺪ ﻧﺪارد
NOP ﻋﻤﻠﻮﻧﺪ ﻧﺪارد
CLC ﻋﻤﻠﻮﻧﺪ ﻧﺪارد
NOT AL ﻳﻚ ﻋﻤﻠﻮﻧﺪ دارد
MOV AX , Y دو ﻋﻤﻠﻮﻧﺪ دارد
٤٣
در ﻣﻮاردي ﻛﻪ ﻓﻴﻠﺪ ﻋﻤﻠﻮﻧﺪ داراي دو ﻋﻤﻠﻮﻧﺪ ﻣﻲﺑﺎﺷﺪ ﻋﻤﻠﻮﻧﺪ اول را ﻋﻤﻠﻮﻧﺪ
ﻣﻘﺼﺪ و ﻋﻤﻠﻮﻧﺪ دوم را ﻋﻤﻠﻮﻧﺪ ﻣﺒﺪاء ﻣﻲﻧﺎﻣﻨﺪ.
ﻣﺜﺎل 3-10
AND AX , X
ﻛﻪ AXرا ﻋﻤﻠﻮﻧﺪ ﻣﻘﺼﺪ و Xرا ﻋﻤﻠﻮﻧﺪ ﻣﺒﺪاء ﻣﻲﻧﺎﻣﻨﺪ.
ﻣﺜﺎل 3-11
MOV AH, 45H; Parameter for reading a character
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻣﻲﺗﻮاﻧﻨﺪ ﻓﻘﻂ ﺷﺎﻣﻞ ﻓﻴﻠـﺪ Commentﺑﺎﺷـﻨﺪ .در اﻳﻨـﺼﻮرت
دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺎ ; ﺷﺮوع ﻣﻲﺷﻮد.
ﻣﺜﺎل 3-12
; This is an assembly Program
; For calculating the n factorial.
-3-9ﺗﻜﻨﻴﻜﻬﺎي آدرسدﻫﻲ
رﻳﺰﭘﺮدازﻧﺪه 80286از ﻫﻔﺖ روش آدرسدﻫﻲ اﺳﺘﻔﺎده ﻣﻲﻧﻤﺎﻳﺪ ﻛﻪ ﻋﺒﺎرﺗﻨﺪ از
-1آدرسدﻫﻲ ﺑﺪون واﺳﻄﻪ
-2آدرسدﻫﻲ ﺛﺒﺎت
-3آدرسدﻫﻲ ﻣﺴﺘﻘﻴﻢ
-4آدرسدﻫﻲ ﻏﻴﺮﻣﺴﺘﻘﻴﻢ ﺛﺒﺎت
٤٤
-5آدرسدﻫﻲ ﻣﺒﻨﺎ
-6آدرسدﻫﻲ اﻧﺪﻳﺲ ﻣﺴﺘﻘﻴﻢ
-7آدرسدﻫﻲ اﻧﺪﻳﺲ ﻣﺒﻨﺎ
از اﻳﻦ اﻣﻜﺎﻧﺎت ﻣﺘﻨﻮع آدرسدﻫﻲ ﺑﺮاي ﻋﻤﻠﻮﻧﺪﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
ﻣﺜﺎل 3-13
MOV BL , 10
داده
-3-9-2آدرسدﻫﻲ ﻣﺴﺘﻘﻴﻢ
در اﻳﻦ روش آدرس داده ﻛﻪ ﺷﺎﻧﺰدهﺑﻴﺖ ﻣﻲﺑﺎﺷﺪ ﺟﺰء دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻲﺑﺎﺷـﺪ.
ﻣﺜﺎل
MOV AX,TABLE
دﺳﺘﻮراﻟﻌﻤﻞ ﺣﺎﻓﻈﻪ
آدرس داده
-3-9-3آدرسدﻫﻲ ﺛﺒﺎت
در اﻳﻦ ﻣـﺪ آدرسدﻫـﻲ داده در ﺛﺒـﺎﺗﻲ ﻗـﺮار دارد ﻛـﻪ ﺑﻮﺳـﻴﻠﻪ دﺳـﺘﻮراﻟﻌﻤﻞ
ﻣﺸﺨﺺ ﻣﻲﺷﻮد.
٤٥
دﺳﺘﻮراﻟﻌﻤﻞ ﺛﺒﺎت
ﺛﺒﺎت داده
ﺑــﺮاي ﻋﻤﻠﻮﻧــﺪ ﺷــﺎﻧﺰدهﺑﻴﺘــﻲ از ﺛﺒﺎﺗﻬــﺎي DI ،SI ،BP ،DX ،CX ،BX ،AX
اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ﻣﺜﺎل 3-15
MOV AX , CX
و در ﻣﻮرد ﻋﻤﻠﻮﻧﺪ ﻫﺸﺖ ﺑﻴﺘﻲ از ﺛﺒﺎﺗﻬـﺎي ،CH ،CL ،BH ،BL ،AL ، AH
DH ، DLاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ﻣﺜﺎل 3-16
MOV DL , AL
]MOV AX , [BX
-3-9-5آدرسدﻫﻲ ﻣﺒﻨﺎ
در اﻳﻦ روش آدرس داده در ﻳﻜﻲ از ﺛﺒﺎﺗﻬـﺎي DI ، SI ،BP ،BXﻗـﺮار داده
ﻣﻲﺷﻮد .در اﻳﻦ روش ﻳﻚ ﺟﺎﺑﻪﺟﺎﺋﻲ ﺑﺎﻧﺪازه 8ﺑﻴﺖ ﻳﺎ 16ﺑﻴﺖ دارد.
٤٦
MOV AX,[BX]+4
ﻛﻪ ،4ﻣﻘﺪار ﺟﺎﺑﻪﺟﺎﺋﻲ و آدرس داده در BXﻗﺮار داده ﺷﺪه اﺳﺖ .دو دﺳﺘﻮر
ذﻳﻞ ﻣﻌﺎدل دﺳﺘﻮر ﻓﻮق ﻣﻲﺑﺎﺷﺪ.
دﺳﺘﻮراﻟﻌﻤﻞ
ﺛﺒﺎت ﺟﺎﺑﻪﺟﺎﺋﻲ
آدرس ﺣﺎﻓﻈﻪ
+ داده
ﺛﺒﺎت
آدرس
دﺳﺘﻮراﻟﻌﻤﻞ ﺛﺒﺎت
ﺛﺒﺎت ﭘﺎﻳﻪ ﺛﺒﺎت اﻧﺪﻳﺲ اﻧﺪﻳﺲ
آدرس ﺣﺎﻓﻈﻪ
+ داده
ﺛﺒﺎت
آدرس ﭘﺎﻳﻪ
٤٧
ﻣﺜﺎل 3-17
]MOV AX,[BX][DI
ﻣﺜﺎل 3-18
]MOV AX, VALUE [BX][DI
]MOV AX, [BX+2][DI
]MOV AX,[BX] [DI+2
دﺳﺘﻮر اﻟﻌﻤﻞ
ﺛﺒﺎت ﺛﺒﺎت ﺟﺎﺑﻪﺟﺎﺋﻲ
ﭘﺎﻳﻪ اﻧﺪﻳﺲ
ﺛﺒﺎت آدرس ﺣﺎﻓﻈﻪ
اﻧﺪﻳﺲ + داده
ﺛﺒﺎت
آدرس ﭘﺎﻳﻪ
٤٨
ﺗﻤﺮﻳﻦ
ﻓﺼﻞ ﭼﻬﺎرم
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي اﺳﺎﺳﻲ
ﻫﺪف ﻛﻠﻲ
ﻣﻌﺮﻓﻲ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي اﺳﺎﺳﻲ در زﺑﺎن اﺳﻤﺒﻠﻲ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﺧﻮاﻫﻴﺪ ﺷﺪ.
-1اﻧﺘﻘﺎل دادهﻫﺎ در ﺣﺎﻓﻈﻪ
-2دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺟﻤﻊ و ﺗﻔﺮﻳﻖ
-3دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺟﻤﻊ و ﺗﻔﺮﻳﻖ ﻣﻘﺎدﻳﺮ ﺑﺰرگ
-4ﺿﺮب و ﺗﻘﺴﻴﻢ
-5دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺿﺮب ﻣﻘﺎدﻳﺮ ﺑﺰرگ
-6دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻛﺎﻫﺶ و اﻓﺰاﻳﺶ
-7دﺳﺘﻮراﻟﻌﻤﻞ ﻣﺤﺎﺳﺒﻪ ﻣﻜﻤﻞ 2ﻳﻚ ﻣﻘﺪار.
٥١
آدرس ﺣﺎﻓﻈﻪ
2401
2402
2403
2404 65 X
2405
2406
2407
2408
300 Y
2409
2410
2411
در ﺑﺎﻻ ﺣﺎﻓﻈﻪ اﺻﻠﻲ را ﻧﺸﺎن ﻣﻲدﻫﺪ ﻛﻪ Xﻣﺘﻐﻴﺮي از ﻧﻮع ﺑﺎﻳﺖ ﺑـﺎ ﻣﺤﺘـﻮي
65و آدرس آن 2404ﻣﻲﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ Yﻣﺘﻐﻴﺮي اﺳﺖ از ﻧﻮع wordﺑﺎ ﻣﺤﺘـﻮي
300ﻛﻪ آدرس آن 2408ﻣﻲﺑﺎﺷﺪ .ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ آدرس ﻫـﺮ dataآدرس
ﺑﺎﻳﺖ ﺷﺮوع آن dataﻣﻲﺑﺎﺷﺪ .ﻣﺘﻐﻴﺮ yﭼﻮن ﺑﺎﻳﺘﻬـﺎي 2408و 2409را در ﺣﺎﻓﻈـﻪ
اﺷﻐﺎل ﻣﻲﻛﻨﺪ آدرس آن 2408ﻣﻲﺑﺎﺷﺪ .ﺣﺎل ﭼﻨﺎﻧﭽﻪ ﺑﺨﻮاﻫﻴﻢ آدرس ﻣﺘﻐﻴـﺮي را در
ﺛﺒﺎت BXﻗﺮار دﻫﻴﻢ از دﺳﺘﻮراﻟﻌﻤﻞ زﻳﺮ اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
BX Y
2408 300
BX Y
300 300
ﻣﻌﻤﻮﻻً آدرس ﻣﺘﻐﻴﺮﻫـﺎ را در ﻳﻜـﻲ از ﺛﺒﺎﺗﻬـﺎي SI, DI, BP, BXﻗـﺮار داده
ﻣﻲﺷﻮد .ﺣﺎل ﺳﻪ دﺳﺘﻮراﻟﻌﻤﻞ زﻳﺮ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
ﻫﻤﺎﻧﻄﻮر ﻛﻪ در ﺷﻜﻞ زﻳﺮ ﻧﺸﺎن داده ﺷﺪه اﺳﺖ X .ﻣﻜﺎﻧﻲ از ﺣﺎﻓﻈﻪ اﺳﺖ ﻛﻪ
ﻳﻚ wordرا اﺷﻐﺎل ﻧﻤﻮده اﺳﺖ .دﺳﺘﻮراﻟﻌﻤﻞ دوم آدرس ﻣﺘﻐﻴﺮ Xرا در ﺛﺒﺎت BX
ﻗﺮار ﻣﻲدﻫﺪ .دﺳﺘﻮراﻟﻌﻤﻞ آﺧﺮ ﻣﺤﺘـﻮي ﻣﻜـﺎﻧﻲ از ﺣﺎﻓﻈـﻪ ﻛـﻪ ﺑﻮﺳـﻴﻠﻪ BXاﺷـﺎره
ﻣﻲﺷﻮد را ﺑﻪ ﺛﺒﺎت AXﻣﻨﺘﻘﻞ ﻣﻲﻧﻤﺎﻳﺪ.
٥٥
3600
3601
3602
400 X
3603
3604
ﻣﺜﺎل 4-1
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
X DW 613,248,365,126
MOV BX, OFFSET X
MOV AX, [BX] +4
٥٦
آدرس
4000
4001
4002 X
613
4003
4004
248
4005
ﻣﺜﺎل 4-2
دﺳﺘﻮراﻟﻌﻤﻞﻫﺎي ذﻳﻞ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
آدرس
1A00 X
126
1A01 X+1
1A02 X+2
248
1A03 X+3
AX 1A04 X+4 DI
613
613 1A05 X+5 4
1A06 X+6
1260
1A07 X+7
1A08 X+8
1A09
دﺳﺘﻮراﻟﻌﻤﻞ اول اﻳﺠﺎد ﻳﻚ آراﻳﻪ ﻣﻲﻧﻤﺎﻳﺪ ﺑﻨـﺎم Xاز ﻧـﻮع wordﺑـﺎ ﻣﻘـﺎدﻳﺮ
1260،613،248 ،126ﺑﺘﺮﺗﻴـــﺐ در آدرﺳـــﻬﺎي 1A06 ،1A04 ،1A02 ،1A00از
٥٨
ﺣﺎﻓﻈﻪ .دﺳﺘﻮراﻟﻌﻤﻞ دوم ﻣﻘﺪار 4را در ﺛﺒﺎت DIﻗﺮار ﻣﻲدﻫﺪ .آﺧﺮﻳﻦ دﺳـﺘﻮراﻟﻌﻤﻞ
ﻣﺤﺘﻮي X+4ﻳﻌﻨﻲ ﻣﻘﺪار 613را در ﺛﺒﺎت AXﻗﺮار ﻣﻲدﻫﺪ.
ﻣﺜﺎل 4-3
دﺳﺘﻮراﻟﻌﻤﻞ ذﻳﻞ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
ﻣﺜﺎل 4-4
MOV ]AX, X[BP][DI
MOV ]AX, X[BX][SI
MOV ]AX, X[BP][SI
ﻛﺎﻣﭙﻴﻮﺗﺮ آدرس ﺷﺮوع اﻳﻦ ﺳﮕﻤﻨﺖﻫﺎ را ﻃﻮري اﻧﺘﺨﺎب ﻣـﻲﻧﻤﺎﻳـﺪ ﻛـﻪ ﻗﺎﺑـﻞ
ﺗﻘﺴﻴﻢ ﺑﺮ 16ﺑﺎﺷﻨﺪ ﻳﻌﻨﻲ ﭼﻬﺎر ﺑﻴﺖ ﺳﻤﺖ راﺳﺖ آدرس ﺷﺮوع ﺳـﮕﻤﻨﺖﻫـﺎ 0000
ﺑﺎﺷﺪ .در ﺣﻘﻴﻘﺖ آدرس ﺷﺮوع ﺳﮕﻤﻨﺖﻫﺎ ﺑﻴﺴﺖ ﺑﻴﺘﻲ ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﭼﻮن ﭼﻬـﺎر ﺑﻴـﺖ
ﺳـﻤﺖ راﺳـﺖ آﻧﻬـﺎ 0000ﻣـﻲﺑﺎﺷـﺪ ﺑــﻪ ﺷـﺎﻧﺰده ﺑﻴـﺖ ﺗﻘﻠﻴـﻞ ﻳﺎﻓﺘـﻪ و در ﺛﺒﺎﺗﻬــﺎي
ES ،SS ،DS ،CSﻗﺮار داده ﻣﻴﺸﻮﻧﺪ .ﺑﺮا ﻳﺎﻓﺘﻦ آدرس واﻗﻌﻲ ﻳﺎ ﻓﻴﺰﻳﻜـﻲ ﺳـﮕﻤﻨﺖ
dataدر ﺣﺎﻓﻈﻪ ﺑﺎﻳﺴﺘﻲ ﻣﺤﺘﻮي DSرا در 16ﺿﺮب ﻧﻤﻮد .ﻫﻤﺎﻧﻄﻮرﻳﻜـﻪ ﻧﻴـﺰ ﻗـﺒﻼً
ﺑﻴﺎن ﺷﺪ اﻧﺪازه ﺳﮕﻤﻨﺖﻫﺎ ﺗﺎ 64Kﺑﺎﻳﺖ ﻣﻲﺗﻮاﻧﺪ ﺑﺎﺷﺪ .آدرس ﻫـﺮ dataدر ﺣﺎﻓﻈـﻪ
ﭼــﻮن اﻳــﻦ dataدر data segmentﻗــﺮار دارد ﻣــﻲﺗــﻮان ﻧــﺴﺒﺖ ﺑــﻪ اﺑﺘــﺪاي آن
segmentﻣﺸﺨﺺ ﻧﻤﻮد ﻛﻪ ﺑﻪ اﻳﻦ آدرس offsetﮔﻔﺘﻪ ﻣﻴﺸﻮد.
آدرس در ﺣﺎﻓﻈﻪ
2A4B0ﺷﺮوع ﺳﮕﻤﻨﺖ
offset
data
64K
در ﺣﻘﻴﻘﺖ آدرس ﺳﮕﻤﻨﺖ 2A4Bدر ﺛﺒﺎت DSﻗﺮار داده ﻣﻴﺸﻮد .ﺣﺎل ﺑﺮاي
ﺑﺪﺳﺖ آوردن آدرس ﻓﻴﺰﻳﻜﻲ ﻳﺎ واﻗﻌﻲ dataﺑﻄﺮﻳﻖ ذﻳﻞ ﻋﻤﻞ ﻣﻲﻧﻤﺎﺋﻴﻢ.
*16+offsetﻣﺤﺘﻮي DS
٦٠
-4-2دﺳﺘﻮراﻟﻌﻤﻞ LEA
دﺳــــﺘﻮراﻟﻌﻤﻞ LEAﻧﻴــــﺰ آدرس ﻣﺘﻐﻴــــﺮ را در ﻳﻜــــﻲ از ﺛﺒﺎﺗﻬــــﺎي
BP ،BX ،DI ،SIﻣﻲدﻫﺪ .ﺷﻜﻞ ﻛﻠﻲ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
ﻣﺜﺎل 4-5
X DW 613
LEA BX , X
آدرس ﺣﺎﻓﻈﻪ
4000
4001
4002 X
613
4003
BX 4004
4002 4005
ﻣﺜﺎل 4-6
LEA ]SI, COL[BX
ﻣﺜﺎل 4-7
X DB ?
LEA BX, X
ﻣﺘﻐﻴﺮ Xاز ﻧﻮع ﺑﺎﻳﺖ ﺗﻌﺮﻳﻒ ﮔﺮدﻳـﺪه و آدرس آن در ﺛﺒـﺎت BXﻗـﺮار داده
ﺷﺪه اﺳﺖ.
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ دﺳﺘﻮراﻟﻌﻤﻞ LEAﺑﺮ ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
-4-3ﻣﺒﺎدﻟﻪ دادهﻫﺎ
ﺑــﺮاي ﻣﺒﺎدﻟــﻪ ﻣﺤﺘــﻮي دو آدرس داده از دﺳــﺘﻮراﻟﻌﻤﻞ XCHGاﺳــﺘﻔﺎده
ﻣﻲﮔﺮدد .ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﺤﺘﻮي srcﺑﺎ dstرا ﻣﺒﺎدﻟﻪ ﻣﻲﻧﻤﺎﻳﺪ ﻳﻌﻨﻲ ﻣﺤﺘـﻮي srcدر
dstﻗﺮار ﻣﻲﮔﻴﺮد و ﻣﺤﺘﻮي dstدر .src
در ﻣﻮرد دﺳﺘﻮراﻟﻌﻤﻞ XCHGﺑﺎﻳﺴﺘﻲ در ﻧﻈﺮ داﺷﺖ ﻛﻪ:
dst , src -1ﻧﻤﻲﺗﻮاﻧﺪ ﺛﺎﺑﺖ ﺑﺎﺷﻨﺪ.
dst , src -2ﺑﺎﻳﺴﺘﻲ ﻫﺮ دو از ﻧﻮع ﺑﺎﻳﺖ ﻳﺎ ﻫﺮ دو از ﻧﻮع wordﺑﺎﺷﻨﺪ.
dst , src -3ﻫﺮ دو ﻣﺘﻐﻴﺮ ﻧﻤﻲﺗﻮاﻧﻨﺪ ﺑﺎﺷﻨﺪ.
-4اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺮ روي ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
٦٢
ﻣﺜﺎل 4-8
MOV AX, 1000
MOV X, 3000
XCHG X, AX
ﻣﺜﺎل 4-9
XCHG AX , BX
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻓﻮق ﺑﺎﻋﺚ ﻣﺒﺎدﻟﻪ ﻣﻘـﺎدﻳﺮ Xو Yﻛـﻪ ﻫـﺮ دو از ﻧـﻮع ﺑﺎﻳـﺖ
ﻣﻲﺑﺎﺷﻨﺪ ﻣﻲﺷﻮد .ﻗﺒﻞ از اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻞﻫﺎي ﻓﻮق
X Y
65 48
-4-4ﺟﻤﻊ و ﺗﻔﺮﻳﻖ
ﺟﻤﻊ دو ﻣﻘﺪار ﺑﻮﺳﻴﻠﻪ دﺳﺘﻮراﻟﻌﻤﻞ ADDاﻧﺠﺎم ﻣﻲﺷـﻮد .ﺷـﻜﻞ ﻛﻠـﻲ اﻳـﻦ
دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
ADD dst , src
ﻣﺜﺎل 4-10
MOV AX , 613
MOV BX, 248
ADD AX , BX
-3ﺑﻪ ﺟـﺰء در ﻣﻮاردﻳﻜـﻪ ﻳﻜـﻲ از ﻋﻤﻠﻮﻧـﺪﻫﺎ ﺛﺎﺑـﺖ ﺑﺎﺷـﺪ ﺣﺘﻤـﺎً ﻳﻜـﻲ از
ﻋﻤﻠﻮﻧﺪﻫﺎ ﺑﺎﻳﺴﺘﻲ از ﻧﻮع ﺛﺒﺎت ﺑﺎﺷﺪ.
-4دﺳﺘﻮراﻟﻌﻤﻞ ADDﺑﺮ روي ﻓﻠﮓﻫﺎي AF, CF, OF, PF, SF, ZFاﺛﺮ
دارد.
ﻣﺜﺎل 4-11
X DB 13
MOV AL , 10
ADD X , AL
دﺳﺘﻮراﻟﻌﻤﻞ اول Xرا از ﻧﻮع ﺑﺎﻳـﺖ ﺗﻌﺮﻳـﻒ ﻧﻤـﻮده و ﻣﻘـﺪار آﻧـﺮا 13ﻗـﺮار
ﻣﻲ دﻫﺪ .دﺳﺘﻮراﻟﻌﻤﻞ دوم ﻣﻘﺪار 10را در ﺛﺒﺎت ALﻗﺮار ﻣﻲدﻫﺪ .دﺳﺘﻮراﻟﻌﻤﻞ ﺳﻮم
ﻣﻘﺪار ALرا ﺑﺎ ﻣﺤﺘﻮي Xﺟﻤﻊ ﻧﻤﻮده ﻧﺘﻴﺠﻪ ﻛﻪ ﻣﻲﺷﻮد 23را در Xﻗﺮار ﻣﻲدﻫـﺪ.
و ﻣﺤﺘﻮي ALﻧﻴﺰ 10ﻣﻲﺑﺎﺷﺪ.
ﻣﺜﺎل 4-12
2000
2001
2002 X
613
2003
2004 BX
248
2005 2002
2006
126
2007
2008 AX
2009 1248
ﻣﺜﺎل 4-13
ﻣﺜﺎل 4-14
X DB 12,20,5,14,26,30
MOV DI , 5
MOV AL , 20
ADD X [DI] , AL
آدرس ﺣﺎﻓﻈﻪ
A100
A101
A102 12 X
A103 20 X+1
A104 5 X+2
A105 14 X+3
A106 26 X+4
A107 30 X+5
A108
A109
AL DI
20 4
٦٧
A100
A101
A102 12 X
A103 20 X+1
A104 5 X+2
A105 14 X+3
A106 26 X+4
A107 50 X+5
A108
A109
از دﺳﺘﻮراﻟﻌﻤﻞ ADCﻧﻴﺰ ﺑﺮاي ﺟﻤﻊ ﻣﻘﺎدﻳﺮ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد .ﻓﺮم ﻛﻠـﻲ
اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ اﺳﺖ.
ADC dst , src
ﻛﻪ ﻣﺤﺘﻮي srcرا ﺑﺎ ﻣﺤﺘﻮي dstﺟﻤﻊ ﻧﻤﻮده ﻧﺘﻴﺠـﻪ را ﺑـﺎ ﻣﻘـﺪار ﻓﻠـﮓ CF
ﺟﻤﻊ ﻧﻤﻮده و ﻧﻬﺎﻳﺘﺎً ﻧﺘﻴﺠﻪ ﺑﺪﺳﺖ آﻣﺪه را در dstﻗﺮار ﻣﻲدﻫﺪ.
-3ﺑﻪ ﺟﺰء در ﻣﻮاردﻳﻜﻪ ﻳﻜﻲ از ﻋﻤﻠﻮﻧﺪﻫﺎي src , dstﺛﺎﺑﺖ ﺑﺎﺷﺪ ﻳﻜﻲ از ﻋﻤﻠﻮﻧﺪﻫﺎ
ﺑﺎﻳﺴﺘﻲ ﺣﺘﻤﺎً از ﻧﻮع ﺛﺒﺎت ﺑﺎﺷﺪ.
-4دﺳﺘﻮراﻟﻌﻤﻞ ADCروي ﻓﻠﮓﻫﺎي CF ،OF ،PF ،AF ،SF ، ZFاﺛﺮ دارد.
ﻣﺜﺎل 4-15
X DW ?
MOV AX , 1000
MOV X, 3000
ADC AX , X
X
X+2
M
Y
Y+2
M
Z
Z+2
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﻛﻪ دو ﻣﺘﻐﻴﺮ Xو Yاز ﻧـﻮع double wordرا ﺑـﺎ ﻫـﻢ ﺟﻤـﻊ
ﻧﻤﻮده و ﻧﺘﻴﺠﻪ را در ﻣﺘﻐﻴﺮ Zاز ﻧﻮع double wordﻗـﺮار ﻣـﻲدﻫـﺪ ﺑـﺼﻮرت ذﻳـﻞ
ﻣﻲﺑﺎﺷﺪ:
X DD 60000
Y DD 40000
Z DD ?
MOV AX , X
ADD AX , Y
MOV Z , AX
MOV AX, X+2
ADC AX , Y+2
MOV Z +2, AX
در wordﺑﺎ ارزش ﻛﻢ Zﻗﺮار ﻣﻲدﻫﺪ .ﺳﻪ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﻌﺪي دو ﺗﺎ wordﺑﺎ ارزش
ﺑﻴﺸﺘﺮ Xو Yرا ﺑﺎ ﻫﻢ ﺟﻤـﻊ ﻧﻤـﻮده ﺑـﺎ اﺳـﺘﻔﺎده از ADCو ﻧﺘﻴﺠـﻪ را در wordﺑـﺎ
ارزش ﺑﻴــﺸﺘﺮ Zﻗــﺮار ﻣــﻲدﻫــﺪ .ﺑﺎﻳــﺴﺘﻲ ﺗﻮﺟــﻪ داﺷــﺖ ﻛــﻪ در دﺳــﺘﻮراﻟﻌﻤﻠﻬﺎي
ADC ،ADD ، MOVﻫﺮ دو ﻋﻤﻠﻮﻧﺪ ﻧﻤﻲﺗﻮاﻧﻨﺪ ﻣﺘﻐﻴﺮ ﺑﺎﺷﻨﺪ.
ﻣﺜﺎل 4-16
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﻣﻘﺪار Xاز ﻧﻮع double wordرا ﺑﺎ ﻣﻘﺪار ﺛﺒﺎﺗﻬـﺎي DXو
AXﺟﻤﻊ ﻧﻤﻮده ﻧﺘﻴﺠﻪ را در Xﻗﺮار ﻣﻲدﻫﺪ.
DX AX
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ذﻳﻞ ﻣﺠﻤﻮع ﻣﺘﻐﻴﺮﻫـﺎي Xو Yاز ﻧـﻮع double wordو ﻋـﺪد
24را ﻣﺤﺎﺳﺒﻪ و ﻧﺘﻴﺠﻪ را در ﻣﺘﻐﻴﺮ Wﻗﺮار ﻣﻲدﻫﺪ .ﻳﻌﻨﻲ :
ﻣﻘﺪار srcاز dstﻛﻢ ﻣﻲﺷﻮد ﻧﺘﻴﺠﻪ در dstﻗﺮار ﻣﻲﮔﻴﺮد .در ﺑﻜـﺎرﮔﻴﺮي اﻳـﻦ
دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺎﻳﺴﺘﻲ ﻣﻮارد زﻳﺮ را در ﻧﻈﺮ داﺷﺖ.
-1ﻫﺮ دو ﻋﻤﻠﻮﻧﺪ ﺑﺎﻳﺴﺘﻲ از ﻳﻚ ﻧﻮع ﺑﺎﺷﻨﺪ ﻫﺮ دو از ﻧﻮع ﺑﺎﻳـﺖ ﻳـﺎ ﻫـﺮ دو از ﻧـﻮع
wordﺑﺎﺷﻨﺪ.
-2ﻫﺮ دو ﻋﻤﻠﻮﻧﺪ ﻧﺒﺎﻳﺴﺘﻲ از ﻧﻮع ﻣﺘﻐﻴﻴﺮ ﺑﺎﺷﻨﺪ.
-3ﺑﻪ ﺟـﺰء در ﻣﻮاردﻳﻜـﻪ ﻳﻜـﻲ از ﻋﻤﻠﻮﻧـﺪﻫﺎ ﺛﺎﺑـﺖ ﺑﺎﺷـﺪ ﺣﺘﻤـﺎً ﺑﺎﻳـﺴﺘﻲ ﻳﻜـﻲ از
ﻋﻤﻠﻮﻧﺪﻫﺎ از ﻧﻮع ﺛﺒﺎت ﺑﺎﺷﺪ.
٧٣
-4دﺳﺘﻮراﻟﻌﻤﻞ SUBﺑﺮ روي ﻓﻠﮓﻫﺎي SF ،AF ،PF ،OF ،CF ، ZFاﺛﺮ دارد.
-5ﻣﺤﺘﻮي ﻋﻤﻠﻮﻧﺪ dstدر ﻋﻤﻞ SUBﺗﻐﻴﻴﺮ ﻧﻤﻲﻛﻨﺪ.
ﻣﺜﺎل 4-17
MOV AL , 10
MOV BL , 6
SUB AL , BL
دﺳﺘﻮراﻟﻌﻤﻞ اول ﻣﻘﺪار 10را در ALﻗﺮار ﻣﻲدﻫﺪ .دﺳﺘﻮراﻟﻌﻤﻞ دوم ﻣﻘﺪار 6
را در BLﻗﺮار ﻣﻲدﻫﺪ و دﺳﺘﻮراﻟﻌﻤﻞ ﺳﻮم ﻣﺤﺘﻮي BLرا از ﻣﺤﺘﻮي ALﻛﻢ ﻧﻤﻮده
ﻧﺘﻴﺠﻪ را در ALﻗﺮار ﻣﻲدﻫﺪ و ﻣﻘﺪار BLﺗﻐﻴﻴﺮ ﻧﻤﻲﻛﻨﺪ.
ﻣﺜﺎل 4-18
X DW 300
Y DW 613
Z DW ?
MOV AX, X
SUB AX , Y
MOV Z , AX
ﺳﻪ دﺳﺘﻮراﻟﻌﻤﻞ اول ﺳﻪ ﻣﺘﻐﻴﺮ Xﺑﺎ ﻣﻘـﺪار 300و Yﺑـﺎ ﻣﻘـﺪار 613و Zاز
ﻧﻮع wordﺗﻌﺮﻳﻒ ﻣﻲﻧﻤﺎﻳﺪ .دﺳﺘﻮراﻟﻌﻤﻞ ﭼﻬﺎرم ﻣﺤﺘﻮي ﻣﺘﻐﻴﺮ Xرا ﺑﻪ AXﻣﻨﺘﻘـﻞ
ﻣﻲﻧﻤﺎﻳﺪ .دﺳﺘﻮراﻟﻌﻤﻞ ﺑﻌﺪي ﻣﺤﺘﻮي ﻣﺘﻐﻴﺮ Yرا از ﻣﺤﺘـﻮي ﺛﺒـﺎت AXﻛـﻢ ﻧﻤـﻮده
ﻧﺘﻴﺠﻪ را در AXﻗﺮار ﻣﻲدﻫﺪ .آﺧﺮﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﺤﺘﻮي ﺛﺒﺎت AXرا ﺑﻪ ﻣﺘﻐﻴﺮ Z
٧٤
X
300
AX
-313
M
Y
613
M
Z
-313
ﻣﺜﺎل 4-19
ARR DB 26,126,64,13,40,60
MOV SI, 4
MOV AL, 20
SUB ]AL, ARR [SI
اوﻟــﻴﻦ دﺳــﺘﻮراﻟﻌﻤﻞ ﻳــﻚ آراﻳــﻪ ﺷــﺶ ﻋﻨــﺼﺮي از ﻧــﻮع ﺑﺎﻳــﺖ ﺑــﺎ ﻣﻘــﺎدﻳﺮ
6,126,64,13,40,60ﺗﻌﺮﻳﻒ ﻣﻲ ﻧﻤﺎﻳﺪ .دﺳﺘﻮراﻟﻌﻤﻞ دوم ﻣﻘـﺪار 4را در ﺛﺒـﺎت SI
٧٥
ﻗﺮار ﻣﻲدﻫﺪ .دﺳﺘﻮراﻟﻌﻤﻞ ﺳﻮم ﻣﻘﺪار 20را در ﺛﺒـﺎت ALﻗـﺮار ﻣـﻲدﻫـﺪ .آﺧـﺮﻳﻦ
دﺳﺘﻮراﻟﻌﻤﻞ ،ﻣﺤﺘﻮي ARR+4را از ALﻛﻢ ﻧﻤﻮده ﻧﺘﻴﺠﻪ را ﻛـﻪ ﻣـﻲﺷـﻮد –20در
ALﻗﺮار ﻣﻲدﻫﺪ .و ﻣﻘﺪار ﻓﻠﮓ SFﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﻣﻲﺷﻮد.
26 X
SI 126 X+1
4 64 X+2
AL 13 X+3
-20 40 X+4
60
ﻣﺜﺎل 4-20
X DW 613
MOV AX , 248
SUB AX, 48
SUB X , AX
AX
240 400 X
از دﺳﺘﻮراﻟﻌﻤﻞ SBBﻧﻴﺰ ﺑﺮاي ﻋﻤﻞ ﺗﻔﺮﻳﻖ اﺳﺘﻔﺎده ﻣﻴﮕﺮدد .ﺷﻜﻞ ﻛﻠـﻲ اﻳـﻦ
دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
SBB dst , src
dst dst – src – CF
ﻣﺤﺘﻮي srcاز ﻣﺤﺘﻮي dstﻛﻢ ﻣﻲﺷـﻮد ﺳـﭙﺲ ﻣﻘـﺪار CFرا از ﻧﺘﻴﺠـﻪ ﻛـﻢ
ﻧﻤﻮده آﻧﮕﺎه ﻧﺘﻴﺠﻪ را در dstﻗﺮار ﻣﻲدﻫﺪ.
ﻣﺜﺎل 4-21
MOV AX , 1000
SBB AX , 800
-3ﺑﺠﺰ در ﻣﻮاردﻳﻜﻪ ﻳﻜﻲ از ﻋﻤﻠﻮﻧﺪﻫﺎ ﺛﺎﺑﺖ ﺑﺎﺷﺪ ﺣﺘﻤﺎًﺑﺎﻳﺴﺘﻲ ﻳﻜﻲ از ﻋﻤﻠﻮﻧﺪﻫﺎ از
ﻧﻮع ﺛﺒﺎت ﺑﺎﺷﺪ.
-4دﺳﺘﻮراﻟﻌﻤﻞ SBBروي ﻓﻠﮓﻫﺎي CF ،OF ،SF ،ZF ،PF ،AFاﺛﺮ دارد.
ﻣﺜﺎل 4-22
ﺑﺎ در ﻧﻈﺮ ﮔﺮﻓﺘﻦ اﻳﻨﻜﻪ ﻣﻘﺪار ﻓﻠﮓ CFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻣﻲﺑﺎﺷﺪ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ
را اﺟﺮا ﻧﻤﺎﺋﻴﺪ.
MOV AL , 100
SBB AL , 60
X DD 300000
Y DD 250000
Z DD ?
MOV AX, X
SUB AX, Y
MOV Z , AX
MOV AX , X+2
SBB AX, Y+2
MOV Z+2, AX
X
300000
X+2
M
Y
250000
Y+2
M
Z
Z+2
٧٩
و ﻧﺘﻴﺠﻪ را در دو ﺑﺎﻳﺖ اول Zﻗﺮار ﻣﻲدﻫﺪ .ﺳﻪ دﺳﺘﻮراﻟﻌﻤﻞ آﺧﺮ ﺗﻔﺎﺿـﻞ دو ﺑﺎﻳـﺖ
آﺧﺮ Xو دو ﺑﺎﻳﺖ آﺧﺮ Yرا ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮراﻟﻌﻤﻞ SBBﻣﺤﺎﺳﺒﻪ ﻧﻤﻮده و ﻧﺘﻴﺠﻪ
ﻣﺜﺎل 4-23
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪرﻳﺰ ﺗﻔﺎﺿﻞ ﻣﻘـﺪار ﻣﺘﻐﻴـﺮ Xاز ﻧـﻮع double wordﺑـﺎ ﻣﺤﺘـﻮي
AX DX
Y
-4-5ﺿﺮب دو ﻣﻘﺪار
دﺳﺘﻮراﻟﻌﻤﻞ MULو IMULﺑﺮاي ﺿﺮب دو ﻣﻘﺪار اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
دﺳﺘﻮراﻟﻌﻤﻞ MULوﻗﺘﻲ اﺳﺘﻔﺎده ﻣﻲﮔـﺮدد ﻛـﻪ ﻋﻤﻠﻮﻧـﺪﻫﺎ ﺑـﺼﻮرت ﺑـﺪون
ﻋﻼﻣﺖ ) (unsignedدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﻧﺪ .از دﺳﺘﻮر IMULوﻗﺘﻲ اﺳﺘﻔﺎده ﻣﻲﮔﺮدد
٨١
ﻛﻪ ﻋﻤﻠﻮﻧﺪﻫﺎ ﺑﺼﻮرت ﻋﻼﻣﺖ دار) (signedدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﻧﺪ .ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮر
MULﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
MUL Opr
ﻣﺜﺎل 4-24
MOV BL, 11H
MOV AL, 0B4H
MUL BL
ﻣﺜﺎل 4-25
X DB ?
MOV X, 0A5H
MOV AL, 62O
MUL X
AL
00110010
165 * 50 = 8250
165 X
AX
8250
٨٣
ﻣﺜﺎل 4-26
MOV AL , 5
MOV DL , 21
MUL DL
در اﻳﻨﺠﺎ ﻣﻘﺪار OFو CFﻫﺮ دو ﺻﻔﺮ ﻣﻲﺷﻮد ﻛﻪ ﻧﺸﺎن دﻫﻨـﺪه اﻳﻨـﺴﺖ ﻛـﻪ
ﻧﺘﻴﺠﻪ ﺣﺎﺻﻠﻀﺮب دو ﺑﺎﻳﺖ در ﻳﻚ ﺑﺎﻳﺖ ﺟﺎي ﻣﻲﺷﻮد و ﻧﺘﻴﺠﻪ در ALﻗﺮار ﻣﻲﮔﻴﺮد
و ﻣﻘﺪار ﺛﺒﺎت AHﺻﻔﺮ ﻣﻲﺑﺎﺷﺪ.
دﺳﺘﻮراﻟﻌﻤﻞ MULﻧﻴﺰ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﺣﺎﺻﻠـﻀﺮب دو ﻣﻘـﺪار از ﻧـﻮع word
ﻧﻴﺰ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد .ﺑﺮاي اﻳﻦ ﻛﺎر ﻳﻜﻲ از ﻋﻤﻠﻮﻧﺪﻫﺎ ﺑﺎﻳﺴﺘﻲ ﺣﺘﻤﺎًدر ﺛﺒﺎت AX
ﻗﺮار ﮔﻴﺮد .ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ ﻧﺘﻴﺠـﻪ ﺣﺎﺻﻠـﻀﺮب در ﺛﺒﺎﺗﻬـﺎي DX:AXﻗـﺮار
ﻣﻲﮔﻴﺮد.
ﻣﺜﺎل 4-27
MOV AX, 2000
MOV BX, 15
MUL BX
٨٤
ﻣﺜﺎل 4-28
2000
BX 2001
2002 2002 X
5000
2003
AX 2004
3000 2005
DX AX
15000000
AL
00010001
BL
10110100
128 + 32 + 16 + 4 = 180
180 – 28 = 180-256 = -76
ﻣﺜﺎل 4-29
X ? DW
MOV X, -300
MOV AX, 20
IMUL X
اوﻟﻴﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺪار Xرا از ﻧﻮع ﺑﺎﻳﺖ ﺑﺼﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲﻧﻤﺎﻳﺪ.
ﻣﺘﻐﻴﺮ X
10110110
128 + 32 + 16 + 4 + 2 = 192
192 – 256 = -64
ﺣﺎل
1 0 0 1 0 0 0 1
128 64 32 16 8 4 2 1
128 + 16 + 1 = 145
145 – 256 = -91
ﻣﺜﺎل 4-30
1 2 4 *
1 0 3
3 7 2 ﺣﺎﺻﻠﻀﺮب ﺟﺰﺋﻲ 1
0 0 0 ﺣﺎﺻﻠﻀﺮب ﺟﺰﺋﻲ 2
1 2 4 ﺣﺎﺻﻠﻀﺮب ﺟﺰﺋﻲ 3
1 2 7 7 2 ﺣﺎﺻﻠﻀﺮب ﻧﻬﺎﺋﻲ
٨٩
ﺑﺎ اﻳﻦ ﻃﺮﻳﻖ ﻣﻲﺗﻮان ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮر MULدو ﻣﻘﺪار 32ﺑﻴﺘـﻲ را ﺑـﺪون
ﻋﻼﻣﺖ را در ﻫﻢ ﺿﺮب و ﺑﻪ ﻳﻚ ﻧﺘﻴﺠﻪ 64ﺑﻴﺘﻲ رﺳﻴﺪ .در ﺷﻜﻞ زﻳـﺮ B ، C ، Dو
،Aﻫﺮ ﻛﺪام ﺑﺼﻮرت 2ﺑﺎﻳﺖ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه اﺳﺖ.
-4-7ﺗﻘﺴﻴﻢ دو ﻣﻘﺪار
ﺑﺎاﺳﺘﻔﺎده از دﺳﺘﻮراﻟﻌﻤﻞ DIVﻣﻲﺗﻮان دو ﻣﻘﺪار را ﺑﺮ ﻫﻢ ﺗﻘﺴﻴﻢ ﻧﻤﻮد .ﺷﻜﻞ
ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ DIVﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ:
DIV Opr
ﻣﺜﺎل 4-31
MOV AX , 130
MOV BL , 5
DIV BL
AX
0000000010000010
٩١
BL
00000101
AH ﺑﺎﻗﻴﻤﺎﻧﺪه
00000000
BL
00000101
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ دﺳﺘﻮراﻟﻌﻤﻞ DIVﺑﺮ روي ﻫﻴﭻ ﻓﻠﮕـﻲ اﺛـﺮ ﻧـﺪارد و
ﻣﻘﺪار ﻓﻠﮓﻫﺎي CF ،ZF ،SF ،PF ،OF ،AFﺗﻌﺮﻳـﻒ ﻧـﺸﺪه ﻣـﻲﺑﺎﺷـﻨﺪ .در ﺿـﻤﻦ
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ ﻣﻘﺪار ﻋﻤﻠﻮﻧﺪ oprﺑﺪون ﺗﻐﻴﻴﺮ ﺑﺎﻗﻲ ﻣﻲﻣﺎﻧﺪ.
ﻣﺜﺎل 4-32
X DB 10110100B
MOV AX, 0400H
DIV X
X
10110100
AX
0000010000000000
AH
01111100
ﻣﺘﻐﻴﺮ X
10110100
ﻣﺜﺎل 4-33
X DW 2600
MOV AX, 00A2H
MOV DX, 0B1CH
DIV X
DX AX
0000101100001100 0000000010100010
ﻣﺜﺎل 4-34
MOV BL, 0B4H
MOV AX, 0400H
IDIV BL
BL
10110100
AX
0000010000000000
٩٤
128 + 32 + 16 + 4 = 180
180 – 256 = -76
دوﻣﻴﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺪار 400Hرا در ﺛﺒﺎت AXﻗﺮار ﻣﻲدﻫﺪ ،ﻛﻪ ﻣﻘﺪار آن
ﺑﺮاﺑﺮ ﺑﺎ 1024ﻣﻲﺑﺎﺷﺪ .آﺧﺮﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺪار 1024را ﺑﺮ –76ﺗﻘـﺴﻴﻢ ﻧﻤـﻮده،
ﻧﺘﻴﺠﻪ ﺗﻘﺴﻴﻢ ﺑﺮاﺑﺮ ﺑﺎ –13ﻣﻲﺑﺎﺷﺪ ﻛﻪ در ﺛﺒﺎت ALﻗـﺮار داده ﻣـﻲﺷـﻮد و ﺑﺎﻗﻴﻤﺎﻧـﺪه
راﻛــﻪ ﺑﺮاﺑــﺮ ﺑــﺎ 36ﻣــﻲﺑﺎﺷــﺪ در ﺛﺒــﺎت AHﻗــﺮار ﻣــﻲدﻫــﺪ و ﻣﻘــﺪار BL
ﺑــﺪون ﺗﻐﻴﻴــﺮ ﺑــﺎﻗﻲ ﻣــﻲﻣﺎﻧــﺪ .ﻣﻘــﺎدﻳﺮ ﺛﺒﺎﺗﻬــﺎ ﭘــﺲ از اﺟــﺮاي دﺳــﺘﻮراﻟﻌﻤﻠﻬﺎ
ﻋﺒﺎرﺗﻨﺪ از :
AL
11110011
AH
00100100
BL
10110100
ﻣﺜﺎل 4-35
MOV AX, 2ACH
MOV DX, 0B2H
MOV BX, 004AH
IDIV BX
ﻣﺜﺎل 4-36
X DB 0A2H
MOV AX, 0502H
IDIV X
ﻣﺘﻐﻴﺮ X
10100010
128 + 32 + 2 = 162
162 – 256 = -94
1 0 1 0 0 0 0 0 0 1 0
1024 512 256 128 64 32 16 8 4 2 1
ﻣﺘﻐﻴﺮ X
10100010
AL
11110011
AH
00111100
ﻣﺜﺎل4-37
MOV AX, 3000
DEC AX
٩٧
ﻣﺜﺎل 4-38
X DB 130
LEA BX , X
DEC ][BX
BX 2000
2002 2001
2002 130 X
2003
2004
٩٨
BX 2000
2002 2001
2002 129
2003
در ﻣﻮرد اﺳﺘﻔﺎده از اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺎﻳﺴﺘﻲ ﻧﻜﺎت ذﻳﻞ را رﻋﺎﻳﺖ ﻧﻤﻮد.
اﻟﻒ( oprﻧﻤﻲﺗﻮاﻧﺪ ﺛﺎﺑﺖ ﺑﺎﺷﺪ.
ب( oprﺑﺎﻳﺴﺘﻲ از ﻧﻮع ﺛﺒﺎت ﻳﺎ ﻣﺘﻐﻴﺮ ﺑﺎﺷﺪ.
ج( oprﺑﺎﻳﺴﺘﻲ از ﻧﻮع ﺑﺎﻳﺖ ﻳﺎ wordﺑﺎﺷﺪ.
د( اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ روي ﻓﻠﮓﻫﺎي AF ، ZF ،OF ، SFو PFاﺛﺮ دارد.
ﻣﺜﺎل 4-39
MOV AL, 100
INC AL
ﻣﻘﺪار ALرا ﺑﻪ 101اﻓﺰاﻳﺶ ﻣﻲدﻫﺪ.
ﻣﺜﺎل 4-40
X DB 10,20,26,44,6
MOV SI , 2
MOV BX, OFFSET X
INC ][BX] [SI
٩٩
2999
3000 10 X
3001 20
BX 3002 26
3000 3003 41
3004 6
SI
2
در ﺣﻘﻴﻘﺖ ﻣﻘﺪار ﺧﺎﻧﻪ ﺣﺎﻓﻈﻪ ﺑﺎ آدرس 3002از 26ﺑﻪ 27اﻓﺰاﻳﺶ ﻣﻲﻳﺎﺑﺪ.
ﻣﺜﺎل 4-41
MOV AX, -100
NEG AX
در ﻓﺼﻞ ﻧﻬﻢ ﻧﺤﻮه ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ و اﺟﺰاي آن ﺑﻴﺎن ﮔﺮدﻳﺪه اﺳﺖ.
١٠١
در اﻳﻦ ﻓﺼﻞ دﺳﺘﻮراﻟﻌﻤﻞ ADDﺑﺮاي ﺟﻤﻊ ﻧﻤﻮدن دو ﻣﻘﺪار از ﻧﻮع ﺑﺎﻳﺖ ﻳﺎ
wordو دﺳﺘﻮراﻟﻌﻤﻞ SUBﺑﺮاي ﺗﻔﺮﻳﻖ ﻛﺮدن دو ﻣﻘﺪار از ﻧﻮع ﺑﺎﻳﺖ ﻳﺎ wordداده
ﺷﺪ .ﺷﻜﻞ ﻛﻠﻲ آﻧﻬﺎ ﺑﺼﻮرت زﻳﺮ ﻣﻲ ﺑﺎﺷﺪ.
MUL Opr
IMUL Opr
aﺗﻤﺮﻳﻦ
-1دﺳﺘﻮراﻟﻌﻤﻞ ADDروي ﻛﺪام ﻓﻠﮓ اﺛﺮ دارد؟
-2دﺳﺘﻮراﻟﻌﻤﻞ DECروي ﻛﺪام ﻓﻠﮓ اﺛﺮ ﻧﺪارد؟
-3در دﺳﺘﻮراﻟﻌﻤﻞ IDIVﻣﻘﺎدﻳﺮ ﻛﺪام ﻓﻠﮓ ﺗﻌﺮﻳﻒ ﻧﺸﺪه ﻣﻲﺑﺎﺷﺪ؟
-4اﻟﮕﻮرﻳﺘﻤﻲ را اراﻳﻪ دﻫﻴﺪ ﻛﻪ دو ﻣﻘﺪار از ﻧـﻮع double wordرا در ﻫـﻢ ﺿـﺮب
ﻧﻤﺎﻳﺪ.
-5ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﺮاي اﻟﮕﻮرﻳﺘﻢ ﺗﻤﺮﻳﻦ 4اراﻳﻪ ﻛﻨﻴﺪ.
-6دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻻزم ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﻣﺠﻤﻮع ﺛﺒﺎﺗﻬﺎي CX ،BX ،AXو DXاراﻳﻪ
ﻛﻨﻴﺪ.
-7ﺑﻪ ﭼﻨﺪ ﻃﺮﻳﻖ ﻣﻲﺗﻮان ﻣﻘﺪار ﺛﺒـﺎت AXرا ﺻـﻔﺮ ﻧﻤـﻮد؟ دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ﻻزم را
اراﻳﻪ ﻛﻨﻴﺪ.
-8دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ MULﺑﺮ ﭼﻪ ﻓﻠﮓﻫﺎﺋﻲ اﺛﺮ ﻧﺪارد؟
-9ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺠﻤﻮع ﻋﻨﺎﺻﺮ آراﻳـﻪ 5ﻋﻨـﺼﺮي Xاز ﻧـﻮع wordرا
ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ.
-10ﻗﻄﻌــﻪ ﺑﺮﻧﺎﻣــﻪاي ﺑﻨﻮﻳــﺴﻴﺪ ﻛــﻪ ﻣﺠﻤــﻮع ﻋﻨﺎﺻــﺮ آراﻳــﻪ 5ﻋﻨــﺼﺮي Xاز ﻧــﻮع
double wordرا ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ.
-11دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻌﺎدل LEAﻣﺸﺨﺺ ﻛﻨﻴﺪ.
-12دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻌﺎدل INC BXﻣﺸﺨﺺ ﻛﻨﻴﺪ.
-13ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ را ﺑﻪ اﺳﻤﺒﻠﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
;long int x,y,z,w
;w=x+y-z+30
-14ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺣﺎﺻﻠﻀﺮب ﻣﻘﺎدﻳﺮ ﺛﺒﺎﺗﻬﺎي CL ،BL ،ALو DLرا
ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ.
-15ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ را ﺑﻪ اﺳﻤﺒﻠﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
١٠٣
VAR
; X, Y, Z, W : 1 ..20
;W : = X + Y * Z-W + 100
-16ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺣﺎﺻﻠﻀﺮب ﻋﻨﺎﺻﺮ آراﻳﻪ ﭼﻬﺎر ﻋﻨـﺼﺮي Xاز ﻧـﻮع
ﺑﺎﻳﺖ را ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ؟ در ﺻﻮرﺗﻴﻜﻪ ﺑﺎ ﻣﺸﻜﻠﻲ روﺑﺮو ﺷﺪﻳﺪ ذﻛﺮ ﻧﻤﺎﺋﻴﺪ.
-17ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻣﻌﺎدل زﻳﺮ ﺑﻪ اﺳﻤﺒﻠﻲ ﺑﺪﻫﻴﺪ.
;int x, y, z, w
;w = x –y + z – 200
-18ﭼﻨﺎﻧﭽﻪ ﺑﺨﻮاﻫﻴﻢ ﻣﺤﺘﻮي ALرا ﺑﻴﻚ wordﺗﺒﺪﻳﻞ ﻧﻤـﻮده و ﻧﺘﻴﺠـﻪ را در AX
ﻗﺮار دﻫﻴﻢ ﻣﺤﺘﻮي AHﭼﻴﺴﺖ؟
-19در ﻣﻮرد ﺗﻤﺮﻳﻦ 18ﭼﻨﺎﻧﭽﻪ MSBﺛﺒـﺎت ALﺑﺮاﺑـﺮ ﻳـﻚ ﺑﺎﺷـﺪ ﻣﺤﺘـﻮي AH
ﭼﻴﺴﺖ؟
-20دﺳﺘﻮراﻟﻌﻤﻞ ﻻزم ﺑﺮاي اﻧﺠﺎم ﻣﺤﺎﺳﺒﻪ زﻳﺮ را ﻣﺸﺨﺺ ﻛﻨﻴﺪ.
;int x,y,z,w
;w = x/y * z-10
١٠٤
ﻓﺼﻞ ﭘﻨﺠﻢ
اﻧﺸﻌﺎب و ﺗﻜﺮار
ﻫﺪف ﻛﻠﻲ
آﺷﻨﺎﺋﻲ ﺑﺎ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي اﻧﺸﻌﺎب و ﺗﻜﺮار در زﺑﺎن اﺳﻤﺒﻠﻲ
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻔﺎﻫﻴﻢ و ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
-1ﭘﺮش ﻏﻴﺮ ﺷﺮﻃﻲ
-2ﭘﺮﺷﻬﺎي ﺷﺮﻃﻲ
-3ﻣﻘﺎﻳﺴﻪ
-4اﻧﻮاع دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺗﻜﺮار
ﺷﻜﻞ ﻛﻠﻲ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ .اﻳﻦ دﺳﺘﻮر روي ﻫـﻴﭻ ﻓﻠﮕـﻲ اﺛـﺮ
ﻧﺪارد.
JMP آدرس
ﻣﺜﺎل 5-1
JMP LAB2
ﻣﺜﺎل 5-2
MOV AL, 5
ADD AL, BL
JMP LAB1
MUL BL
INC BL
LAB1: SUB CX , 2
M
در ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق اﺑﺘﺪا ﻣﻘﺪار 5در ﺛﺒﺎت ALﻗﺮار ﻣﻲﮔﻴﺮد ،ﺳـﭙﺲ ﻣﻘـﺪار
BLﺑﻪ آن اﺿﺎﻓﻪ ﮔﺮدﻳﺪ .آﻧﮕﺎه ﻛﻨﺘـﺮل ﺑـﻪ LAB1ﻣﻨﺘﻘـﻞ ﻣـﻲﮔـﺮدد و دﺳـﺘﻮراﻟﻌﻤﻞ
SUBﺑﻪ ﺑﻌﺪ اﺟﺮا ﻣﻲﮔﺮدد .ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ دو دﺳﺘﻮر MULو INCاﺟﺮا
ﻧﻤﻲﺷﻮﻧﺪ.
JX آدرس
ﻣﺜﺎل 5-3
JZ LAB2
ﻣﺜﺎل 5-4
JS LAB5
ﭼﻨﺎﻧﭽﻪ ﻣﻘﺪار OFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﺑﺎﺷﺪ ﻛﻨﺘـﺮل ﺑـﻪ LAB20در ﺑﺮﻧﺎﻣـﻪ ﻣﻨﺘﻘـﻞ
ﻣﻲﮔﺮدد .از اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻌﻤﻮﻻً ﭘﺲ از اﺟﺮاي ﻋﻤﻠﻴﺎت رﻳﺎﺿﻲ اﺳﺘﻔﺎده ﻣﻲﺷﻮد.
ﻣﺜﺎل 5-6
MOV AX, -100
ADD AX, BX
SUB AX, CX
JNZ LABNEXT
M
LABNEXT: MOV CX,10
M
١٠٧
در ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ اﺑﺘﺪا ﻣﻘـﺪار –100در ﺛﺒـﺎت AXﻗـﺮار داده ﻣـﻲﺷـﻮد و
ﺳﭙﺲ ﻣﻘﺪار BXﺑﻪ آن اﻓﺰوده ﻣﻲﮔﺮدد و ﺳﭙﺲ ﻣﻘـﺪار CXاز آن ﻛـﺴﺮ ﻣـﻲﮔـﺮدد.
ﺣﺎل ﭼﻨﺎﻧﭽﻪ ﻧﺘﻴﺠﻪ ﻣﺤﺎﺳﺒﻪ ﻳﻌﻨﻲ ﻣﻘﺪار AXﻣﺨﺎﻟﻒ ﺻـﻔﺮ ﺑﺎﺷـﺪ ﻛﻨﺘـﺮل ﺑـﻪ آدرس
LABNEXTدر ﺑﺮﻧﺎﻣﻪ ﻣﻨﺘﻘﻞ ﻣﻲﮔﺮدد.
ﺟﺪول ذﻳﻞ اﻧﻮاع دﺳﺘﻮراﻟﻌﻤﻞﻫﺎي ﭘﺮش ﺷﺮﻃﻲ را ﻧﺸﺎن ﻣﻲدﻫﺪ.
ﺟﺪول 5-1
ﻧﺎم دﻳﮕﺮ
ﻋﻤﻞ ﻧﺎم دﺳﺘﻮراﻟﻌﻤﻞ ﺷﺮط ﺗﺴﺖ
دﺳﺘﻮراﻟﻌﻤﻞ
اﻧﺸﻌﺎب روي ﺻﻔﺮ JZ JE ZF=1
اﻧﺸﻌﺎب روي ﻣﺨﺎﻟﻒ ﺻﻔﺮ JNZ JNE ZF=0
اﻧﺸﻌﺎب روي ﻋﻼﻣﺖ ﻣﻨﻔﻲ JS SF=1
اﻧﺸﻌﺎب روي ﻋﻼﻣﺖ ﻏﻴﺮ ﻣﻨﻔﻲ JNS SF=0
اﻧﺸﻌﺎب روي ﺳﺮرﻳﺰي JO OF=1
اﻧﺸﻌﺎب روي ﻋﺪم ﺳﺮرﻳﺰي JNO OF=0
اﻧﺸﻌﺎب روي اﻳﺠﺎد ﺑﻴﺖ ﺗﻮازن JP JPE PF=1
اﻧﺸﻌﺎب روي ﻋﺪم اﻳﺠﺎد ﺑﻴﺖ ﺗﻮازن JNP JPO PF=0
اﻧﺸﻌﺎب روي اﻳﺠﺎد ﺑﻴﺖ ﻧﻘﻠﻲ JC CF=1
اﻧﺸﻌﺎب روي ﻋﺪم اﻳﺠﺎد ﺑﻴﺖ ﻧﻘﻠﻲ JNC CF=0
Z ZERO
S SIGN
N NOT
P PARITY
O OVERFLOW
O ODD در JPO
E EQUAL
J JUMP
E EVEN در JPE
C CARRY
ﻣﺜﺎل 5-7
TOT ? DW
MOV TOT, 0
MOV CX, 10
BEGIN: ADD TOT, CX
DEC CX
JNZ BEGIN
در ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﻣﺘﻐﻴﺮ TOTاز ﻧﻮع wordﺗﻌﺮﻳـﻒ ﮔﺮدﻳـﺪه و ﻣﻘـﺪار آن
ﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻗﺮار داده ﺷﺪه اﺳﺖ .ﻣﻘﺪار اوﻟﻴﻪ CXﻧﻴﺰ ﺑﺮاﺑﺮ ﺑﺎ 10ﻣـﻲﺑﺎﺷـﺪ .ﻗﻄﻌـﻪ
ﺑﺮﻧﺎﻣﻪ ﻧﻘﺶ ﻳﻚ ﺣﻠﻘﻪ ﺗﻜﺮار دارد ﻛﻪ ﻣﻘﺎدﻳﺮ 1ﺗﺎ 10را ﺑﺎ ﻫﻢ ﺟﻤﻊ ﻣـﻲﻧﻤﺎﻳـﺪ ﻳﻌﻨـﻲ
ﺗﺎ ﻣﺎداﻣﻴﻜﻪ ﻣﻘﺪار CXﻣﺨﺎﻟﻒ ﺻﻔﺮ ﻣﻲﺑﺎﺷﺪ ،ﻣﻘﺪار CXﺑﺎ TOTﺟﻤﻊ ﻣـﻲﮔـﺮدد و
ﻳﻚ واﺣﺪ از CXﻛﻢ ﻣﻲﮔﺮدد.
١٠٩
ﻣﺜﺎل 5-8
X ? DW
MOV AX ,X
SUB AX, 100
NEG AX
JNS ACT2
M
ACT2 : ADD BX , AX
M
ﻣﻘﺪار Xدر ﺛﺒﺎت AXﻗﺮار داده ﺷﺪه آﻧﮕﺎه 100واﺣـﺪ ﻛـﺎﻫﺶ داده ﺷـﺪه
ﺳﭙﺲ ﻣﻘﺪار AXدر ﻣﻨﻔﻲ ﻳﻚ ﺿﺮب ﺷﺪه ﺣﺎل ﭼﻨﺎﻧﭽـﻪ ﻣﻘـﺪار AXﻣﻨﻔـﻲ ﻧﺒﺎﺷـﺪ
ﻛﻨﺘﺮل ﺑﻪ ACT2ﻣﻨﺘﻘﻞ ﻣﻲﮔﺮدد .در ﻏﻴﺮ اﻳﻨﺼﻮرت اﺟـﺮاي دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ﺑﻌـﺪي
اداﻣﻪ ﻣﻲﻳﺎﺑﺪ.
-5-3دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺎﻳﺴﻪ
دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺎﻳﺴﻪ در زﺑﺎن اﺳﻤﺒﻠﻲ CMPﻣﻲﺑﺎﺷﺪ .ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ
ﻣﺜﺎل 5-9
CMP AX , BX
B Below
A Above
G Greater than
E Equal to
L Less than
C Carry
N Not
ﻣﻘﺪار اول در AXﺑﺎ ﻣﻘﺪار دوم ﻣﻘﺎﻳﺴﻪ ﻣﻲﺷﻮد ; ]CMP AX, [DI
آﻳﺎ ﻣﻘﺪار اول ﻛﻤﺘﺮ ﻳﺎ ﻣﺴﺎوي ﻣﻘﺪار دوم ﻣﻲﺑﺎﺷﺪ؟ ; JBE DONE
; ]XCHG AX , [DI در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﺒﺎدﻟﺔ ﻣﻘﺎدﻳﺮ
MOV [BX] , AX
DONE:
M
در ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣـﻪ ﺑـﺎﻻ دو ﻣﻘـﺪار از ﺣﺎﻓﻈـﻪ ﻛـﻪ ﺑﻮﺳـﻴﻠﻪ ﺛﺒﺎﺗﻬـﺎي DIو BX
ﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ را ﺑﺘﺮﺗﻴﺐ ﺻﻌﻮدي ﻣﺮﺗﺐ ﻣﻲﻧﻤﺎﻳﺪ.
١١٢
ﻣﺜﺎل 5-11
M
CMP AL , BL
JE ZERO
ﻣﺜﺎل 5-12
MOV AX , -100
CMP BX , AX
JG LAB2
ﻣﺜﺎل 5-13
MOV AX , 100
CMP BX, AX
JA LAB2
ﻋﻤﻠﻮﻧﺪﻫﺎي CMPﺑﺪون ﻋﻼﻣﺖ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮﻧﺪ.
-5-4دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺗﻜﺮار
ﻫـﺮ وﻗــﺖ ﺑﺨـﻮاﻫﻴﻢ ﺗﻌــﺪادي دﺳـﺘﻮراﻟﻌﻤﻞ ﺑــﺼﻮرت ﻣﻜـﺮر اﺟــﺮا ﮔــﺮدد از
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺗﻜﺮار ﺑﺎﻳﺴﺘﻲ اﺳﺘﻔﺎده ﻧﻤﺎﺋﻴﻢ .دﺳـﺘﻮراﻟﻌﻤﻞ ﺗﻜـﺮار در زﺑـﺎن اﺳـﻤﺒﻠﻲ
LOOPﻣﻲﺑﺎﺷﺪ ﻛﻪ ﺷﻜﻞ ﻛﻠﻲ آن ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
LOOP آدرس
ﻫﺮ وﻗﺖ ﻛﻨﺘﺮل ﺑﺪﺳﺘﻮر LOOPﻣﻴﺮﺳﺪ اﺑﺘﺪا ﻣﻘـﺪار ﺛﺒـﺎت CXﻳـﻚ واﺣـﺪ
ﻛﺎﻫﺶ ﻳﺎﻓﺘﻪ ﺳﭙﺲ ﻣﺤﺘﻮي ﺛﺒـﺎت CXﺑـﺎ ﺻـﻔﺮ ﻣﻘﺎﻳـﺴﻪ ﻣـﻲﮔـﺮدد و در ﺻـﻮرﺗﻴﻜﻪ
ﻣﺤﺘﻮي ﺛﺒﺎت CXﻣﺨﺎﻟﻒ ﺻﻔﺮ ﺑﺎﺷﺪ ﻛﻨﺘﺮل ﺑـﻪ آدرس داده ﺷـﺪه ﻣﻨﺘﻘـﻞ ﻣـﻲﮔـﺮدد.
ﺗﻌﺪاد دﻓﻌﺎت ﺗﻜﺮار ﻋﻤﻼً ﺑﺎﻳﺴﺘﻲ در ﺛﺒﺎت CXﻗﺮار داد .دﺳـﺘﻮراﻟﻌﻤﻞ LOOPروي
ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
ﻣﺜﺎل 5-14
MOV CX , 10
LABI:
M
LOOP LABI
اﻳﻦ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻣﻌﺎدل ﺑﺮﻧﺎﻣﻪ ﭘﺎﺳﻜﺎل زﻳﺮ ﻣﻲﺑﺎﺷﺪ ﻳﻌﻨﻲ داﻣﻨـﻪ ﺗﻜـﺮار ده ﺑـﺎر
اﺟﺮا ﻣﻲﮔﺮدد.
١١٤
FOR I: =1 TO 10 DO
BEGIN
M
; END
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﻣﺠﻤﻮع ﻋﻨﺎﺻﺮ آراﻳـﻪ Xﻛـﻪ از ﻧـﻮع Wordو Nﻋﻨـﺼﺮي
ﻣﻲﺑﺎﺷﺪ را ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮده ﻧﺘﻴﺠﻪ را در ﻣﺘﻐﻴﺮ TOTALﻗﺮار ﻣﻲدﻫﺪ.
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ آراﻳـﻪ Nﻋﻨـﺼﺮي Aاز ﻧـﻮع wordرا ﺑـﺼﻮرت ﺻـﻌﻮدي
Bubble ; Sort
N DW ?
MOV CX , N
DEC CX
LOOP 1: MOV DI , CX
MOV BX , 0
LOOP2: MOV ]AX , A[BX
CMP ]AX, A[BX+2
JGE CONTINUE
XCHG ]AX, A[BX+2
MOV A [BX] , AX
CONTINUE: ADD BX,2
LOOP LOOP2
MOV CX , DI
LOOP LOOP1
ﻣﺜﺎل5-15
ARR DB
N DW
MOV CX , N
MOV SI , -1
MOV AL, 20H; ASCII code for blank
NEXT: INC SI
CMP AL, ARR[SI]; test for blank
LOOPNE NEXT
JNZ NOT_FOUND
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ رﺷﺘﺔ داده ﺷﺪه Nﻋﻨﺼﺮي ARRاز ﻧﻮع ﺑﺎﻳـﺖ را ﺟـﺴﺘﺠﻮ
ﻣﻲﻧﻤﺎﻳﺪ ﻛﻪ آﻳﺎ ﻛﺎرﻛﺘﺮ blankﻳﺎ ﻓﺎﺻﻠﻪ در رﺷﺘﻪ وﺟﻮد دارد ﻳﺎ ﺧﻴﺮ؟
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ دﺳﺘﻮر ﺗﻜﺮار ﺑﺎﻻ وﻗﺘﻲ ﻣﺘﻮﻗﻒ ﻣﻲﺷﻮد ﻛﻪ ﻋﻨﺎﺻﺮ رﺷﺘﻪ
ﻫﻤﻪ ﻣﻮرد ﺑﺮرﺳﻲ ﻗﺮار ﮔﺮﻓﺘﻪ ﺑﺎﺷﻨﺪ ﻳﺎ ﺑﻪ ﻛﺎرﻛﺘﺮ ﻓﺎﺻﻠﻪ رﺳﻴﺪه ﺑﺎﺷـﻴﻢ .ﺷـﻜﻞ دﻳﮕـﺮ
دﺳﺘﻮراﻟﻌﻤﻞ ﺗﻜﺮار ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
LOOPE آدرس
ﻳﺎ
LOOPZ آدرس
ﺑﺮﻧﺎﻣﻪ ﻓﻮق ﻳﻚ ﺑﻠﻮك از ﺣﺎﻓﻈـﻪ ﻛـﻪ آدرس ﺷـﺮوع ان ﺗﻮﺳـﻂ ﺛﺒـﺎت BXو
آدرس اﻧﺘﻬﺎي آن ﺗﻮﺳﻂ ﺛﺒﺎت DIﻣﺸﺨﺺ ﺷﺪه را ﺑﺎﻳﺖ ﺑـﻪ ﺑﺎﻳـﺖ ﺟـﺴﺘﺠﻮ ﻧﻤـﻮده
ﺑﺮاي ﻳﺎﻓﺘﻦ ﻋﻨﺼﺮي ﻛﻪ ﻣﺨﺎﻟﻒ ﺻﻔﺮ ﺑﺎﺷﺪ.
ﺷﻜﻞ دﻳﮕﺮ دﺳﺘﻮر ﺗﻜﺮار ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
JCXZ آدرس
در ﺣﻘﻴﻘﺖ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻳﻚ ﻧﻮع دﺳﺘﻮراﻟﻌﻤﻞ ﭘﺮش ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﺑﺮاﺳﺎس
ﻓﻠﮕﻬﺎ ﻋﻤﻞ ﻧﻤﻲﻛﻨﺪ ﺑﻠﻜﻪ ﺑﺮاﺳﺎس ﻣﺤﺘﻮي ﺛﺒﺎت CXﻋﻤﻞ ﻣﻲﻛﻨﺪ .ﭼﻨﺎﻧﭽـﻪ ﻣﺤﺘـﻮي
CXﻣﺴﺎوي ﺻﻔﺮ ﺑﺎﺷﺪ ﻛﻨﺘﺮل ﺑﻪ آدرس داده ﺷﺪه ﻣﻨﺘﻘﻞ ﻣﻲﺷﻮد .اﻳـﻦ دﺳـﺘﻮراﻟﻌﻤﻞ
روي ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد .ﻧﻬﺎﻳﺘﺎً ﺟﺪول ذﻳﻞ را دارﻳﻢ.
ﺟﺪول 5-4
ﻋﻤﻞ ﻧﺎم ﻧﺎم دﻳﮕﺮ ﺷﺮط ﺗﻜﺮار
LOOP LOOP CX < > 0
LOOP While equal
LOOPE LOOPZ CX < > 0 and ZF=1
or zero
LOOP while not
LOOPNE LOOPNZ CX < > 0 and ZF=0
equal or nonzero
Branch on CX JCXZ CX=0
١١٨
در اﻳﻦ ﻓﺼﻞ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﭘﺮﺳﺶ ﺗﺸﺮﻳﺢ ﮔﺮدﻳـﺪه اﻳـﻦ دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎ ﺑـﺮ
اﺳﺎس ﻓﻠﮓﻫﺎ ﻋﻤﻞ ﻣﻲﻧﻤﺎﻳﻨﺪ .ﺿﻤﻨﺎً دﺳﺘﻮراﻟﻌﻤﻞﻫﺎي ﺗﻜﺮار ﻧﻴﺰ ﻣﻄﺮح ﮔﺮدﻳﺪه اﺳـﺖ
ﻛـﻪ در دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎ ﺗﻜـﺮار ﺗﻌـﺪاد دﻓﻌـﺎت ﺗﻜـﺮار در ﺛﺒـﺎت CXﻗـﺮار ﻣـﻲﮔﻴـﺮد.
دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺎﻳﺴﻪ CMPﻣﻲﺑﺎﺷﺪ ﻛﻪ ﻣﺎﻧﻨﺪ دﺳﺘﻮراﻟﻌﻤﻞ SUBﻋﻤـﻞ ﻧﻤـﻮده وﻟـﻲ
ﻧﺘﻴﺠﻪ در ﺟﺎﺋﻲ ذﺧﻴﺮه ﻧﻤﻲﮔﺮدد ﺑﻠﻜﻪ روي ﻓﻠﮕﻬﺎ اﺛﺮ ﻣﻲﮔﺬارد.
١١٩
aﺗﻤﺮﻳﻦ
-6اﮔﺮ در اﺑﺘﺪا ﻣﺤﺘﻮي CXرا ﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻗﺮار دﻫﻴﻢ .ﺣﻠﻘﻪ ﺗﻜﺮار ﭼﻨﺪ ﺑﺎر اﺟﺮا ﻣﻲ
ﮔﺮدد؟
;S:=0
FOR I:=1 TO N DO
; S : = S+I
-10آﻳﺎ ﻣﻲﺗﻮان ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﻧﻮﺷﺖ ﻛﻪ Nﻣﻘﺪار را ﺑﺮوش ﻣﺮﺗـﺐ ﺳـﺎزي درﺟـﻲ
ﺑﺼﻮرت ﺻﻌﻮدي ﻣﺮﺗﺐ ﻧﻤﺎﻳﺪ؟
-11ﻳﻚ ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺪﻫﻴﺪ ﻛﻪ آراﻳﻪ Nﻋﻨﺼﺮي Xاز ﻧـﻮع ﺑﺎﻳـﺖ را از ﻧﻈـﺮ ﻣﻜـﺎﻧﻲ
وارون ﻧﻤﺎﻳﺪ.
-12ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﺪﻫﻴﺪ ﻛﻪ آراﻳﻪ Nﻋﻨـﺼﺮي Xاز ﻧـﻮع wordرا در ﻧﻈـﺮ ﮔﺮﻓﺘـﻪ
ﻋﻨﺎﺻﺮ ﻣﺨﺎﻟﻒ ﺻﻔﺮ آﻧﺮا در آراﻳﻪ دﻳﮕﺮي ﺑﻨﺎم Yﻗﺮار دﻫﺪ )در ﺻﻮرت ﻟﺰوم اﻧﺘﻬـﺎي
آراﻳﻪ Yﺧﺎﻟﻲ ﺑﻤﺎﻧﺪ(.
-13ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﻘﺪار ﺻﺤﻴﺢ و ﻣﺜﺒﺖ Nرا در ﻧﻈﺮ ﮔﺮﻓﺘـﻪ ﻓﺎﻛﺘﻮرﻳـﻞ
آﻧﺮا ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ.
١٢١
-14ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ آراﻳﻪ Nﻋﻨﺼﺮي Xاز ﻧﻮع wordرا در ﻧﻈـﺮ ﮔﺮﻓﺘـﻪ
ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ آراﻳﻪ را ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ.
-15ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ آراﻳـﻪ Nﻋﻨـﺼﺮي Xاز ﻧـﻮع double wordرا در
ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻛﻮﭼﻜﺘﺮﻳﻦ ﻋﻨﺼﺮ آراﻳﻪ را ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ.
-16ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ آراﻳﻪ Nﻋﻨﺼﺮي Xاز ﻧﻮع wordرا در ﻧﻈـﺮ ﮔﺮﻓﺘـﻪ
اﻧﺪﻳﺲ ﺑﺰرﮔﺘﺮﻳﻦ ﻋﻨﺼﺮ آراﻳﻪ را ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ.
-18ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ آﻳﺎ ﻋﺪد Nاول ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺧﻴﺮ؟
-19ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ آﻳﺎ ﻋﺪد Nﻛﺎﻣﻞ ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺧﻴﺮ؟
-20ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛـﻪ ﻣﻘـﺪار Nاز ﻧـﻮع ﺑﺎﻳـﺖ را ﮔﺮﻓﺘـﻪ NXرا ﻣﺤﺎﺳـﺒﻪ
ﻧﻤﺎﻳﺪ.
-21ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ آراﻳﻪ Nﻋﻨﺼﺮي Xاز ﻧﻮع wordرا ﮔﺮﻓﺘﻪ ﻣﻴﺎﻧﻪ آﻧﺮا
ﻣﺸﺨﺺ ﻧﻤﻮد در MIDﻗﺮار دﻫﺪ.
١٢٢
ﻓﺼﻞ ﺷﺸﻢ
ﻋﻤﻠﻴﺎت ﺑﻴﺘﻲ
ﻫﺪف ﻛﻠﻲ
آﺷﻨﺎﺋﻲ ﺑﺎ ﻋﻤﻠﻴﺎت روي ﺑﻴﺖﻫﺎ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﺧﻮاﻫﻴﺪ ﺷﺪ.
-1ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘﻲ و ﻋﻤﻠﮕﺮﻫﺎي واﺑﺴﺘﻪ
-2ﻋﻤﻠﻴﺎت ﺷﻴﻔﺖ ﺑﻴﺖﻫﺎ
-3ﻋﻤﻠﻴﺎت ﭼﺮﺧﺶ ﺑﻴﺖﻫﺎ
-4ﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ ﻓﻠﮓﻫﺎ
-5ﺗﺒﺪﻳﻞ ﺣﺮوف ﻛﻮﭼﻚ ﺑﻪ ﺑﺰرگ و ﺑﺎﻟﻌﻜﺲ.
١٢٣
-6-1ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘﻲ
از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﻨﻄﻘﻲ ﺑﺮاي اﻧﺠﺎم ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘﻲ اﺳﺘﻔﺎده ﻣـﻲﺷـﻮد .اﻳـﻦ
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﺑﺼﻮرت ﺑﻴﺘﻲ روي ﻋﻤﻠﻮﻧﺪﻫﺎ ﻋﻤﻞ ﻣﻲﻧﻤﺎﻳﺪ .ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘـﻲ ﻋﺒﺎرﺗﻨـﺪ
از XOR ،OR ،AND ،NOTو . TEST
-6-1-1دﺳﺘﻮراﻟﻌﻤﻞ NOT
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ NOTﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
NOT opr
ﻣﺜﺎل 6-1
MOV DL , 8AH
NOT DL
-6-1-2دﺳﺘﻮراﻟﻌﻤﻞ AND
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ ANDﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
AND dst , src
ﻣﺜﺎل 6-2
MOV AL , 5BH
MOV DH, 4DH
AND AL, DH
AL 01011011
DH 01001101
-6-1-3دﺳﺘﻮراﻟﻌﻤﻞOR
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ ORﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
OR dst , src
ﻣﺜﺎل6-3
MOV BL , 0A5H
MOV AL, 2AH
OR AL , BL
BL 10100101
AL 00101010
BL 10100101
AL 10101111
-6-1-4دﺳﺘﻮراﻟﻌﻤﻞ XOR
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ XORﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
ﺟﺪول 6-3
ﻣﺜﺎل6-4
MOV CL, 2DH
MOV AL , 0C2H
XOR AL , CL
AL 11000010
CL 00111101
دﺳﺘﻮراﻟﻌﻤﻞTEST -6-1-5
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ TESTﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ:
TEST opr1, opr2
ﻣﺜﺎل 6-5
MOV AL , 25
MOV DH , 0E4H
TEST AL , DH
AL 00011001
DH 11100100
AL 00011001
DH 11100100
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ ﻛﺮد ﻛﻪ دﺳﺘﻮراﻟﻌﻤﻞ TESTﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﻣﻘﺪار ZFﺑﺮاﺑـﺮ
ﺑﺎ ﻳﻚ ﮔﺮدد.
ﻣﺜﺎل 6-6
MOV AL , 0ABH
NOT AL
TEST AL, 10100101B
JZ YES
M
YES:
M
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق ﻣﺸﺨﺺ ﻣﻲﻧﻤﺎﻳﺪ ﻛﻪ آﻳﺎ ﻣﻘﺎدﻳﺮ ﺑﻴﺖﻫﺎي 2 ،5 ،7و 0ﺛﺒـﺎت
ALﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺧﻴﺮ؟ ﻣﻘﺪار 10100101Bﻋﻤﻼً MASKﻣﻲﺑﺎﺷـﺪ ﻛـﻪ
١٢٩
در ﺑﻴﺖﻫﺎﺋﻲ ﻛﻪ ﻣﻲﺧﻮاﻫﻴﻢ ﺑﺮاي ﻳﻚ ﺑﻮدن ﺗﺴﺖ ﺷﻮد ﻣﻘﺪار ﻳﻚ و در ﺳﺎﻳﺮ ﺑﻴﺖﻫـﺎ
ﻣﻘﺪار ﺻﻔﺮ را ﻗﺮار ﻣﻲدﻫﻴﻢ.
AL 10101011
AL 01010100
MASK 10100101
ﻣﺜﺎل 6-7
OR DL, 00000101B
XOR DL, 01000010B
AND DL, 11100111B
MOV AL, DL
NOT AL
TEST AL, 10000010B
JZ EXIT
M
EXIT:
M
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق اﺑﺘﺪا ﺑﻴﺖﻫﺎي ﺷﻤﺎره 0و 2ﺛﺒﺎت DLرا ﻳﻚ ﻣﻲﻛﻨﺪ و ﺑﻴـﺖ
ﻫﺎي ﺷﻤﺎره 4و 3را ﺑﻪ ﺻﻔﺮ ﺗﺒﺪﻳﻞ ﻣﻲﻛﻨﺪ و ﺑﻴﺖﻫﺎي ﺷﻤﺎره 1و 6را ﻣﻜﻤـﻞ ﻣـﻲ-
ﻧﻤﺎﻳﺪ در ﺿﻤﻦ ﭼﻨﺎﻧﭽﻪ ﺑﻴﺖﻫﺎي ﺷﻤﺎره 7و 1ﺑﺮاﺑﺮ ﺑﺎ ﻳـﻚ ﺑﺎﺷـﻨﺪ ﻛﻨﺘـﺮل ﺑـﻪ EXIT
ﻣﻨﺘﻘﻞ ﻣﻲﻧﻤﺎﻳﺪ.
١٣٠
ﻣﺜﺎل 6-8
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺑﻴﺖﻫﺎي ﺷﻤﺎره ﻓﺮد ﺛﺒﺎت ALرا ﻣﻜﻤﻞ ﻣﻲﻧﻤﺎﻳﺪ .ﻳﻌﻨﻲ 1ﺑﻪ
0و 0ﺑﻪ 1ﺗﺒﺪﻳﻞ ﻣﻲﻧﻤﺎﻳﺪ.
MOV AL, 0C7H
MOV MASK, 10101010B
XOR AL, MASK
AL 11000111
MASK 10101010
AL 01101101
MASK 10101010
ﻣﺜﺎل 6-9
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺑﻴﺖﻫﺎي ﺷﻤﺎره زوج ﺛﺒﺎت ALرا ﺑﻪ ﻳﻚ ﺗﺒﺪﻳﻞ ﻣﻲﻧﻤﺎﻳﺪ.
AL 10100110
MASK 01010101
١٣١
AL 11110111
MASK 01010101
ﻣﺜﺎل 6-10
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺑﻴﺖﻫﺎي ﺷﻤﺎره ﻓﺮد ALرا ﺑﻪ ﺻﻔﺮ ﺗﺒﺪﻳﻞ ﻣﻲﻧﻤﺎﻳﺪ.
AL 11000111
MASK 01010101
AL 01000101
MASK 01010101
در ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ اﮔﺮ ﺑﻴﺖﻫﺎي ﺷﻤﺎره 1و 14ﻳﺎ ﺑﻴـﺖﻫـﺎي ﺷـﻤﺎره 9و 7
ﺛﺒﺎت AXﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﺑﺎﺷﻨﺪ ﻛﻨﺘﺮل ﺑﻪ TASK 1و اﮔﺮ ﺑﻴﺖ 3ﻳـﺎ 4ﺑﺮاﺑـﺮ ﺑـﺎ ﻳـﻚ
ﺑﺎﺷﻨﺪ ﻛﻨﺘﺮل ﺑﻪ TASK2در ﻏﻴﺮ اﻳﻨﺼﻮرت ﻛﻨﺘﺮل ﺑﻪ TASK3ﻣﻨﺘﻘﻞ ﻣﻲﮔﺮدد.
١٣٢
NOT AX
TEST AX, 4002H
JZ TASK1
TEST AX, 280H
JZ TASK1
NOT AX
TEST AX, 18H
JNZ TASK2
TASK3:
M
TASK1:
M
TASK2:
M
-6-2ﻋﻤﻠﻴﺎت ﺷﻴﻔﺖ
ﻋﻤﻠﻴﺎت ﺷﻴﻔﺖ ﺑﺎﻋﺚ ﺗﻐﻴﻴﺮ ﻣﻜﺎن ﺑﻴﺖﻫﺎي ﻳﻚ ﺑﺎﻳﺖ ﻳﺎ ﻳـﻚ wordﺑﻄـﺮف
ﭼﭗ ﻳﺎ راﺳﺖ ﻣﻲﺷﻮد .دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﺘﻌﺪدي ﺑﺮاي اﻳﻦ ﻛـﺎر ﻣـﻮرد اﺳـﺘﻔﺎده ﻗـﺮار
ﻣﻲﮔﻴﺮﻧﺪ ﻛﻪ ﻋﺒﺎرﺗﻨﺪ از:
-6-2-1دﺳﺘﻮراﻟﻌﻤﻞSHL
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ SHLﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
اﻟﻒ( cntﺗﻌﺪاد ﺑﻴﺖﻫﺎﺋﻲ ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﺑﻄﺮف ﭼﭗ ﺷﻴﻔﺖ داده ﻣﻲﺷﻮد .در ﺻﻮرﺗﻴﻜﻪ
cntﻣﺨﺎﻟﻒ ﻳﻚ ﺑﺎﺷﺪ از ﺛﺒﺎت CLاﺳﺘﻔﺎده ﻣﻲﻧﻤﺎﺋﻴﻢ.
١٣٣
0
CF opr
ﻣﺜﺎل 6-11
SHL AX, CL
SHL BL, CL
SHL AL, 1
STC 1
MOV CL, 3
MOV DL, 8DH
SHL DL , CL
DL 10001101
١٣٤
CL 00000011
DL 01101000
CF 0
-6-2-2دﺳﺘﻮراﻟﻌﻤﻞSHR
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ SHRﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
0
opr CF
ﻣﺜﺎل 6-12
SHR DL, 1
SHR AL, CL
١٣٥
ﻣﺜﺎل 6-13
STC 1
MOV CL , 3
MOV DL, 8DH
SHR DL, CL
CL 00000011
DL 10001101
CF 1
CL 00000011
DL 00010001
CF 1
-6-2-3دﺳﺘﻮراﻟﻌﻤﻞ SAL
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ SALﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
0
CF opr
ﻣﺜﺎل 6-14
SAL DL, 1
SAL AL, CL
SAL [BX] , CL
SAL ARR [SI], CL
ﻣﺜﺎل 6-15
STC
MOV CL , 3
MOV DL, 8DH
SAL DL, CL
CL 00000011
DL 10001101
CF 1
CL 00000011
DL 01101000
CF 0
١٣٧
دﺳﺘﻮراﻟﻌﻤﻞSAR -6-2-4
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ SARﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
SAR opr , cnt
opr CF
ﻣﺜﺎل 6-16
SAR DL, 1
SAR AX , CL
SAR [BX], CL
ﻣﺜﺎل 6-17
MOV CL,3
STC
MOV DL, 8DH
SAR DL, CL
١٣٨
CL 00000011
DL 10001101
CF 1
CL 00000011
DL 11110001
CF 1
دﺳﺘﻮراﻟﻌﻤﻞROL -6-3-1
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ ROLﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
CF
opr
ﻣﺜﺎل 6-18
ROL DL, CL
ROL BX , 1
ROL [BX] , CL
ﻣﺜﺎل 6-19
MOV CL,3
MOV DL, 8DH
STC 1
ROL DL, CL
CL 00000011
DL 10001101
CF 1
١٤٠
CL 00000011
DL 01101100
CF 0
-6-3-2دﺳﺘﻮراﻟﻌﻤﻞROR
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ RORﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ:
CF
opr
١٤١
ﻣﺜﺎل 6-20
ROR DL, 1
ROR BX, CL
ROR AL, CL
ROR X[DI],CL
ﻣﺜﺎل 6-21
MOV CL, 3
STC
MOV DL, 8DH
ROR DL, CL
CL 00000011
DL 10001101
CF 1
CL 00000011
DL 10110001
CF 1
-6-3-3دﺳﺘﻮراﻟﻌﻤﻞRCL
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ RCLﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
اﻟﻒ( ﭼﻨﺎﻧﭽﻪ ﻣﻘﺪار cntﻳـﻚ ﺑﺎﺷـﺪ ﻣﻘـﺪار 1ﻧﻮﺷـﺘﻪ ﻣـﻲﺷـﻮد در ﻏﻴـﺮ اﻳﻨـﺼﻮرت
از ﺛﺒﺎت CLاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ب( oprﺑﺎﻳﺴﺘﻲ از ﻧﻮع ﺑﺎﻳﺖ ﻳﺎ wordﺑﺎﺷﺪ.
ج( oprﺑﺎﻳﺴﺘﻲ ﻣﺘﻐﻴﺮ ﻳﺎ ﺛﺒﺎت ﺑﺎﺷﺪ opr .ﻣﻘﺪار ﺛﺎﺑﺖ ﻧﻤﻲﺗﻮاﻧﺪ ﺑﺎﺷﺪ.
د( روي ﻓﻠﮓ CFاﺛﺮ دارد.
ﻫـ ( دﺳﺘﻮراﻟﻌﻤﻞ RCLﺑﺎﻧﺪازه cntﺑﻴﺖ از ﺑﻴـﺖﻫـﺎي oprرا از ﻃـﺮف ﭼـﭗ و از
ﻃﺮﻳﻖ ﺑﻴﺖ CFﭼﺮﺧﺶ ﻣﻲدﻫﺪ.
CF opr
ﻣﺜﺎل 6-22
RCL DL, 1
RCL BX, CL
RCL AL, CL
RCL BL, 1
RCL [BX],CL
ﻣﺜﺎل 6-23
MOV CL, 3
MOV DL, 8DH
STC
RCL DL, CL
ﻣﻘﺎدﻳﺮ ﻗﺒﻞ از اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻞ RCL
DL 10001101
CL 00000011
CF 1
١٤٣
CL 00000011
DL 01101110
CF 0
-6-3-4دﺳﺘﻮراﻟﻌﻤﻞRCR
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ RCRﺑﺼﻮرت ذﻳﻞ ﻣﻲﺑﺎﺷﺪ:
opr CF
١٤٤
6-24 ﻣﺜﺎل
RCR DL, 1
RCR [BX], CL
RCR AL, CL
RCR X[BX][DI],CL
RCR [BX], 1
6-25 ﻣﺜﺎل
MOV CL, 3
MOV DL, 8DH
STC
RCR DL, CL
CL 00000011
DL 10001101
CF 1
CL 00000011
DL 01110001
CF 1
١٤٥
-6-4ﻋﻤﻠﻴﺎت ﻓﻠﮓﻫﺎ
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﺮﺑﻮط ﺑﻪ ﻋﻤﻠﻴﺎت روي ﻓﻠﮕﻬﺎ در ذﻳـﻞ داده ﺷـﺪه اﻧـﺪ .اﻳـﻦ
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻋﺒﺎرﺗﻨﺪ از:
ﺟﺪول 6-4
Clear Carry CLC CFﺻﻔﺮ ﻣﻲﺷﻮد
Complement Carry CMC CFﻣﻜﻤﻞ ﻣﻲﺷﻮد
Set Carry STC CFﻳﻚ ﻣﻲﺷﻮد
Clear Direction CLD DFﺻﻔﺮ ﻣﻲﺷﻮد
Set Direction STD DFﻳﻚ ﻣﻲﺷﻮد
Clear Interrupt CLI IFﺻﻔﺮ ﻣﻲﺷﻮد
Set Interrupt STI IFﻳﻚ ﻣﻲﺷﻮد
LAHF
⎯
→⎯
Flag register AH
SAHF
ﻣﻲﻛﻨﺪ.
-6-5ﺗﺒﺪﻳﻞ ﺣﺮوف
ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﻣﻴﺪاﻧﻴﺪ ﺑﻪ ﻫﺮ ﻛﺎرﻛﺘﺮ ﻳﻚ ﻛﺪ اﺳﻜﻲ ﺑـﻴﻦ 0ﺗـﺎ 255ﺗﺨـﺼﻴﺺ
ﻣﻲﻳﺎﺑﺪ .ﻛﺪاﺳﻜﻲ ﺑﺮاي ﺣﺮوف ﺑﺰرگ Aﺗﺎ Zﺑﺘﺮﺗﻴـﺐ از 65ﺗـﺎ 90ﻳـﺎ از 41Hﺗـﺎ
5AHﻣﻲﺑﺎﺷﺪ .ﺣﺮوف ﻛﻮﭼﻚ ﻧﻴﺰ داراي ﻛﺪ اﺳـﻜﻲ ﺑـﻴﻦ 97ﺗـﺎ 122ﻳـﺎ 61Hﺗـﺎ
7AHﻣﻲﺑﺎﺷﻨﺪ.
A 65 01000001
A 97 01100001
Z 90 01011010
Z 122 01111010
١٤٧
ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﻣﻼﺣﻈﻪ ﻣﻲﻛﻨﻴﺪ ﺗﻔﺎوت ﻧﻤﺎﻳﺶ ﺑـﻴﻦ Aو aﻳـﺎ Zو zدر ﺑﻴـﺖ
ﺷﻤﺎره 5آﻧﻬﺎ ﻣﻲﺑﺎﺷﺪ .ﺑﻨﺎﺑﺮاﻳﻦ ﻧﺘﻴﺠﻪ ﻣﻲﮔﻴﺮﻳﻢ ﺑﺮاي ﺗﺒﺪﻳﻞ ﺣﺮوف ﻛﻮﭼﻚ ﺑﻪ ﺑﺰرگ
ﻛﺎﻓﻲ اﺳﺖ ﻛﻪ ﺑﺼﻮرت زﻳﺮ ﻋﻤﻞ ﻧﻤﺎﺋﻴﻢ.
,ﺣﺮف ﻛﻮﭼﻚ AND 00100000B
و ﺑﺮاي ﺗﺒﺪﻳﻞ ﺣﺮوف ﺑﺰرگ ﺑﻪ ﺣﺮوف ﻛﻮﭼﻚ ﻛﺎﻓﻲ اﺳﺖ ﻛﻪ ﺑﺼﻮرت زﻳـﺮ
ﻋﻤﻞ ﺷﻮد
OR ,ﺣﺮف ﺑﺰرگ 00100000B
ﻣﺜﺎل 6-26
در رﺷﺘﺔ STRﺣﺮوف ﻛﻮﭼﻚ را ﺑﻪ ﺑﺰرگ ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ .ﺑﺎﻳﺴﺘﻲ ﻛﻨﺘﺮل ﺷﻮد
ﻛﻪ ﻛﺎرﻛﺘﺮ از ﻧﻮع ﺣﺮوف ﻛﻮﭼﻚ ﻣﻲﺑﺎﺷﺪ ﺳﭙﺲ ﺑـﻪ ﺣـﺮوف ﺑـﺰرگ ﻣﺘﻨـﺎﻇﺮ ﺗﺒـﺪﻳﻞ
ﮔﺮدد.
در اﻳﻦ ﻓﺼﻞ ﻋﻤﻠﻴﺎت ﺑﻴﺘﻲ ﻣﻮرد ﺑﺤﺚ ﻗﺮار ﮔﺮﻓﺖ .اﺑﺘﺪا ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘﻲ ﻣﺎﻧﻨﺪ
TEST ، XOR ، NOT ،OR ،ANDﺑﺤﺚ ﮔﺮدﻳﺪ .اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ روي ﺑﻴﺖﻫﺎ
ﻋﻤــﻞ ﻣــﻲﻧﻤﺎﻳﻨــﺪ و ﻫﻤﺎﻧﻄﻮرﻳﻜــﻪ ﮔﻔﺘــﻪ ﺷــﺪ ﺑ ـﻪ ﺟــﺰء دﺳــﺘﻮراﻟﻌﻤﻞ NOTﺳــﺎﻳﺮ
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ داراي دو ﻋﻤﻠﻮﻧﺪ ﻣﻲﺑﺎﺷﻨﺪ TEST .ﺷﺒﻴﻪ ANDﻣﻲﺑﺎﺷﺪ وﻟـﻲ ﻧﺘﻴﺠـﻪ
در ﺟﺎﺋﻲ ذﺧﻴﺮه ﻧﻤﻲﮔـﺮدد .ﻋﻤﻠﻴـﺎت ﺑﻌـﺪي دﺳـﺘﻮراﻟﻌﻤﻞﻫـﺎي ﺷـﻴﻔﺖ و ﭼـﺮﺧﺶ
ﻣﻲﺑﺎﺷﻨﺪ ﻛﻪ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻧﻴـﺰ روي ﺑﻴـﺖﻫـﺎ ﻋﻤـﻞ ﻣـﻲﻛﻨﻨـﺪ و ﭼﻨﺎﻧﭽـﻪ ﺗﻌـﺪاد
ﺑﻴﺖﻫﺎي ﻣﻮرد ﻋﻤﻞ ﺑﻴﺶ از ﻳﻚ ﺑﺎﺷﺪ ﺑﺎﻳﺴﺘﻲ ﺗﻌﺪاد ﺑﻴـﺖﻫـﺎ را در ﺛﺒـﺎت CLﻗـﺮار
دﻫــــﻴﻢ .دﺳــــﺘﻮراﻟﻌﻤﻠﻬﺎي ﺷــــﻴﻔﺖ ﻋﺒﺎرﺗﻨــــﺪ از SAR ،SAL ،SHR ،SHLو
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﭼﺮﺧﺶ ﻋﺒﺎرﺗﻨﺪ از .RCR ،RCL ،ROR ،ROLدر اﻧﺘﻬـﺎي ﻓـﺼﻞ
ﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ ﺗﻐﻴﻴﺮ ﻓﻠﮓﻫﺎ ﻣﻮرد ﺑﺤﺚ ﻗﺮار ﮔﺮﻓﺘـﻪ و در ﻧﻬﺎﻳـﺖ ﺑـﺎ اﺳـﺘﻔﺎده از
ﭼﻨﺪﻳﻦ ﻣﺜﺎل ﻛﺎرﺑﺮد ﻣﻄﺎﻟﺐ ﻓﻮق ﻧﺸﺎن داده ﺷﺪه اﺳﺖ ﻛـﻪ از ﺟﻤﻠـﻪ ﺗﺒـﺪﻳﻞ ﺣـﺮوف
ﻛﻮﭼﻚ در ﻳﻚ ﻣﺘﻦ ﺑﻪ ﺣﺮوف ﺑﺰرگ ﻣﻲﺑﺎﺷﺪ.
١٤٩
aﺗﻤﺮﻳﻦ
-6ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺑﻴﺖﻫﺎي ﺷﻤﺎره ﻓﺮد ﺛﺒﺎت AXرا ﺑﻪ ﻳـﻚ و ﺑﻴـﺖﻫـﺎي زوج
ﺛﺒﺎت AXرا ﺑﻪ ﺻﻔﺮ ﺗﺒﺪﻳﻞ ﻧﻤﺎﻳﺪ.
-8ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ آﻳﺎ ﺑﻴﺖﻫﺎي ﺷﻤﺎره زوج ﺛﺒﺎت AXﺑﺮاﺑﺮ ﺑـﺎ
ﻳﻚ ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺧﻴﺮ؟
-9ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺑﻴﺖﻫﺎي ﺛﺒﺎت AXرا آﻧﻘﺪر ﺑﻄﺮف ﭼـﭗ ﺷـﻴﻔﺖ دﻫـﺪ ﺗـﺎ
MSBآن ﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﮔﺮدد .در ﺻﻮرﺗﻴﻜﻪ در اﺑﺘﺪا MSBﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﻣﻲﺑﺎﺷﺪ ﻛﻨﺘﺮل
ﺑﻪ EXITﻣﻨﺘﻘﻞ ﮔﺮدد.
-12ﺑﻪ ﭼﻨﺪ ﻃﺮﻳﻖ ﻣﻲﺗﻮان ﻣﻘﺪار ﺛﺒﺎت AXرا ﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﻗﺮار داد؟
-13ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﻘﺪار ﺑﻴﺖ ﺷﻤﺎره nام ﺛﺒﺎت AXرا ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ.
١٥١
ﻓﺼﻞ ﻫﻔﺘﻢ
ﻣﺎﻛﺮوﻫﺎ و روالﻫﺎ و وﻗﻔﻪﻫﺎ
ﻫﺪف ﻛﻠﻲ
ﻣﻌﺮﻓﻲ ﭘﺸﺘﻪ ،ﻣﻜﺮو ،روال ،وﻗﻔﻪﻫﺎ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
-1ﺗﻌﺮﻳﻒ ﭘﺸﺘﻪ ،ﻛﺎرﺑﺮد و دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﺮﺑﻮﻃﻪ.
-2ﺗﻌﺮﻳﻒ روال ،ﻛﺎرﺑﺮد ،ﻧﺤﻮه اﻳﺠﺎد و ﻓﺮاﺧﻮاﻧﻲ آﻧﻬﺎ.
-3ﺗﻌﺮﻳﻒ ﻣﺎﻛﺮو ،ﻧﺤﻮه اﻳﺠﺎد ،ﻛﺎرﺑﺮد و ﻓﺮاﺧﻮاﻧﻲ آﻧﻬﺎ.
-4ﻋﻤﻠﮕﺮﻫﺎي ﻣﺎﻛﺮو.
-5وﻗﻔﻪﻫﺎ و دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﺮﺑﻮﻃﻪ.
-6رواﻟﻬﺎي ﺗﺒﺪﻳﻞ ﺑﺎﻳﻨﺮي ﺑﻪ اﺳﻜﻲ و ﺑﺎﻟﻌﻜﺲ.
-7اﻧﺪازهﮔﻴﺮي زﻣﺎن اﺟﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ.
١٥٢
-8اﻳﺠﺎد ﺗﺄﺧﻴﺮ.
-7-1ﭘﺸﺘﻪ ) ( Stack
ﭘﺸﺘﻪ ﻗﺴﻤﺘﻲ از ﺣﺎﻓﻈﻪ اﺻﻠﻲ ﻳﺎ RAMﻣﻲﺑﺎﺷﺪ .ﭘﺸﺘﻪ ﺧﺎﺻﻴﺖ LIFOدارد
ﻳﻌﻨﻲ ﻋﻨﺼﺮي ﻛﻪ آﺧﺮ وارد ﭘﺸﺘﻪ ﻣﻲﺷﻮد اوﻟﻴﻦ ﻋﻨـﺼﺮي اﺳـﺖ ﻛـﻪ از ﭘـﺸﺘﻪ ﺧـﺎرج
ﻣﻲﺷﻮد .ﻣﻘﺎدﻳﺮي ﻛﻪ ﭘﺸﺘﻪ در ﺧﻮد ذﺧﻴﺮه ﻣﻲﻧﻤﺎﻳﺪ از ﻧﻮع wordﻣﻲﺑﺎﺷﺪ .ﺛﺒﺎت SP
ﺑﻪ ﻋﻨﺼﺮ topﭘﺸﺘﻪ اﺷﺎره ﻣﻲﻧﻤﺎﻳﺪ.
STACK
SS:01F6
SS:01F8
SS:01FA
SS:01FC
SS:01FE
SP
-7-1-1دﺳﺘﻮراﻟﻌﻤﻞ PUSH
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ PUSHﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
PUSH opr
١٥٣
ﻣﺜﺎل 7-1
PUSH AX
SS:01F6
SS:01F8
SS:01FA
SP )(AX SS:01FC
SS:01FE
-7-1-2دﺳﺘﻮراﻟﻌﻤﻞ POP
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ POPﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
POP dst
ﻣﺜﺎل 7-2
POP AX
SS:01F6
SS:01F8
SS:01FA
)(AX SS:01FC
SS:01FE
SP
ﻣﺜﺎل 7-3
PUSH AX
PUSH BX
PUSH ES
PUSH DI
M
POP DI
POP ES
POP BX
POP AX
-7-1-3دﺳﺘﻮراﻟﻌﻤﻞPUSHF
١٥٥
PUSHF
ﻣﺜﺎل 7-4
PUSHF
-7-1-4دﺳﺘﻮراﻟﻌﻤﻞPOPF
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ POPFﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
POPF
اﻟﻒ( اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻓﺎﻗﺪ ﻋﻤﻠﻮﻧﺪ ﻣﻲﺑﺎﺷﺪ.
ب( اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻘﺪاري ﻛﻪ در ﭘﺸﺘﻪ ﺑﻮﺳﻴﻠﻪ ﺛﺒﺎت SPاﺷﺎره ﻣﻲﺷﻮد را ﺑﻪ ﺛﺒﺎت
ﻓﻠﮓ ﻣﻨﺘﻘﻞ ﻧﻤﻮده و ﻣﺤﺘﻮي ﺛﺒﺎت SPرا دو واﺣﺪ اﻓﺰاﻳﺶ ﻣﻲدﻫﺪ.
ج( روي ﻛﻠﻴﻪ ﻓﻠﮓﻫﺎ اﺛﺮ دارد.
ﻣﺜﺎل 7-5
POPF
-7-2روال )(Procedures
١٥٦
ﺑﺮاي راﺣﺘﻲ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ،ﺑﺮﻧﺎﻣﻪﻫﺎ را ﻣﻲﺗﻮان ﺑﻪ ﺗﻌﺪادي روال ﺗﻘﺴﻴﻢ ﻧﻤﻮد
و ﻧﻮﺷﺘﻦ ﻫﺮ روال را ﺑﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ واﮔﺬار ﻛﺮد .ﺷﻜﻞ ﻛﻠـﻲ روالﻫـﺎ ﺑـﺼﻮرت
زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
name PROC NEAR
M
1 RET 1
name ENDP
ﻣﺜﺎل 7-6
١٥٧
روال ﻓﻮق ﺑﺮاي ذﺧﻴﺮه ﻛﺮدن ﻣﻘﺎدﻳﺮ ﺛﺒﺎﺗﻬﺎي ﻣﺸﺨﺺ ﺷﺪه اﺳﺘﻔﺎده ﻣـﻲﺷـﻮد.
ﺑﻤﻨﻈﻮر ﻓﺮاﺧﻮاﻧﻲ ﻳﻚ روال از دﺳﺘﻮر CALLاﺳﺘﻔﺎده ﻣﻲﮔﺮدد .ﺷﻜﻞ ﻛﻠـﻲ دﺳـﺘﻮر
CALLﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
CALL Name
ﻣﺜﺎل 7-7
CALL SAVEREG
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ زﺑﺎن اﺳﻤﺒﻠﻲ ﺑﺮﻧﺎﻣـﻪ اﺻـﻠﻲ را ﺑﻌﻨـﻮان ﻳـﻚ روال ﺑـﺎ
ﻣﺸﺨﺼﻪ FARدر ﻧﻈﺮ ﻣﻲﮔﻴﺮد ﻛﻪ ﺑﻪ ﻣﺤﺾ رﺳﻴﺪن ﺑﻪ RETﺑﺮﻧﺎﻣﻪ اﺻـﻠﻲ ،ﻛﻨﺘـﺮل
ﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺮ ﻣﻴﮕﺮدد.
١٥٨
-7-3ﻣﺎﻛﺮوﻫﺎ )(Macros
ﻣﺎﻛﺮوﻫﺎ ﻋﻤﻼً ﻗﺴﻤﺖﻫﺎﺋﻲ از ﺑﺮﻧﺎﻣﻪ ﻣﺒﺪاء ) (source programﻣﻲﺑﺎﺷﻨﺪ ﻛـﻪ
ﺑﺎ اﺳﺘﻔﺎده از ﻧﺎم آﻧﻬﺎ ﻣﻲﺗﻮان در ﻫﺮ ﺟﺎي ﺑﺮﻧﺎﻣﻪ ﻣﺒﺪاء درج ﻧﻤﻮد .در ﺣﻘﻴﻘﺖ ﻣﺎﻛﺮوﻫﺎ
دﻧﺒﺎﻟﻪاي از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي اﺳﻤﺒﻠﻲ ﻣﻲﺑﺎﺷﻨﺪ ﻛﻪ ﻣﻤﻜﻦ اﺳﺖ ﭼﻨـﺪﻳﻦ ﺑـﺎر در ﺑﺮﻧﺎﻣـﻪ
ﻇﺎﻫﺮ ﺷﻮﻧﺪ .ﺑﻪ ﺟﺎي ﭼﻨﺪﻳﻦ ﺑﺎر ﺗﺎﻳﭗ ﻧﻤﻮدن اﻳﻦ دﻧﺒﺎﻟﻪ از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ ﻣﻲﺗﻮان ﻓﻘﻂ
ﻧﺎم آﻧﻬﺎ را در ﺑﺮﻧﺎﻣﻪ درج ﻧﻤﻮد .ﺷﻜﻞ ﻛﻠﻲ ﻣﺎﻛﺮوﻫﺎ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
name MACRO
M
ENDM
ه( ﺗﻔﺎوت ﺑﻴﻦ روال و ﻣﺎﻛﺮو در اﻳﻦ اﺳﺖ ﻛﻪ ﻣﺎﻛﺮو در ﺑﺮﻧﺎﻣﻪ در زﻣﺎن اﺟﺮاي ﺑﺮﻧﺎﻣـﻪ
وﺟﻮد ﺧﺎرﺟﻲ ﻧﺪارد ﺑﻠﻜﻪ روال در زﻣﺎن اﺟـﺮاي ﺑﺮﻧﺎﻣـﻪ وﺟـﻮد داﺷـﺘﻪ و ﻓﺮاﺧـﻮاﻧﻲ
ﻣﻲﮔﺮدد.
ز( macroﻫﺎ ﺑﺎﻳﺴﺘﻲ در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺗﻌﺮﻳﻒ ﺷﻮﻧﺪ.
ﻣﺜﺎل 7-8
TOT MACRO
MOV AX,X
ADD AX,Y
ENDM
اﺑﺘﺪا اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ از اﺟﺮا ﻳﻌﻨﻲ دز زﻣﺎن ﺗﺮﺟﻤﻪ ﺑﺼﻮرت زﻳﺮ در ﻣﻲآﻳﺪ.
١٦٠
X ? DW
Y DW ?
S DW ?
MOV X, 1000
MOV Y, 3000
ﺟﺎﻳﮕﺰﻳﻦ ; macro
MOV AX, X
ADD AX, Y
MOV S, AX
SUB X, 10
ﺟﺎﻳﮕﺰﻳﻦ ; macro
MOV AX, X
ADD AX, Y
; 1
ADD S, AX
M
ﻣﺜﺎل 7-9
ADD_W MACRO T1, T2, SUM
1 MOV AX , T1
1 ADD AX, T2
11 MOV SUM, AX
1 ENDM
ﻣﺎﻛﺮو داده ﺷﺪه داراي ﺳﻪ ﭘﺎراﻣﺘﺮ ﺑﻨﺎﻣﻬﺎي T1, T2, SUMﻣﻲﺑﺎﺷﺪ .در ﻣﻮﻗﻊ
اﺳﺘﻔﺎده از اﻳﻦ ﻣﺎﻛﺮو ﺑﺎﻳﺴﺘﻲ ﺳﻪ ﻣﻘﺪار را ﺑﻌﻨﻮان ﺟـﺎﻳﮕﺰﻳﻨﻲ اﻳـﻦ ﭘﺎراﻣﺘﺮﻫـﺎ ﺑـﺪﻫﻴﻢ.
اﮔﺮ ﺑﻨﻮﻳﺴﻴﻢ
ADD_W PRICE, TAX, COST
ﻣﺜﺎل7-10
ﻣﺎﻛﺮو EXCHGداده ﺷـﺪه در ذﻳـﻞ دو ﻣﻘـﺪار از ﻧـﻮع wordرا ﺟﺎﺑـﻪﺟـﺎ
ﻣﻲﻧﻤﺎﻳﺪ .ﻻزم ﺑﻪ ﺗﻮﺿﻴﺢ اﺳﺖ ﻛﻪ ﺑﻪ ﻣﻨﻈﻮر ﺟﻠﻮﮔﻴﺮي از ﭘﺎك ﺷﺪن ﻣﻘﺪار ﻗﺒﻠﻲ ﺛﺒﺎت
AXاز دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي PUSHو POPاﺳﺘﻔﺎده ﮔﺮدﻳﺪه اﺳﺖ.
EXCHG X,Y
PUSH AX
MOV AX, X
XCHG AX, Y
MOV X, AX
PUSH AX
ﻣﺜﺎل 7-11
ADD_B MACRO N1, N2, N3, N4
MOV AL, N1
IFB ><N2
ADD AL, 20
ELSE 1
١٦٤
ADD AL, N2
ENDIF 1
IFB < N3 >
ADD AL , 30
ELSE 1
ADD AL, N3
ENDIF
IFB < N4 >
ADD AL ,5
ELSE 1
ADD AL, N4
ENDIF
ENDM
7-12 ﻣﺜﺎل
ADD_B MACRO X1, X2, X3, X4
PUSH AX
MOV AX, X1
IFNB < X2 >
ADD AX, X2
ENDIF 1
IFNB < X3 >
ADD AX, X3
ENDIF
IFNB < X4 >
ADD AX , X4
ENDIF
ENDM
PUSH AX
MOV AX, N1
ADD AX, N3
ADD AX, N4
-7-3-2دﺳﺘﻮراﻟﻌﻤﻞ EXITM
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮر اﻟﻌﻤﻞ EXITMﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ:
EXITM
ﻣﺜﺎل 7-13
IFB > < NUM1
EXITM 1
ENDIF
-7-3-3دﺳﺘﻮراﻟﻌﻤﻞ IRP
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ IRPﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
ﻣﺜﺎل 7-14
اﻳﺠﺎد ﻳﻚ آراﻳﻪ 9ﻋﻨﺼﺮي از ﻧـﻮع wordﺑـﺎ ﻣﻘـﺎدﻳﺮ ﻣﻜﻌـﺐ ﻧـﻪ ﻋـﺪد اول
ﻣﻲﻧﻤﺎﻳﺪ .ﻳﻌﻨﻲ ﺑﺎ ﻣﻘﺎدﻳﺮ . 1, 8, 27, 125, 1331, …, 12167
1
8
27
125
1331
2197
4913
6859
12167
١٦٨
DW 1*1*1
DW 2*2*2
DW 3*3*3
DW 5*5*5
DW 11 * 11 * 11
DW 13 * 13 * 13
DW 17 * 17 * 17
DW 19 * 19 * 19
DW 23 * 23 * 23
-7-3-4دﺳﺘﻮراﻟﻌﻤﻞ IRPC
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ IRPCﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
اﻳﺠﺎد ﻳﻚ رﺷﺘﻪ دهﺑﺎﻳﺘﻲ ﻣﻲﻧﻤﺎﻳﺪ ﺑﺎ ﻣﻘﺎدﻳﺮ ﻛﺪ اﺳﻜﻲ ﺑﺮاي ارﻗﺎم 0ﺗﺎ .9
١٦٩
48
49
50
51
52
53
54
55
56
57
-7-3-5دﺳﺘﻮراﻟﻌﻤﻞ REPT
ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ REPTﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
REPT expression
M
ENDM
١٧٠
ﻣﺜﺎل 7-16
ALLOCATE MACRO TLABEL , LNGTH
TLABEL EQU THIS BYTE
VALU =0
REPT LNGTH VALUE = VALUE + 1
DB VALUE
ENDM
ENDM
از دﻳﺮﻛﺘﻴﻮ EQUﺑﺮاي ﺗﺨﺼﻴﺺ ﺳﺎده اﺳﺎﻣﻲ ﺑـﻪ اﻋـﺪاد ،آدرﺳـﻬﺎي ﺗﺮﻛﻴﺒـﻲ
ﭘﻴﭽﻴﺪه و … اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ﻣﺜﺎل 7-17
K EQU 1024
١٧١
ﻣﺜﺎل 7-18
SPEED EQU RATE
ﻣﺜﺎل 7-19
TABLE ]EQU DS:[BP] [SI
در ﺑﺮﻧﺎﻣــﻪ ﻫــﺮ ﺟــﺎ از ﻧــﺎم TABLEاﺳــﺘﻔﺎده ﮔﺮدﻳــﺪه ﺑﺎﺷــﺪ ﺑــﻪ ﺟــﺎي آن
] DS:[BP][SIﺟﺎﻳﮕﺰﻳﻦ ﻣﻲﮔﺮدد.
ﻣﺜﺎل 7-20
COUNT EQU CX
ﻫﺮ ﺟﺎ از ﻧﺎم COUNTدر ﺑﺮﻧﺎﻣﻪ اﺳﺘﻔﺎده ﺷﺪه ﺑﺎﺷﺪ ﺑﻪ ﺟـﺎي آن ﺛﺒـﺎت CX
ﻗﺮار ﻣﻲدﻫﺪ.
ﻣﺜﺎل 7-21
DBL_SPEED EQU 2*SPEED
ﻣﺜﺎل 7-22
MINS_DAY EQU 60*24
در ﺑﺮﻧﺎﻣﻪ ﻫﺮ ﺟـﺎ از ﻧـﺎم MINS_DAYاﺳـﺘﻔﺎده ﺷـﺪه ﺑﺎﺷـﺪ ﺑـﻪ ﺟـﺎي آن
60 * 24ﻗﺮار ﻣﻲﮔﻴﺮد.
دﻳﺮﻛﺘﻴﻮ= ﻣﺎﻧﻨﺪ EQUﻣﻲﺑﺎﺷﺪ ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﻛﻪ ﻣﻲﺗﻮان آﻧﺮا ﻣﺠـﺪداً ﺗﻌﺮﻳـﻒ
ﻧﻤﻮد ﻳﺎ ﺑﻪ ﻣﻘﺪار ﻗﺒﻠﻲ آن ارﺟﺎع ﻧﻤﻮد.
ﻣﺜﺎل 7-23
CONST=56 ﻣﻌﺎدل EQUﻣﻲﺑﺎﺷﺪ ;
CONST=75 ﻣﻘﺪار آﻧﺮا ﻣﺠﺪداً ﺗﻌﺮﻳﻒ ﻣﻲﻧﻤﺎﻳﺪ ;
CONST=CONST ﺑﻪ ﻣﻘﺪار ﻗﺒﻠﻲ ﻣﺮاﺟﻌﻪ ﻣﻲﻧﻤﺎﻳﺪ ;
+1
-7-3-6دﻳﺮﻛﺘﻴﻮ LOCAL
ﺷﻜﻞ ﻛﻠﻲ دﻳﺮﻛﺘﻴﻮ LOCALﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
LOCAL dummy-list
اﻳﻦ دﻳﺮﻛﺘﻴﻮ ﺑﺎﻋﺚ ﻣﻲ ﺷﻮد ﻛـﻪ اﺳـﻤﺒﻠﺮ ﺑـﺮاي ﻫـﺮ ﻋﻨـﺼﺮ در dummy-list
اﻳﺠﺎد ﻳﻚ ﺳﻴﻤﺒﻞ ﻣﻨﺤﺼﺮ ﺑﻔﺮد ﺑﻨﻤﺎﻳﺪ.
در ﺣﻘﻴﻘﺖ در ﻣﺎﻛﺮوﻫﺎ وﻗﺘﻲ از labelﻳﺎ ﺑﺮﭼﺴﺐ اﺳﺘﻔﺎده ﻣﻲﻧﻤﺎﺋﻴﻢ ﺑﺴﻂ آﻧﻬﺎ
دﭼﺎر اﺷﻜﺎل ﻣﻲﮔﺮدد .ﺑﻌﻨﻮان ﻣﺜﺎل ﻣﺎﻛﺮو زﻳﺮ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
١٧٣
ﺣﺎل اﮔﺮ در ﺑﺮﻧﺎﻣﻪ داده ﺷﺪه ﻣﺎﻛﺮو WAITرا ﺑﺴﻂ دﻫﻴﻢ ﺑﺮﻧﺎﻣﻪ ﺑﺼﻮرت زﻳﺮ
در ﻣﻲآﻳﺪ.
M
PUSH CX
MOV CX , COUNT
NEXT00 : LOOP NEXT00
POP CX
M
PUSH CX
MOV CX , COUNT
NEXT01: LOOP NEXT01
POP CX
M
PUSH CX
MOV CX, COUNT
NEXT02: LOOP NEXT02
POP CX
M
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ در ﺗﻌﺮﻳﻒ ﻳﻚ ﻣﺎﻛﺮو ﻣﻲﺗﻮان ﻣﺎﻛﺮوﻫﺎي ﻣﺨﺘﻠﻔـﻲ را
ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﻮد .در ﺻﻮرﺗﻴﻜﻪ در ﺗﻌﺮﻳﻒ ﻳـﻚ ﻣـﺎﻛﺮو ﺧـﻮد آن ﻣـﺎﻛﺮو را ﻓﺮاﺧـﻮاﻧﻲ
ﻧﻤﺎﺋﻴﻢ ﻣﺎﻛﺮو را ﺑﺎزﮔﺸﺘﻲ ﻳﺎ recursive macroﻧﺎﻣﻴﺪه ﻣﻴﺸﻮد.
١٧٥
ﻣﺜﺎل 7-24
ADD_W MACRO N1, N2, N3, N4, N5
IFB > < N1
MOV AX, 0 ;; initialize sum
ELSE 1
ADD_W N2, N3, N4, N5
ADD AX , N1
ENDIF 1
ENDM
در ﺗﻌﺮﻳﻒ ﺑﺎﻻ ﭼﻨﺎﻧﭽﻪ آرﮔﻮﻣﺎﻧﻲ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ،ﻣﺠﻤﻮع ﺑﺮاﺑﺮ ﺻﻔﺮ و در
ﻏﻴﺮ اﻳﻨﺼﻮرت ﻣﺠﻤﻮع ﺗﻤﺎم آرﮔﻮﻣﺎﻧﻬﺎ ﺑﻪ ﺟﺰء آرﮔﻮﻣـﺎن اوﻟـﻲ را ﻣﺤﺎﺳـﺒﻪ ﻧﻤـﻮده و
ﺳﭙﺲ اوﻟﻴﻦ آرﮔﻮﻣﺎن ﺑﻪ آن اﺿﺎﻓﻪ ﻣﻲﻧﻤﺎﺋﻴﻢ.
ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﻗﺒﻼ ﻣﺘﺬﻛﺮ ﺷﺪﻳﻢ ﻣﺎﻛﺮوﻫﺎﺋﻲ ﻛﻪ در ﻳـﻚ ﺑﺮﻧﺎﻣـﻪ ﻣـﻮرد اﺳـﺘﻔﺎده
ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ ﺑﺎﻳﺴﺘﻲ در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺗﻌﺮﻳﻒ ﻧﻤﻮد .از ﻃﺮف دﻳﮕـﺮ ﻣـﻲﺗـﻮان ﻳـﻚ
macro libraryاﻳﺠﺎد ﻧﻤﻮد macro library .ﻳﻚ ﻓﺎﻳﻞ روي دﻳﺴﻚ ﻣﻲﺑﺎﺷﺪ ﺑﻨـﺎم
MACRO.LIBﻛﻪ ﺷﺎﻣﻞ ﺗﻤﺎم ﺗﻌﺎرﻳﻒ ﻣﺎﻛﺮوﻫﺎي ﻣـﻮرد اﺳـﺘﻔﺎده در ﺑﺮﻧﺎﻣـﻪﻫـﺎي
ﻣﺨﺘﻠﻔﻪ ﻣﻲﺑﺎﺷﺪ .ﭼﻨﺎﻧﭽﻪ از macro libraryﺑﺨﻮاﻫﻴﻢ اﺳﺘﻔﺎده ﻧﻤﺎﺋﻴﻢ ﻛﺎﻓﻲ اﺳﺖ ﻛـﻪ
دﺳﺘﻮراﻟﻌﻤﻞ زﻳﺮا ﺑﻪ ﻋﻨﻮان اوﻟﻴﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺮﻧﺎﻣﻪ ﻗـﺮار دﻫـﻴﻢ و دﻳﮕـﺮ ﻧﻴـﺎزي ﺑـﻪ
ﺗﻌﺮﻳﻒ ﻣﺎﻛﺮوﻫﺎي ﻣﻮرد ﻧﻴﺎز ﺑﺮﻧﺎﻣﻪ در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﻧﻤﻲﺑﺎﺷﺪ.
INCLUDE MACRO.LIB
ﻣﺜﺎل 7-25
INCLUDE MACRO.LIB
PURGE SHOW, CLS, LOCATE
-7-3-7ﻋﻤﻠﮕﺮﻫﺎي ﻣﺎﻛﺮو
دو ﻋﻤﻠﮕﺮ ﻣﺎﻛﺮو در Macro Assemblerﻋﺒﺎرﺗﻨﺪ از
&
;;
ﺷﻜﻞ ﻛﻠﻲ ﻋﻤﻠﮕﺮ ;; ﻋﺒﺎرﺗﺴﺖ از
;; comment
ﻋﻤﻠﮕﺮ ;; ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ اﺳﻤﺒﻠﺮ commentsﻫﺎ را در ﻣﻮﻗﻊ ﺑـﺴﻂ ﻣـﺎﻛﺮو
ﺣﺬف ﻧﻤﺎﻳﺪ.
ﺑﺮﻧﺎﻣﻪﻫﺎي ﺑﺪون commentsﻓﻀﺎي ﻛﻤﺘﺮي را اﺷﻐﺎل ﻧﻤﻮده و ﺳﺮﻳﻌﺘﺮ اﺟـﺮا
ﻣﻲﺷﻮﻧﺪ .ﭼﻨﺎﻧﭽﻪ ﺑﺨﻮاﻫﻴﺪ commentاي را در ﻣﻮﻗـﻊ ﺑـﺴﻂ ﻣـﺎﻛﺮو ﺣـﺬف ﻧﻜﻨﻴـﺪ
ﺑﺎﻳﺴﺘﻲ از ; اﺳﺘﻔﺎده ﮔﺮدد.
; comment
-7-3-8ﻋﻤﻠﮕﺮ &
ﺷﻜﻞ ﻛﻠﻲ ﻋﻤﻠﮕﺮ & ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
text & text
اﻳﻦ ﻋﻤﻠﮕﺮ دو textﻳﺎ ﺳﻴﻤﺒﻞ را ﺑﻬـﻢ وﺻـﻞ ﻧﻤـﻮده در ﻛﻨـﺎر ﻳﻜـﺪﻳﮕﺮ ﻗـﺮار
ﻣﻲدﻫﺪ.
١٧٧
7-26 ﻣﺜﺎل
DEF_TABLE MACRO SUFFIX, LNGTH
TABLE & SUFFIX DB LNGTH DUP (?)
ENDM
DEF_TABLE A,5
PUSH DX
MOV AH,2 ;; select, display option
MOV DL, ′character′
INT 21H ;; call type 21 interrupt
POP DX
POP AX
ENDM
ﺑﻪ ﻣﻨﻈﻮر ﻧﻤـﺎﻳﺶ ﻛـﺎرﻛﺘﺮ * روي ﺻـﻔﺤﻪ ﻣـﺎﻧﻴﺘﻮر از دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳـﻞ
:اﺳﺘﻔﺎده ﻣﻲﮔﺮدد
١٧٨
-7-4وﻗﻔﻪﻫﺎ )(Interrupts
رﻳﺰﭘﺮدازﻧﺪه در ﻳﻚ ﻛﺎﻣﻴﭙﻮﺗﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ را ﺑﺴﺎدﮔﻲ اﺟﺮا ﻧﻤﻲﻛﻨﺪ .ﺑﻠﻜـﻪ ﺑﻌﻨـﻮان
ﺗﻨﻈﻴﻢ ﻛﻨﻨﺪه ﺳﻴﺴﺘﻢ درﮔﻴﺮ ﭼﻴﺰﻫﺎﺋﻲ ﻣﻴﺸﻮد ﻛﻪ اﺗﻔﺎق ﻣﻲاﻓﺘﻨﺪ .ﺑﻌﻨﻮان ﻣﺜﺎل وﻗﺘـﻲ ﻛـﻪ
ﻛﻠﻴﺪي روي ﺻﻔﺤﻪ ﻛﻠﻴـﺪ ﻓـﺸﺎر ﻣـﻲدﻫﻴـﺪ رﻳﺰﭘﺮدازﻧـﺪه ﺑﺎﻳـﺴﺘﻲ درﻳﺎﺑـﺪ ﻛـﻪ ﻛـﺪام
ﻛﻠﻴﺪ ﻓﺸﺎر داده ﺷﺪه و ﻋﻤﻞ ﻣﻨﺎﺳﺐ آن ﻛﻠﻴﺪ را اﻧﺠﺎم دﻫﺪ .ﺑﻌﻨﻮان ﻣﺜـﺎل وﻗﺘـﻲ ﻛﻠﻴـﺪ
Ctrl-Breakرا ﻓﺸﺎر ﻣﻲدﻫﻴﺪ ﻋﻤﻠﻲ ﻛﻪ ﺑﺎﻳﺴﺘﻲ اﻧﺠﺎم ﺷﻮد ﻛﺎﻣﻼً ﻣﺘﻔﺎوت اﺳـﺖ ﺑـﺎ
وﻗﺘﻲ ﻛﻪ ﻛﻠﻴﺪ Tرا ﻓﺸﺎر ﻣﻲدﻫﻴﺪ .وﻗﺘﻲ ﻛﻪ dataاز diskﺑـﻪ ﺣﺎﻓﻈـﻪ ﻳـﺎ ﺑـﺎﻟﻌﻜﺲ
ﻣﻨﺘﻘﻞ ﻣﻲ ﮔﺮدد اﻳﻦ ﻣﺴﺌﻮﻟﻴﺖ رﻳﺰﭘﺮدازﻧﺪه اﺳﺖ ﻛـﻪ دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ﻣﻨﺎﺳـﺐ ﺑـﺮاي
اﻳﻨﻜﺎر را اﺟﺮا ﻧﻤﺎﻳﺪ .ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﮔﻔﺘﻪ ﺷﺪ رﻳﺰﭘﺮدازﻧﺪه در ﻛﻠﻴـﻪ ﻛﺎرﻫـﺎي ﻛـﺎﻣﭙﻴﻮﺗﺮ
ﻧﻘﺸﻲ اﻳﻔﺎء ﻣﻲﻧﻤﺎﻳﺪ .ﺣﺎل ﺳﻮاﻟﻲ ﻛﻪ ﻣﻄﺮح ﻣﻲﺷﻮد اﻳﻨﺴﺖ ﻛﻪ رﻳﺰﭘﺮدازﻧـﺪه ﭼﮕﻮﻧـﻪ
ﺑﺎ وﺳﺎﺋﻞ ﺟﺎﻧﺒﻲ درﮔﻴﺮ ﻣﻲﮔﺮدد؟ ﺣﻘﻴﻘﺖ اﻣﺮ اﻳﻦ اﺳﺖ ﻛﻪ رﻳﺰﭘﺮدازﻧﺪهﻫـﺎ و وﺳـﺎﺋﻞ
ﺟﺎﻧﺒﻲ ﺑﻄﺮق ﻣﺨﺘﻠﻒ ﺑﺎ ﻫﻢ ارﺗﺒﺎط ﺑﺮﻗﺮار ﻣﻲﻛﻨﻨﺪ .ﻛﺎري ﻛـﻪ اﻧﺠـﺎم ﻣـﻲﺷـﻮد ﺑـﺪﻳﻦ
ﺻﻮرت اﺳﺖ ﻛﻪ رﻳﺰﭘﺮدازﻧﺪه ﺷﺮوع ﺑﻪ اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﻣﻲﻧﻤﺎﻳـﺪ و ﺑـﻪ اﺟـﺮاي ﺑﺮﻧﺎﻣـﻪ
اداﻣﻪ ﻣﻲدﻫﺪ ﺗﺎ زﻣﺎﻧﻴﻜﻪ ﻳﻚ وﺳﻴﻠﻪ ﺟﺎﻧﺒﻲ ﻣﺎﻧﻨﺪ ﺻﻔﺤﻪ ﻛﻠﻴﺪ ،دﻳﺴﻚ ،ﻳـﺎ ﻣـﺎﻧﻴﺘﻮر ﺑـﻪ
رﻳﺰﭘﺮدازﻧﺪه اﻋﻼم ﻧﻤﺎﻳﺪ ﻛﻪ ﺑﻪ ﻛﻤﻚ رﻳﺰﭘﺮدازﻧﺪه ﻧﻴﺎز دارد .اﻟﺒﺘـﻪ وﺳـﺎﺋﻞ ﺟـﺎﻧﺒﻲ در
ﺣﻘﻴﻘﺖ ﺑﺎ رﻳﺰﭘﺮدازﻧﺪه ﺻﺤﺒﺖ ﻧﻤﻲﻛﻨﻨﺪ ﺑﻠﻜﻪ آﻧﻬﺎ ﺳﻴﮕﻨﺎل ﻧﻴﺎز ﺑـﻪ ﻛﻤـﻚ ﺧـﻮد را از
ﻃﺮﻳﻖ وﻗﻔﻪ ﻳﺎ Interruptارﺳﺎل ﻣﻲﻧﻤﺎﻳﻨﺪ.
از ﻗﺒﻴــﻞ floppy drive ، disk drive ، keyboardو … داراي type code
ﻣﺨﺘﻠﻔﻲ ﻣﻲﺑﺎﺷﺪ .در ﺣﻘﻴﻘﺖ 256ﻧﻮع ﻣﺨﺘﻠﻒ type codeوﺟـﻮد دارد .ﻫـﺮ وﻗـﺖ
درﺧﻮاﺳﺖ ﻛﻤﻜﻲ از ﻃﺮف ﻳﻚ وﺳﻴﻠﻪ ﺟﺎﻧﺒﻲ ﺷـﻮد ) (Interruptرﻳﺰﭘﺮدازﻧـﺪه اﮔـﺮ
ﻛﺎري ﻛﻪ در ﺣﺎل اﻧﺠﺎم آن ﻣﻲﺑﺎﺷﺪ ﺑﺘﻮاﻧﺪ ﻣﻮﻗﺘﺎً رﻫﺎ ﻧﻤﺎﻳﺪ ،اﻳﻨﻜﺎر را اﻧﺠﺎم داده و ﺑـﻪ
ﻛﻤﻚ وﺳﻴﻠﻪ ﺟﺎﻧﺒﻲ ﻣﻲرود )اﻟﺒﺘﻪ ﺑﺎ ﺣﻔﻆ ﻣﻮﻗﻌﻴﺖ ﻓﻌﻠﻲ( .ﭘﺲ از ﺗﻜﻤﻴﻞ ﻛﺎر وﺳـﻴﻠﻪ
ﺟﺎﻧﺒﻲ ﻣﺠﺪداً ﻛﺎر ﻗﺒﻠﻲ ﺧﻮد را از ﺳﺮ ﻣﻲﮔﻴﺮد .در ﺻﻮرﺗﻴﻜﻪ رﻳﺰﭘﺮدازﻧﺪه ﻧﺘﻮاﻧـﺪ ﻛـﺎر
ﻓﻌﻠﻲ ﺧﻮد را رﻫﺎ ﻧﻤﺎﻳﺪ ﭘﺲ از ﺗﻜﻤﻴﻞ اﻳﻦ ﻛﺎر ﺑﻪ ﻛﻤﻚ وﺳﻴﻠﻪ ﺟﺎﻧﺒﻲ ﻣﻲرود.
ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﺘﺬﻛﺮ ﺷﺪﻳﻢ 256ﺗﺎ type codeوﺟﻮد دارد ﺑﻪ ﺷﻤﺎرهﻫﺎي 255
ﺗﺎ .0رﻳﺰﭘﺮدازﻧﺪه از اﻳﻦ type codeاﺳـﺘﻔﺎده ﻧﻤـﻮده آدرﺳـﻲ را در اﺑﺘـﺪاي ﺣﺎﻓﻈـﻪ
ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮده و از آدرس ﻣﺤﺎﺳﺒﻪ ﺷـﺪه آدرس دﻳﮕـﺮي را ﻣـﻲﺧﻮاﻧـﺪ .اﻳـﻦ آدرس
ﺟﺪﻳﺪ Interrupt Vectorﻧﺎم دارد ﻛﻪ در ﺣﻘﻴﻘﺖ آدرس ﺑﺮﻧﺎﻣﻪاي اﺳﺖ ﻛﻪ ﻛـﺎر آن
وﻗﻔﻪ را ﻋﻬﺪهدار ﻣﻲﺑﺎﺷﺪ .در ﻣﻮرد وﺳﻴﻠﻪ ﺟﺎﻧﺒﻲ اﺳـﺘﺎﻧﺪارد ،ﺑﺮﻧﺎﻣـﻪﻫـﺎي ﺳـﺮوﻳﺲ
دﻫﻨــﺪه وﻗﻔــﻪﻫــﺎ ) (Interrupt servicing programsدر ﺗﺮاﺷ ـﻪ ROMذﺧﻴــﺮه
ﻣﻲﮔﺮدد .در ﺑﺴﻴﺎري از ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎ اﻳﻦ ROMﺑـﻪ Basic Input/Output system
ﻳﺎ BIOSﻣﻌﺮوﻓﺴﺖ.
ﺣﺎل ﻛﻪ رﻳﺰﭘﺮدازﻧﺪه ﻣﻲداﻧﺪ ﻛﺪام ﺑﺮﻧﺎﻣﻪ را ﺑﺎﻳﺴﺘﻲ اﺟﺮا ﻛﻨﺪ اﻳﻦ ﻛﺎر را اﻧﺠﺎم
داده ﻳﻌﻨﻲ ﺑﺮﻧﺎﻣﻪ را اﺟﺮا ﻧﻤﻮده و ﭘﺲ از اﺗﻤـﺎم اﺟـﺮاي ﺑﺮﻧﺎﻣـﻪ ﺑـﻪ ﻛـﺎر ﻗﺒﻠـﻲ ﺧـﻮد
ﺑﺮﮔﺸﺘﻪ و اﺟﺮاي آن را دﻧﺒﺎل ﻣﻲﻛﻨﺪ.
-7-4-2ﻣﻨﺎﺑﻊ وﻗﻔﻪﻫﺎ
وﻗﻔـــﻪﻫـــﺎﺋﻲ ﻛـــﻪ ﺗـــﺎﻛﻨﻮن ﺑﻴـــﺎن ﺷـــﺪه اﺳـــﺖ وﻗﻔـــﻪﻫـــﺎي ﺧـــﺎرﺟﻲ
) ( External Interruptﻣﻲﺑﺎﺷـﺪ ﻛـﻪ ﺗﻮﺳـﻂ وﺳـﺎﺋﻞ ﻳـﺎ ﺗﺠﻬﻴـﺰات ﺟـﺎﻧﺒﻲ ﻓﻌـﺎل
ﻣﻲﮔﺮدﻧﺪ .اﻳﻦ ﻧﻮع وﻗﻔﻪﻫﺎ ﻗﺴﻤﺘﻲ از 256ﻧﻮع وﻗﻔـﻪ را ﭘﻮﺷـﺶ ﻣـﻲدﻫـﺪ .ﺳـﺎﻳﺮﻳﻦ
ﻣﻲﺗﻮاﻧﻨﺪ ﻳﻜﻲ از دو ﻧﻮع وﻗﻔﻪ ذﻳﻞ ﺑﺎﺷﻨﺪ.
١٨٠
-7-4-4وﻗﻔﻪﻫﺎي ﺳﻴﺴﺘﻢ
در ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎ 1024 ،ﺑﺎﻳﺖ اول ﺣﺎﻓﻈﻪ ﻳﻌﻨﻲ ﻣﺤﻠﻬﺎي ﺣﺎﻓﻈـﻪ ﺑـﺎآدرس 0ﺗـﺎ
3FFﺗﺨﺼﻴﺺ ﺑـﻪ ﺟـﺪوﻟﻲ دارد ﻛـﻪ اﻳـﻦ ﺟـﺪول ﺑﻨـﺎم interrupt vector table
ﻣﻌﺮوﻓﺴﺖ .اﻳﻦ ﺟﺪوﻟﻲ اﺳﺖ ﺑـﺎ آدرﺳـﻬﺎي 32ﺑﻴﺘـﻲ ﻛـﻪ ﺑـﻪ interrupt service
routinesدر ﻛﺎﻣﭙﻴﻮﺗﺮ اﺷﺎره ﻣﻲﻛﻨﻨﺪ 256 .وﻗﻔﻪ ﻣﺨﺘﻠﻒ ﺑﻪ ﺷﻤﺎرهﻫﺎي 0ﺗﺎ 255ﻳـﺎ
FFﺗﺎ 0در ﻣﺒﻨـﺎي ﺷـﺎﻧﺰده وﺟـﻮد دارد .رﻳﺰﭘﺮدازﻧـﺪه 32 ، Intelوﻗﻔـﻪ اول ﻳﻌﻨـﻲ
١٨١
وﻗﻔﻪﻫﺎي ﺷﻤﺎره 1FHﺗﺎ 0را ﺑﺮاي اﺳﺘﻔﺎده ﺧﻮدش در ﻧﻈﺮ ﻣﻲﮔﻴﺮد 32 .وﻗﻔﻪ ﺑﻌﺪي
ﻳﻌﻨﻲ ﺷﻤﺎرهﻫﺎي 3FHﺗﺎ 20Hﺑﺮاي اﺳﺘﻔﺎده ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ DOSدر ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه
اﺳﺖ.
وﻗﻔــﻪ از ﻃﺮﻳــﻖ دﺳــﺘﻮراﻟﻌﻤﻞﻫــﺎي وﻗﻔــﻪ در ﺑﺮﻧﺎﻣــﻪ ﻳــﺎ ﺗﺠﻬﻴــﺰات ﺧــﺎرﺟﻲ
) ( external devicesدر ﺳﻴﺴﺘﻢ ﻓﻌﺎل ﻣﻲﮔﺮدد.
وﻗﺘﻲ ﻛﻪ رﻳﺰﭘﺮدازﻧﺪه ﻳﻚ وﻗﻔﻪ درﻳﺎﻓﺖ ﻣﻲﻧﻤﺎﻳﺪ ﺷﻤﺎره وﻗﻔﻪ را در 4ﺿـﺮب
ﻧﻤـﻮده ﺗـﺎ آدرس interrupt vectorدر ﺟـﺪول را ﺑﺪﺳـﺖ آورده ﺳـﭙﺲ ﻣﺤﺘـﻮي
آدرس ﺑﺪﺳﺖ آﻣﺪه را در ﺛﺒﺎت IPو ﺛﺒﺎت CSﻗﺮار ﻣـﻲدﻫـﺪ و ﺷـﺮوع ﺑـﻪ اﺟـﺮاي
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ در آن آدرس ﻣﻲﻧﻤﺎﻳﺪ .ﺑﻌﻨﻮان ﻣﺜﺎل اﮔﺮ وﻗﻔﻪ از ﻧﻮع 4AHﺑﺎﺷﺪ.
4AH * 4 = 128H
-7-4-5وﻗﻔﻪﻫﺎي DOS
ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻗﺒﻼً ﻣﺘﺬﻛﺮ ﺷﺪﻳﻢ وﻗﻔﻪﻫـﺎي ﻧـﻮع 3FHﺗـﺎ 20Hﺑـﺮاي ﺳﻴـﺴﺘﻢ
ﻋﺎﻣﻞ DOSرزرو ﮔﺮدﻳﺪه اﺳﺖ .اﻛﺜﺮ اﻳﻦ وﻗﻔﻪﻫـﺎ در ﺳﻴـﺴﺘﻢ ﻋﺎﻣـﻞ DOSﻛـﺎرﺑﺮد
دارﻧﺪ ﺑﻨﺎﺑﺮاﻳﻦ در اﻳﻨﺠﺎ آﻧﻬﺎ را ﻣﻮرد ﺑﺤﺚ ﻗﺮار ﻧﻤﻲدﻫﻴﻢ .ﻓﻘﻂ دﻗﺖ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛـﻪ
ﻧﻮع 21داراي ﮔﺰﻳﻨﻪﻫﺎﺋﻲ ﺑﺮاي ﺑﺮﻗﺮاري ارﺗﺒﺎط ﺑﺎ،printer ، display ، keyboard
diskو وﺳﺎﺋﻞ ارﺗﺒﺎﻃﻲ ﻏﻴﺮ ﻫﻤﺰﻣﺎن )(asynchronous communicationsdevice
ﻣﻲﺑﺎﺷﺪ ﻛﻪ در ﺑﺨﺶ ﺑﻌﺪي اﻳﻦ ﻓﺼﻞ ﻣﻮرد ﺑﺤﺚ ﻗﺮار ﻣﻲﮔﻴﺮد.
١٨٢
-7-4-6دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي وﻗﻔﻪ
در زﺑﺎن اﺳﻤﺒﻠﻲ در ﻣﻮرد وﻗﻔﻪﻫﺎي ﺑﺮﻧﺎﻣﻪ ﻣﻲﺗـﻮان از دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳـﻞ
اﺳﺘﻔﺎده ﻧﻤﻮد:
INT
INTO
IRET
ز( ﻣﺤﺘﻮي wordاول interrupt vectorرا در ﺛﺒﺎت IPو ﻣﺤﺘﻮي wordدوم آﻧﺮا
در ﺛﺒﺎت CSﻗﺮار ﻣﻲدﻫﺪ.
ﻣﺜﺎل 7-27
INT 1 AH
CS F000
0004 SS:01F8
IP FE6E 049E SS:01FA
)(Flags SS:01FC
SP 01F8 SS:01FE
١٨٤
Interrupt
Vectors
19 0064
0066
1A 0068 FE6E
006A F000
1B 006C
006E
7-1 ﺟﺪول
Directofy Functions
CX=Attribute
*Besides the registers listed in this column, only AX and the flags are affected.
**If an error occurs, these function calls return CF=1 and an error code in AX.
See the folowing table for the meanings of the error codes.
7-2 ﺟﺪول
Error codes for DOS function calls.
Code Meaning
1 Invalid function number
2 File not found
3 Path not found
4 Too many open files (no handles left)
5 Access denied
6 Invalid handle
7 Memory control blocks destroyed
8 Insufficient memory
9 Invalid memory block address
10 Invalid environment
11 Invalid format
12 Invalid access code
13 Invalid data
15 Invalid drive was specified
16 Attempted to remove the current directory
17 Not same device
18 No more files
19 Disk is write-protected
20 Bad disk unit
21 Drive not ready
22 Invalid disk command
23 CRC error
24 Invalid length (during disk operation)
25 Seek error
26 Not an MS-DOS disk
27 Sector not found
28 Out of paper
29 Write fault
30 Read fault
31 General failure
32 Sharing violation
١٩٣
With DOS Microsoft has also included a Get Extended Error function call
(AH=59H) that provides more comprehensive error.
١٩٤
MOV AH , 00
MOV AL, 03
INT 10 H
ﺑﺮﮔﺮدد.
١٩٥
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻣﻜﺎن ﻧﻤﺎ ﺑﺎﺑﺘﺪاي ﺳﻄﺮ ﺑﻌﺪ ﻣﻨﺘﻘـﻞ
ﮔﺮدد.
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
داده21 در ذﻳﻞ ﺟﺪول ﻣﺮﺑﻮط ﺑﻪ ﻋﻤﻠﻴﺎت ﺻﻔﺤﻪ ﻛﻠﻴﺪ ﺑﺮاي وﻗﻔﻪ ﻧﻮع
.ﺷﺪه اﺳﺖ
7-3 ﺟﺪول
Keyboard operations with Type 21 interrupt.
در ذﻳـﻞ داده ﺷـﺪه21 ﺟﺪول ﻣﺮﺑﻮط ﺑﻪ ﻋﻤﻠﻴﺎت ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﺑﺮاي وﻗﻔـﻪ
.اﺳﺖ
7-4 ﺟﺪول
-7-5ﺧﻮاﻧﺪن رﺷﺘﻪﻫﺎ
در ﺑﺴﻴﺎري از ﺑﺮﻧﺎﻣﻪﻫﺎ ﻧﻴﺎز ﺑﻪ وارد ﻧﻤﻮدن ﻧﺎم ﻳﺎ آدرس ﻳﺎ ﺑﻄـﻮر ﻛﻠـﻲ
رﺷــﺘﻪاي از ﻃﺮﻳــﻖ ﺻــﻔﺤﻪ ﻛﻠﻴــﺪ ﻣــﻲﺑﺎﺷــﺪ .ﺑــﺮاي اﻳﻨﻜــﺎر ﺷــﻤﺎ ﺑﺎﻳــﺴﺘﻲ در
data segmentﻓﻀﺎﺋﻲ ﺑﺎﻧﺪازه ﻣﺎﻛﺰﻳﻤﻢ ﺗﻌﺪاد ﻛﺎرﻛﺘﺮﻫﺎﺋﻲ ﻛﻪ ﻣﻤﻜﻦ اﺳـﺖ
از ﺻﻔﺤﻪ ﻛﻠﻴﺪ داده ﺷﻮد ﺑﻌﻼوه 2روزو ﻧﻤﻮد .اﻳﻦ ﺷﺎﻣﻞ
اﻟﻒ(ﻳﻚ ﻓﻀﺎ از ﻧﻮع ﺑﺎﻳﺖ ﻛﻪ ﻣﻘﺪار آن ﻣﻌـﺎدل ﺗﻌـﺪاد ﻣـﺎﻛﺰﻳﻤﻢ ﻛﺎرﻛﺘﺮﻫـﺎي
ورودي ﺑﻌﻼوه ﻳﻚ ﻣﻲﺑﺎﺷﺪ.
ب(ﻳﻚ ﻓﻀﺎ از ﻧﻮع ﺑﺎﻳﺖ ﻛﻪ ﻣﻘـﺪار آن ﺑﻮﺳـﻴﻠﻪ ﺗـﺎﺑﻊ Aﻳـﺎ 10Hﻣـﺸﺨﺺ
ﻣﻲﮔﺮدد و ﻋﺒﺎرﺗﺴﺖ از ﺗﻌﺪاد ﻛﺎرﻛﺘﺮﻫﺎي واﻗﻌﻲ ﻛﻪ از ﺻﻔﺤﻪ ﻛﻠﻴﺪ داده ﺷﺪه
اﺳﺖ.
ج ( ﻳﻚ ﺑﻠﻮك از ﺑﺎﻳﺘﻬﺎ ﺑﺪون ﻣﻘﺪار اوﻟﻴﻪ ﻛﻪ ﺷﺎﻣﻞ ﻛﺎرﻛﺘﺮﻫﺎﺋﻲ اﺳﺖ ﻛﻪ ﻋﻤﻼً
از ﻃﺮﻳﻖ ﺻﻔﺤﻪ ﻛﻠﻴﺪ وارد ﮔﺮدﻳﺪه اﺳﺖ.
ﺑﻌﻨﻮان ﻣﺜﺎل ﺑﺮاي رزرو ﻓـﻀﺎﺋﻲ ﺗـﺎ 50ﻛـﺎرﻛﺘﺮ دﺳـﺘﻮراﻟﻌﻤﻞ زﻳـﺮ را
ﺑﺎﻳﺴﺘﻲ در data segmentﻗﺮار داد.
)?( USER_STRING DB 51,51 DUP
در ﺑﺴﻴﺎري از ﻣﻮارد در ﺑﺮﻧﺎﻣﻪﻫﺎ ﭘﻴﻐﺎﻣﻲ ﻧﻤﺎﻳﺶ داده ﻣﻴﺸﻮد و ﺳﭙﺲ از
ﻛﺎرﺑﺮ اﻧﺘﻈﺎر ﭘﺎﺳﺨﮕﻮﺋﻲ ﻣﻲﺑﺎﺷﺪ .ﺑﻌﻨﻮان ﻣﺜﺎل ﺷﻤﺎ از ﻛـﺎرﺑﺮ ﻣـﻲﺧﻮاﻫﻴـﺪ ﻛـﻪ
ﻧﺎﻣﺶ را وارد ﻧﻤﺎﻳﺪ .ﺑﺮاي اﻳﻨﻜﺎر اﺑﺘﺪا ﭘﻴﻐﺎﻣﻲ ﻛـﻪ ﻣـﻲ ﺧﻮاﻫﻴـﺪ روي ﺻـﻔﺤﻪ
ﻣﺎﻧﻴﺘﻮر ﻧﻤﺎﻳﺶ داده ﺷﻮد را در Data segmentﺗﻌﺮﻳﻒ ﻣﻲﻧﻤﺎﺋﻴﺪ .ﺳﭙﺲ ﺑـﺎ
اﺳـــﺘﻔﺎده از روال READ_KEYSداده ﺷـــﺪه در ﺑـــﺎﻻ اﻳﻨﻜـــﺎر را اﻧﺠـــﺎم
ﻣﻲدﻫﻴﺪ.
ﻣﺜﺎل 7-28
DATA_SEG PARA DATA ′DATA′
GET_NAME DB ′Please enter your name: $′
DATA_SEG ENDS
و ﺳﭙﺲ در code segmentدﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ را ﺑﺎﻳﺴﺘﻲ ﺑﺪﻫﻴﻢ.
٢٠٠
* Besides the registers listed in this column, only AX and the flags are affected.
٢٠١
START
Read time
A
Target time=
Inputs + current time
No No
Hundreds= Minutes=
Hundreds – 100 Minutes –60
Seconds= Hours =
Seconds + 1 Hours +1
No Yes
Seconds=
Hours =0
Seconds – 60
Minutes =
Read time
Minutes+1
A
Time = No
Target?
Yes
PUBLIC DELAY
CSEG SEGMENT PARA PUBLIC ′CODE′
ASSUME CS: CSEG
DELAY PROC FAR
PUSH AX ; Save affected registers
PUSH BX
PUSH CX
PUSH DX
MOV AH, 2CH ; Read current time
INT 21H
; Add the current time to the input values.
MOV AH, CH ; Hours
ADD AL, CL ; Minutes
ADD BH, DH ; Seconds
ADD BL, DL ; Hundredths
; Propagate any carryover.
CMP BL, 100 ;Hundredths must be <100
JB SECS
SUB BL, 100
INC BH
SECS: CMP BH, 60 ; Seconds must be <60
JB MINS
SUB BH,60
INC AL
MINS: CMP AL, 60 ; Minutes must be < 60
JB HRS
SUB AL, 60
INC AH
HRS: CMP AH, 24 ; Hours must be < 24
JNE CHECK
SUB AH, AH
; wait for interval to elapse.
CHECK: PUSH AX ; Read the time again
٢٠٥
BINARY رﻳﺰﭘﺮدازﻧﺪه
از ﻃﺮف دﻳﮕﺮ ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﻣـﻲداﻧـﻴﻢ ﻫـﺮ ﻋـﺪد را ﺑـﺼﻮرت ﻳـﻚ ﺳـﺮي از
ﺗﻮاﻧﻬﺎي 10ﻣﻲﺗﻮان ﻧﻤﺎﻳﺶ داد.
ﻣﺜﺎل 7-29
و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ آﻧﻜﻪ در ﻣﻮﻗﻊ ورود اﻋﺪاد ،در ﻫﺮ ﻟﺤﻈﻪ ﻓﻘﻂ ﻳـﻚ رﻗـﻢ را وارد
ﻣﻲﻧﻤﺎﺋﻴﻢ اﻟﮕﻮرﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺑﺎﻳﺴﺘﻲ وزن رﻗﻢ را ﻣﺪﻧﻈﺮ ﻗﺮار دﻫﺪ .ﺑﻌﻨﻮان ﻣﺜﺎل اﮔﺮ ﻛﺎرﺑﺮ
ﻋﺪد 95را ﺗﺎﻳﭗ ﻧﻤﺎﻳﺪ ﺑﻪ ﻣﺤﺾ درﻳﺎﻓﺖ 9اﻟﮕﻮرﻳﺘﻢ ﺑﺎﻳﺴﺘﻲ آﻧﺮا در 10ﺿﺮب ﻧﻤﺎﻳﺪ
ﻗﺒﻞ از آﻧﻜﻪ ﺑﺎ ﻋﺪد 5ﺟﻤﻊ ﻧﻤﺎﻳﺪ .ﺑﻄﻮر ﻛﻠﻲ ﻓﺮآﻳﻨﺪ ﺗﺒﺪﻳﻞ ﺑﺎﻳﺴﺘﻲ ﺑﻄﺮﻳﻖ ذﻳـﻞ ﻋﻤـﻞ
ﻧﻤﺎﻳﺪ.
٢٠٧
اﻟﻒ(اﻟﮕﻮرﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺑﺎﻳﺴﺘﻲ اوﻟﻴﻦ رﻗﻢ )ﺑﺎ ارزﺷﺘﺮﻳﻦ( را ﺑﺎ ﺣﺬف ﭼﻬﺎر ﺑﻴـﺖ ﻣﺮﺗﺒـﻪ
ﺑﺎﻻ )ﺑﻴﺖﻫﺎي 7ﺗﺎ (4ﻛﺪ اﺳﻜﻲ ﺑﻪ دودوﺋﻲ ﺗﺒﺪﻳﻞ ﻧﻤﺎﻳﺪ و ﻣﻘﺪار ﺑﺎﻳﻨﺮي ﺑﺪﺳﺖ آﻣﺪه
را ﻧﮕﻬﺪاري ﻧﻤﺎﻳﺪ.
ب(اﻟﮕﻮرﻳﺘﻢ ﺑﺎﻳﺴﺘﻲ ارﻗﺎم ﺑﻌﺪي را ﺑﻪ دودوﺋﻲ ﺗﺒﺪﻳﻞ ﻧﻤﻮده و ﻧﺘﻴﺠﻪ ﻗﺒﻠﻲ ﺑـﻪ دﺳـﺖ
آﻣﺪه در ﻣﺮﺣﻠﻪ اﻟﻒ را در 10ﺿﺮب ﻧﻤﻮده ﺑﺎ ﻧﺘﻴﺠﻪ ﺑﺪﺳﺖ آﻣﺪه در اﻳﻦ ﻣﺮﺣﻠﻪ ﺟﻤﻊ
ﻧﻤﺎﻳﺪ.
ﻣﺜﺎل 7-30
ﻋﺪد 726را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ.
0111 7
0010 2
از ﻃﺮف دﻳﮕﺮ اﻟﮕﻮرﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺑﺎﻳﺴﺘﻲ ﻗﺎدر ﺑﺎﺷﺪ ﻛﻪ ﺑﺘﻮاﻧﺪ اﻋﺪاد ﻣﻨﻔﻲ را ﻛـﻪ
ﺑﺼﻮرت رﺷﺘﻪاي از ﻛﺪاﺳﻜﻲ داده ﻣﻲﺷﻮد ﺑﻪ دودوﺋـﻲ ﺗﺒـﺪﻳﻞ ﻧﻤﺎﻳـﺪ .ﻧﻤـﻮدار ذﻳـﻞ
ﺗﺒﺪﻳﻞ ﻳﻚ ﻣﻘﺪار ﺑﻴﻦ +32767ﺗﺎ –32768را اﻧﺠﺎم ﻣﻲدﻫـﺪ .در ﺣﻘﻴﻘـﺖ ﻧﺘﻴﺠـﻪ ﻳـﻚ
ﻋﻤﻼً ﻛﺎر ﺗﺒﺪﻳﻞ را ﺑﻌﻬﺪه دارد. CONV_AB ﻣﻘﺪار ﺷﺎﻧﺰده ﺑﻴﺘﻲ ﻣﻲﺑﺎﺷﺪ .روال
٢٠٨
START
RESULT=0
DECIMAL
COUNT=0
IGNORE
LEADING
BLANKS
NO
(ASSUME POSITIVE)
NO
MINUS SIGN PLUS SIGN
(-)? (+)?
YES YES
POINTER= POINTER=
POINTER+1 POINTER+1
CONV_AB CONV_AB
(CONVERT (CONVERT
STRING) STRING)
YES
YES CONVERSION CONVERSION
ERROR? ERROR?
NO NO
YES YES
RESULT RESULT
< -32768? > 32767?
NO
COMPLEMENT SET ERROR
THE INDICATOR NO
RESULT
END
٢٠٩
DECIMAL NO
POINT?
YES
RECORD
DECIMAL
COUNT
POINTER=
POINTER+1
NO
CHARACTER
A DIGIT?
YES
MULTIPLY
PARTIAL RESULT
BY 10
CONVERT ASCII
CODE TO BINARY
DIGIT
RESULT=
RESULT+DIGIT
RETURN
٢١٠
ﺑﻪ ﻣﻨﻈﻮر ﻧﻤﺎﻳﺶ ﻧﺘﺎﻳﺞ روي ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﻳﺎ ﭼﺎپ آﻧﻬﺎ ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﮕﺎه
ﺑﺮﻧﺎﻣﻪ زﻳـﺮ اﻳـﻦ ﻛـﺎر را.ﺗﺒﺪﻳﻞ ﻧﻤﻮد ASCII ﭼﺎﭘﮕﺮ ﺑﺎﻳﺴﺘﻲ اﺑﺘﺪا آﻧﻬﺎ را از ﺑﺎﻳﻨﺮي ﺑﻪ
.اﻧﺠﺎم ﻣﻲدﻫﺪ
PUBLIC BIN_ASCII
CSEG SEGMENT PARA PUBLIC ′CODE′
ASSUME CS: CSEG
BIN_ASCII PROC FAR
PUSH DX ; Save the caller’s registers
PUSH BX
PUSH SI
PUSH AX
MOV BX, DX ; Put offset in BX
MOV CX, 6 ; Fill buffer with spaces
FILL_ BUFF : MOV BYTE PTR [BX], ′ ′
INC BX
LOOP FILL_BUFF
MOV SI, 10 ;Get ready o divide by 10
OR AX, AX ; If value I negative,
JNS CLR_DVD
NEG AX ; make if positive
CLR_DVD: SUB DX, DX ; Clear upper half of dividend
DIV SI ; Divide AX by 10
ADD DX, ′0′ ; Convert remainder to ASCII digit
DEC BX ; Back up through buffer
MOV [BX], DL ; Store char. In the string
INC CX ;Count converted character
OR AX,AX ; All done?
JNZ CLR_DVD ; If not, get next digit
POP AX ; Yes. Get original value
در اﻳﻦ ﻓﺼﻞ ﭘﺸﺘﻪ ﻳﺎ Stackﺗﻌﺮﻳﻒ ﮔﺮدﻳﺪه ﭘﺸﺘﻪ ﺧﺎﺻـﻴﺖ LIFOدارد ﻳﻌﻨـﻲ
آﺧﺮﻳﻦ ورودي اوﻟﻴﻦ ﺧﺮوﺟﻲ از ﭘﺸﺘﻪ ﻣﻲﺑﺎﺷﺪ .ﭘﺸﺘﻪ در ﺣﻘﻴﻘﺖ ﻗـﺴﻤﺘﻲ از ﺣﺎﻓﻈـﻪ
را اﺷﻐﺎل ﻣﻲﻧﻤﺎﻳﺪ .ﻋﻤﻠﻴﺎﺗﻲ ﻛﻪ روي ﭘـﺸﺘﻪ اﻧﺠـﺎم ﻣـﻲﺷـﻮد ﻋﺒﺎرﺗـﺴﺖ از PUSHو
.POP
در اﻳﻦ ﻏﺼﻞ ﻫﻤﭽﻨﻴﻦ ﻧﺤﻮه ﺗﻌﺮﻳﻒ ﻣـﺎﻛﺮو داده ﺷـﺪه ﻫـﺮ ﻣـﺎﻛﺮو ﺑـﺎ ﻛﻠﻤـﻪ
macroﺷﺮوع و ﺑﻪ endmﺧﺘﻢ ﻣﻲﺷﻮد .از ﻣﺎﻛﺮوﻫﺎ ﺑﺮاي ﺳﻬﻮﻟﺖ در ﻧﻮﺷﺘﻦ و ﺗﺎﻳـﭗ
ﺑﺮﻧﺎﻣﻪﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮد .ﻣﺎﻛﺮوﻫﺎ را در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺴﺘﻲ ﺗﻌﺮﻳـﻒ ﻧﻤـﻮد .اﻣﻜـﺎن
اﺳﺘﻔﺎده از روال ﻧﻴﺰ در زﺑﺎن اﺳﻤﺒﻠﻲ وﺟـﻮد دارد .روالﻫـﺎ در ﻣﻮﻗـﻊ اﺟـﺮاي ﺑﺮﻧﺎﻣـﻪ
ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮﻧﺪ .ﺗﻔﺎوت ﻣﺎﻛﺮو و روال در اﻳﻨﺴﺖ ﻛﻪ روال در زﻣﺎن اﺟﺮاي ﺑﺮﻧﺎﻣـﻪ
ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﺷﻮد در ﺻﻮرﺗﻴﻜﻪ ﻣﺎﻛﺮوﻫﺎ در زﻣـﺎن ﺗﺮﺟﻤـﻪ ﺟـﺎﻳﮕﺰﻳﻦ ﻣـﻲﮔﺮدﻧـﺪ .از
ﺗﻌﺪادي ﻋﻤﻠﮕﺮ در ﻣﺎﻛﺮوﻫﺎ اﺳﺘﻔﺎده ﻣﻲﺷﻮد ﻛﻪ در اﻳﻦ ﻓﺼﻞ ﺑﺤﺚ ﮔﺮدﻳـﺪه .ﻣﻌﻤـﻮﻻً
در اﻛﺜﺮ ﺑﺮﻧﺎﻣﻪﻫﺎ از وﻗﻔﻪ اﺳﺘﻔﺎده ﻣـﻲﮔـﺮدد .در اﻳـﻦ ﻓـﺼﻞ ﺗﻮاﺑـﻊ ﻣﺮﺑـﻮط ﺑـﻪ وﻗﻔـﻪ
ASCII ﺑﺼﻮرت ﻛﺎﻣﻞ ﺑﺤﺚ ﺷﺪه اﺳﺖ .ﺑﺮاي دادن دادهﻫﺎ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮ ﺑﺎﻳﺴﺘﻲ از ﻓـﺮم
آﻧﻬﺎ را ﺑﻪ ﺑﺎﻳﻨﺮي ﺗﺒﺪﻳﻞ ﻧﻤﻮد و ﻫﻤﭽﻨﻴﻦ ﺑﺮاي ﻧﻤﺎﻳﺶ دادهﻫﺎ ﺑﺎﻳـﺴﺘﻲ از ﻓـﺮم ﺑـﺎﻳﻨﺮي
آﻧﻬﺎ را ﺑﻪ ﺷﻜﻞ ASCIIﺗﺒﺪﻳﻞ ﻧﻤﻮد ﻛﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺨﺼﻮص آﻧﻬﺎ در اﻳﻦ ﻓﺼﻞ ﺗﻬﻴﻪ و
ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ .ﻫﻤﭽﻨـﻴﻦ ﻧﺤـﻮه ﻣﺤﺎﺳـﺒﻪ زﻣـﺎن اﺟـﺮاي ﻳـﻚ ﺑﺮﻧﺎﻣـﻪ ﻧﻴـﺰ ﺑﺤـﺚ
ﮔﺮدﻳﺪه اﺳﺖ.
٢١٥
aﺗﻤﺮﻳﻦ
Interrupt Vector-8ﭼﻴﺴﺖ؟
-13رواﻟﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺻﻔﺤﻪ ﻣﺎﻧﻴﺘﻮر را ﭘﺎك ﻧﻤﻮده و ﻣﻜﺎن ﻧﻤﺎ را در ﺳﻄﺮ 10ﺳﺘﻮن
40ﻗﺮار داده آﻧﮕﺎه ﻛﺎرﻛﺘﺮ * را ﻧﻤﺎﻳﺶ دﻫﺪ.
-14ﻳﻚ Macroﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﻘﺪار Nاز ﻧﻮع ﺑﺎﻳﺖ را ﮔﺮﻓﺘﻪ ﻣﺠﻤﻮع زﻳﺮا را ﻣﺤﺎﺳـﺒﻪ
1+2+3+…+N ﻧﻤﺎﻳﺪ.
٢١٦
-18ﻳﻚ Macroﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺸﺨﺺ ﻧﻤﺎﻳﺪ ﻋﺪد ﺻﺤﻴﺢ و ﻣﺜﺒﺖ Nاز ﻧﻮع wordاول
ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺧﻴﺮ؟
Nاز ﻧــﻮع wordو ﻣﺜﺒــﺖ را ﮔﺮﻓﺘــﻪ , M -19ﻳــﻚ Macroﺑﻨﻮﻳــﺴﻴﺪ ﻛــﻪ دو ﻣﻘــﺪار
ﻛﻮﭼﻜﺘﺮﻳﻦ ﻣﻀﺮب ﻣﺸﺘﺮك آﻧﻬﺎ را ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ.
ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ و ﻣﺜﺒﺖ و ﻣﺠﺬور ﻛﺎﻣﻞ ﺑﺎﺷـﺪ ﻳـﻚ Macroﺑﺪﻫﻴـﺪ ﻛـﻪ N -20اﮔﺮ
ﺟﺬر آﻧﺮا ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎﻳﺪ.
٢١٧
ﻓﺼﻞ ﻫﺸﺘﻢ
ﻋﻤﻠﻴﺎت ﭘﺮدازش رﺷﺘﻪﻫﺎ
ﻫﺪف ﻛﻠﻲ
ﻣﻌﺮﻓﻲ رﺷﺘﻪ ﻫﺎ و ﭘﺮدازش آﻧﻬﺎ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻔﺎﻫﻴﻢ زﻳﺮ آﺷﻨﺎ ﺧﻮاﻫﻴﺪ ﺷﺪ.
-1ﺗﻌﺮﻳﻒ رﺷﺘﻪ ).( String
-2اﻧﺘﻘﺎل ﻳﺎ ﺟﺎﺑﺠﺎﺋﻲ رﺷﺘﻪﻫﺎ.
-3ﻣﻘﺎﻳﺴﻪ رﺷﺘﻪﻫﺎ.
-4ﺑﺮرﺳﻲ ﻳﺎ ﺟﺴﺘﺠﻮي رﺷﺘﻪﻫﺎ.
-5ﺳﺎﻳﺮ ﻋﻤﻠﻴﺎت ﻣﺮﺑﻮط ﺑﻪ رﺷﺘﻪﻫﺎ.
٢١٨
-8-1رﺷﺘﻪ )(String
رﺷﺘﻪ ﻋﺒﺎرت اﺳﺖ از ﻳﻚ ﺑﻠﻮك ﭘﺸﺖ ﺳﺮ ﻫـﻢ از ﺑﺎﻳـﺖﻫـﺎ ﻳـﺎ wordﻫـﺎ در
ﺣﺎﻓﻈﻪ اﺻﻠﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ .ﻃﻮل رﺷﺘﻪ ﻣﻲﺗﻮاﻧﺪ ﺗﺎ 64Kﺑﺎﻳﺖ ﺑﺎﺷﺪ .ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷـﺖ
ﻛﻪ ﺑﺎ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎﺋﻲ ﻛﻪ ﺗﺎﻛﻨﻮن ﺑﺤﺚ ﻧﻤﻮدهاﻳﻢ ﻣﻲﺗﻮان ﻋﻤﻠﻴـﺎت روي رﺷـﺘﻪﻫـﺎ را
اﻧﺠﺎم داد .وﻟﻲ اﺳـﺘﻔﺎده از دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي ﭘـﺮدازش رﺷـﺘﻪاي ﻛﺎرآﻣـﺪﺗﺮ ﻣـﻲﺑﺎﺷـﺪ.
ﻋﻤﻠﻴﺎت ﭘﺮدازش رﺷﺘﻪاي ﻋﺒﺎرﺗﻨﺪ از:
Dataدر ﺑﻌــﻀﻲ از segment ﻫﻤﺎﻧﻄﻮرﻳﻜــﻪ ﻗــﺒﻼ ﺑﻴ ـﺎن ﮔﺮدﻳــﺪ ﻋــﻼوه ﺑــﺮ
Extra segment دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﭘﺮدازش رﺷﺘﻪاي اﺳـﺘﻔﺎده از segmentدﻳﮕـﺮي ﺑﻨـﺎم
ﻧﻴﺰ ﺿﺮوري ﻣﻲﺑﺎﺷﺪ.
M
EXTRA_SEG ENDS
-8-1-1دﺳﺘﻮراﻟﻌﻤﻞ MOVS
از اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺮاي ﻛﭙﻲ ﻧﻤﻮدن ﻳﻚ رﺷﺘﻪ از ﻣﺤﻠﻲ از ﺣﺎﻓﻈﻪ ﺑـﻪ ﻣﺤـﻞ
دﻳﮕﺮي از ﺣﺎﻓﻈﻪ اﺳﺘﻔﺎده ﻣﻲﮔﺮدد .رﺷﺘﻪاي ﻛﻪ از آن ﻣﻲﺧـﻮاﻫﻴﻢ ﻛﭙـﻲ ﺗﻬﻴـﻪ ﻧﻤـﺎﺋﻴﻢ
٢١٩
ﻋﻤﻞ ﺟﺎﺑﻪﺟﺎﺋﻲ از اوﻟﻴﻦ ﻋﻨﺼﺮ ﺑﻪ ﻃﺮف آﺧﺮﻳﻦ ﻋﻨﺼﺮ ﻣﻲﺑﺎﺷﺪ ﻳﺎ ﺑﻠﻌﻜـﺲ .ﭼﻨﺎﻧﭽـﻪ
ﻣﻘﺪار DFﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﺑﺎﺷﺪ ﻋﻤﻞ ﺟﺎﺑﻪﺟﺎﺋﻲ از اوﻟﻴﻦ ﻋﻨﺼﺮ ﺑﻪ ﻃﺮف آﺧﺮﻳﻦ ﻋﻨـﺼﺮ
و ﭼﻨﺎﻧﭽﻪ ﻣﻘﺪار DFﺑﺮاﺑﺮ ﺑﺎ ﻳﻚ ﺑﺎﺷﺪ ﻋﻤﻞ ﺟﺎﺑﻪﺟﺎﺋﻲ از آﺧﺮﻳﻦ ﻋﻨﺼﺮ ﺑﻄﺮف اوﻟﻴﻦ
ﻋﻨﺼﺮ اﻧﺠﺎم ﻣﻲﺷﻮد.
ﻣﺜﺎل 8-1
MOV SI, OFFSET SOURCE_STR
MOV DI, OFFSET DEST _STR
; CLD Forward movement
MOVSB
ﻗـﺮار داده و SI دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﻓﻮق آدرس ﺷﺮوع رﺷﺘﻪ ﻣﺒـﺪاء را در ﺛﺒـﺎت
آدرس ﺷﺮوع رﺷﺘﻪ ﻣﻘﺼﺪ را در ﺛﺒﺎت DIﻗﺮار داده و ﺟﻬﺖ ﺣﺮﻛﺖ از اوﻟـﻴﻦ ﻋﻨـﺼﺮ
ﺑﺎﻋﺚ ﻣﻲﺷـﻮد MOVSB ﺑﻪ ﻃﺮف آﺧﺮﻳﻦ ﻋﻨﺼﺮ ﻣﺸﺨﺺ ﻧﻤﻮده اﺳﺖ .دﺳﺘﻮراﻟﻌﻤﻞ
ﻛﻪ ﻳﻚ ﻋﻨﺼﺮ از رﺷﺘﻪ ﻣﺒﺪاء ﻛﻪ در آدرس DS:SIﻗـﺮار دارد ﺑـﻪ آدرس ES:DIﻛﭙـﻲ
ﮔﺮدد و ﻣﻘﺪار DIو SIﻳﻚ واﺣﺪ اﻓﺰاﻳﺶ ﻳﺎﺑﻨﺪ.
٢٢٠
DF=0 *
+
-
/
a
DI ﺟﻬﺖ ﭘﺮدازش b SI
o
o
k
رﺷﺘﻪ ﻣﻘﺼﺪ رﺷﺘﻪ ﻣﺒﺪأ
Extra segment Data segment
DF=1 *
+
-
/
a
DI ﺟﻬﺖ ﭘﺮدازش b SI
o
o
k
رﺷﺘﻪ ﻣﻘﺼﺪ رﺷﺘﻪ ﻣﺒﺪأ
DF=1 *
+
-
/
a
DI ﺟﻬﺖ ﭘﺮدازش b SI
o
o
k k
رﺷﺘﻪ ﻣﻘﺼﺪ رﺷﺘﻪ ﻣﺒﺪأ
ﺣﺎل ﺑﺮاي اﻧﺘﻘﺎل ﺳﺎﻳﺮ ﻋﻨﺎﺻﺮ رﺷﺘﻪ ﺑﺎﻳﺴﺘﻲ ﺗﻌﺪاد ﻋﻨﺎﺻـﺮ رﺷـﺘﻪ را در ﺛﺒـﺎت
ﻗﺮار داد و از ﭘﻴﺸﻮﻧﺪ REPاﺳﺘﻔﺎده ﻧﻤﻮد. CX
ﺗﺎ ﻣﺎداﻣﻴﻜﻪ ﻣﻘﺪار CXﻣﺨﺎﻟﻒ ﺻـﻔﺮ ﻣـﻲﺑﺎﺷـﺪ ﺑﺎﻋـﺚ اﺟـﺮاي REP ﭘﻴﺸﻮﻧﺪ
اﺟـﺮاي CX دﺳﺘﻮراﻟﻌﻤﻞ MOVSBﻣﻲﮔﺮدد .ﺑﻪ ﻣﺤﺾ ﺻـﻔﺮ ﺷـﺪن ﻣﻘـﺪار ﺛﺒـﺎت
دﺳﺘﻮراﻟﻌﻤﻞ MOVSBﻣﺘﻮﻗﻒ ﻣـﻲﮔـﺮدد .ﻫﻤـﺎﻧﻄﻮر ﻛـﻪ ﻗـﺒﻼً ﮔﻔﺘـﻪ ﺷـﺪ ﺑـﻪ ﺟـﺎي
دﺳﺘﻮراﻟﻌﻤﻞﻫﺎي
ﺑﻪ SOURCE_D ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺑﺎﻋﺚ ﻛﭙﻲ ﺷﺪن 100ﺑﺎﻳﺖ از رﺷﺘﻪاي ﺑﻨﺎم
DEST_Dﻣﻲﺷﻮد .ﻫﺮ دو رﺷﺘﻪ در data segmentﻗﺮار دارﻧﺪ.
PUSH DS
POP ES
CLD
LEA SI, SOURCE_D
LEA DI, DEST_D
MOV CX, 100
REP MOVSB
-8-1-2دﺳﺘﻮراﻟﻌﻤﻞ STOS
اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﻳﻚ ﺑﺎﻳﺖ ﻳﺎ ﻳﻚ wordرا از ﺛﺒـﺎت ALﻳـﺎ
ﺛﺒﺎت AXﺑﻪ ﻳﻚ ﻋﻨﺼﺮ رﺷﺘﻪ ﻣﻘـﺼﺪ ﻣﻨﺘﻘـﻞ ﻧﻤﺎﻳـﺪ .ﺷـﻜﻞ ﻛﻠـﻲ اﻳـﻦ دﺳـﺘﻮراﻟﻌﻤﻞ
ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
STOS
اﻟﻒ( اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺮروي ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
word ب(ﭼﻨﺎﻧﭽﻪ رﺷﺘﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ از دﺳﺘﻮراﻟﻌﻤﻞ STOSBو ﭼﻨﺎﻧﭽﻪ از ﻧـﻮع
ﺑﺎﺷﺪ از دﺳﺘﻮراﻟﻌﻤﻞ STOSWاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
٢٢٤
ج( ﻣﻘﺪاري ﻛﻪ در رﺷﺘﻪ ﻗﺮار ﻣﻲﮔﻴﺮد ﭼﻨﺎﻧﭽﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ در ﺛﺒـﺎت ALﻗـﺮار
داده ﻣﻲﺷﻮد .و اﮔﺮ از ﻧﻮع wordﺑﺎﺷﺪ در ﺛﺒﺎت AXﻗﺮار داده ﻣﻲﺷﻮد.
و STDﺑﺮاي ﻣﺸﺨﺺ ﻧﻤﻮدن ﺟﻬﺖ ﭘﺮدازش ﻣـﻲﺗـﻮان CLD د( از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي
اﺳﺘﻔﺎده ﻧﻤﻮد.
ه( از ﭘﻴﺸﻮﻧﺪ REPﻧﻴﺰ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد.
DI extraﺗﻌﺮﻳﻒ ﻧﻤﻮد و آدرس ﺷﺮوع آﻧﺮا در ﺛﺒـﺎت segment ز( رﺷﺘﻪ را ﺑﺎﻳﺴﺘﻲ در
ﻗﺮار داد.
ﻣﺜﺎل 8-2
)?( DEST_STR DB 100 DUP
MOV AL, ′*′
CLD .
LEA DI, DEST_STR
STOSB
0
1
2
DI AL
′*′
M
99
DEST_STR رﺷﺘﻪ
٢٢٥
* 0
1
DI AL
′*′
M
99
CX از ﭘﻴﺸﻮﻧﺪ REPﻧﻴﺰ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد .اﻳﻦ ﭘﻴﺸﻮﻧﺪ ﻣﺎداﻣﻴﻜـﻪ ﻣﺤﺘـﻮي
ﻣﺨﺎﻟﻒ ﺻﻔﺮ ﻣﻲﺑﺎﺷﺪ ﺑﺎﻋﺚ اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻞ STOSBﻣﻲﮔﺮدد.
ﻣﺜﺎل 8-3
DSTR DB )?(100 DUP
MOV CX , 50
MOV AL, ′*′
MOV DI, OFFSET DSTR
CLD
REP STOSB
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق ﺑﺎﻋﺚ ﻣﻲﺷﻮد ﻛﻪ ﻣﻘﺪار 50ﻋﻨﺼﺮ اول رﺷﺘﻪ DSTRﺑﺮاﺑﺮ ﺑـﺎ
ﻛﺎرﻛﺘﺮ * ﮔﺮدﻧﺪ.
ﻣﺜﺎل 8-4
CLD .
LEA DI, W_STRING
MOV AX,0
MOV CX, 200
REP STOSW
٢٢٦
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق ﻣﻘﺪار دوﻳﺴﺖ wordاول رﺷﺘﻪ W_STRINGرا ﻣﻌﺎدل ﺻﻔﺮ
ﻗﺮار ﻣﻲدﻫﺪ .دﻗﺖ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ در اﻳﻨﺠﺎ اﻓﺰاﻳﺶ DIﺑﺎﻧـﺪازه دو واﺣـﺪ ﻣـﻲﺑﺎﺷـﺪ
ﭼﻮن رﺷﺘﻪ از ﻧﻮع wordﻣﻲﺑﺎﺷﺪ.
-8-1-3دﺳﺘﻮراﻟﻌﻤﻞ LODS
اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻳﻚ ﻋﻨﺼﺮ رﺷﺘﻪ ﻣﺒﺪاء را در ALﻳﺎ AXﻗﺮار ﻣﻲدﻫـﺪ ﺑـﺴﺘﻪ
ﺑﻪ اﻳﻨﻜﻪ رﺷﺘﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ ﻳﺎ .wordﺷﻜﻞ ﻛﻠﻲ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﻋﺒﺎرﺗﺴﺖ از
LODS
اﻟﻒ( ﭼﻨﺎﻧﭽﻪ رﺷﺘﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ از LODSBو ﭼﻨﺎﻧﭽـﻪ از ﻧـﻮع wordﺑﺎﺷـﺪ از
LODSWاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ب( اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺮ روي ﻫﻴﭻ ﻓﻠﮕﻲ اﺛﺮ ﻧﺪارد.
ج( اﺳﺘﻔﺎده از ﭘﻴﺸﻮﻧﺪ REPﺑﺎ اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ اﻣﻜﺎن ﭘﺬﻳﺮ ﻣﻲﺑﺎﺷﺪ.
SI د( رﺷﺘﻪ ﺑﺎﻳﺴﺘﻲ در data segmentﺗﻌﺮﻳﻒ ﮔﺮدد و آدرس ﺷـﺮوع رﺷـﺘﻪ در ﺛﺒـﺎت
ﻗﺮار داده ﻣﻲﺷﻮد.
ﻣﺜﺎل 8-5
LEA SI, SOURCE_STR
LODSB
-8-1-4دﺳﺘﻮراﻟﻌﻤﻞ CMPS
اﻳـــﻦ دﺳـــﺘﻮراﻟﻌﻤﻞ دو رﺷـــﺘﻪ ﻣﺒـــﺪاء و ﻣﻘـــﺼﺪ را ﺑـــﺎ ﻫـــﻢ ﻣﻘﺎﻳـــﺴﻪ
ﻣﻲﻧﻤﺎﻳﺪ.دﺳﺘﻮراﻟﻌﻤﻞ CMPSﻣﺎﻧﻨﺪ دﺳﺘﻮراﻟﻌﻤﻞ CMPﻋﻤﻞ ﻣـﻲﻧﻤﺎﻳـﺪ.ﻋﻨـﺼﺮ رﺷـﺘﻪ
ﻣﺒﺪاء را از ﻋﻨﺼﺮ ﻣﺘﻨﺎﻇﺮ رﺷﺘﻪ ﻣﻘﺼﺪ ﻛﻢ ﻧﻤﻮده و ﻓﻠﮓﻫﺎ را ﺑﺮاﺳﺎس ﻧﺘﻴﺠـﻪ ﺑﺪﺳـﺖ
٢٢٧
آﻣﺪه ﺗﻨﻈﻴﻢ ﻣﻲﻧﻤﺎﻳﺪ .اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺎﻋـﺚ ﺗﻐﻴﻴـﺮ ﻣﻘـﺪار ﻫﻴﭽﻜـﺪام از ﻋﻤﻠﻮﻧـﺪﻫﺎ
ﻧﻤﻲﺷﻮد .ﺷﻜﻞ ﻛﻠﻲ دﺳﺘﻮراﻟﻌﻤﻞ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
CMPS
اﻟﻒ( ﭼﻨﺎﻧﭽﻪ رﺷﺘﻪﻫﺎ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﻨﺪ از CMPSBو ﭼﻨﺎﻧﭽﻪ از ﻧـﻮع wordﺑﺎﺷـﻨﺪ
از CMPSWاﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ب( از ﭘﻴﺸﻮﻧﺪﻫﺎي REPEﻳﺎ REPZﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد.
ج(از ﭘﻴﺸﻮﻧﺪﻫﺎي REPNEﻳﺎ REPNZﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد.
د( رﺷﺘﻪ ﻣﺒﺪاء را ﺑﺎﻳﺴﺘﻲ در data segmentﺗﻌﺮﻳﻒ ﻧﻤﻮد و آدرس ﺷﺮوع آﻧﺮا در ﺛﺒﺎت
SIﻗﺮار داد.
ه( رﺷﺘﻪ ﻣﻘﺼﺪ را ﺑﺎﻳﺴﺘﻲ در Extra Segmentﺗﻌﺮﻳﻒ ﻧﻤﻮده و آدرس ﺷـﺮوع آﻧـﺮا در
ﺛﺒﺎت DIﻗﺮار داد.
ﻣﺜﺎل 8-6
MOV SI, OFFSET SOURCE_STR
MOV DI, OFFSET DEST_STR
CMPSB
ﻣﺜﺎل 8-7
LEA SI, STR1
LEA DI, STR2
MOV CX, 100
CLD .
REPE CMPSB
JZ FOUND
.
M
FOUND .
.
M
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻓﻮق 100ﺑﺎﻳـﺖ از دو رﺷـﺘﻪ STR1و STR2را ﺑـﺎ ﻫـﻢ ﻣﻘﺎﻳـﺴﻪ
repeatﻳــﺎ not equal ﻣــﻲﻧﻤﺎﻳــﺪ .از ﭘﻴــﺸﻮﻧﺪ REPNEﻳــﺎ REPNZﺑــﺎ ﻣﻔﻬــﻮم
repeatﺑــﺎ دﺳــﺘﻮراﻟﻌﻤﻞ CMPSﻣــﻲﺗــﻮان اﺳــﺘﻔﺎده ﻧﻤــﻮد .ﺷــﺮط ﺗﻜــﺮار not zero
دﺳﺘﻮراﻟﻌﻤﻞ CMPSآن اﺳﺖ ﻛﻪ CX < > 0 and ZF=0ﺑﺎﺷـﺪ .ﻗﻄﻌـﻪ ﺑﺮﻧﺎﻣـﻪ زﻳـﺮ دو
رﺷﺘﻪ STRG1و STRG2را ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﻣﻲﻛﻨﺪ در ﺻﻮرﺗﻴﻜﻪ ﻣﺴﺎوي ﺑﺎﺷﻨﺪ ﻛﻨﺘـﺮل
ﺑﻪ SAMEﻣﻨﺘﻘﻞ ﻣﻲﮔﺮدد .ﺻﻔﺖ LENGTHﻣﺸﺨﺺ ﻛﻨﻨﺪه ﻃﻮل رﺷﺘﻪ ﻣﻲﺑﺎﺷﺪ.
-8-1-5دﺳﺘﻮراﻟﻌﻤﻞ SCAS
از دﺳﺘﻮراﻟﻌﻤﻞ SCASﺑﺮاي ﺟﺴﺘﺠﻮي ﻳﻚ رﺷـﺘﻪ ﺟﻬـﺖ وﺟـﻮد داﺷـﺘﻦ ﻳـﺎ
ﻧﺪاﺷﺘﻦ ﻳﻚ ﻋﻨﺼﺮ رﺷﺘﻪاي ﻣﻌﻴﻦ ﺑﻜﺎر ﻣﻲرود .ﺷﻜﻞ ﻛﻠﻲ ﺑﺼﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ.
SCAS
extra segment اﻟﻒ( رﺷﺘﻪ ﻣﻮرد ﺟﺴﺘﺠﻮ ﺑﺎﻳﺴﺘﻲ رﺷﺘﻪ ﻣﻘﺼﺪ ﺑﺎﺷﺪ .ﻳﻌﻨـﻲ رﺷـﺘﻪ در
ﺗﻌﺮﻳﻒ ﺷﺪه و آدرس ﺷﺮوع آن در ﺛﺒﺎت DIﻗﺮار ﮔﻴﺮد.
ب( از ﭘﻴﺸﻮﻧﺪﻫﺎي REPEو REPNEﻣﻲﺗﻮان ﺑﺮاي اﻳﻦ دﺳﺘﻮراﻟﻌﻤﻞ اﺳﺘﻔﺎده ﻧﻤﻮد.
و در ﺻـﻮرﺗﻴﻜﻪ از AL ج( ﻋﻨﺼﺮ ﻣﻮرد ﺟﺴﺘﺠﻮ ﭼﻨﺎﻧﭽﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ در ﺛﺒﺎت
ﻧﻮع wordﺑﺎﺷﺪ در ﺛﺒﺎت AXﻗﺮار داده ﻣﻲﺷﻮد.
د( از ﻓﻠﮓ DFﺑﺮاي ﺗﻌﻴﻴﻦ ﺟﻬﺖ ﭘﺮدازش رﺷﺘﻪ اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
SCASW ه(ﭼﻨﺎﻧﭽﻪ رﺷﺘﻪ از ﻧﻮع ﺑﺎﻳﺖ ﺑﺎﺷﺪ SCASBو ﭼﻨﺎﻧﭽﻪ از ﻧﻮع wordﺑﺎﺷﺪ از
اﺳﺘﻔﺎده ﻣﻲﮔﺮدد.
ﻣﺜﺎل 8-8
ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ در رﺷﺘﻪ STRGﺑﻪ ﺟﺴﺘﺠﻮي * ﻣﻲﭘﺮدازد.
ﻛﺎرﻛﺘﺮي ﻛﻪ ﺑﻪ ﻛﺎرﻛﺘﺮ ﻓﺎﺻﻠﻪ ﺧﺘﻢ ﺷﺪه را 80 دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ ﻳﻚ رﺷﺘﺔ
ﺟﺴﺘﺠﻮ ﻧﻤﻮده در ﺻـﻮرﺗﻴﻜﻪ ﻛﻠﻴـﻪ ﻋﻨﺎﺻـﺮ رﺷـﺘﻪ ﻛـﺎرﻛﺘﺮ ﻓﺎﺻـﻠﻪ ﺑﺎﺷـﺪ ﻛﻨﺘـﺮل ﺑـﻪ
NOT_FOUNDﻣﻨﺘﻘﻞ ﮔﺮدﻳﺪه در ﻏﻴﺮ اﻳﻨﺼﻮرت ﺑﺎ اوﻟﻴﻦ ﻋﻨﺼﺮ ﻣﺨﺎﻟﻒ blankﺷﺮوع
ﻧﻤﻮده و ﻳﻚ زﻳﺮ رﺷﺘﻪ 30ﻛﺎرﻛﺘﺮي از رﺷـﺘﻪ اوﻟﻴـﻪ را ﺑـﻪ رﺷـﺘﻪ SYMBOLاﻧﺘﻘـﺎل
ﻣﻲدﻫﺪ.
٢٣٠
***---***---***---***---***---***---***---
***---
ﺣﺎل
SI
M
٢٣٢
aﺗﻤﺮﻳﻦ
* -5رﺷﺘﻪ 100ﻛﺎراﻛﺘﺮي STRGرا در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻛﻠﻴـﻪ ﻛﺎراﻛﺘﺮﻫـﺎي blankآﻧـﺮا ﺑـﻪ
ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-6رﺷﺘﻪ 100ﻛﺎﻛﺘﺮي STRGرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻠﻴـﻪ ﻛﺎراﻛﺘﺮﻫـﺎي آﻧـﺮا ﺑـﻪ * ﺗﺒـﺪﻳﻞ
ﻧﻤﺎﺋﻴﺪ.
& -7رﺷﺘﻪ 100ﻛﺎراﻛﺘﺮي STRGرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ اوﻟﻴﻦ ﻛﺎراﻛﺘﺮ * در رﺷـﺘﻪ را ﺑـﻪ
ﺗﺒﺪﻳﻞ ﻧﻤﺎﺋﻴﺪ.
-10رﺷﺘﻪ 50ﻛﺎراﻛﺘﺮي STRGرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻠﻴﻪ ﻋﻨﺎﺻﺮ * در آﻧﺮا ﺣﺬف ﻧﻤﺎﺋﻴﺪ.
)ﻛﺎراﻛﺘﺮ ﺑﻌﺪي را ﺟﺎﻳﮕﺰﻳﻦ * ﻧﻤﺎﺋﻴﺪ(
٢٣٣
ﻓﺼﻞ ﻧﻬﻢ
ﺑﺮﻧﺎﻣﻪﻫﺎي ﻧﻤﻮﻧﻪ
ﻫﺪف ﻛﻠﻲ
ﻧﺤﻮه ﻧﻮﺷﺘﻦ و اﻳﺠﺎد ﺑﺮﻧﺎﻣﻪ ﻣﻌﺮﻓﻲ و ﭼﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻧﻤﻮﻧﻪ.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻄﺎﻟﺐ زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
-1اﺟﺰاي ﻣﺨﺘﻠﻔﻪ ﻳﻚ ﺑﺮﻧﺎﻣﻪ.
-2ﻧﺤﻮه ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﺮﻧﺎﻣﻪ و اﺟﺮاي آن.
٢٣٤
-9-1اﺟﺰاي ﺑﺮﻧﺎﻣﻪ
ﻫﻤﺎﻧﻄﻮرﻳﻜﻪ ﮔﻔﺘﻪ ﺷﺪ در ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ﻣـﻲﺗـﻮان از ﭼﻬـﺎر ﺳـﮕﻤﻨﺖ زﻳـﺮ
اﺳﺘﻔﺎده ﻧﻤﻮد.
STACK SEGMENT
DATA SEGMENT
EXTRA SEGMENT
CODE SEGMENT
DATA در STACK SEGMENTﭘﺸﺘﻪ ﻣﻮرد ﻧﻴﺎز ﺑﺮﻧﺎﻣﻪ اﻋﻼن ﻣـﻲﮔـﺮدد .در
SEGMENTﻛﻠﻴﺔ ﻣﺘﻐﻴﺮﻫﺎي ﻣﻮرد ﻧﻴﺎز ﺑﺮﻧﺎﻣﻪ اﻋﻼن و ﺗﻌﺮﻳﻒ ﻣﻲﺷﻮد.
EXTRAﻛﻠﻴــﻪ ﻣﺘﻐﻴﺮﻫــﺎي ﺑﺮﻧﺎﻣــﻪ ﻛــﻪ ﺟﻬــﺖ ﭘــﺮدازش SEGMENT در
دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي رﺷﺘﻪاي ﻣﻮرد ﻧﻴﺎز ﻣﻲﺑﺎﺷﺪ اﻋﻼن و ﺗﻌﺮﻳﻒ ﻣﻲﮔﺮدد.
CODE SEGMENTﺷﺎﻣﻞ ﻛﻠﻴﻪ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ﺑﺮﻧﺎﻣﻪ ﻣﻲﺑﺎﺷﺪ.
در زﺑﺎن اﺳﻤﺒﻠﻲ در ﺣﻘﻴﻘـﺖ ﺑﺮﻧﺎﻣـﻪ ﺑﻌﻨـﻮان ﻳـﻚ روال از ﻧـﻮع FARﻧﻮﺷـﺘﻪ
ﻣﻲﺷﻮد ﻛﻪ وﻗﺘﻲ ﺑﺪﺳﺘﻮر RETﺑﺮﺳﻴﻢ ﻛﻨﺘﺮل ﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺮﻣﻲﮔﺮدد.
M
اﺳﻢ ﺳﮕﻤﻨﺖ ENDS
در اﻳﻦ ﻓﺎز ﺑﺮﻧﺎﻣﻪ از ﻧﻈﺮ ﻧﺤﻮي ﺑﺮرﺳﻲ ﺷﺪه ﭼﻨﺎﻧﭽﻪ اﺷﺘﺒﺎﻫﺎت ﻧﺤﻮي داﺷـﺘﻪ
ﺑﺎﺷﺪ اﺳﻤﺒﻠﺮ اﺷﺘﺒﺎﻫﺎت را ﻣﺘﺬﻛﺮ ﻣﻲﺷﻮد .ﭼﻨﺎﻧﭽﻪ اﺷﺘﺒﺎﻫﻲ وﺟـﻮد داﺷـﺘﻪ ﺑﺎﺷـﺪ آﻧـﺮا
رﻓﻊ ﻧﻤﻮده ﻣﺠﺪداً دﺳﺘﻮر MASMرا ﻣﻲدﻫﻴﻢ.
ﭼﻨﺎﻧﭽﻪ ﺑﺮﻧﺎﻣﻪ داراي اﺷﺘﺒﺎه ﻧﺤﻮي ﻧﺒﺎﺷﺪ اﺳﻤﺒﻠﺮ ﭘﻴﻐﺎم
NO WARNINGS
NO ERRORS
را ﻣﻲدﻫﺪ .آﻧﮕﺎه ﻓﺮﻣﺎن زﻳﺮ را ﻣﻲدﻫﻴﺪ.
. را ﺑﺪﻧﺒﺎل ﻫﻢ روي ﺻﻔﺤﻪ ﻣﺎﻧﻴﺘﻮر ﻇـﺎﻫﺮ ﻣـﻲﺳـﺎزد9 ﺗﺎ0 ﺑﺮﻧﺎﻣﻪ ﺑﻌﺪي ارﻗﺎم
ﻣــﻲﺑﺎﺷــﺪ و ﻋﻤـﻼً ﻛــﺎري اﻧﺠــﺎمNO OPERATION ﺑــﻪ ﻣﻌﻨــﻲNOP دﺳــﺘﻮراﻟﻌﻤﻞ
.ﻧﻤﻲدﻫﺪ
STACK_SEG SEGMENT PARA STACK ′STACK′
DW 32 DUP (?)
STACK_SEG ENDS
;
;
CODE_SEG SEGMENT PARA STACK ′STACK′
BEGIN PROC FAR
ASSUME SS:STACK_SEG, CS:CODE_SEG
START:
PUSH DS
SUB AX,AX
PUSH AX
;
MOV AH, 00
MOV AL, 03
INT 10 H
;
MOV AH , 2
MOV BH , 0
MOV DH, 13 ;ROW
MOV DL, 25 ; COLUMN
INT 10 H
;
;character input without echo
;
MOV CX, 10
LOOP1:NOP
MOV AH ,7
INT 21H
;
MOV AH ,2
MOV DL , AL
INT 21H
LOOP LOOP1
;
RET
BEGIN ENDP
CODE-SEG ENDS
END START
٢٤٠
;
;
RET
BEGIN ENDP
;
;
NIK MACRO
ASSUME SS:STACK_SEG, CS:CODE_SEG,DS:DATA_SEG
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA_SEG
MOV DS,AX
;
ENDM
STACK_SEG SEGMENT PARA STACK ′STACK′
DW 32 DUP (?)
STACK_SEG ENDS
;
;
DATA_SEG SEGMENT PARA ′DATA′
MESSAGE DB ′DARYOUSH NIKMEHR′ ,13, ′$′
DATA _SEG ENDS
CODE –SEG SEGMENT PARA ′CODE′
NIK
BEGIN PROC FAR
MOV AH, 00
MOV AL, 03
INT 10H
;
MOV AH, 2
MOV BH, 0
MOV DH, 13 ; ROW
٢٤٣
ﺑﻴﺘﻲ داده ﺷﺪه اﺳﺖ؛ در اﻳﻦ ﺑﺮﻧﺎﻣﻪ اﻳﻦ دو32 در ذﻳﻞ ﺑﺮﻧﺎﻣﻪ ﺿﺮب دو ﻣﻘﺪار
.ﻣﻘﺪار ﺑﺼﻮرت ﺑﺪون ﻋﻼﻣﺖ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪهاﻧﺪ
PUBLIC MULU32
DSEG SEGMENT PARA ′DATA′
HI_MCND DW ?
LO_MCND DW ?
HI_PP1 DW ?
LO_PP1 DW ?
HI_PP2 DW ?
LO_PP2 DW ?
HI_PP3 DW ?
LO_PP3 DW ?
HI_PP4 DW ?
LO_PP4 DW ?
DSEG ENDS
PUSH DI
MOV DI, DSEG ;Initialize DS
MOV DS,DI
MOV HI_MCND,DX ;Save multiplicand in memory
MOV LO_MCND,AX
MUL BX ;Form partial product #1
MOV HI_PP1,DX ;and save it in memory
MOV LO_PP1, AX
MOV AX, HI_MCND ;Form partial product #2
MUL BX
MOV HI_PP2, DX ;and save it in memory
MOV LO_PP2, AX
MOV AX,LO_MCND ;Form partial product #3
MUL CX
MOV HI_PP3,DX ;and save it in memory
MOV LO_PP3, AX
MOV AX, HI_MCND ;Form partial product #4
MUL CX
MOV HI_PP4, DX ;and save it in memory
MOV LO_PP4, AX
; Add the partial products to form the final 64-bit product.
MOV AX,LO_PP1 ;Low 16 bits
MOV BX,HI_PP1 ;Form mid-lower 16 bits
ADD BX,LO_PP2 ; with sum #1
ADC HI_PP2,0
ADD BX,LO_PP3 ; and sum #2
MOV CX,HI_PP2 ;Form mid-upper 16 bits
ADC CX,HI_PP3 ;with sum #3
٢٤٧
ADC HI_PP4, 0
ADD CX,LO_PP4 ;and sum #4
MOV DX,HI_PP4 ;Form high 16 bits
ADC DX,0 ;including propagated carry
POP DI ;Restore caller’s registers
POP DS
RET
MULU32 ENDP
CSEG ENDS
END
٢٤٨
. ﺑﻴﺘﻲ ﻋﻼﻣﺘﺪار را ﺗﻌﻴﻴﻦ ﻣﻲﻧﻤﺎﻳﺪ32 ﺑﺮﻧﺎﻣﻪ داده ﺷﺪه در ذﻳﻞ ﺣﺎﺻﻠﻀﺮب دو ﻣﻘﺪار
; DX = Remainder
; To assemble: MASM DIVUO;
; To link: LINK callprog+DIVUO;
PUBLIC DIVUO
CSEG SEGMENT PARA ′CODE′
ASSUME CS: CSEG
DIVUO PROC FAR
CMP BX,0 ; Divisor = 0?
JNZ DVROK
DVROK: INT 0 ; Yes. Abort the divide
PUSH ES ; Save working registers
PUSH DI
PUSH CX
MOV DI,0 ; Fetch current INT 0 vector
MOV ES, DI
PUSH ES: [DI] ; and save it on the stack
PUSH ES:[DI+2]
LEA CX, OVR_INT ;Make INT 0 vector
MOV ES: [DI], CX ;point to OVR_INT
MOV CX, SEG OVR_INT
MOV ES: [DI+2], CX
DIV BX ;Perform the division
٢٥١
ﺑﻴﺘـﻲ از روش ﺗﻜـﺮاري ﻧﻴﻮﺗـﻮن اﺳـﺘﻔﺎده32 ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﺟﺬر ﻳـﻚ ﻣﻘـﺪار
ﺑﺎﺷـﺪN ﺟـﺬر ﺗﻘﺮﻳـﺐ ﻣﻘـﺪارA روش ﻧﻴﻮﺗﻮن ﺑﺪﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ اﮔﺮ.ﻣﻲﺷﻮد
. ﻣﻲﺑﺎﺷﺪN ﺗﻘﺮﻳﺐ ﺑﻬﺘﺮي ﺑﺮاي ﺟﺬرA1 آﻧﮕﺎه
A1 = (N / A + A) / 2
آﻧﮕـﺎه اوﻟـﻴﻦ ﺗﻘﺮﻳـﺐ ﺑﺮاﺑـﺮ ﺑـﺎA=200 ﺑﺎﺷـﺪ وN=10000 ﺑﻌﻨﻮان ﻣﺜـﺎل اﮔـﺮ
. ﻣﻲﺑﺎﺷﺪ10000 / 200 + 2 = 52
PUBLIC SQRT32
CSEG SEGMENT PARA ′CODE′
ASSUME CS: CSEG
SQRT32 PROC FAR
PUSH BP ;Save contents of BP
PUSH DX ;and source number DX:AX
PUSH AX
٢٥٣
LIST 6 LIST 6
42 42
76 76
122 122
14 ←DELETE 97
97 LIST+5 8
LIST+6 8
٢٥٦
PUBLIC MINMAX
CSEG SEGMENT PARA ′CODE′
ASSUME CS: CSEG
MINMAX PROC FAR
PUSH CX
PUSH DI ;Save starting address
MOV CX, ES:[DI] ;Fetch element count
DEC CX ;Get ready for count-1 compares
ADD DI,2 ;point to first element
MOV BX, ES:[DI] ;Declare it both minimum
MOV AX,BX ;and maximum
CHKMIN: ADD DI,2 ;Point to next element
CMP ES: [DI], BX ;Compare element to minimum
JAE CHKMAX ;New minimum found?
MOV BX,ES : [DI] ;Yes. Put is in BX
JMP SHORT NEXTEL
CHKMAX: CMP ES:[DI], AX ;Compare element to maximum
JBE NEXTEL ;New maximum found?
MOV AX, ES:[DI] ;Yes. Put it in AX
NEXTEL: LOOP CHKMIN ;Check entire list
POP DI ;Restore starting address
POP CX
RET ; and exit
MINMAX ENDP
CSEG ENDS
END
٢٥٧
START
EXCHANGE
FLAG=1
N=0
NO
ELEMENT N+1
ELEMENT N?
YES
EXCHANGE
THESE
ELEMENTS
EXCHANGE
FLAG=0
N=N+1
NO
END OF LIST?
YES
EXCHANGE YES
FLAG=0?
NO
END
٢٥٨
.ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺗﻌﺪادي ﻋﻨﺎﺻﺮ را ﺑﺼﻮرت ﺻﻌﻮدي ﺑﺮوش ﺣﺒﺎﺑﻲ ﻣﺮﺗﺐ ﻣﻲﻧﻤﺎﻳﺪ
; Arranges the 16-bit elements of a list in the extra
; Segment in ascending order, using bubble sort.
; Inputs: ES:DI = starting address of the list
; First location = Length of list (words)
; DI is unaltered.
PUBLIC B_SPRT
CSEG SEGMENT PARA ′CODE′
ASSUME CS:CSEG,DS:DSEG
B_SORT PROC FAR
PUSH DS ;Save caller’s registers
SUSH CX
SUSH AX
SUSH BX
MOV AX, DSEG ;Initialize DS
MOV DS,AX
MOV START_ADDR,DI ;Save starting address
MOV CX,ES:[DI] ;Fetch element count
DEC CX ;Get ready for count-1 compares
MOV SAVE_CNT,CX ;Save this value in memory
٢٥٩
ﺑﺮﻧﺎﻣﻪ زﻳﺮ روش ﺑﻬﺘﺮي ﺑﺮاي ﻣﺮﺗﺐ ﻧﻤﻮدن ﻋﻨﺎﺻﺮ ﻳﻚ آراﻳـﻪ ﺑـﺮوش ﺣﺒـﺎﺑﻲ
.اراﺋﻪ ﻣﻲدﻫﺪ
; Arranges the 16-bit elements of a list in the extra
; Segment in ascending order, using bubble sort.
; Inputs: ES:DI = starting address of the list
; First location = Length of list (words)
; DI is unaltered.
PUBLIC BUBBLE
CSEG SEGMENT PARA ′CODE′
ASSUME CS:CSEG,DS:DSEG
BUBBLE PROC FAR
PUSH DS ;Save caller’s registers
PUSH CX
PUSH AX
PUSH BX
MOV AX, DSEG ;Initialize DS
MOV DS,AX
MOV START_ADDR,DI
MOV CX,ES:[DI] ;Fetch element count
MOV SAVE_CNT,CX ;Save this value in memory
٢٦١
START
FETCH INDEX
(ELEMENT
COUNT)
DIVIDE INDEX BY 2
YES
INDEX
=0?
NO
SEARCH ADDRESS=
ADDRESS+INDEX
YES
INDEX
=0?
NO
SEARCH ADDRESS=
ADDRESS-INDEX
٢٦٣
.ﺑﻴﺘﻲ اراﺋﻪ ﻣﻲدﻫﺪ 16 ﺑﺮﻧﺎﻣﻪ ذﻳﻞ روش ﺟﺴﺘﺠﻮي دودوﺋﻲ ﺑﺮاي ﻣﻘﺎدﻳﺮ
; Searches an ordered list in the extra segment for the
; Word value contained in AX.
; Inputs : ES:DI = starting address of the list
; First location = Length of list (words)
; Results: if the value is in the list,
; CF=0
; SI=offset of matching element
; If the value is not in the list,
; CF = 1
; SI = offset of last element compared
; AX and DI are unaffected.
PUBLIC B_SEARCH
CSEG SEGMENT PARA ′CODE′
ASSUME CS:CSEG,DS:DSEG
B_SEARCH PROC FAR
PUSH DS ;Save caller’s DS register
PUSH AX
MOV AX,DSEG ;Initialize DS
MOV DS,AX
POP AX
٢٦٤
EXTRN B_SEARCH:FAR
PUBLIC ADD_TO_OL
CSEG SEGMENT PARA ′CODE′
ASSUME CS:CSEG
ADD_TO_OL PROC FAR
PUSH CX ; Save caller’s registers
PUSH SI
PUSH BX
CALL B_SEARCH ; Is the value in the list?
JNC GOODBYE ; If so, exit
MOV BX,SI ; if not, copy compare addr. To BX
MOV CX,ES: [DI] ; Find address of last element
SHL CX,1
ADD CX,DI ; and put it in CX
PUSH CX ; Save this address on the stack
SUB CX,SI ; Calculate no. of words to be moved
SHR CX,1
٢٦٧
.ﺑﺮﻧﺎﻣﻪ داده ﺷﺪه در ذﻳﻞ ﻳﻚ ﻣﻘﺪار را از ﻟﻴﺴﺖ ﻣﺮﺗﺐ داده ﺷﺪه ﺣﺬف ﻣﻲﻧﻤﺎﻳﺪ
در اﻳﻦ ﻓﺼﻞ ﻧﺤﻮه ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪ زﺑﺎن اﺳﻤﺒﻠﻲ و ﻧﺤﻮه اﺟﺮاي آﻧﻬﺎ ﺑﺤـﺚ
ﮔﺮدﻳﺪه اﺳﺖ .ﺿﻤﻨﺎً ﭼﻨﺪﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺼﻮرت ﻧﻤﻮﻧﻪ ﻧﻮﺷﺘﻪ ﺷﺪه ﻛﻪ ﻣـﻲﺗﻮاﻧـﺪ اﻟﮕـﻮﺋﻲ
ﺑﺮاي ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ داﻧﺸﺠﻮﻳﺎن ﺑﺎﺷﺪ.
٢٧٠
ﻓﺼﻞ دﻫﻢ
اﺳﻤﺒﻠﻲ 80386
ﻫﺪف ﻛﻠﻲ
در اﻳﻦ ﻓﺼﻞ رﻳﺰﭘﺮدازﻧﺪه 80386و زﺑﺎن اﺳﻤﺒﻠﻲ واﺑﺴﺘﻪ ﺑﺤﺚ ﻣﻲﮔﺮدد.
اﻫﺪاف رﻓﺘﺎري
ﭘﺲ از ﻣﻄﺎﻟﻌﻪ اﻳﻦ ﻓﺼﻞ ﺑﺎ ﻣﻮارد زﻳﺮ آﺷﻨﺎ ﻣﻲﺷﻮﻳﺪ.
-1رﻳﺰﭘﺮدازﻧﺪه . 80386
-2اﻧﻮاع dataﻫﺎﺋﻲ ﻛﻪ ﺣﻤﺎﻳﺖ ﻣﻲﻧﻤﺎﻳﺪ و ﻣﺤﺎﺳﺒﻪ آدرس ﻣﻮﺛﺮ
-3ﻣﻌﻤﺎري و ﺛﺒﺎﺗﻬﺎي آن.
-4آﺷﻨﺎﺋﻲ ﺑﺎ ﻣﺠﻤﻮﻋﻪ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي .80386
٢٧١
-10-2اﻧﻮاع دادهﻫﺎ
ﺗﺮاﺷﻪ رﻳﺰ ﭘﺮدازﻧﺪه 80386ﭼﻨﺪﻳﻦ ﻧـﻮع داده ﻋـﻼوه ﺑـﺮ آﻧﻬـﺎﺋﻲ ﻛـﻪ ﺑﻮﺳـﻴﻠﻪ
8086/80286ﺣﻤﺎﻳﺖ ﻣﻲﺷﻮﻧﺪ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻧﻤﺎﻳﺪ .اﻳﻦ رﻳﺰﭘﺮدازﻧﺪه ﻣﻘﺎدﻳﺮ ﺻـﺤﻴﺢ
1 ﺑﺎ ﻋﻼﻣﺖ و ﺑﺪون ﻋﻼﻣﺖ 32ﺑﻴﺘﻲ را ﺣﻤﺎﻳﺖ ﻣﻲﻧﻤﺎﻳﺪ .ﻫﻤﭽﻨﻴﻦ اﻃﻼﻋﺎت ﺑﻴﺘـﻲ از
ﺗﺎ 32ﺑﻴﺖ را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲﻧﻤﺎﻳﺪ .اﻳﻦ رﻳﺰﭘﺮدازﻧﺪه اﻧﻮاع اﺷﺎرهﮔﺮﻫﺎي اﺳﺘﺎﻧﺪارد اﺳﺘﻔﺎده
و اﺷﺎرهﮔﺮﻫﺎي 32و 48ﺑﻴﺘﻲ را ﺣﻤﺎﻳﺖ ﻣﻲﻧﻤﺎﻳـﺪ .ﺑﻄـﻮر 8086/80286 ﺷﺪه ﺑﻮﺳﻴﻠﻪ
ﻛﻠﻲ 80386از ﻋﻤﻠﻮﻧﺪﻫﺎي 32, 16, 8ﺑﻴﺘﻲ ﻣﻲﺗﻮاﻧﺪ اﺳﺘﻔﺎده ﻧﻤﺎﻳﺪ.
در رﻳﺰﭘﺮدازﻧﺪه 80386ﺑﺎﻳﺴﺘﻲ ﺑﻪ ﻧﻜﺎت ذﻳﻞ ﺗﻮﺟﻪ ﻧﻤﻮد.
اﻟﻒ( ﻳﻚ ﺑﺎﻳﺖ از ﻫﺸﺖ ﺑﻴﺖ ﭘﻴﻮﺳﺘﻪ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ.
ب(ﻳﻚ wordاز ﺷﺎﻧﺰده ﺑﻴﺖ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ.
ج(ﻳﻚ double wordاز 32ﺑﻴﺖ ﻛﻨﺎر ﻫﻢ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ.
د(ﻳﻚ quad wordاز 64ﺑﻴﺖ ﭘﺸﺖ ﺳﺮ ﻫﻢ ﺗﺸﻜﻴﻞ ﺷﺪه اﺳﺖ.
٢٧٢
ﻛﻪ ﺑﻮﺳﻴﻠﻪ دﻳﺮﻛﺘﻴﻮﻫﺎي زﻳﺮ در زﺑﺎن اﺳﻤﺒﻠﻲ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﻲﮔﻴﺮﻧﺪ.
-10-4ﻣﻌﻤﺎري
رﻳﺰﭘﺮدازﻧﺪه 80386اﻣﻜﺎن اﺳﺘﻔﺎده از 32ﺛﺒﺎت ﻛﻪ آﻧﻬﺎ را ﻣﻲ ﺗـﻮان ﺑـﻪ ﻫﻔـﺖ
دﺳﺘﻪ زﻳﺮ ﺗﻘﺴﻴﻢ ﻧﻤﻮد را ﻓﺮاﻫﻢ ﻣﻲﻧﻤﺎﻳﺪ.
-1ﺛﺒﺎﺗﻬﺎي ﻣﺼﺮف ﻋﻤﻮﻣﻲ ).(General-purpose registers
-2ﺛﺒﺎﺗﻬﺎي ﺳﮕﻤﻨﺖ ).(Segment registers
-3ﻓﻠﮕﻬﺎ و اﺷﺎرهﮔﺮ دﺳﺘﻮراﻟﻌﻤﻞ ).(Instruction pointer and flags
-4ﺛﺒﺎﺗﻬﺎي ﻛﻨﺘﺮل ).(Control registers
-5ﺛﺒﺎﺗﻬﺎي آدرس ﺳﻴﺴﺘﻢ ).(System address registers
-6ﺛﺒﺎﺗﻬﺎي ﺗﺴﺖ ).(Test registers
ﺑﻴﺖ داده را دارﻧﺪ. ذﺧﻴﺮه32 ، 16 ، 8 ﺛﺒﺎﺗﻬﺎي ﻣﺼﺮف ﻋﻤﻮﻣﻲ اﻣﻜﺎن
ﺗﻌﺪاد اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﻫﺸﺖ ﺗﺎ ﻣﻲﺑﺎﺷﺪ و اﺳﺎﻣﻲ آﻧﻬﺎ ﻋﺒﺎرﺗﻨﺪ از:
EAX Accumulator
EBX Base
ECX Count
EDX Data
ESP Stack pointer
EBP Base pointer
٢٧٣
31 16 15 0
EAX [AH] AX [AL]
EBX [BH] BX [BL]
ECX [CH] CX [CL]
EDX [DH] DX [DL]
ﻣﻲ ﺑﺎﺷﺪ ﻛـﻪ ﺧـﻮدAX ﻫﻤﺎن ﺛﺒﺎتEAX ﺛﺒﺎت15 ﺗﺎ0 در ﺣﻘﻴﻘﺖ ﺑﻴﺖﻫﺎي
ﻫﻤﻴﻨﻄـﻮر در ﻣـﻮرد ﺳـﺎﻳﺮ. ﺗﻘﺴﻴﻢ ﻣـﻲﮔﺮدﻧـﺪAH وAL ﻧﻴﺰ ﺑﻪ دو ﺛﺒﺎت ﻫﺸﺖ ﺑﻴﺘﻲ
. EDX، ECX ، EBXﺛﺒﺎﺗﻬﺎي
EDI ، ESI ، EBP ، ESP ﺑﻴﺘـــﻲ ﺑﻨﺎﻣﻬـــﺎي32 داراي ﭼﻬـــﺎر ﺛﺒـــﺎت80386
ﺑﺘﺮﺗﻴﺐ ﺷﺎﻧﺰده ﺑﻴﺖ اول اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﻣﻲ ﺑﺎﺷﻨﺪDI ، SI ، BP ، SP ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﺛﺒﺎﺗﻬﺎي
SP Stack Pointer
BP Base Pointer
SI Source Index
DI Destination Index
31 16 15 0 1
SP ESP
BP EBP
SI ESI
DI EDI
: اﺳﺎﻣﻲ اﻳﻦ ﺛﺒﺎﺗﻬﺎ ﻋﺒﺎرﺗﻨﺪ از. ﺑﻴﺘﻲ ﻣﻲﺑﺎﺷﺪ16 داراي ﺷﺶ ﺛﺒﺎت ﺳﮕﻤﻨﺖ80386
CS Code Segment
DS Data Segment
SS Stack Segment
ES Extra Segment
FS
GS
٢٧٤
15 0
CS
DS
SS
ES
FS
GS
ﺛﺒﺎت ﻓﻠﮓ ﻳﺎ ﻓﻠﮓ ﺛﺒﺎت در رﻳﺰﭘﺮدازﻧﺪه 80386ﺑﻪ 32ﺑﻴﺖ ﺗﻮﺳﻌﻪ ﻳﺎﻓﺘﻪ اﺳﺖ.
ﺛﺒﺎت ﻓﻠﮓ ﺑﻨﺎم EFLAGSﻣـﻲﺑﺎﺷـﺪ .اﻟﺒﺘـﻪ ﺑﺎﻳـﺴﺘﻲ ﺗﻮﺟـﻪ داﺷـﺖ ﻛـﻪ 16ﺑﻴـﺖ اول
EFLAGSﻫﻤﺎن ﻓﻠﮓ ﺛﺒﺎت ﻣﻄﺮح ﺷﺪه در ﻓﺼﻠﻬﺎي ﻗﺒﻞ ﻣﻲﺑﺎﺷﺪ.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NT IO PL OF DF IF TF SF ZF // AF // PF // CF
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
VM RF
٢٧٥
ﻛﻪ
RF Resume Flag
VM Virtual Mode Flag
31 16 15 0
CR0
CR2
CR3
31 16 15 0
GDTR
IDTR
LDTR
TR
80386 -10-5دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي
ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ ﻛﻠﻴـﻪ ﻣﻄـﺎﻟﺒﻲ ﻛـﻪ در ﻣـﻮرد رﻳﺰﭘﺮدازﻧـﺪه 80286در
ﻓﺼﻠﻬﺎي ﻗﺒﻞ ﻣﻄﺮح ﺷﺪ ﺗﻮﺳﻂ رﻳﺰﭘﺮدازﻧﺪه 80386ﻛﺎﻣﻼً ﻣﻲﺗﻮاﻧﻨﺪ ﺑـﺪون ﻫﻴﭽﮕﻮﻧـﻪ
ﺗﻐﻴﻴﺮي ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﻴﺮﻧﺪ ﻳﻌﻨﻲ ﻛﻠﻴﻪ ﺑﺮﻧﺎﻣﻪﻫﺎﺋﻲ ﻛﻪ ﺗﺎﻛﻨﻮن ﻧﻮﺷﺘﻪ ﺷﺪه ﻣﻲﺗﻮان
ﺑﻮﺳﻴﻠﻪ رﻳﺰﭘﺮدازﻧﺪه 80386اﺟﺮا ﻧﻤﻮد .ﺿﻤﻨﺎً ﻓﻬﺮﺳـﺘﻲ از دﺳـﺘﻮراﻟﻌﻤﻠﻬﺎي 80386در
80386 اﻧﺘﻬﺎي اﻳﻦ ﻓﺼﻞ داده ﺷﺪه اﺳﺖ .ﺑﺎﻳﺴﺘﻲ ﺗﻮﺟـﻪ داﺷـﺖ ﻛـﻪ در رﻳﺰﭘﺮدازﻧـﺪه
ﻋﻤﻠﻮﻧــﺪﻫﺎ ﻣــﻲﺗﻮاﻧﻨــﺪ 32ﺑﻴﺘــﻲ ﺑﺎﺷــﻨﺪ ﻛــﻪ اﻳﻨﻜــﺎر در ﻣــﻮرد 80286اﻣﻜــﺎن ﭘــﺬﻳﺮ
ﻧﺒﻮد.
ﻣﺜﺎل
ﻣﺜﺎل دﻳﮕﺮ
doubleﻛﺎﻓﻲ اﺳﺖ ﻛﻪ ﻣﻘﺪار ﻣﻮرد ﻧﻈـﺮ را در ﺛﺒـﺎت AXﻗـﺮار word ﺗﺒﺪﻳﻞ wordﺑﻪ
داده ﭘﺲ از اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻞ CBWﻧﺘﻴﺠﻪ در EAXﻗﺮار ﻣﻲﮔﻴﺮد.
در ﻣﻮرد ADCﻣﻲﺗﻮاﻧﻴﻢ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ را اﺳﺘﻔﺎده ﻧﻤﺎﺋﻴﻢ.
ADC AL , 4
ADC AX , 298
ADC EBX , 22334455H
ADC TABLE [SI] , 2
ADC NUMBE, 12345678
ADC DL , BL
ADC SI , X
ADC X, SI
ﻧﻤﺎﺋﻴﻢ: در ﻣﻮرد MOVاز دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ ﺑﻌﻨﻮان ﻣﺜﺎل ﻣﻲﺗﻮاﻧﻴﻢ اﺳﺘﻔﺎده
در ﻣﻮرد دﺳﺘﻮراﻟﻌﻤﻞ ﺿﺮب ﺑﻌﻨﻮان ﻣﺜـﺎل ﻣـﻲﺗـﻮاﻧﻴﻢ از دﺳـﺘﻮراﻟﻌﻤﻞ ذﻳـﻞ اﺳـﺘﻔﺎده
ﻧﻤﺎﺋﻴﻢ:
MOV EAX, 0FCAB1234H
MUL EBX
٢٧٨
NEG AL
NEG EBX
NOT AL
NOT AX
NOT EBX
در ﻣﻮرد PUSHو POPﻣﻲﺗﻮاﻧﻴﻢ ﺑﻌﻨﻮان ﻣﺜﺎل از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ اﺳﺘﻔﺎده ﻧﻤﺎﺋﻴﻢ:
POP CX
POP EAX
POP SS
PUSH BX
PUSH EAX
٢٧٩
*CWD sign extends register AX into registers DX and AX, whereas CWDE sign
extends AX into EAX.
٢٨٣
10-2 ﺟﺪول
DEC Subtract 1
INC Add 1
NOT Logical NOT (complement or invert)
ROL Rotate left
ROR Rotate right
SBB Subtract with borrow
SHL Shift logical left
SHR Shift logical right
SUB Subtract
TEST Bit test
Program control
CALL Call subroutine
INT Interrupt (trap)
JA Jump if above
JAE Jump if above or equal
JB Jump if below
JBE Jump if below or equal
JC Jump if carry
JE Jump if equal
JMP Jump unconditionally
JNC Jump if not carry
JNE Jump if not equal
JNS Jump if not sign
JNZ Jump if non zero
JS Jump if sign
JZ Jump if zero
RET Return from subroutine
٢٨٤
10-3 ﺟﺪول
در اﻳﻦ ﻓﺼﻞ در ﻣﻮرد رﻳﺰ ﭘﺮدازﻧﺪه 80386ﺑﺤـﺚ ﮔﺮدﻳـﺪ .ﻫﻤـﺎﻧﻄﻮري ﻛـﻪ
ﮔﻔﺘﻪ ﺷﺪ اﻳﻦ رﻳﺰ ﭘﺮدازﻧﺪه ﻳﻚ رﻳﺰﭘﺮدازﻧﺪه 32ﺑﻴﺘﻲ ﻣﻲ ﺑﺎﺷـﺪ و ﺗﻤـﺎم دﺳـﺘﻮراﻟﻌﻤﻞ
ﻫﺎﻳﻲ ﻛﻪ روي رﻳﺰﭘﺮدازﻧﺪه 80286اﺟﺮا ﻣﻲ ﺷﻮد روي اﻳﻦ رﻳﺰﭘﺮدازﻧﺪه ﻧﻴﺰﻗﺎﺑﻞ اﺟـﺮا
ﻣﻲ ﺑﺎﺷﺪ .ﺛﺒﺎت ﻫﺎي 32ﺑﻴﺘﻲ آن ﻋﺒﺎرﺗﻨﺪ از . EDXٍ ، ECXٍ ، EBX ، EAXدر ﺿـﻤﻦ
ﻣﻲ ﺗﻮان از ﺛﺒـﺎت ﻫـﺎي ، CH ، CL ، BH ، BL ، AH ، AL ، DX ، CX ، BX ، AX
DH ، DLو ...اﺳــﺘﻔﺎده ﻧﻤــﻮد.درﻧﻬﺎﻳــﺖ ﺟــﺪول ﻛﻠــﻲ ﻓﺮﻣــﺖ دﺳــﺘﻮراﻟﻌﻤﻠﻬﺎ ﺑــﺮاي
رﻳﺰﭘﺮدازﻧﺪه 80386داده ﺷﺪه اﺳﺖ ﻛﻪ ﺑﺎ ﻣﺮور آن ﻣﻲ ﺗﻮان ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﻣﺨﺘﻠﻔﻲ را ﺑﻪ
راﺣﺘﻲ ﻧﻮﺷﺖ و ﺑﺮ روي اﻳﻦ رﻳﺰﭘﺮدازﻧﺪه اﺟﺮا ﻧﻤﻮد
٢٨٦
1 ﺿﻤﻴﻤﻪ
(OPERATORS) ﻋﻤﻠـﮕﺮﻫﺎ
Operator Function
Arithmetic
+ Format: value1 + value2
Adds value1 and value2.
Operator Function
Logical
AND Format: value1 AND value2
Takes logical AND of value1 and value2.
Value - Returning
$ Format: $
Returns the current value of the location
counter.
Operator Function
OFFSET Format: OFFSET variable
Or
OFFSET label
Returns the offset value of variable or label.
Operator Function
HIGH Format: HIGH value
or
HIGH expression
Returns the high-order byte of a 16-bit numeric value or
address expression.
Attribute
LOW Format: LOW value
or
LOW expression
Returns the low-order byte of a 16-bit numeric value or
address expression.
٢٩٠
2 ﺿﻤﻴﻤﻪ ﺷﻤﺎره
Instruction Set Summary
For each instruction, it shows the general assembler format and which
flags are affected. In the Flags column, -means unchanged, * means may have
changed, and? Means undefined.
Flags
mnemonic Assembler format
OF
DF
AF
CF
TF
ZF
PF
SF
IF
AAA AAA ? - - - ? ? * ? *
AAD AAD ? - - - * * ? * ?
AAM AAM ? - - - * * ? * ?
AAS AAS ? - - - ? ? * ? *
ADC ADC Destination,source * - - - * * * * *
ADD ADD Destination,source * - - - * * * * *
AND AND Destination,source 0 - - - * * ? * 0
BOUND BOUND Reg16,source - - - - - - - - -
CALL CALL Target - - - - - - - - -
CBW CBW - - - - - - - - -
CLC CLC - - - - - - - - 0
CLD CLD - 0 - - - - - - -
CLI CLI - - 0 - - - - - -
CMC CMC - - - - - - - - *
CMP CMP Destination,source * - - - * * * * *
CMPS CMPS Dest-string,source- * - - - * * * * *
string
CMPSB CMPSB * - - - * * * * *
CMPSW CMPSW * - - - * * * * *
CWD CWD - - - - - - - - -
DAA DAA ? - - - * * * * *
DAS DAS ? - - - * * * * *
DEC DEC Destination * - - - * * * * -
DIV DIV Source ? - - - ? ? ? ? ?
ENTER ENTER Immed16,level - - - - - - - - -
ESC ESC Ext,opcode,source - - - - - - - - -
HLT HLT - - - - - - - - -
Flags
mnemonic Assembler format
OF
DF
AF
CF
TF
ZF
PF
SF
IF
IRET IRET * * * * * * * * *
JA/JNBE JA Short-label - - - - - - - - -
JAE/JNB JAE Short-label - - - - - - - - -
JB/JNAE/JC JB Short-label - - - - - - - - -
JBE/JNA JBE Short-label - - - - - - - - -
JCXZ JCXZ Short-label - - - - - - - - -
JE/JZ JE Short-label - - - - - - - - -
JG/JNLE JG Short-label - - - - - - - - -
JGE/JNL JGE Short-label - - - - - - - - -
JL/JNGE JL Short-label - - - - - - - - -
JLE/JNG JLE Short-label - - - - - - - - -
JMP JMP Target - - - - - - - - -
JNC JNC Short-label - - - - - - - - -
JNE/JNZ JNE Short-label - - - - - - - - -
JNO JNO Short-label - - - - - - - - -
JNP/JPO JNP Short-label - - - - - - - - -
JNS JNS Short-label - - - - - - - - -
JO JO Short-label - - - - - - - - -
JP/JPE JP Short-label - - - - - - - - -
JS JS Short-label - - - - - - - - -
LAHF LAHF - - - - - - - - -
LDS LDS Reg16,mem32 - - - - - - - - -
LEA LEA Reg16,mem16 - - - - - - - - -
LEAVE LEAVE - - - - - - - - -
LES LES Reg16,mem32 - - - - - - - - -
LOCK LOCK - - - - - - - - -
LODS LODS Source-string - - - - - - - - -
LODSB LODSB - - - - - - - - -
LODSW LODSW - - - - - - - - -
LOOP LOOP Short-label - - - - - - - - -
LOOPE/LOOPZ LOOPE Short-label - - - - - - - - -
LOOPNE/LOO LOOPNE Short-label - - - - - - - - -
PNZ
MOV MOV Destination, source - - - - - - - - -
MOVS MOVS Dest-string,source- - - - - - - - - -
string
MOVSB MOVSB - - - - - - - - -
MOVSW MOVSW - - - - - - - - -
MUL MUL Source * - - - ? ? ? ? *
OR OR Destination, source 0 - - - * * ? * 0
OUT OUT Port, accumulator - - - - - - - - -
OUTS OUTS DX, source-string - - - - - - - - -
Flags
mnemonic Assembler format
OF
DF
AF
CF
TF
ZF
PF
SF
IF
POPA POPA - - - - - - - - -
POPF POPF * * * * * * * * *
PUSH PUSH Source - - - - - - - - -
PUSH PUSH Immediate - - - - - - - - -
PUSHA PUSHA - - - - - - - - -
PUSHF PUSHF - - - - - - - - -
WAIT WAIT - - - - - - - - -
3 ﺿﻤﻴﻤﻪ ﺷﻤﺎره
Instruction times
AAD 14 2
AAM 16 1
AAS 3 1
CLC 2 1
CLD 2 1
CL1 3 1
CMC 2 1
CWD 2 1
DAA/DAS 3 1
DIV Reg8 14 2
DIV Reg16 22 2
DIV Mem8 17* 2-4
DIV Mem16 25* 2-4
ENTER Immed16,0 11 4
ENTER Immed16,1 15 4
ENTER Immed16,level 12+4(L) 4
HLT 2 1
IDIV Reg8 17 2
IDIV Reg16 25 2
٢٩٥
IMUL Reg8 13 2
IMUL Reg16 21 2
IMUL Mem8 16* 2-4
IMUL Mem16 24* 2-4
IMUL Dest-reg,reg16,immediate 21* 3-4
IMUL Dest-reg, memory, immediate 24* 3-4
IN Accumulator, immed8 5 2
IN Accumulator, DX 5 1
INS Dest-string, DX 5 1
INS (rep) dest-string,DX 5+4(rep) 1
INTO 24+m or 3 1
IRET 17+M 1
LAHF 2 1
LOCK 0 1
LODS Source-string 5 1
LODS (repeat)source-string 5+4(rep) 1
MOVS Dest-string,source-string 5 1
MOVS (repeat)dest-string,source-string 5+4(rep) 1
MUL Reg8 13 2
MUL Reg16 21 2
MUL Mem8 16* 2-4
MUL Mem16 24* 2-4
NEG Register 2 2
NEG Memory 7* 2-4
NOP 2 1
NOT Register 2 2
NOT Memory 7* 2-4
OR Register, register 2 2
OR Register, memory 7* 2-4
٢٩٧
OUTS DX,source-string 5 1
OUTS (rep)DX, source-string 5+4(rep) 1
POP Register 5 1
POP Memory 5* 2-4
POPA 19 1
POPE 5 1
PUSH Register 3 1
PUSH Memory 5* 2-4
PUSH Immediate 3 2-3
PUSHA 17 1
PUSHF 3 1
RCL/RCR/ROL/ROR register,1 2 2
RCL/RCR/ROL/ROR register, CL 5+1/bit 2
RCL/RCR/ROL/ROR memory,1 7* 2-4
RCL/RCR/ROL/ROR memory, CL 8*+1/bit 2-4
RCL/RCR/ROL/ROR reg, count 5+1/bit 3
RCL/RCR/ROL/ROR memory, count 8*+1/bit 3-5
REP 0 1
REPE/REPZ 0 1
REPNE/REPNZ 0 1
SAHF 2 1
٢٩٨
SCAS Dest-string 7 1
SCAS (repeat) dest-string 5+8(rep) 1
STC/STD/STI 2 1
STOS Dest-string 3 1
STOS (repeat) dest-string 4+3(rep) 1
WAIT 3 1
XLAT Source-table 5 1
٢٩٩
ﻓﻴﻠﺪ “ ”modدر اﻳﻦ ﺣﺎﻟﺖﻫﺎ ﺗﻌﻴﻴﻦ ﻛﻨﻨﺪه آن اﺳﺖ ﻛﻪ ﭼﻨﺪ ﺑﺎﻳﺖ ﺑﻌﻨﻮان ﻣﻘﺪار
ﺟﺎﺑﺠﺎﻳﻲ وﺟﻮد دارد .ﻣﻘﺪار 00ﺑﻪ اﻳﻦ ﻣﻌﻨﺎﺳﺖ ﻛﻪ ﺑﺎﻳـﺖ ﺟﺎﺑﺠـﺎﻳﻲ در ﻛـﺪ ﻣﺎﺷـﻴﻦ
وﺟﻮد ﻧﺪارد .ﻳﻌﻨﻲ ﺣﺎﻟﺖ آدرس دﻫﻲ ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ ﺑﺎ ﺛﺒﺎت ﻳـﺎ آدرس دﻫـﻲ ﺷـﺎﺧﺺ
دار ﺑﺎ ﺛﺒﺎت ﭘﺎﻳﻪ ﺑﺪون ﻣﻘﺪار ﺟﺎﺑﺠﺎﻳﻲ اﺧﺘﻴﺎري اﺳﺖ .ﻣﻘـﺪار 10در ﻓﻴﻠـﺪ “ ”modﺑـﻪ
اﻳﻦ ﻣﻌﻨﻲ اﺳﺖ ﻛﻪ دو ﺑﺎﻳﺖ ﺟﺎﺑﺠﺎﻳﻲ در ﻛﺪ ﻣﺎﺷﻴﻦ وﺟﻮد دارد ،اﻳﻦ ﻛﻠﻤﻪ ﺑﻪ ﻣﻘﺪاري
ﻛﻪ از ﺛﺒﺎت ﺷﺎﺧﺺ و ﻳﺎ ﺛﺒﺎت ﻣﺒﻨﺎ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ اﺿﺎﻓﻪ ﻣﻲﺷﻮد .ﻣﻘـﺪار 01در ﻓﻴﻠـﺪ
“ ”modﺑﻪ اﻳﻦ ﻣﻌﻨﻲ اﺳﺖ ﻛﻪ ﻳﻚ ﺑﺎﻳﺖ ﺟﺎﺑﺠﺎﻳﻲ در ﻛﺪ ﻣﺎﺷﻴﻦ وﺟﻮددارد ،اﻳﻦ ﺑﺎﻳﺖ
ﺑﻌﻨﻮان ﻳﻚ ﻋﺪد ﻋﻼﻣﺖ دار در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲﺷﻮد و ﻗﺒﻞ از آﻧﻜﻪ ﺑـﺎ ﻣﻘـﺪاري ﻛـﻪ از
ﺛﺒﺎت ﺷﺎﺧﺺ و ﻳﺎ ﺛﺒﺎت ﻣﺒﻨﺎ ﺑﺪﺳﺖ ﻣﻲآﻳﺪ ﺟﻤﻊ ﮔﺮدد ﺑـﻪ ﻳـﻚ ﻛﻠﻤـﻪ ﺗﻮﺳـﻌﻪ ﭘﻴـﺪا
ﻣﻲﻛﻨﺪ.
ﺑﺎﻳﺪ ﺗﻮﺟﻪ داﺷﺖ ﻛﻪ ﻋﻤﻠﻮﻧﺪ ] [BPدر ﺟﺪول ﺑﺎﻻ ﻧﻴﺎﻣﺪه اﺳﺖ .ﺗﺮﻛﻴﺐ ﻣﻨﻄﻘﻲ
mod=00و r/m=110ﻳﻚ ﺟﻔﺖ وﻳﮋه اي اﺳﺖ ﻛﻪ ﺣﺎﻟﺖ ﻣﺴﺘﻘﻴﻢ ﺣﺎﻓﻈﻪ را ﻣﺸﺨﺺ
bp ﻣﻲﻛﻨﺪ .اﻳﻦ ﺑﺪان ﻣﻌﻨﺎﺳﺖ ﻛﻪ ﻫﻴﭻ ﺣﺎﻟﺖ آدرس دﻫﻲ ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ ﺛﺒﺎت ﺑـﺎ ﺛﺒـﺎت
وﺟﻮد ﻧﺪارد .اﺳﻤﺒﻠﺮ ] [BPرا ﺑﻪ ] [BP+0ﺗﺒﺪﻳﻞ ﻛـﺮده و از ﺣﺎﻟـﺖ mod=01اﺳـﺘﻔﺎده
ﻛﺮده و ﺑﺎﻳﺖ ﺟﺎﺑﺠﺎﻳﻲ را ﺑﺮاﺑﺮ ﺻﻔﺮ ﻗﺮار ﻣﻲدﻫﺪ.
ﻛﻠﻤــﻪ آدرس در ﺟــﺪول ﺑﻌــﺪي در ﭘﺮاﻧﺘــﺰ ﻗــﺮار ﮔﺮﻓﺘــﻪ اﺳــﺖ زﻳــﺮا ﺗﻤــﺎم
r/m=110 ﻋﻤﻠﻮﻧﺪﻫﺎي ﺣﺎﻓﻈﻪ ﺑﻪ ﺑﺎﻳﺖﻫﺎي اﺿﺎﻓﻲ ﻫﺪف ﻧﻴﺎز ﻧﺪارﻧﺪ .اﮔـﺮ mod=00و
)آدرس دﻫﻲ ﻣﺴﺘﻘﻴﻢ( ﺑﺎﺷﺪ ،دو ﺑﺎﻳﺖ اﺿﺎﻓﻲ وﺟﻮد ﺧﻮاﻫﺪ داﺷﺖ.
٣٠٢
5 ﺿﻤﻴﻤﻪ ﺷﻤﺎره
ﺟﺪول ﻛﺪ اﺳﻜﻲ
ASCII Character Sets
MSD 0 1 2 3 4 5 6 7
LSD 000 001 010 011 100 101 110 111
0 0000 NUL DLE SP 0 @ P p
1 0001 SOH DC1 ! 1 A Q a q
2 0010 STX DC2 “ 2 B R b r
3 0011 ETX DC3 # 3 C S c s
4 0100 EOT DC4 $ 4 D T d t
5 0101 ENQ NAK % 5 E U e u
6 0110 ACK SYN & 6 F V f v
7 0111 BEL ETB , 7 G W g w
8 1000 BS CAN ( 8 H X h x
9 1001 HT EM ) 9 I Y i y
A 1010 LF SUB * : J Z j z
B 1011 VT ESC + ; K [ k {
C 1100 FF FS , < L \ i |
D 1101 CR GS - = M ] m }
E 1110 SO RS . > N ↑ n ~
F 1111 SI US / ? O ← o DEL
6 ﺿﻤﻴﻤﻪ ﺷﻤﺎره
ﻛﺪ دﺳﺘﻮراﻟﻌﻤﻠﻬﺎ
82
83 mod 000 r/m, (address), immediate byte
and reg16,imm8 11 000 reg, immediate byte
D4 aam 0a
D5 aad 0a
D6
D7 xlat (none)
D8 esc 0 mod 000 r/m, (address)
D9 esc 1 mod 001 r/m, (address)
DA esc 2 mod 010 r/m, (address)
DB esc 3 mod 011 r/m, (address)
DC esc 4 mod 100 r/m, (address)
DD esc 5 mod 101 r/m, (address)
DE esc 6 mod 110 r/m, (address)
DF esc 7 mod 111 r/m, (address)
E0 loopnz / loopne displacement byte
E1 loopz/loope displacement byte
E2 loop displacement byte
E3 jcxz displacement byte
E4 in al, port port byte
٣١٥
-7ﺑﺮ اﺛﺮ ﺟﻤﻊ ﻛﺪام ﻳﻚ از زوج اﻋﺪاد ذﻳﻞ ،ﺳﺮرﻳﺰي رخ ﺧﻮاﻫﺪ داد )اﻋﺪاد در
ﻣﺒﻨﺎي 16ﻫﺴﺘﻨﺪ(؟
0A07,0FD3 اﻟﻒ.
0206,FFB0 ب.
FFE7,FFF6 ج.
483F,745A د.
-14روال PROC1از ﻧﻮع FARدو ﭘـﺎراﻣﺘﺮ N1و N2را از ﻃﺮﻳـﻖ ﭘـﺸﺘﻪ و ﺑـﻪ
ﺻﻮرت ذﻳﻞ درﻳﺎﻓﺖ ﻣﻲﻛﻨﺪ.
PUSH N1
PUSH N2
CALL PROC1
٣٢٢
-23ﻗﻄﻌﻪ ﻛﺪ ذﻳﻞ ﭼﻪ ﻛﺎري اﻧﺠﺎم ﻣﻲدﻫﺪ) .ﻓﺮض ﻣﻲﻛﻨﻴﻢ ﺛﺒﺎﺗﻬﺎي ﻻزم دﻳﮕـﺮ
ﺗﻨﻈﻴﻢ ﺷﺪهاﻧﺪ(.
٣٢٥
اﻟﻒ12 .
ب9 .
ج15 .
د .اﺳﻤﺒﻠﺮ ﭘﻴﻐﺎم ﺧﻄﺎ ﻣﻲدﻫﺪ.
-33ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻌﺮﻳﻒ ﻣﺎﻛﺮوي ذﻳﻞ ﻛﺪاﻣﻴﻚ از ﻓﺮاﺧﻮاﻧﻲﻫﺎي ذﻳﻞ ﺑﺎﻋﺚ ﺑـﺮوز
ﺧﻄﺎ ﺧﻮاﻫﺪ ﺷﺪ.
MAC2 MACRO N1,N2,N3,N4
MOV AX,N1
>IFNB<N2
ADD AX,N2
ENDIF
>IFNB<N3
ADD AX,N3
٣٢٩
ENDIF
>IFNB<N4
ADD AX,N4
ENDIF
ENDM
MAC1 BX, CX,DX,1 اﻟﻒ.
MAC1 BX,CX,100 ب.
MAC1 BX,DX ج.
د .ﻫﻴﭽﻜﺪام
AL -36ﻣﺤﺘﻮاي ALﭼﻪ ﻋﺪدي ﺑﺎﺷﺪ ﺗﺎ ﺑﻌﺪ از اﺟﺮاي دﺳـﺘﻮرات ذﻳـﻞ ﻣﻘـﺪار
ﺻﻔﺮ ﺷﻮد؟
XOR AL,0FH
00 اﻟﻒ.
FF ب.
0F ج.
F0 د.
IMUL -37اﮔﺮ AX=FF15و VALUE=0003ﺑﺎﺷـﺪ ﺑﻌـﺪ از اﺟـﺮاي دﺳـﺘﻮر
VALUEﻓﻠﮕﻬﺎي CFو OFﻛﺪاﻣﻴﻚ از ﻣﻘﺎدﻳﺮ ذﻳﻞ را دارﻧﺪ؟
CF=0 ، OF=1 اﻟﻒ.
CF=1 ، OF=0 ب.
CF=1 ، OF=1 ج.
CF=0 ، OF=0 د.
-38ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ دﺳﺘﻮر ذﻳﻞ ﭼﻪ ﻋﺪدي در ﻣﺒﻨﺎي 16در BYTE1ذﺧﻴﺮه ﻣﻲﺷﻮد.
BYTE1 DB - 128
70 اﻟﻒ.
80 ب.
FF ج.
08 د.
-39ﺑﻌﺪ از اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ DXﺣﺎوي ﭼﻪ ﻋﺪدي ﺧﻮاﻫـﺪ ﺑـﻮد )در
ﻣﺒﻨﺎي (16؟
MOV BX,1
MOV AX,- 1
MUL BX
اﻟﻒ DX .ﺗﻐﻴﻴﺮي ﻧﻤﻲﻛﻨﺪ و ﻣﻘﺪار ﻗﺒﻠﻲ ﺧﻮد را دارد.
1111 ب.
0000 ج.
FFFF د.
٣٣١
AX -60اﮔﺮ AX=A9D7و CL=04ﺑﺎﺷﺪ ﺑﻌﺪ از اﺟﺮاي دﺳﺘﻮر Sar ax, clﻣﻘـﺪار
ﭼﻴﺴﺖ؟
FA9D اﻟﻒ.
0F9D ب.
9D7F ج.
9D70 د.
INC AX
LOOP P
ﭘﺲ از اﺟﺮاي ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺪار AXﭼﻴﺴﺖ؟
اﻟﻒ9 .
ب11 .
ج10 .
د65536 .
-87اﮔﺮ اﺧﺘﻼف ﻋﺪدي ﻛﺪ اﺳﻜﻲ ﺣﺮوف ﻛﻮﭼﻚ و ﺑﺰرگ 32ﺑﺎﺷﺪ آﻧﮕﺎه ﺑﺮاي
ﺗﺒﺪﻳﻞ ﺣﺮوف ﻛﻮﭼﻚ ﺑﻪ ﺣﺮوف ﺑﺰرگ و ﺑﺎﻟﻌﻜﺲ از ﻛـﺪام دﺳـﺘﻮراﻟﻌﻤﻞ ذﻳـﻞ
ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد )ﻓﺮض ﻛﻨﻴﺪ ﺣﺮف ﻣﻮرد ﻧﻈﺮ در CLﺑﺎﺷﺪ(.
XOR CL,00100000 اﻟﻒ.
OR CL,00100000 ب.
NOT CL ج.
AND 00100000 د.
٣٤٤
-94اﮔﺮ ax=0Fو bx=0Eﺑﺎﺷﺪ ﺑﻌﺪ از اﺟﺮاي دﺳﺘﻮراﻟﻌﻤﻞ زﻳﺮ ﻓﻠﮕﻬـﺎ ﺑـﻪ ﭼـﻪ
ﺻﻮرت ﺧﻮاﻫﺪ ﺷﺪ؟
cmp bx,ax
of=0 , cf=1, sf=1 اﻟﻒ.
of=0 , cf=0, sf=0 ب.
of=1 , cf=1, sf=1 ج.
of=0 , cf=1, sf=0 د.
٣٤٦
-97ﺑﺮاي اﻳﻨﻜﻪ ﻓﻘﻂ ﺑﻴﺖ ﺳـﻮم axرا ﻳـﻚ ﻛﻨـﻴﻢ از ﻛـﺪام ﻳـﻚ از دﺳـﺘﻮرات
ﻣﻲﺗﻮاﻧﻴﻢ اﺳﺘﻔﺎده ﻛﻨﻴﻢ؟
or ax,4 اﻟﻒ.
and ax,4 ب.
xor ax,4 ج.
not ax,4 د.
٣٤٧
mov cx,10
ll:
M
loop l l
10 اﻟﻒ.
0 ب.
1 ج.
د-1 .
-115ﺑﺮاي ﺟﺎﺑﻪ ﺟﺎ ﻧﻤﻮدن دو ﻣﻘﺪار ﺣﺎﻓﻈـﻪ Xو Yاز ﻧـﻮع WORDاز ﻛـﺪام
دﺳﺘﻮراﻟﻌﻤﻞ ﻣﻲﺗﻮان اﺳﺘﻔﺎده ﻧﻤﻮد؟
MOV X,Y اﻟﻒ.
XCHG X,Y ب.
LEA X,Y ج.
د .ﻫﻴﭽﻜﺪام
A2B4+
88F3
ﺑﺮاﺑـﺮ BX ﺑﺎﺷﺪ و ﻣﺤﺘﻮي 101010000111001B0 ﺑﺮاﺑﺮ ﺑﺎ AX -138اﮔﺮ ﻣﺤﺘﻮي
ADDﻛﺪام ﮔﺰﻳﻨـﻪ AX,BX ﺑﺎ 100010101101010B0ﺑﺎﺷﺪ ﭘﺲ از اﺟﺮاي دﺳﺘﻮر
ﺻﺤﻴﺢ اﺳﺖ؟
OF=1, SF=1, AF=1, PF=1 اﻟﻒ.
OF=1, SF=1, AF=0, PF=0 ب.
OF=1, SF=0, AF=1, PF=1 ج.
OF=1, SF=0, AF=1, PF=1 د.
-140ﺑﺮاي ﻣﻜﻤﻞ ﻧﻤﻮدن ﺑﻴﺖﻫﺎي ﺷﻤﺎره ﻓﺮد ﺛﺒﺎت ALاز ﺟﻪ دﺳﺘﻮري اﺳﺘﻔﺎده
ﻣﻲﮔﺮدد؟
XOR AL,AAH اﻟﻒ.
XOR AL,0AAH ب.
OR AL, 0AAH ج.
AND AL, 0AAH د.
-141ﻛﺪاﻣﻴﻚ از دﺳﺘﻮراﻟﻌﻤﻠﻬﺎي ذﻳﻞ ﻣﺠﺎز ﻧﻴﺴﺖ؟
PUSHF AX اﻟﻒ.
POP AL ب.
PUSH AL ج.
د .ﻛﻠﻴﻪ ﻣﻮارد
٣٦٠
23 اﻟﻒ.
20 ب.
24 ج.
22 د.
-161ﺛﺒﺎت ESﺑﺮاي ﻳﻚ "ﺛﺒﺎت ﻗﻄﻌﻪ داده اﺿﺎﻓﻲ" ﻣﻔﻴﺪ واﻗﻊ ﺷﺪه اﺳﺖ .اﮔﺮ
و …( ﻧﺪاﺷـﺘﻪ GS, FS ﭼﻨﻴﻦ اﺳﺖ ﭘﺲ ﭼﺮا ﺑﻴﺶ از ﻳﻚ ﺛﺒـﺎت اﺿـﺎﻓﻲ )ﻣـﺜﻼً
ﺑﺎﺷﻴﻢ؟
اﻟﻒ .ﺑﻴﺶ از ﻳﻜﻲ ﻣﻮرد ﻧﻴﺎز ﻣﺮﻛﺰ واﻗﻊ ﻧﺨﻮاﻫﺪ ﺷﺪ.
ب .ﺗﻜﻨﻮﻟﻮژي زﻣﺎن ﺳـﺎﺧﺖ 8086ﻣﺤـﺪودﻳﺖ داﺷـﺘﻪ اﺳـﺖ … اﻳﻨﻜـﻪ از ﺳﻴـﺴﺘﻢ
80386آﻧﺮا ﻣﻲﺑﻴﻨﻴﻢ )ﻳﻌﻨﻲ ﺛﺒﺎﺗﻬﺎي اﺿﺎﻓﻲ ﻋﻼوه ﺑﺮ (FS
ج .اﺻﻮﻻً ﺛﺒﺎت ESﺑﻌﻨﻮان ﻳﻚ ﺛﺒﺎت داده اﺿﺎﻓﻲ اﺳﺘﻔﺎده ﻧﻤﻲﺷﻮد.
د .ﻣﻤﻜﻦ اﺳﺖ اﻳﻦ ﻛﺎر ﻋﻤﻠﻲ ﻧﺒﺎﺷﺪ ،اﻣﺎ ﺗﺎﻛﻨﻮن ﻣﺸﺎﻫﺪه ﺷﺪه اﺳﺖ )ﻳﻌﻨﻲ اﺳﺘﻔﺎده از
ﺛﺒﺎﺗﻬﺎي ﻗﻄﻌﻪ ﻋﻼوه ﺑﺮ ( FS
-165در 8086 CPUدو دﺳﺘﻮر وﺟﻮد دارد ﻛﻪ ﻇﺎﻫﺮاً ﻋﻴﻨﺎً ﻳﻚ ﻛـﺎر ﻣـﻲﻛﻨﻨـﺪ.
ﭼﺮا اﻳﻦ دو دﺳﺘﻮراﻟﻌﻤﻞ در ﻛﻨﺎر ﻳﻜﺪﻳﮕﺮ وﺟﻮد دارﻧـﺪ؟ )در ﺻـﻮرﺗﻴﻜﻪ وﺟـﻮد
ﻳﻜﻲ از آﻧﻬﺎ ﻛﺎﻓﻲ ﺑﻪ ﻧﻈﺮ ﻣﻲرﺳﺪ(:
INC DX, ADD AX,1
. اﻟﻒ .ﺑﺪﻟﻴﻞ اﻳﻨﻜﻪ ﺷﺎﻳﺪ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲ ﻳﻜﻲ از اﻳﻦ دو ﻓﺮم را ﻧﺘﻮاﻧﺪ ﺑﺨﺎﻃﺮ ﺑﺴﭙﺎرد
INCﻳﻚ ﺑﺎﻳﺘﻲ اﺳﺖ. DX ب .دﺳﺘﻮر ADDدو ﺑﺎﺑﺘﻲ اﺳﺖ در ﺻﻮرﺗﻴﻜﻪ دﺳﺘﻮر
INCدو ﺑﺎﻳﺘﻲ اﺳﺖ. DX ج .دﺳﺘﻮر ADDﻳﻚ ﺑﺎﻳﺘﻲ اﺳﺖ ،در ﺻﻮرﺗﻴﻜﻪ دﺳﺘﻮر
د .اﻳﻦ دو دﺳﺘﻮر دﻗﻴﻘﺎً ﻣﻌﺎدل ﻣﻲﺑﺎﺷﻨﺪ و ﻳﻚ ﻣﻌﺎدل ﺑﺎﻳﻨﺮي ﻛﺎﻣﻼً ﻳﻜﺴﺎن دارﻧﺪ
واژه ﻧﺎﻣﻪ
Abacus ﭼﺮﺗﻜﻪ
Abort ﻣﺘﻮﻗﻒ ﻛﺮدن-ﻧﺎﻗﺺ ﺗﻤﺎم ﺷﺪن
Abstract ﻣﺠﺮد – اﻧﺘﺰاع
Access دﺳﺘﺮﺳﻲ
Access time زﻣﺎن دﺳﺘﺮﺳﻲ
Accounting ﺣﺴﺎﺑﺪاري
Accumulator آﻛﻮﻣﻮﻻﺗﻮر -اﻧﺒﺎره -ﻣﺨﺰن
Action ﻋﻤﻞ
Action cycle دوره ﻳﺎ ﺳﻴﻜﻞ ﻋﻤﻞ
Action rate ﻣﻴﺰان ﻋﻤﻞ
Active ﻓﻌﺎل
Actual واﻗﻌﻲ
Actual address آدرس واﻗﻌﻲ
Actual decimal point ﻧﻘﻄﻪ اﻋﺸﺎر واﻗﻌﻲ
Add ﺟﻤﻊ ﻛﺮدن
Addendum ﺿﻤﻴﻤﻪ
Adder ﺟﻤﻊ ﻛﻨﻨﺪه
٣٦٩
Addition ﺟﻤﻊ
Additional اﺿﺎﻓﻲ
Address آدرس – ﻧﺸﺎﻧﻲ
Addressee ﮔﻴﺮﻧﺪه – ﻣﺨﺎﻃﺐ
Addressing system ﺳﻴﺴﺘﻢ آدرس دﻫﻲ
Adjacent ﻧﺰدﻳﻚ-ﻣﺠﺎور
Adjective ﺻﻔﺖ
Alarm ﺳﻴﮕﻨﺎل – آژﻳﺮ
Alarm display ﻧﻤﺎﻳﺶ ﺳﻴﮕﻨﺎل
Algebra ﺟﺒﺮ
Algorithm اﻟﮕﻮرﻳﺘﻢ
Alphabet ﺣﺮوف اﻟﻔﺒﺎء
Ambiguity اﺑﻬﺎم
Analog ﻗﻴﺎﺳﻲ
Analysis ﺗﺤﻠﻴﻞ-آﻧﺎﻟﻴﺰ
And gate ''و ﻣﺪار
And operator ''و ﻋﻤﻠﮕﺮ
Application ﻛﺎرﺑﺮد
Application program ﺑﺮﻧﺎﻣﻪ ﻛﺎرﺑﺮدي
٣٧٠
Applicant ﻣﺘﻘﺎﺿﻲ
Approach ﻧﺰدﻳﻜﻲ-ﺗﻤﺎﻳﻞ-دﺳﺘﺮﺳﻲ
Arbitrary اﺧﺘﻴﺎري-دﻟﺨﻮاه
Arithmetic )ﻋﻠﻢ( ﺣﺴﺎب
Arithmetical ﺣﺴﺎﺑﻲ
Arithmetic register ﺛﺒﺎت ﻣﺤﺎﺳﺒﺎﺗﻲ
Arithmetic section ﻗﺴﻤﺖ ﻣﺤﺎﺳﺒﺎﺗﻲ
Arithmetic unit واﺣﺪ ﻣﺤﺎﺳﺒﺎﺗﻲ
Arm ﺑﺎزو
Array آراﻳﻪ
Artificial intelligence ﻫﻮش ﻣﺼﻨﻮﻋﻲ
Artificial language زﺑﺎن ﻣﺼﻨﻮﻋﻲ
Ascending ﺻﻌﻮدي
Ascending sort ﻣﺮﺗﺐ ﻧﻤﻮدن ﺻﻌﻮدي
ASCII ﻛﺪ آﻣﺮﻳﻜﺎﺋﻲ ﺑﺮاي ﻣﺒﺎدﻟﻪ اﻃﻼﻋﺎت
Assemble ﻣﻮﻧﺘﺎژ-ﻣﻮﻧﺘﺎژ ﻛﺮدن
Audio ﺷﻨﻮاﺋﻲ
Audit رﺳﻴﺪﮔﻲ-ﻣﻤﻴﺰي
Automatic ﺧﻮدﻛﺎر-اﺗﻮﻣﺎﺗﻴﻚ
٣٧١
Auxiliary ﻛﻤﻜﻲ
Auxiliary operations ﻋﻤﻠﻴﺎت ﻛﻤﻜﻲ
Available ﻣﻮﺟﻮد
Background زﻣﻴﻨﻪ
Back up ﭘﺸﺘﻴﺒﺎﻧﻲ
Back up system ﺳﻴﺴﺘﻢ ﭘﺸﺘﻴﺒﺎﻧﻲ
Base data داده ﻣﺒﻨﺎ
Base number ﻋﺪد ﻣﺒﻨﺎ
Base register ﺛﺒﺎت ﻣﺒﻨﺎ ﻳﺎ ﺷﺎﺧﺺ
Begin ﺷﺮوع ﻛﺮدن – ﺷﺮوع
Bi Conditional دو ﺷﺮﻃﻲ
Bidirectional دو ﺟﻬﺘﻲ
Binary دودوﻳﻲ
Binary code ﻛﺪدودوﺋﻲ
Binary digits ارﻗﺎم دودوﺋﻲ
Binary half adder ﻧﻴﻢ ﺟﻤﻊ ﻛﻨﻨﺪه دودوﺋﻲ
Binary logic ﻣﻨﻄﻖ دودوﺋﻲ
Binary numbers اﻋﺪاد دودوﺋﻲ
Binary notation ﻧﻤﺎﻳﺶ دودوﺋﻲ
٣٧٢
Cell ﺳﻠﻮل
Center ﻣﺮﻛﺰ
Central ﻣﺮﻛﺰي
Central processor ﭘﺮدازﺷﮕﺮ ﻣﺮﻛﺰي
Chain زﻧﺠﻴﺮ
Character recognition ﺷﻨﺎﺧﺖ ﻛﺎرﻛﺘﺮ
Check bit ﺑﻴﺖ ﻛﻨﺘﺮل
Check digit رﻗﻢ ﻛﻨﺘﺮﻟﻲ
Chip ﺗﺮاﺷﻪ
Circuit ﻣﺪار
Clear ﭘﺎك ﻛﺮدن
Column ﺳﺘﻮن
Combination ﺗﺮﻛﻴﺐ
Command ﻓﺮﻣﺎن
Comment ﻣﻼﺣﻈﺎت – ﻧﻈﺮﻳﻪ-ﺗﻔﺴﻴﺮ
Communications ارﺗﺒﺎﻃﺎت
Compare ﻣﻘﺎﻳﺴﻪ ﻛﺮدن
Comparing unit واﺣﺪ ﻣﻘﺎﻳﺴﻪ ﻛﻨﻨﺪه
Comparison ﻣﻘﺎﻳﺴﻪ
٣٧٤
Counter ﺷﻤﺎرﻧﺪه
Critical ﺑﺤﺮاﻧﻲ
Critical path ﻣﺴﻴﺮ ﺑﺤﺮاﻧﻲ
CRT ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ
Cylinder ﺳﻴﻠﻨﺪر
Data داده
Data base ﭘﺎﻳﮕﺎه داده
Data description ﺗﻮﺻﻴﻒ داده
Date error ﺧﻄﺎي داده
Data location ﻣﺤﻞ داده
Data management ﻣﺪﻳﺮﻳﺖ داده
Data manipulation دﺳﺘﻜﺎري داده
Data preparation ﺗﺪارك داده
Data processing ﭘﺮدازش داده
Data rules ﻗﻮاﻋﺪ داده
Data transfer اﻧﺘﻘﺎل داده
Deciding ﺗﺼﻤﻴﻢ ﮔﻴﺮي
Decimal اﻋﺸﺎري
Decimal digit رﻗﻢ اﻋﺸﺎري
٣٧٦
Design ﻃﺮح
Device وﺳﻴﻠﻪ – دﺳﺘﮕﺎه
Diagnosis ﺗﺸﺨﻴﺺ
Diagram ﻧﻤﻮدار
Difference اﺧﺘﻼف
Digital clock ﺳﺎﻋﺖ دﻳﺠﻴﺘﺎل
Disk دﻳﺴﻚ
Disk operating system DOS ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ دﻳﺴﻚ
Display ﻧﻤﺎﻳﺶ
Display unit واﺣﺪ ﻧﻤﺎﻳﺶ
Distance ﻓﺎﺻﻠﻪ
Distribute ﺗﻮزﻳﻊ ﻛﺮدن
Division ﺗﻘﺴﻴﻢ
Document ﺳﻨﺪ-ﻣﺪرك
Documentation ﻣﺴﺘﻨﺪات
Double length ﻃﻮل ﻣﻀﺎﻋﻒ
Double precision دﻗﺖ ﻣﻀﺎﻋﻒ
Dynamic ﭘﻮﻳﺎ
Dynamic memory ﺣﺎﻓﻈﻪ ﭘﻮﻳﺎ
٣٧٨
Effective ﻣﻮﺛﺮ
Effective speed ﺳﺮﻋﺖ ﻣﺆﺛﺮ
Effective address آدرس ﻣﺆﺛﺮ
Efficiency ﻛﺎراﺋﻲ
End of file اﻧﺘﻬﺎي ﻓﺎﻳﻞ
Epitome ﺧﻼﺻﻪ-رﺋﻮس ﻣﻄﺎﻟﺐ
Equality ﻛﻴﻔﻴﺖ
Equipment ﺗﺠﻬﻴﺰات
Erase ﭘﺎك ﻛﺮدن-از ﺑﻴﻦ ﺑﺮدن
Eraser ﭘﺎك ﻛﻦ-ﭘﺎك ﻛﻨﻨﺪه
Error ﺧﻄﺎ
Error code رﻣﺰ ﺧﻄﺎ
Error detection ﺗﺸﺨﻴﺺ ﺧﻄﺎ
Error message ﭘﻴﻐﺎم ﺧﻄﺎ
Error rate ﻧﺮخ ﺧﻄﺎ
Exchange ﻣﺒﺎدﻟﻪ
Execute اﺟﺮا ﻛﺮدن
Execution اﺟﺮا
Execution cycle ﺳﻴﻜﻞ اﺟﺮا
٣٧٩
Exit ﺧﺮوج
Exit point ﻧﻘﻄﻪ ﺧﺮوج
Expression ﻋﺒﺎرت
Extension ﺑﺴﻂ-ﺗﻮﺳﻌﻪ-ﺗﻤﺪﻳﺪ
External ﺧﺎرﺟﻲ
External interrupt وﻗﻔﻪ ﺧﺎرﺟﻲ
External labels ﺑﺮﭼﺴﺐﻫﺎي ﺧﺎرﺟﻲ
Facility ﺗﺴﻬﻴﻼت
Factor ﻓﺎﻛﺘﻮر –ﻋﺎﻣﻞ – ﺿﺮﻳﺐ
Failure ﺷﻜﺴﺖ – ﺧﺮاﺑﻲ
Fixed ﺛﺎﺑﺖ
Fixed length ﻃﻮل ﺛﺎﺑﺖ
Flag ﻓﻠﮓ-ﭘﺮﭼﻢ
Floating point ﻧﻘﻄﻪ اﻋﺸﺎر ﺷﻨﺎور
Floating point numbers اﻋﺪاد ﺑﺎ ﻧﻘﻄﻪ اﻋﺸﺎر ﺷﻨﺎور
Flowchart ﻓﻠﻮﭼﺎرت – ﻧﻤﻮدار
Folder ﭘﻮﺷﻪ
Format ﻗﺎﻟﺐ-ﺷﻜﻞ
Gate دروازه ﻣﺪار
٣٨٠
General ﻋﻤﻮﻣﻲ
Generator اﻳﺠﺎد ﻛﻨﻨﺪه
Global ﺳﺮاﺳﺮي
Half ﻧﻴﻢ-ﻧﺼﻒ
Halt ﻣﺘﻮﻗﻒ ﻛﺮدن
Hardware ﺳﺨﺖ اﻓﺰار
Heading ﻋﻨﻮان-ﺗﻴﺘﺮ
Help ﻛﻤﻚ
High speed ﺳﺮﻋﺖ ﺑﺎﻻ
High order ﻣﺮﺗﺒﻪ ﺑﺎﻻ
Identifier ﺷﻨﺎﺳﻪ
Idle time زﻣﺎن ﺑﻴﻜﺎري
Ignore اﻏﻤﺎض ﻛﺮدن
Image ﺗﺼﻮﻳﺮ
Implicit ﺿﻤﻨﻲ
Inactive ﻏﻴﺮﻓﻌﺎل
Inclusive درﺑﺮﮔﻴﺮﻧﺪه
Increment اﻓﺰاﻳﺶ
Independent ﻣﺴﺘﻘﻞ
٣٨١
Index ﺷﺎﺧﺺ-اﻧﺪﻳﺲ
Indexed address آدرس ﺷﺎﺧﺺ دار
Indicate ﻧﺸﺎن دادن – ﺗﻌﻴﻴﻦ ﻛﺮدن
Indirect ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ
Indirect address آدرس ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ
Indirect reference address آدرس ارﺟﺎع ﻏﻴﺮ ﻣﺴﺘﻘﻴﻢ
Information اﻃﻼﻋﺎت
Information retrieval ﺑﺎزﻳﺎﺑﻲ اﻃﻼﻋﺎت
Input ورودي
Input data داده ورودي
Instruction دﺳﺘﻮراﻟﻌﻤﻞ
Instruction address آدرس دﺳﺘﻮراﻟﻌﻤﻞ
Instruction address register ﺛﺒﺎت آدرس دﺳﺘﻮراﻟﻌﻤﻞ
Integer ﺻﺤﻴﺢ
Integrated system ﺳﻴﺴﺘﻢ ﻣﺠﺘﻤﻊ
Interface ﻣﻴﺎﻧﺠﻲ-واﺳﻄﻪ
Internal داﺧﻠﻲ
Internal code ﻛﺪ ﻳﺎ رﻣﺰ داﺧﻠﻲ
Internal sort ﻣﺮﺗﺐ ﺳﺎزي داﺧﻠﻲ
٣٨٢
Interrupt وﻗﻔﻪ
Interrupt system ﺳﻴﺴﺘﻢ وﻗﻔﻪ
Iteration ﺗﻜﺮار
Iterative ﺗﻜﺮاري
Key ﻛﻠﻴﺪ
Keyboard ﺻﻔﺤﻪ ﻛﻠﻴﺪ
Label ﺑﺮﭼﺴﺐ
Language زﺑﺎن
Language compiler ﻣﺘﺮﺟﻢ زﺑﺎن
Level ﺳﻄﺢ
Library ﻛﺘﺎﺑﺨﺎﻧﻪ-ﻣﺮﻛﺰ اﺳﻨﺎد
Light ﻧﻮر
Limit ﻣﺤﺪود ﻛﺮدن
Limited ﻣﺤﺪود
Link ﻣﺘﺼﻞ ﻛﺮدن-اﺗﺼﺎل
List ﻓﻬﺮﺳﺖ
Load ﺑﺎرﻛﺮدن
Loader ﺑﺮﻧﺎﻣﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺑﺮاي ﺑﺎر ﻛﺮدن ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ
Location ﻣﺤﻞ – ﺟﺎ
Logical ﻣﻨﻄﻘﻲ
Logical operation ﻋﻤﻠﻴﺎت ﻣﻨﻄﻘﻲ
Logical operator ﻋﻤﻠﮕﺮ ﻣﻨﻄﻘﻲ
Logical shift ﺷﻴﻔﺖ ﻣﻨﻄﻘﻲ
Loop ﺣﻠﻘﻪ-ﺣﻠﻘﻪ ﺗﻜﺮار
٣٨٣
Low ﭘﺎﺋﻴﻦ
Low order ﻣﺮﺗﺒﻪ ﭘﺎﺋﻴﻦ
Low order digit رﻗﻢ ﻣﺮﺗﺒﻪ ﭘﺎﺋﻴﻦ
LSD ﺑﻴﺖ ﺑﺎﻛﻤﺘﺮﻳﻦ ارزش
Magnetic ﻣﻐﻨﺎﻃﻴﺴﻲ
Magnetic disk دﻳﺴﻚ ﻣﻐﻨﺎﻃﻴﺴﻲ
Main اﺻﻠﻲ
Maintenance ﺗﻌﻤﻴﺮ و ﻧﮕﻬﺪاري
Major اﺻﻠﻲ
Major key ﻛﻠﻴﺪ اﺻﻠﻲ
Malfunction ﺧﺮاﺑﻲ-از ﻛﺎر اﻓﺘﺎدﮔﻲ
Match ﺗﻄﺒﻴﻖ-ﺟﻮر
Matching error ﺧﻄﺎي ﺗﻄﺒﻴﻖ
Mathematical رﻳﺎﺿﻲ
Matrix ﻣﺎﺗﺮﻳﺲ
Mechanism ﻣﻜﺎﻧﻴﺰم-روش
Medium وﺳﻴﻠﻪ ﺑﺮاي ﺿﺒﻂ داده
Memory ﺣﺎﻓﻈﻪ
Memory address register ﺛﺒﺎت آدرس ﺣﺎﻓﻈﻪ
Memory cycle ﺳﻴﻜﻞ ﻳﺎ دوره ﺣﺎﻓﻈﻪ
Memory dump ﺗﺨﻠﻴﻪ ﺣﺎﻓﻈﻪ
Memory exchange ﻣﺒﺎدﻟﻪ ﺣﺎﻓﻈﻪ
Memory hierarchy ﺳﻠﺴﻠﻪ ﻣﺮاﺗﺐ ﺣﺎﻓﻈﻪ
Memory location ﻣﺤﻞ ﺣﺎﻓﻈﻪ
٣٨٤
Operator ﻋﻤﻠﮕﺮ-اﭘﺮاﺗﻮر
Operator error ﺧﻄﺎي اﭘﺮاﺗﻮر
Option ﮔﺰﻳﻨﻪ
Order ﺗﺮﺗﻴﺐ
Out of range ﺧﺎرج از داﻣﻨﻪ
Output ﺧﺮوﺟﻲ
Output equipment ﺗﺠﻬﻴﺰات ﺧﺮوﺟﻲ
Output unit واﺣﺪ ﺧﺮوﺟﻲ
Overflow ﺳﺮرﻳﺰﺷﺪن-ﺳﺮرﻳﺰي
Overflow check ﺑﺮرﺳﻲ ﺳﺮرﻳﺰي
Page ﺻﻔﺤﻪ
Page address آدرس ﺻﻔﺤﻪ
Page heading ﻋﻨﻮان ﺻﻔﺤﻪ
Paging ﺻﻔﺤﻪ ﺑﻪ ﺻﻔﺤﻪ ﻛﺮدن
Parallel ﻣﻮازي
Parallel operation ﻋﻤﻠﻴﺎت ﻣﻮازي
Parity bit ﺑﻴﺖ ﺗﻮازن
Path ﻣﺴﻴﺮ
Pattern اﻟﮕﻮ
Pattern recognition ﺗﺸﺨﻴﺺ اﻟﮕﻮ
Perform ﻋﻤﻞ ﻛﺮدن-اﻧﺠﺎم دادن
Peripheral ﺟﺎﻧﺒﻲ
Peripheral equipment وﺳﺎﺋﻞ ﺟﺎﻧﺒﻲ –ﺗﺠﻬﻴﺰات ﺟﺎﻧﺒﻲ
Permanent داﺋﻢ
٣٨٦
Phase ﻣﺮﺣﻠﻪ-ﻓﺎز
Point ﻧﻘﻄﻪ
Pointer اﺷﺎرهﮔﺮ
Position ﻣﻮﻗﻌﻴﺖ – ﺟﺎ
Precision دﻗﺖ
Predefined از ﻗﺒﻞ ﺗﻌﺮﻳﻒ ﺷﺪه
Primary اوﻟﻴﻪ-اﺻﻠﻲ
Printer ﭼﺎﭘﮕﺮ
Priority اوﻟﻮﻳﺖ
Priority interrupt وﻗﻔﻪ اوﻟﻮﻳﺖ دار
Problem ﻣﺴﺄﻟﻪ
Procedural روﻳﻪاي
Procedure روﻳﻪ-روال
Process ﻓﺮآﻳﻨﺪ
Processor ﭘﺮدازﺷﮕﺮ
Production ﻣﺤﺼﻮل-ﺗﻮﻟﻴﺪ
Program ﺑﺮﻧﺎﻣﻪ
Program compilation ﺗﺮﺟﻤﺔ ﺑﺮﻧﺎﻣﻪ
Program error ﺧﻄﺎي ﺑﺮﻧﺎﻣﻪ
Programmer ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ
Programming ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ
Program segment ﻗﻄﻌﻪ ﻳﺎ ﻗﺴﻤﺘﻲ از ﺑﺮﻧﺎﻣﻪ
Quantity ﻣﻘﺪار
Queue ﺻﻒ
٣٨٧
Return ﺑﺮﮔﺸﺖ
Rules ﻗﻮاﻋﺪ
Run اﺟﺮا ﻛﺮدن ﺑﺮﻧﺎﻣﻪ-اﺟﺮاي ﺑﺮﻧﺎﻣﻪ
Sample ﻧﻤﻮﻧﻪ
Scan ﺑﺎ دﻗﺖ ﻧﮕﺎه ﻛﺮدن-ﺑﺮرﺳﻲ ﻛﺮدن
Screen ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ
Section ﺑﺨﺶ
Segment ﻗﻄﻌﻪ-ﻗﺴﻤﺖ
Segmentation ﻗﺴﻤﺖ ﻛﺮدن-ﻗﻄﻌﻪ ﻗﻄﻌﻪ ﻛﺮدن
Separator ﺟﺪا ﻛﻨﻨﺪه
Sequence دﻧﺒﺎﻟﻪ-ﺗﺮﺗﻴﺐ
Sequential ﻣﺘﻮاﻟﻲ
Sequential processing ﭘﺮدازش ﻣﺘﻮاﻟﻲ
Serial access دﺳﺘﺮﺳﻲ ﺳﺮي
Set ﻗﺮاردادن-ﺗﻌﻴﻴﻦ ﻛﺮدن-ﺗﻨﻈﻴﻢ ﻛﺮدن –ﻣﻴﺰان ﻛﺮدن – ﻣﺠﻤﻮﻋﻪ
Shared storage ﺣﺎﻓﻈﻪ اﺷﺘﺮاﻛﻲ
Shift ﺟﺎﺑﻪﺟﺎﺋﻲ
Sign ﻋﻼﻣﺖ
Signed ﻋﻼﻣﺘﺪار
Significance ﺑﺎاﻫﻤﻴﺖ
Software ﻧﺮم اﻓﺰار
Solution راه ﺣﻞ
Sort ﻣﺮﺗﺐ ﻧﻤﻮدن
Sort bubble ﻣﺮﺗﺐ ﻛﺮدن ﺑﻪ روش ﺣﺒﺎﺑﻲ
٣٨٩
Space ﻓﻀﺎ
Stack ﭘﺸﺘﻪ
Standard اﺳﺘﺎﻧﺪارد
Status وﺿﻌﻴﺖ
Step ﮔﺎم-ﻣﺮﺣﻠﻪ-ﻗﺪم
Storage ﺣﺎﻓﻈﻪ
Storage block ﺑﻠﻮك ﺣﺎﻓﻈﻪ
String رﺷﺘﻪ
Symbol ﻧﻤﺎد
Symbolic address آدرس ﻧﻤﺎدي
Symbol table ﺟﺪول ﻧﻤﺎدي
System ﺳﻴﺴﺘﻢ – دﺳﺘﮕﺎه
Table ﺟﺪول
Table lookup ﺟﺴﺘﺠﻮي ﺟﺪول
Tape ﻧﻮار ﻣﻐﻨﺎﻃﻴﺴﻲ
Temporary ﻣﻮﻗﺖ
Terminal ﻧﻘﻄﻪ ﻧﻬﺎﺋﻲ-ﺗﺮﻣﻴﻨﺎل
Test data داده ﺟﻬﺖ ﺗﺴﺖ
Time زﻣﺎن
Time scale ﻣﻘﻴﺎس زﻣﺎن
Transmission اﻧﺘﻘﺎل
Unconditional ﺑﺪون ﺷﺮط
Unit ﻗﺴﻤﺖ-واﺣﺪ
User ﻛﺎرﺑﺮ
٣٩٠
Variable ﻣﺘﻐﻴﺮ
Variable length ﺑﻄﻮل ﻣﺘﻐﻴﺮ
Verify ﺑﺮرﺳﻲ ﻛﺮدن
Virtual ﻣﺠﺎزي
Waiting state وﺿﻌﻴﺖ اﻧﺘﻈﺎر
Warning اﺧﻄﺎر
Word ﺷﺎﻧﺰده ﺑﻴﺖ-ﻛﻠﻤﻪ
Write ﻧﻮﺷﺘﻦ
Zero ﺻﻔﺮ
Zero divide ﺗﻘﺴﻴﻢ ﺑﺮ ﺻﻔﺮ