Upload
shad-hasan
View
114
Download
6
Tags:
Embed Size (px)
Citation preview
2
بخش اول : مقدمه
: فصل اول
دليل استفاده از زبان اسمبلي انواع روش هاي نمايش اطالعات در كامپيوتر
: فصل دوم
پروسسور ، حافظه و ساختار كامپيوتر هاي شخصي ) I/O (
Pentium هاي پروسسور اسمبلي بخش دوم : زبان
سومفصل : پروسسور هاي ساختارPentium
چهارمفصل : مروري بر زبان اسمبلي
پنجم فصل : ( ايجاد ، اسمبل ، پيوند و اجراي برنامه هاي اسمبلي ) ساختار برنامه اسمبلي
ششم فصل : برنامه نويسي با ابزارprocedures وstack
هفتم فصل : يتي و داليل استفاده از آنهاب 32بيتي و 16انواع روش هاي آدرس دهي در پروسسور هاي
هشتم فصل :
دستورات محاسباتيarithmetic و رجيسترflag نهم فصل:
دستورات شرطي و حلقه دهم فصل :
دستورات منطقي و دستكاري بيت ها زدهم يا فصل:
String processing دوازدهم فصل:
محاسباتBCD وASCII
3
Pentiumپروسسور هاي ) در Interruptمكانيزم پردازش وقفه ( : بخش سوم
سيزدهمفصل :
پردازش وقفهProtected - mode
چهاردهمفصل :
پردازش وقفه Real – mode
بخش چهارم : مباحث پيشرفته در اسمبلي
پانزدهمفصل :
پياده سازيRecursive
شانزدهمفصل :
دستورات Floating - Point پروسسور هاي درPentium
هفدهمفصل :
ماكرو
بخش پنجم : كاربرد
هجدهمفصل : مقيم كردن برنامه در حافظه
نوزدهمفصل :
طرز كار پورت موازي
بيستمفصل :
Mixed-mode Programming
4
Introduction to Assembly Language Programming for Pentium and RISC Processors By Sirarama P. Dandamud , school of computer science IBM PC Assembly Language and Programming
By Peter Abel , Prentice-Hall
The 80x86 IBM PC and Computers ( Volume I&II ) By M.A. Mazidi , Prentice-Hall
Peter Nortons Assembly Language Book For the
IBM PC By Peter Norton , Prentice-Hall
زبان ماشين و اسمبلي و كاربرد آن در كامپيوتر هاي شخصي دكتر
ي ، دانشكده فني دانشگاه تهران ، انتشارات ناقوسحسن سيد رض
ر را
ن
S
S
P
ي برند .
با آن پروسسور
رد كه به ماشين
System Inde
Applicati High Lev
System Depe
Assembl
Machine
Hardwar
Processor A CISC ( C RISC ( R
RISC بهره ميب low levelح
دستور وجود دا
ر كند .
ependent ion Level ( vel Languag
endent y Language
Language re Level & O
ArchitectureComplex InstReduced Ins
Cري نسبت به
نويس در سطح
عداد محدودي د
ارتباط بر قرا
Word Procege Level ( J
Level OS System
عادل آن
e truction Settruction Se
شتر و پيچيده ترارد كه برنامه ن
پروسسور ) ، تع
5
با كامپيوتر ا
ي پروسسور essor ) JAVA & C )
مبلي شين Call
سمبلي و مع
t Computerset Computer
ه دستورات بيشخاص خود را د
نام دارد .
طح باال
قل از معماري پ
ن اسمبلياند بر مي تو
ستقل از معماري
)
زبان اسم زبان ماش
سور در زبان اس
s ) INTErs ) MIP
CI از مجموعهوعه دستورات خه زبان اسمبلي
ي به زبان سط
Porta مستقل )
اده از زبانحي كه كاربر
مس
ماري پروسسو
EL PS
SCسسور هاي
روسسور مجمون مي سازد كه
نامه نويسي
ableع ، ساده ،
ته است .
ليل استفاانواع سطوح
انواع معم –
پروس هر پر
ممكن
مزاياي بر –
سريعوابست
ش اول : دل1-1 –
1-2 –
1-3 –
بخش
6
داليل استفاده از زبان اسمبلي – 1-4
ميزان مصرف حافظه كمتر
زمان اجراي سريع تر
دسترسي در سطح سخت افزار مانند نوشتنdriver براي يكdevice جديد
درك بهتر از سخت افزار و پروسسور ها جهت كاربرد هاي آموزشي
معموال از زبان سطح باال براي نوشتن برنامه ها استفاده مي شود و در هر بخش كه نياز باشد مي توان آن را با زبان
(Hybrid or Mixed – mode Programming) اسمبلي تركيب نمود .
؟
Dec Bin Oct Hex
m را بدست آوريد
يم ؟
C
C ود .
cimal 10ary 10tal 10xadecimal 10
m. م نياز داريم
چند رقم نياز داري
Convert to D 10100111 247 Q = A7 H = (
Convert fromقسمت صفر شو
ست )
Decimal Binary Octal HexadecimBCD & AS
00 = ( 1 × 1000 = ( 1 × 200 = ( 1 × 800 = ( 1 × 16
رقم mهيم ، به
به چ Octalستم
Decimal B = ( 1 × 27
= ( 2 × 82 + ( A × 161 + 7
m Decimal كنيم كه خارج ق( از چپ به راس
مپيوتر ش اعداد
: base : base : base
mal : base CII
02 + 0 × 101 +22 + 0 × 21 + 82 + 0 × 81 + 62 + 0 × 161 +
نمايش د kناي
داريم ؟ در سيس
7 + 0 × 26 +
4 × 81 + 7 × 160 ) = 16
ر تقسيم مي ك مي نويسيم . (
7
عات در كام و يا نمايش
is 10 is 2
e is 8 is 16
+ 0 × 100 ) 0 × 20 ) 0 × 80 ) + 0 × 160 )
ش اطالعات مبن
به چند رقم نياز
1 × 25 + …
× 80 ) = 16767 D
اطالعات آنقدرش را بر عكس
يش اطالعشماره گذاري
0,1,2,3,4 0,1 0,1,2,3,4 0,1,2,3,4
= 100 D= 4 D = 64 = 256 D
ده از روش نمايش
Binaryسيستم
ش اطالعات
… ) = 167 D 7 D
سيستم نمايشدر طول پردازش
ش هاي نمايستم هاي ش
4,5,6,7,8,9
4,5,6,7 4,5,6,7,8,9
Decimal Decimal Decimal Decimal
مقدار را با استفاد
عدد در س 150
يستم نمايش
ل را بر مبناي سي توليد شده د
نواع روشانواع سيس –
9
9,A,B,C,D,E,
م nاهيم گر بخو
راي نشان دادن
بديل سيت –
عدد دسيمال باقيمانده هاي
: ان ش دوم1-5 –
,F
اگ
بر
1-6 –
بخش
8
دسيمال را به سيستم باينري تبديل كنيد : 167عدد
R Q B PN RQBD N 0 5 2 104183216781 2 2 5314128370 1 2 2212024161 0 2 111102205
R Q B D N 7 20 8 16744 2 8 2032 0 8 220 0 8 01
R Q B D N 7 10 16 1673A 0 16 1020 0 16 01
بايد عدد را به سيستم باينري هگزادسيمال ابتدا به سيستم هاي اكتال يااز سيستم دسيمال ي تبديل يك عددبرامعموال
برده سپس به صورت زير عمل مي كنيم .
تا از سمت راست ارقام را جدا مي كنيم 3تا 3رقم در سيستم باينري است . ( 3هر رقم در سيستم اكتال معادل ل را مي نويسيم كه عدد بدست آمده يك رقم عدد در سيستم اكتال است . عدد در سيستم دسيما 3و معادل آن
Q2 4 7 B 111 100 010 167
تا از سمت راست ارقام را جدا 4تا 4( رقم در سيستم باينري است . 4هر رقم در سيستم هگزادسيمال معادلعدد در سيستم دسيمال را مي نويسيم كه عدد بدست آمده يك رقم عدد در سيستم اكتال 3مي كنيم و معادل آن
است .
7 H A B 0111 1010 167
. عكس همين روش براي تبديل مستقيم عدد از سيستم اكتال و هگزادسيمال به باينري به كار مي رود
167 D 10100111 B
167 D 0247 Q
167 D 0A7 H
ه
A
استفاده مورد)
به است داده خ
Co
پيوتر :
Addition
i + 1 ام ) Cin
overflow" رخ
out = Carry ي
un در كامپي (
جمع
1 بيت در نقلي
w" يا "سرريز"
رقم نقلي
nsignedيح (
.
اد .
ن رقم عنوان به
" كه گويند مي . است شده
Inputxi 0 0 1 1
Truth T
Input xi yi 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1
9
المت يا وصي
خيره مي شوند .2n- نمايش د (
i ام ) Cout (ب
م اصطالحا ، ودبيشتر نمايش
HALF ADDERt bits Outpu
yi zi 0 0 1 1 0 1 1 0
Table for Binary
bits OCin
0 1 0 1 0 1 0 1
عداد ) بي عال
رت باينري ذخ1تا 0دد را از (
بيت در شده د
Cout شو خارجقابل هاي رقم
R ut bits
Cout 0 0 0 1
Addition Output bits zi Cout 0 0 1 0 1 0 0 1 1 0 0 1 0 1 1 1
طالعات ( اع
تر اعداد به صورعد 2nمي توان
ايجاد نقلي رقم . گيرد
t جمع رقم ينر تعداد از جموع
نمايش ا –
در كامپيوتر باn بيت م
جمع در ،مي قرار
آخري از اگرمج عبارتي
1-7 –
به ت
S
است داده رخ "
Bout
Subtraction
"underflow
= Borrow ي
تفريق
يا "سرريز" ه
مي كنيم .
50
قرضي رقم
ت
كه گويند مي ا خ مي دهد .
دوم استفاده م D + (- 40
HInputxi 0 0 1 1
Truth Ta
Input xi yi 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1
10
اصطالحا ، شودد اين حالت رخ
ل و منفي عدد D) = 50 D
Half Subtractet bits Outpu
yi zi 0 0 1 1 0 1 1 0
able of Binary Su
bits OBin
0 1 0 1 0 1 0 1
Bout ش خارجفي حاصل شود
از جمع عدد اول – 40 D
er ut bits
Bout 0 1 0 0
ubtraction Output bits zi Cout 0 0 1 1 1 1 0 1 1 0 0 0 0 0 1 1
جمع رقم رينتي كه عدد منف
ه جاي تفريق ا
آخر از اگروقت عبارتي
در عمل به
n
M
D
و يك رقم )
Multiplicatio
Division
quotient )
on رب
باشد .
تقسيم
ي خارج قسمت
ضر
ش نياز داشته با
بيتي nك رقم
11
قم جهت نمايش
سيم كنيم ، يك مي شود .
رق 2nكن است
بيتي تقس nقم( rem ايجاد م
بيتي ممك nم
بيتي را بر رق 2( minderانده
رقم 2ضرب
م اگر رقn
بيتي باقيما
12
) در كامپيوتر : signedنمايش اطالعات ( اعداد ) عالمت دار صحيح ( – 1-8
Signed Integer Representation Signed magnitude Excess – M 1’s Complement 2’s Complement اكثر سيستم ها خصوصا سيستم هاي پنتيوم از اين روش استفاده مي كنند
Signed magnitude اگر ماn ، بيت داشته باشيم n-1 بيت براي نمايش عدد و پر ارزش ترين بيت براي بيت عالمت در نظر گرفته
و در غير اين صورت مقدار صفر دارد . 1مي شود . در صورتي كه عدد منفي باشد مقدار
اگرn 2-بيت داشته باشيم مي توان ازn-1 2تاn-1-1 . را نمايش داد
. در اين روش صفر دو نمايش مثبت و منفي دارد
Excess – M Representation مقدارM . را به عدد دلخواه اضافه مي كنيم
M بايد عددي باشد كه مقدارX+M 2ازn بيشتر نباشد كهn . تعداد كل بيت ها مي باشد
Number Representation Using 4-Bit Binary (All numbers except Binary column in decimal)
Unsigned representation
Binary pattern
Signed magnitude
Excess-7 1’s Complement 2’s Complement
0 0000 0 −7 0 0 1 0001 1 −6 1 1 2 0010 2 −5 2 2 3 0011 3 −4 3 3 4 0100 4 −3 4 4 5 0101 5 −2 5 5 6 0110 6 −1 6 6 7 0111 7 0 7 7 8 1000 −0 1 −7 −8 9 1001 −1 2 −6 −7 10 1010 −2 3 −5 −6 11 1011 −3 4 −4 −5 12 1100 −4 5 −3 −4 13 1101 −5 6 −2 −3 14 1110 −6 7 −1 −2 15 1111 −7 8 −0 −1
2n
2n
n-1-1 است از
n-1-1 است از
ي در ضرب و
1’s Comp
عبارت M كه
2’s Com
عبارت M كه
خ مي دهد .
وجود ندارد ولي
plement
ضافه مي كنيم .
plement
ضافه مي كنيم .
over flow رخ و بي عالمت و
م .
را اض M مقدار
م .
را اض M مقدار
ده برابر نباشد
داد عالمت دار شود .
13
تبديل مي كنيمند روش قبلي
تبديل مي كنيمند روش قبلي
نقلي ايجاد شدفاوتي ميان اعدب بررسي مي ش
ر ها را به يك عدد منفي مانن
ر ها را به يك عدد منفي مانن
left ( با رقمجمع و تقريق تفبات اين مطلب
به صفر و صفرر اين روش به
به صفر و صفرر اين روش به
t – mostي (
مورد عمليات جمحاسبر فصل
يك ها را در اصل در
يك ها را در اصل در
رين رقم خروجيمه نويسي در م
وت دارد . د تفا
هر آخر در برنام
تقسيم
فاده مي كنيم .
كرد .
ري مياني استفا
.
ش زير استفاده ك
لذا از رقم باينر
ار
ار
اري صفر شودي توان از روش
كن نمي باشد
14
: ي
بخش اعشا
بخش اعشا
كه بخش اعشال و بالعكس مي
شين حساب ممك
داد ) اعشاري
دسيمال در
ه باينري در
ك ه پيدا مي كندناها به دسيمال
بدون ماش 16ا
طالعات ( اعد
ل باينري به
ل دسيمال به
ه تا زماني ادامهشاري تمام مبن
و يا 8قسيم بر
نمايش اط –
تبديلگوريتم
تبديلگوريتم
اين پروسهبديل بخش اعش
و يا تق 16يا 8
1-9 –
الگ
الگ
براي تب
ضربدر
(B:
ت
BDC)America
از خطا محافظت
an Standard
اده مي شود .ASCIIكد ال،
0 1 2 3 4 5 6 7 8 9
(BDC)Bin:
Code for Inf
استفا ASCIIاز گيرد تا در انتقا
0000 0001 0010 0011 0100 0101 0110 0111
1000 1001
nary Coded D
formation Int
تر هاي خاص ااده قرار ميستف
15
Decimalرت
terchangeي
، اعداد و كاركتر paritمورد است
عات به صور
ف در كد اسكي
چك انگليسي ،tyت بيت توازن
و ذخيره اطالع
اعداد و حروف
ف بزرگ و كوچجهت ASCIIد
نمايش و –
ا نمايش – 1
كد كردن حروفت اضافه در كد
1-10 –
1-11
جهت ك يك بيت
شود .
B
8
P
In
BUS Address
Data bus
Control b
8086
Data bus Address
Pentium Data bus Address
ntel 64-bit Data bus Address
م كامپيوتر bus ( طرفهs ( طرفهbus ( طرفه
s = 16 bit bus = 20 b
s = 64 bit bus = 32 b
t s = 64 bit bus = 128
صلي يك سيستم ( يك ط ( دو ط ( يك ط
bit ( suppo bit ( suppo bit ( suppo
16
:مپيوتري
مؤلفه هاي اص
ort maximum
ort maximum
ort maximum
سيستم كام
ارتباطي ميان
m 220 byte
m 232 byte
m 264 byte
Inte
ي اصلي يك
پل
= 1MB m
= 4GB m
e = ?!!! m
erconnect w
مؤلفه هاي –
emory )
emory )
memory )
with bus
2-1 –
C
P
باشد .
Control Sign
Memory (I/O )re Interrupt Bus requ
Processor Fetch ins
Decode i
Execute
اشاره مي كند.
و خروجي مي
ZF: SF:
nals read / Me
ead / (I/O) t / Interrupuest / Bus
رت اند از :
structions f
instructions
instruction
بايد اجرا شود مي شود .
ه هاي ورودي
Zero FlaSign Flag
mory Write write pt acknowlegrant
ه است كه عبار
from memor
s s
در حافظه كه به كار گرفته م
حافظه و دستگا
CF :agOF :g
17
e
edge
وجود در حافظه
ry
س دستور بعديجه محاسبات
ي كنترلي به ح
Carry Fla:Overflow:
Proce (:
برنامه هاي مو
كشي دستور خيص دستور اجرا كردن
Instr به آدرسص وضعيت نتيج
ل سيگنال هاي
PagAw Flag
essorسسور (
مسئول اجراي
واكتشخ
ruction Poin
fla كه تشخيص
ل مسئول ارسا
ParityF:AuxiliF:
پروس – 2-2
پروسسور م
IP ياnter
رجيسترag
واحد كنترل
y Flagiary Flag
2
ظيفه
د .
ازنده
) نياز دارد . وظ ي مي نمايد .
ده قرار مي دهدات ارسالي پرد
M
interface (رودي و خروجير اختيار پردازندهمچنين اطالعا
Memory RAM ROM ( S
هاي واسط (تگاه هاي ورس
ل مي كند و درچاپگر است . ه
Store BIOS
روجي به مدارو دس CPUراي
تبديل ASCIIدمشغول بودن چ
)
18
:) I/Oي (
ي ورودي و خر قابل استفاده برده شده را به كدن آزاد بودن يا م
ودي و خروجي
با دستگاه هايكه اطالعات را، كليد فشار دادول چك كردن
كند .
تگاه هاي ورو
جهت ارتباط بin اين است ك
ط صفحه كليد ،ط چاپگر ، مسئور منتقل مي كن
:حافظه
دستگ – 2-3
پروسسورnterface
مدار واسط مدار واسط
را به چاپگر
2-4 –
2
حتما
R
از عملوند ها ح
Register General
D P In
Control ( Segment
.
در ضرب يكي
Data (4) Pointer (2) ndex (2) 3(2) 3t (6) 1
بيتي بهره برد.
به عنوان مثال
32 bit 32 bit 32 bit 32 bit 16 bit
ب 32بيتي و يا ت استفاده كرد .ستفاده كرد . به
ي گيرد .
ره برد .
ده كرد . ستفا
19
:
16بيتي ، 8تدون محدوديتر ها مي توان ا
استفاده قرار ميي عمومي بهرستر مي توان اس
Pentium ور
توان به صورتتر هاي فوق بد از اين رجيستر
باشد .
رشته اي مورديستر هاوان رج
از اين دو رجيس
هاي پروسسو
هاي فوق مي توان از رجيست فقط از بعضي
A و ياEAX
ب در عمليات رمي توان به عنوصر آرايه فقط
رجيستر ه –
ك از رجيستر محاسبات ميضي از دستورات
AL ،X جيستر
فوق اغلبرهاي سترهاي فوق م
سترسي به عناص
3-1 –
از هر يك در اكثر در بعضي
بايد رجي
رجيستر از رجيس براي دس
ند .
مي گيرد .
ره برد .
ست .
شود .
مه اشاره مي كن
20
رد استفاده قراري عمومي بهر
دستور بعدي اسكي اضافه ميديگري از برنام
مور stackريوان رجيستر ها
جهت اجراي ديك IPي شود به
loop به بخش د
سازي و نگه دارعنو مي توان به
ه مكان حافظهفظه خوانده ميpت پرشي مانند
با هدف پياده سسترهاي فوق م
، اشاره به IPز توري كه از حافنيز در دستورات
بيشتر با از رجيس
هدف از هر دست گاهي ن
داكثر
ها
اشد .
شد بنابراين حد
راست سمت م
ك از رجيستر ه
ه داده كافي نبا
مي شود .
بيتي مي باش 16
رقم( باشد يت
D توسط هر يك
ده جهت دخيره
و پشته تقسيم6 اين سگمت
با 16 از ضربي
يت )
(E)BP و درS
ي كند .
مي كند .
گر سگمنت داد
منت كد ، دادهد . چرا ؟ ( زيرا
مي باشد ) 6مض بايد سگمنت
) شود مي
بي 16( گيرد .Pتوسط SSر
21
همزمان نگهداري پشته استفادههره برد . مثال ا
به چندين سگمباشد 64kbر
64kbت معادل
س دو فاصلهود . نم نوشته يچگاه
قرار مي SSيادر IP(E)وسط
ي شود .
سگمنت را ه 6ت كد ، داده ووارد ضروري به
حافظه معموال بمي تواند حداكثر
بايت 65536يام بندي مي شو
هيچ بنابراين ست
شند.
شند.
داشته باشند .يCS ، DSت در
تو CSگمت در
قسيم بندي مي6ي تواند آدرس
و يا سه سگمنتمي توان در مو
ي اسمبلي در حت در حافظه مي
بايت وي 216آنسگمنت تقسيم
اس) 0( صفر ال ها مي توانند
ال از هم جدا باشOve داشته باش
ال روي هم قراروع هر سگمنت
offs در هر سگ ت .
ه به سگمنت تقسور حداكثر مي هر برنامه از در سگمنت ها م
:حافظه –
برنامه هاي هر سگمنت
گنجايش آ حافظه به س
هگزادسيما سگمنت ه
كامال-1 2-erlap
امالك-3 آدرس شرو آدرسset
ممكن است
حافظه پروسس معموال از ديگر
3-2 –
افظه قرار
بخواهيد در حاا شماره بيشتر
ت صفر ) .
ي يا بيشتر ) را را در حافظه با
رقم سمت راست
ه اي ( دو بايتيت پر ارزش تر
باشد ( ر 16ز
DS =
Segment
د . لذا اگر كلمهماره كمتر و بايت
مضربي ابايد
STACK
STAC SS=3
Physica
SS + 20 H =
Address +
22
ذخيره مي شوندر حافظه با شما
سگمنت بعدي ب
KSG SEGMENTDW 10 DU
CKSG ENDS 303CH
al Address = 3 شد
303C0 H + 2
Offset Add
ذ بايتصورتم ارزش تر را در
آدرس شروع س
T STACK ‘STACUP (0)
303C0H+ 0014ذخيره STACKي
0 H = 303E0
dress = Phy
در حافظه به صد بايد بايت كم
كنيد كه حتما آ
CK’
4H=303D4Hآدرس انتهاي
H
ysical Addre
بايت2
اطالعات دذخيره كنيد
دهيد .
فراموش نك طعه كد زير :
سگمنت بعدي
ess
20كلمه معادل 10
در قط 3 مثال :
شروع سآدرس
0
گرد است
بايت 16ضرب ظه مورد درخوا
S درخواستD درخواستS فرض
شده ( كه به مضافظ به ميزان ح
ن خواهد شد .
STACK SEGMEN
DATA SEGMEN
SS=200F
ست تعريف ش همين ترتيب مكانش تعيين
NT = 40 BYTE
T = 40 BYTE
برحسب درخوا مي گردد . بهي سگمنت كد
STACK
STAC DATA
DATAE 48 BYTE
48 BYTE
DS = SS + CS = DS +
23
يين مي كند .ت داده تعيين
منت بعدي يعني
KSG SEGMENTDW 20 DU
CKSG ENDS ASG SEGMENT
DB 40 DUASG ENDS E ر گرفته مي شودظر گرفته مي شود
30 H = 200F 30 H = 20130
MAX 64
نت پشته را تعيي يعني سگمنت
) ، سگم 16ب
T STACK ‘STACUP (0)
T DATA ‘DATAUP (0)
درنظر درنظ
0 H + 30 H = 0 H + 30 H = 4 KB
مل ابتدا سگمنت ، سگمت بعديظه داده ( مضرب
CK’
’
20130 H 20160 H
بايت4
بايت 4
سيستم عاممي شود )جهت حافظ
طعه كد زير :
40كلمه معادل 20
40
در قط 4 مثال :
0
24
: دستورات زبان اسمبلي – 4-1
دستورات زبان اسمبلي پروسسور كاري را انجام دهد ( instruction Machine language instruction generated )
هيچ كد ماشيني توليد نمي شود .و پروسسور كاري انجام نمي دهد يهدايت اسمبل .
كرو ما( Macro )
نوع دستور فوق به صورت زير نوشته مي شوند 3هر
[label] command [operand] [;comment] Repeat: inc result ; increment result by 1
هاي بيشتر ناديده گرفته مي شوند . spaceفاصله بايد وجود داشته باشد . spaceيك بين هر دو فيلد حداقل در خط مجزايي نوشته شود . labelبهتر است
Repeat: inc result ; increment result by 1
: ) Data Allocationتخصيص داده ( – 4-2
. در برنامه نويسي زبان سطح باال ، تعيين متغير و نوع آن دو چيز را مشخص مي كند
فضاي مورد نياز متغير-1
نحوه تغيير محتويات حافظه مربوط به آن متغير-2
تعريف كرد . اما تفسير و تغيير محتوي حافظه مربوط Define Directiveدر زبان اسمبلي ، مي توان فقط ميزان حافظه مورد نياز يك متغير را با به متغير به برنامه نويس وابسته است .
قرار مي دهيم . ‘ ‘اگر بخواهيم اطالعاتي را در كد اسكي ذخيره كنيم آن را داخل
Define Directive DB Define Byte ; 1 byte DW Define Word ; 2 byte DD Define Double Word ; 4 byte DQ Define Quad Word ; 8 byte DT Define Ten Word ; 10 byte
استفاده مي شود . ?RESبراي رزرو كردن فضاي حافظه بدون مقدار دهي اوليه از دستور
unsigned value1 ;
int value2 ;
5مثال :
DATASG SEGMENT DATA ‘DATA’ Stored DB ‘y’; or Stored DB ‘79H’ Value DW 25159 ; or DW 6247H Balance DW -29255 ; DATASG ENDS
memory x 47
x+1 62
25
Reserve Space for uninitialized data :
RESB Reserve Byte ; 1 byte RESW Reserve Word ; 2 byte RESD Reserve Double Word ; 4 byte RESQ Reserve Quad Word ; 8 byte REST Reserve Ten Word ; 10 byte
7 مثال :
DATASG SEGMENT DATA ‘DATA’ Sort DB ‘y’ ; 79H Value DW 25159 ; 6247H Total DD 542803535 ; 205A864FH Msg DB ‘Welcome!’ ; DB ‘w’,’e’,’l’,’c’,’o’,’m’,’e’,’!’ List DB 2 Dup (0) DATASG ENDS
: ) Operands( عملوند ها – 4-2
Operands Register Register addressing mode Immediate addressing mode خود دستور
Memory addressing mode حافظه
I/O
6مثال :
DATASG SEGMENT DATA ‘DATA’ Response RESQ ; Reserve 8 byte Buffer REST ; Reserve 10 byte DATASG ENDS
memory x
x+1 x+2 x+3
memory x 79
x+1 47 x+2 62 x+3 4F x+4 86 x+5 5A x+6 20 x+7 57
memory x+8 65 x+9 6C x+10 63 x+11 6F x+12 6D x+13 65 x+14 00 x+15 00
26
: ) Addressing Modes( روش هاي آدرس دهي – 4-3
Addressing modes Register Addressing Mode Immediate Addressing Mode Memory Addressing Modes
Direct Addressing Mode حافظه مستقيما در دستور قرار مي گيرد آدرس
Indirect Addressing Mode در اين روش ، عملوند ها در حافظه قرار دارند و آدرس حافظه در دستور قرار داده مي شود . حافظه است كه كاربرد هاي مختلف دارد . offsetاستخراج تفاوت انواع روش هاي آدرس دهي حافظه در
DS : OFFSET Physical Memory Address 8 مثال :
.data Response DB ‘Y’ .code ; Register Addressing Mode MOV AL , BL بيتي 8انتقال MOV AX , BX بيتي 16انتقال
بيتي 32انتقال MOV EAX , EBX
; Immediate Addressing Mode MOV AX , 75H ( register , immediate )
; Memory Addressing Mode MASM & TASM ; Direct Addressing Mode MOV AL , [4000] ; Indirect Addressing Mode MOV AL , Response ; Memory Addressing Mode NASM ; Indirect Addressing Mode MOV AL , [Response] MOV AL , Response
قرار مي دهد ، نه محتويات آدرس مورد نظر را . ALرا در Responseآدرس NASMدر MOV AL , Responseدستور آدرس MOV AL , Responseو يا دستور LEA AL , Responseيا MOV AL , OFFSET Response، دستور MASM/TASMدر
Response را درAL . قرار مي دهد
جلو مي رويم NASMساس در اين كالس بر ا عيب آدرس دهي مستقيم در اين است كه نمي توان بيش از يك مؤلفه از يك متغير را آدرس دهي نمود . مثال يك آرايه را كه با يك متغير
ؤلفه هاي يك آرايه را يك به يك دسترسي يافت .معرفي مي شود و بايد بتوان م
. انواع آدرس دهي غير مستقيم در فصل هفتم بررسي خواهد شد
مي كند آن اشارهبه Responseمحتويات خانه اي از حافظه كه
قرار مي گيرد AL حافظه در رجيستر 4000محتويات آدرس
مي كند اشارهآن به Responseمحتويات خانه اي از حافظه كه قرار مي دهد ALرا در Responseآدرس
دد را توجه
D
M
و پشته .
كار ابتدا بايد عد . به مثال زير ت
E
Data transfe MOV ECHG XLAT MOSX MOVZX
MOV DESTIN Destinat
M M M
Destinat M M
ستورات رشته وS . براي اين ك
ت انتقال دهيم
ECHG DESTI
:
er instructio
ل هشتم ل هشتم
NATION , Stion RegisteMOV RegisteMOV RegisteMOV Registetion RegisteMOV MemorMOV Memor
رد .
م داد مگر در دسDS ،CS ،SS
داخل سگمنت
INATION , S
ECHG EAX ECHG [ Re ECHG [To ECHG [Re
Data Tra (
on
فصل فصل
SOURCE r er , immedier , Registeer , Memorr ry , immediary , Registe تاثير نمي گذارطالعات انجامSسگمنت نمود
داخل ثبات به
.data .code ; Mov M M
. ص كنيد
SOURCE
X , EBX esponse ] , Cotal] , DX esponse] , [To
27
ansfer Instr
iate er ry
ate er
ها flagام ازانتقال ا حافظه
رد ثبات هاي سنيم و سپس از
e ve Number to SMOV AX , 2MOV DS , A
قال را مشخص
CL
otal] غير مجاز
ruction( ده
كدر روي هيچحافظه به ح
را وار عدديزمومي ذخيره كن
Segment Regis2540 AX
كنيد و نوع انتق
; XCHG EA MOV EC MOV ED MOV EA
ت انتقال داد
MOVستور
M وECHX براز مستقيما ناز مستقيما ن
ثبات هاي عمو
ster
مجددا بررسي XCHGستور
AX , EDX CX , EDX DX , EAX AX , ECX
دستورات –
دس
دستورOV
نمي توان نمي توان
در يكي از .كنيد
را 8مثالدس
4-4
9مثال :
10مثال :
S
IN D
د .
A
S
C
Simple Arith INC , DE ADD SUB , CM
NC DESTINDEC DESTIN
مي گيردت صورت
ADD DESTIN
SUB DESTIN
CMP DESTIN
Simpl ( :
hmetic instrEC
MP
ATION , SONATION , SO
ش از حافظه عمليات ت .
NATION , SO
AD AD
ADD ADD
NATION , SO
ADDADD
NATION , SO
le Arithmeti
ructions
OURCE ; DesOURCE ; De
روي آن بخششند ،ر حال پردازش است
OURCE ; De
D AX , DDD BL , D [COUNT]D VALUE ,
OURCE ; De
D AX , DXD BL ,
OURCE ; Co
28
ic Instructio
stination = stination =
،WORD و ... باشد واحد از حافظه در
INC EBX DEC DL INC [COU DEC [VALU DEC [ESI]
DEC WORD DEC BYTE
estination =
DX CH ] , DX 10H
estination =
X CH
ompare Sour
ons( ساده
INC Destination Destination
BYTEنكه از نوع
مشخص شود چند
UNT] UE] غير مجاز ; [D [ESI] [ESI]
Destination
;
SUB Destination
;
rce & Dest رد دارد .
.
ت محاسباتي
C , DECستور
+ 1 n - 1
VALU بسته به ايناره مي كنيد ، بايد
ADDستورn + SOURCE
; INC EBX ADD EBX ,
CMP , ستور
n – SOURCE
DEC EBX SUB EBX , 1
ination ت شرطي كاربر ها تاثير ندارد .
توراتدس –
دس
COUNT ،Eتغير
هرگاه به حافظه اشا
دس E
1
دس E
در دستورات در عملوند
4-5
10مثال :
مت ه
29
نتيجه درFlag ها ( مانند ZF. تاثير دارد (
دستورCMP اگر مقصد حافظه باشد ، نسبت بهSUB يك ،clock زيرا نتيجه را در حافظه دخيره كمتر نياز دارد نمي كند .
: ) Loop , Branch ( بعضي از دستورات – 4-6
Unconditional Jump JMP LABLE ; LABLE پرش غير شرطي به آدرس دستور
11مثال :
MOV EAX , 1 Inc_again :
INC EAX JMP Inc_again
Conditional Jump J<condition> LABLE ; پرش كند LABLE ت برقراري شرط بهدر صور
;تغيير مي كند LABLEبه IP آدرس
12مثال :
Read_char : MOV DL , 0 ; ************************* Code for reading a character into AL ; ************************* CMP AL , 0DH ; JE CR_received ; INC CL ; JMP Read_char ; CR_received : MOV DL , AL
از دستورات شرطي بعضي
JE ; Jump if Equal JGE ; Jump if Greater than or Equal JG ; Jump if Greater JLE ; Jump if Less than or Equal
JL ; Jump if Less JNE ; Jump not Equal JC ; Jump if Carry JNC ; Jump if not Carry
Iteration Instruction MOV CL , 50 Repeat1 : < Loop Body > Dec CL JNZ Repeat1 ; jumps back to repeat1 if CL is not 0
دستورات زير است :معادل اتاين دستور MOV EAX , 50
(ZF=0)
مقايسه enterكاركتر دريافتي را با كد اسكي است ، به enterكن . اگر كاركتر دريافتي
برو در غير اين صورت CR_receivedآدرس دستور بعدي را اجرا كن .
از آنجايي كه دستورCMP نتيجهرا ذخيره نمي كند چگونه مساوي يا عدم مساوي را به خاطر
مي سپارد ؟
قرار
ر مي ط در
L
ي مورد استفاده
وند مقصد تاثيرو فقط ي گذارد
نياز دارد .
S
Logical Instr AND De OR De XOR De NOT De
ت پرش شرطي
دستور بر عملومقصد تاثير نمي
TEST D
راي اجرا شدن
Shift Instruc SHL De SHR De
ruction estination , estination , stination ,
estination لذا در دستورات
است كه اين دكه در عملوند م
Destination
clock كمتر بر
ction estination ,estination
د
Re
Source Source Source
ير مي گذارد ،
Bit Sk
كردن ) اين ااستفاده كرد ك
, Source
ظه باشد ، يك
, Count ; S, Count ; S
رود .
تاثير دار ZFدر
30
epeat1 : < Loop Body Dec CL JNZ Repe
تاثي Flag هاي
AND AL , JE Bit_i < code to JMP Skip1 t_is_zero :
< code tokip1 :
< rest of
testستورات
testز دستور
گر مقصد حافظ
Shift Left Shift Right
CF از بين مي
> eat1 ; jumps
بعضي از بيت
01H is_zero o be executed
o be executed w
code >
and در دس )تور مي توان از
نيز اگ testتور
sh مقدار قبلي
back to repea
ات منطقي بر
when the bit is
when the bit is
شكالت دستور جاي اين دست مي گذارد .
، دست cmpتور
hrو shlستور
at1 if CL is not
اين دستورامي گيرد .
s not zero >
s zero >
يكي از مشرد . بهگذا
flag تاثير
همانند دست
با اجراي دس
0
13مثال :
تفاده است shiftراي
R
R
را بر count يا
if desti if desti
Rotate Instr Rotate w Rotate w
ي شود .
Rotate With ROL De ROR De
low_ درcl و
nation is 16nation is 8
bit_ skip
ruction with Carry without Carrرج شده گم مي
out Carry Inestination ,estination ,
SHL d SHR
w_orderبيت
6 bit 4 l bit 3 l
SHR A JNC bit_ <code JMP Skis_zero: <code 1: <rest o
ry ت كه بيت خار
nstructions, Count ; R, Count ; R
31
destination , destination
sباشد ، فقط
بيتي باشد ) 3low_order bow_order b
AL , 1 _is_zero to be execuip1
to be execu
of the code>
shi در اين استR
Rotate Left Rotate Right
, count , cl
c بيشتر ب 31ازdestinat ،32
bit of cl or cbit of cl or c
uted when t
uted when t
>
ftب دستورات
Rotateتورات
t
cl و ياcount
tion( البته اگر
count are ccount are co
the bit is on
the bit is ze
يكي از معايبراه حل : دست
اگر مقدارl
مي كند . (onsider onsider
ne>
ero>
14مثال :
R
م .
D
Rotate throu RCL De RCR De
.
دهيم shiftت
Defining Con
EQU %ASSIGN %DEFINE
ugh Carry Inestination ,estination ,
تفاده مي كنند
ت به سمت راستSHR EDX RCR EAX
nstants هد .
N E
NUM
زيابي شود .
NUM_ NUM_
NUM_O
nstructions, Source ; , Source ;
وان ورودي است
ED را يك بيت , 1 ,
ت به ما مي ده
ته مي شود .
M_OF_STUD
ان اسمبل ، ارز_OF_ROWS _OF_ROWS OF_ROW EQ
32
Rotate thro Rotate thro
به عنو cfكه از
DX : EAXتي
هت تعريف ثابت
وف بزرگ نوشت
DENTS EQU
باشد كه در زما EQU 50 EQU 10 QU NUM_O
ough carry lough carry
وراتي هستند كMult
بيت 64يك رقم
هاي مختلفي جه
ي ثابت با حرو
U 90
ك عبارت نيز ب OF_ROWS*
left right
تور ، تنها دستوtiword Shift
م يم مي خواهي
Directive ها
ت كه متغير ها
EQ مي تواند يك *NUM_OF_C
اين دو دست : كاربردt
فرض كنيم
NASM ،
مرسوم است
عملوندQU
COLS
33
Macros ماكرو ها اميم .به مجموعه اي از دستورات ( شامل كد و داده و ... ) كه با يك نام مشخص شود ماكرو مي ن
. زماني كه اسمبلر اين نام را ديرتر در برنامه مشاهده كند ، بلوك دستورات مربوط به آن نام اجرا خواهد شد
% MACRO macro_name Para_count
< macro body >
% END MACRO
ماكرو بدون پارامتر : 15مثال
% Macro multEAX_by_16 SAL EAX , 4 % End Macro MOV EAX , 27
multEAX_by_16 ماكرو با پارامتر 16مثال :
% Macro mult_by_16 SAL %1 , 4 % End Macro
mult_by_16 DL ; or mult_by_16 Count
انتقال داده از حافظه به حافظه با ماكرو: 17مثال
% Macro mxchg 2 ECHG EAX , %1 ECHG EAX , %2 \ ECHG EAX , %3
mxchg % End ; ************************* mxchg Value1 , Value 2
; *************************
Sal EAX , 4 ،EAX بيت 4را به اندازه به سمت چپ شيفت مي دهد .
16=24
16اين ماكرو يك پارامتر دريافت و آن را در ضرب مي كند .
و Byte ،Wordاين پارامتر مي تواند يك باشد كه در يك Double Wordيا حتي
ريجيستر و يا حافظه قرار دارد .
16اين ماكرو يك پارامتر دريافت و آن را در ضرب مي كند .
و Byte ،Wordاين پارامتر مي تواند يك باشد كه در يك Double Wordيا حتي
ريجيستر و يا حافظه قرار دارد .
34
:ساختار برنامه اسمبلي – 5-1
Program Data Segment 1 Data Segment 2 Code Segment
Procedures Procedures …
Stack Segment ساختار برنامه اسمبلي باAssembler Directive . ها شكل مي گيرد
Assembler Directive ها درAssembler . هاي مختلف متفاوت است
Assemblers TASM ( Turbo Assembler ) MASM ( Microsoft Assembler ) NASM ( Netwide Assembler )
Open Source Case Sensitive Windows or Linux
35
ساختار برنامه اسمبلي در 18مثال :MASM
TITLE ‘SAMPLE’ STACKSG SEGMENT STACK ‘STACK’ DW 32H DUP (0) ; اختصاص فضاي مورد نياز پشته STACKSG ENDS DATASG SEGMENT DATA ‘DATA’ متغير ها و ثابت هاي برنامه اينجا تعريف مي شوند ; DATASG ENDS CODESG SEGMENT CODE ‘CODE’ ASSUME SS: STACKSG , DS: DATASG , CS: CODESG MAIN PROC FAR ; INITIALIZING MOV AX , DATASG MOV DS , AX ; دستورات برنامه ; ; ; FINALIZING MOV AX , 4C00H INT 21 H ; MAIN ENDP CODESG ENDS END MAIN
روال هايFAR از برنامه هاي ديگر نيز قابل صدا زدن مي باشد اما روالNEAR فقط در همان برنامه قابلرا بگذاريد . END lableاستفاده كنيد بايد در انتهاي برنامه FARاست . توجه كنيد در صورتي كه از روال استفاده
همانند خط آخر برنامه باال .
MOV AX , 4C00H وINT 21 H . براي بازگرداندن كنترل برنامه به سيستم عامل است
دقت كنيد اكثر دستورات ساختار اسمبلي ، كد ماشين ندارند و فقطAssembly Directive .هستند
از آنجايي كه ممكن است بيش از يك سگمنت داده در برنامه اسمبلي وجود داشته باشد ، با دستوراتMOV AX , DATASG وMOV DS , AX مقدارDS را مي توان در هر لحظه در برنامه تعيين كرد كه به
منت داده مورد نظر اشاره كند .سگ
36
ساختار ساده شده برنامه اسمبلي در 19مثال :MASM
TITLE ‘SAMPLE’ .MODEL SMALL .STACK 64 .DATA متغير ها و ثابت هاي برنامه اينجا تعريف مي شوند ; .CODE MAIN PROC FAR ; INITIALIZING MOV AX , @DATA MOV DS , AX ; دستورات برنامه ; ; ; FINALIZING MOV AX , 4C00H INT 21 H ; MAIN ENDP CODESG ENDS END MAIN
اتبراي اشاره به سگمنت داده از دستور MOV AX , @DATA وMOV DS , AX . استفاده مي كنيم
برنامه اسمبلي در : ساختار ساده شده 19مثالNASM
.DATA ; Initialized Data .UDATA ; Uninitialized Data .CODE .STARTUP ; دستورات برنامه ; ; .EXIT ; باز گرداندن كنترل به سيستم عامل
با نام
MAS
بسته
پس برنامه را ب
SM تا برنامه
ب LINK برنامه
Notep و سپس (
را فشار دهيد
فشار دهيد تا
++ padشنهاد
Enterبار 2
را Enterبار
را نماييد .زير مي باشد .
( پيشيپ كنيد
برنامه و سپس
2مه و سپس
اشد .
37
اسمبلي را اجرمبلي به شرح ز
ايشگر متن تاي
نام ب asm.يد
.obj نام برنام
نامه شما مي با
:سمبلي
بلي بايد برنامهجراي برنامه اسم
را در يك ويراذخيره كنيد .
رده و تايپ كني
و تايپ كنيد
تيجه نهايي برن
مه ها در استن برنامه اسمبرد نياز براي اج
يد برنامه خودasm.ا پسوند
MAS ررا باز ك.
LI را باز كرده
نام برنامه ، نت .
وند برنامپي – بعد از نوشت مراحل مور
در ابتدا بايددلخواه و با
برنامهSM
بسته شود برنامهNK
شود .
فايلEXE
5-2–
38
:وظايف اسمبلر –5-3
تبديل كد اسمبلي به كد ماشين و ايجاد فايلObject ).obj ( مرور اول
را مشخص مي كند.تعداد بايت هاي هر دستور
جدولsymbolic شامل برچسب دستورات و متغير ها و آدرس آنها را ايجاد مي كند
مرور دوم
با استفاده از جدولsymbolic . ترجمه برنامه را كامل مي كند ،
بررسي اشتباهات احتمالي در برنامه اسمبلي و اعالم آن به برنامه نويس كد اسمبلي غير معتبر
MOVE . استفاده از برچسب دستوري كه قبال تعريف نشده است
LOOP PROC1 اماPROC1 . قبال تعريف نشده است
ايجاد فايلlist ( خط سوم تصوير قبل ) ( اختياري ) براي كمك به برنامه نويس اصل برنامه
كد زبان ماشين برنامه
OFFSET هر دستور برنامه
:وظايف پيوند دهنده –5-4
برنامه اي است كه يك يا چند برنامهObject file را دريافت مي كند و كد.exe آن را ايجاد مياست كه آدرس واقعي ( فيزيكي ) دستورات در حافظه را مشخص مي Linkerنمايد. در حقيقت اين
كند .
خروجي اسمبلي آدرسoffset دستورات است و آدرس فيزيكي دستورات بعد ازlink كردنobject file ها ايجاد مي شود
برنامه اصلي -: نمونه خروجي 20مثال
اسمبلرمرور اول -
مرور دوم اسمبلر -
فايل ليست -
0100 JMP MAIN 0103 DATA1 DB 35H 0104 DATA2 DB 32H 0105 DATA3 DB ? 0106 MAIN PROC NEAR 0106 MOV BL , DATA1 010A SUB BL , 30H
( تعيين تعداد بايت ) رخروجي مرور اول اسمبل
010001030104010501060106010A
24 25
SYMBOL N
DATA1
DATA2
DATA3
MAIN
د دستور
0 EB 04 3 35 4 32 5 ?? 6 6 8A 1E 0A 80 EB
0008 02 06 000C A2 00
ول سمبل ها )
NAME
1
2
3
رسمبل
كد
90 JM DA DA DA MA0103 M30 SU
يست
0001 R ADD 002 R MOV
39
ول اسمبلر ( جد
TYPE
BYTE
BYTE
BYTE
BYTE
اس دومي مرور
MP MAIN ATA1 DB 3ATA2 DB 3ATA3 DB AIN PROC OV BL , UB BL ,
اي از خروجي لي
AL , DATAY ; AV DATAZ , AL ;
خروجي مرور او
CO
CO
CO
CO
خروجي
35H 32H ? NEAR DATA1 30H
نمونه ا
ADD 25 to it ; MOV AL to DA
خ
VALUE
ODESG:0103
ODESG:0104
ODESG:0105
ODESG:0106
ATA2
ر اين
S ، (
ضاي
تداي
يافت
ن مؤلفه كه در
Stack Point
به خارج از فض
در ابت SP . لذا
stack ov دري
ست .
معني كه آخرين
SP )terستر
مي باشند )SPتداي كار
فته شده است
verflowخطاي
s دخيره شده ا
بدين م كند .
همچنين رجيس
بايت مجاز نمر است . در ابت
STA STA
st در نظر گرف
آن بخوانيد ، خ
stackي كه در
) استفاده مي ود .
اره مي كند .
شته هستند . (با آدرس كمتر
كند .
ACKSG SEG DW
ACKSG SEGtackي حافظه
، چيزي را از آ
آخرين داده اي
40
: پشته )
Da ) ، (LIFOن خارج مي شو
:هاي پنتيوم
اشا Stackظه
خيره شدن در پشتر به حافظه بست اشاره مي
MENT STA 32H DUP (MENT END
بايت براي 100
ي آن بخواهيد
كند. يعني مي
ه ( حافظه پ
ata Structu است كه از آن
پروسسور ها
ه ابتداي حافظ ست .
Do مجاز به ذخ با آدرس بيشت
s تعريف شده ا
ACK ‘STAC( 0 ) DS
) ) يا 3 × 16.
دون مقدار دهي
stack اشاره
stac يا پشته
ureختار داده (ولين مؤلفه اي
در stackزي
Stack S به (حافظه پشته اس
ouble Wordsta از حافظه
stackسگمنت
K’
)50 =2 ) +6ي كنداشاره م
، بد stackكار
باالترين مؤلفه
ckتعريف –
queue از ساخر مي گيريد ، او
پياده ساز –
S )egmentرس در داخل ح
و Wordفقط ackجهت رشد
stack كه در س
كلمه ( 50ل ، SS : 100س
گر در ابتداي ك مي كنيد .
SP همواره به ب
6-1 –
بر خالفeحافظه قرار
6-2 –
رجيسترSoffset آد
ف ج
k: 21مثال
در اين مثالكار به آدرس
اگم P
41
اگر مقدار ESP=0 شود ، بدين معني است كهstack پر شده است و در صورت قرار دادن مؤلفه جديد رويstack ) SS = SPدريافت مي كنيد . ( stack overflowپيغام
همانند حافظه معمول ، وقتي مؤلفه اي رويstack ذخيره مي كنيد ، بايت پر ارزش تر در خانه حافظه بيشتر ذخيره صفحه قبل ) c( شكل مي شود .
6-3 – عمليات پشته :
Stack Instructions PUSH Source POP Destination
Source وDestination بايد از نوعWord و ياDouble Word .باشند
Source به اندازه بيتي و يا بخشي از حافظه 32يا 16واند عملوند مستقيم ، رجيستر هاي مي ت )Word و ياDouble Word ( .باشد
Destination به اندازه بيتي و يا بخشي از حافظه 32يا 16مي تواند رجيستر )Word و ياDouble Word ( باشد.
خانه حافظه ( بايت ) كم مي SP ،2ز مقدار رجيستر ا
شود و سپس مقدار دهي مي شود . ESP = ESP − 2
SS:ESP = source16push source16
حافظه ( بايت ) كم مي خانه SP ،4از مقدار رجيستر شود و سپس مقدار دهي مي شود .
ESP = ESP − 4 SS:ESP = source32
push source32 مقدار داخل پشته در مقصد قرار مي گيرد و به مقدار
خانه حافظه ( بايت ) اضافه مي شود SP ،2رجيستر dest16 = SS:ESP ESP = ESP + 2
pop dest16 مقدار داخل پشته در مقصد قرار مي گيرد و به مقدار
خانه حافظه ( بايت ) اضافه مي شود SP ،4رجيستر dest32 = SS:ESP ESP = ESP + 4
pop dest32 همچنين مي توان ازstack جهت ذخيره وrestore كردن رجيسترflag . بهره برد
Stack Operations On Flag PUSHFD ( push 32 bit flags ) ( double word ) POPFD ( pop 32 bit flags ) ( double word ) PUSHFW ( push 16 bit flags ) ( word ) POPFW ( pop 16 bit flags ) ( word ) PUSHF ( push 16 or 32 bit flags ) POPF ( pop 16 or 32 bit flags )
42
رجيستر عمومي را موقتا در 8همچنين مي توانstack ذخيره و سپسrestore . نمود Stack Operations On All General-Purpose Registers
PUSHAD POPAD PUSHAW POPAW PUSHA POPA
: stackكاربرد هاي – 6-4
كاربرد هايstack ذخيره موقتي داده
انتقال كنترل برنامه
انتقال پارامتر در صدا زدنprocedure
ذخيره موقتي داده هدف : جابه جايي دو مقدار در دو آدرس حافظه
MOV EAX , VALUE 1 MOV EBX , VALUE 2 MOV VALUE1 , EBX MOV VALUE2 , EAX PUSH EAX PUSH EBX MOV EAX , VALUE 1 MOV EBX , VALUE 2 MOV VALUE1 , EBX MOV VALUE2 , EAX POP EBX POP EAX PUSH VALUE 1 PUSH VALUE 2 POP VALUE 2 POP VALUE 1
نكته جالب در اين است كه بر خالف دستورmov كه مجاز نيستيد ، از حافظه به حافظه داده اي را جا به جا كنيد ، درstack اين عمل مجاز مي باشد . ( همانند دستوراتstring كه بعدا ياد مي گيريم (
pushad به ترتيب رجيستر هايEAX ،ECX ، EDX ،EBC ،ESP ،EBP ،ESI وEDI را درstack قرار مي
ذخيره stackآخرين مؤلفه اي است كه در EDIدهد . ( مي شود )
popad همه رجيستر ها را ( غير ازESP (restore مي نمايد .
اشكال برنامه : مقادير قبلي رجيستر از بين مي رود 4استفاده از حافظه :
2استفاده از رجيستر :
8استفاده از حافظه : 2استفاده از رجيستر :
4استفاده از حافظه : استفاده از رجيستر : ( از رجيستر استفاده نمي كند )
43
انتقال كنترل برنامه در صدا زدن procedure
زماني كهprocedure اي را صدا مي زنيد ، آدرس برگشت درstack ذخيره مي شود تا كنترل دوباره به مكان قبلي برنامه به پايان مي رسد ) procedureبازگردد . ( وقتي اجراي
انتقال پارامتر در صدا زدن procedure
يكي از ديگر كاربردهايstack انتقال مقادير بهprocedure ست .ا
MOV EBX , VALUE 2 MOV VALUE1 , EBX MOV VALUE2 , EAX PUSH EAX PUSH EBX MOV EAX , VALUE 1 MOV EBX , VALUE 2 MOV VALUE1 , EBX MOV VALUE2 , EAX POP EBX POP EAX PUSH VALUE 1 PUSH VALUE 2 POP VALUE 2 POP VALUE 1
نكته جالب در اين است كه بر خالف دستورmov كه مجاز نيستيد ، از حافظه به حافظه داده اي را جا به جا كنيد ، درstack اين عمل مجاز مي باشد . ( همانند دستوراتstring كه بعدا ياد مي گيريم (
8استفاده از حافظه : 2استفاده از رجيستر :
4استفاده از حافظه : استفاده از رجيستر : ( از رجيستر استفاده نمي كند )
اشكال برنامه : مقادير قبلي رجيستر از بين مي رود 4استفاده از حافظه :
2استفاده از رجيستر :
44
6-5 – Procedures :
برنامه ها ، كد هاي مستقلي هستند كه براي انجام كار خاص طراحي شده اند و نقش بسيار مهمي در زيرModular Programing دارند .
زير برنامه ها Procedures
. صفر يا بيشتر مقدار به برنامه صدا زننده بر مي گرداند
Functions . يك مقدار را به برنامه صدا زننده بر مي گرداند
: 22مثال
INT SUM (INT X , INT Y ) { RETURN ( X + Y ) ; } TOTAL = SUM ( NUM1 , NUM2 );
انواع روش هاي انتقال مقادير بهprocedure Call_By_Value
مقادير مستقيما بهprocedure 22انتقال داده مي شود . ( مثال (
Call_By_Refrence آدرس بخشي از حافظه كه مقادير در آنجا قرار دارد ، بهprocedure . داده مي شودprocedure مي
) 23تواند با تغيير محتويات همين آدرس ها ( خروجي ها ) را به برنامه صدا زننده برمي گرداند . ( مثال
: 23مثال
VOID SWAP (INT *A , INT *B ) { INT TEMP ; TEMP = *A ; *A = * B ; *B = TEMP ; } SWAP ( & DATA1 , & DATA2 );
معموال اگر بيش از يك مقدار بايد به برنامه صدا زننده برگردانده شود ، از روشCall_By_Refrence استفاده مي شود .
X وY پارامتر = NUM1 ،NUM2 مقادير يا =argument
X وY پارامتر = NUM1 ،NUM2 مقادير يا =argument
45
تورات رويه هادس CALL PROC نام RET ; return
زننده بر مي گردد ؟ به برنامه صداچگونه كنترل برنامه به برنامه صدا شونده منتقل مي شود و پس از اجراي برنامه دوباره
انتقال كنترل برنامه
دستورCALL وقتي دستوري با دستور ، نامproc Call اجرا شود ، ابتدا بهEIP . يكي اضافه مي شود
EIP = EIP + 1
به دستور بعدي اشاره مي كند . EIPبا اين كار سپس مقدارEIP درstack . ذخيره مي شود
بهEIP اضافه مي شود . برنامه صدا شوندهبا ابتداي فاصله نسبي دستور فعلي عالمتدارمقدار offset machine code
(in hex) (in hex) MAIN: . . . 00000002 E81600000 CALL SUM 00000007 89C3 MOV EBX , EAX . . . ; end of main procedure ;******************************************************************* SUM: 0000001D 55 PUSH EBP . . . ; end of sum procedure ;******************************************************************* AVG: . . . 00000028 E8F0FFFFFF CALL SUM 0000002D 89D8 MOV EAX , EBX . . . ; end of avg procedure ;*******************************************************************
. مقدار فاصله نسبي عالمت دار است ، پس مي تواند مثبت باشد و يا منفي 0000001DH
- 00000002H 16H
16 BYTE (IN HEX)
46
ESP = ESP – 4 ; در پشته دو خانه آزاد مي شود SS : ESP = EIP ; آدرس بعد از فراخواني رويه در پشته ذخيره مي شود
EIP = EIP + Relative displacement ; اشاره گر به ابتداي دستورات رويه مورد نظر اشاره كند
دستورRET
پس از پايان اجرايprocedure و استفاده از دستورret . كنترل مجددا به برنامه صدا زننده باز مي گردد ،
EIP = SS : ESP ; آدرس ذخيره شده در پشته در رجيستر اشاره گر ريخته مي شود ESP = ESP + 4 ; مجددا اشاره گر پشته به حالت اول باز مي گردد ( مرحله پاك سازي پشته )
پس از پايان اجراي دستوراتprocedure بايد دستورret . قرار بگيرد
47
امتر ( مقادير ) به انتقال پارProcedure از طريق Stack
يكي ديگر از كاربرد هايStack انتقال مقادير به پارامتر هايProcedure . است
در زبان اسمبلي ، برنامه صدا زننده ، بايد مقادير را در مكان هايي كه برنامه صدا شونده نياز دارد قرار دهد وو يا حتي ( call_by_value )سپس برنامه صدا شونده را صدا زد . مكان اين مقادير ممكن است رجيستر
باشد . ( call_by_reference ) پشته و يا حافظه
دارد : در روش رجيستر ها دو مشكل وجود
تعداد رجيستر ها محدود است-1
ذخيره كنيم . stackامكان دارد كه رجيستر آزاد نداشته باشيم كه در اين صورت بايد ابتدا آن را در -2
call_by_value: 24مثال .CODE .STARTUP MOV AX , 05 MOV BX , 06 CALL SUM SUM : ADD BX , AX RET
و از طريق حافظه call_by_reference: 25مثال .DATA VALUE 1 DB ? VALUE 2 DB ? .CODE .STARTUP MOV VALUE 1 , 05 MOV VALUE 2 , 06 CALL SUM SUM : MOV AX , VALUE 1 MOV BX , VALUE 2 ADD BX , AX MOV VALUE 2 , AX RET
48
و از طريق پشته call_by_reference: 26مثال
.DATA VALUE 1 DW ? VALUE 2 DW ? .CODE .STARTUP MOV VALUE 1 , 05 MOV VALUE 2 , 06 PUSH VALUE 1 PUSH VALUE 2 CALL SUM CALL SUM PUSH EIP عنصر بااليي پشته SUM : POP ECX ; MOV CX , EIP POP BX ; MOV BX , VALUE 2 POP AX ; MOV CX , VALUE 1 PUSH ECX ; PUSH EIP ADD BX , AX RET
استفاده شده است . اين در حالي است كه ممكن است برنامه اصلي مقادير در هر دو مثال قبل از رجيستر ها در رويه باشد .معتبر در آنها قرار داده
: قرار دادن مقادير رجيستر ها در پشته قبل از صدا زدن رويه 1راه حل كپي كردن آنها در رجيستر ها بدون: استفاده از مقادير پشته 2راه حل
چه رجيستر هايي بايد درstack قرار گيرد ؟
در رويه نيز تغيير داده مي شود . پاسخ : رجيستر هايي كه در برنامه اصلي استفاده مي شود و
) بهتر است در برنامه اصليcalling procedure ) رجيستر ها را ذخيره نمايد يا رويه ، (called procedure ( ؟
در رويه زيرا در غير اين صورت بايد با هر بار تغيير رويه در برنامه اصلي مجددا رجيستر هاي جديدي را در پشته پاسخ : ذخيره كنيد .
چه ايرادي دارد اگر با دستورpusha ؟ در رويه همه رجيستر ها را قبل از دستورات رويه ذخيره كنيد
پاسخ : ) clock 5اجراي دستور فوق زمان بر است . ( -1روجي ها توسط رجيستر ها برگردانده مي شود . از طرفي در انتهاي رويه ها ، بايد معموال در انتهاي رويه ها ، خ -2
مقادير رويه از پشته به رجيستر بازگردد كه دو مورد فوق با هم مغايرت دارند . پس بهتر است فقط رجيستر هاي ضروري در پشته ذخيره شود .
pr را
را در
rocedureس
تغيير نمايد . MOV ،EBP
مي شود .
مي كند ، سپسشاره مي كند .
SPEكن است
V EBP,ESPر
MOV EBP , E MOV AX , [ MOV BX , [ ADD AX , B
stack گفته م
pro :
stack ذخيرهاش stackالي
.DATA NUMBER NUMBER .CODE .STARTUP MOV NU MOV NU PUSH NU PUSH NU CALL SU
SUM : … RET
كنيد زيرا ممكت قبل از دستور
ESP [ EBP + 10 ] [ EBP + 8 ] BX
procedur
frameشوند ،
ocedureسط
p مقادير را درk
به باال SPيستر
R 1 DW ? R 2 DW ?
UMBER 1, 05 UMBER 2, 06 UMBER 1 UMBER 2
UM
proce استفادهنند . بهتر است
reت استفاده از
st ذخيره مي ش
49
توس stack درprocedureن
و رجي stackي
CALL
sta درedure
استفاده مي كن
جهت stackدر
proc درtack
ذخيره شدهل از صدا زدن
به ابتداي SSر
L SUM PUS
ackاده مقادير
pr ها ازEBP
ر ذخيره شده دreturn addr
cedure اصلي
ده از مقاديررنامه اصلي قبلي زند ، رجيستر
SH EIP ي پشته
EB جهت استفاrocedureهمه
نيد .
مقادير -1موعه 2- ress
3- EBP
ل از اجراي كد
ريقه استفاد
وقتي برصدا مي
صر باالييعن
BPاز مي توانيد
ز آنجايي كه هstack حفظ كن
به مجم كه قبل
طر
م از
k
MAIN : ... ; push p CALL PR PROCEDURE: PUSH E MOV E
; save r … ; pop re
MOV POP RET NUM
RET
parameters ROCEDURE
EBP EBP , ESP ;
registers
egisters
ESP , EBP EBP M ; NUM = شته
:
PROCEFURE … RET N EIP = SS : ES ESP=ESP + 4
ENTER
; LEAخيره شده در پش
.DATA VALUE 1 VALUE 2 .CODE .STARTUP MOV VA MOV VA PUSH VA PUSH VA CALL SW
SWAP : ENTER ( PUSH EB MOV E XCHG EB MOV [ POP EB LEAVE RET 4
procedure : :
NUM ( INTEGESP 4 + NUM
R (0,0)
AVE ذخي هاي مقادير
DW ? 2 DW ?
LUE 1 , 05 LUE 2 , 06 ALUE 1 ALUE 2
WAP
(0,0) ; BX ; BX , [ EBP +BX , [ EBP +EBP + 10 ] , EBX
; value 1 , val
50
قبل از ترك
ER )
تعداد بايت
call_by_ref
CALL
+ 10 ] ; value 2+ 8 ] ; value 1 EBX
ue 2
Stack Cle( ق
ference با روش
SWAP PUS
2
stac )eanup
دو مقدار در حافظه
SH EIP ي پشته
EB ESEBEBEB
ckميز كردن
كردن د swapامه
عنصر بااليي
STACK BP - 2 SP, EBP
BP + 4V BP + 8V BP + 10
SS
تم
: برنا 27مثال
EBX EBPEIP
VALUE1VALUE2
…
proc
صلي ca در
cedure آنكه
توسط برنامه اصallرست بعد از
گيرد ، قبل از ر دارد .
ت stackكردن ن عمل بايد در
جمع مي كند .
sta قرار مي گقرار stackدر
لذا عمل تميزكتفاده نمود . اين
ين اعداد را با هم ج
.CODE .STARTUP SUB EC READ_NUMBقرار بده ; CMP EA JE STOP PUSH EA INC ECX
JMP REA STOP_READ PUSH EC
CALL VA
; STACK
INC ECX
ADD ECX ADD ECX ADD ESP
pr :
ckست كه در
EIPت قبل از
pa . مي شوداست stackدن
رد كند ، رويه اي اي
CX , ECX BER : خوان و درEAX ق
AX , 0 P_READING AX خوانده شده ; AD_NUMBER DING : CX ; ARIALBE_SUM
K تميز كردن ; ; incre
X , ECX ; ECX X , ECX P , ECX ; UPD
51
rocedureك
رين مقداري اساد پارامتر درست
proced ،ass
r براي تميز كر
ربر عدد صفر را وار
ي را از كاربر بخ
تعداد مقادير خ
ي شود
ement ECX to i
= ECX × 4 ( S
DATE ESP TO C
متغير به يك پارامتر ها آخربارت ديگر تعدا
dureغيري به
retن از دستور
اند تا زماني كه كار
مقداري
pass pr داده مي
CALL VAR
nclude count هSPACE IN BYT
CLEAR STACK
پارامتر عداد صورت تعدادده شود . به عب
عداد مقادير متغنرد و نمي تواورت بگيرد .
از كاربري مي خوا
rocedure كه به تRIALBE_SUM
م بايد پاك بشهTE )
pas كردن تع در اين
فراخواند
ز آنجايي كه تعايد صورت بگيررنامه اصلي صوداد مقادير متفاوتي
ين پارامتري است PUSH EIP ه
خودشم
ss
ازبابر
: تعد 28مثال
عداد مقادير آخريصر بااليي پشته
تع عنص
52
VARIABLE_SUM :
ENTER (0,0) ; PUSH EBX ; SAVE EBX , ECX PUSH ECX MOV ECX , [ EBP + 8 ] ; به تعداد مقادير اشاره مي كند MOV EBX , EBP ; ADD EBX . 12 ; last parameter SUB EAX , EAX ADD_LOOP : ADD EAX , [ SS : EBX ] ; توجه شود ( نكته مهم ) ADD EBX , 4 ; بايت مي باشد 4پارامتر ها در اين مثال طول LOOP ADD_LOOP POP ECX POP EBX LEAVE ; RET ; stack clear in main
توجه كنيد :را به عنوان مبدا و نقطه صفر انتخاب مي كنيم . هر عنصري كه بعد از دستور EBPما
ENTER فراخواني شود ازEBP به مقدار حافظه اي كه اشغال مي كنند كم مي شوند . و هرپارامتري كه قبل از آن وارد پشته شده باشد به مقدار حافظه اي كه اشغال مي كنند به مبدا
اضافه مي شود زيرا پشته از انتها به ابتدا پر مي شود . :مبدا است . همواره EBPپس با توجه به اينكه
[EBP+4] محل قرار گيريEIP هست زيرا EBP 32 بايت حافظه اشغال مي كند . 4بيت يا
[EBP+8] محل قرار گيريECX ( شمار پارامتر ها ) هست زيرا EIP 32 بايت 4بيت يا حافظه اشغال مي كند .
[EBP+12] محل قرار گيري آخرين پارامتر ورودي هست زيرا ECX 32 بايت 4بيت يا حافظه اشغال مي كند .
طول پارامتر آخر هست و به Lدر پشته قرار مي گيرند كه [EBP+12+L] مابقي پارامتر ها از همين ترتيب تا انتها پشته پر مي شود تا به اولين پارامتر ورودي برسد .
خالصه مطلب گفته شده در جدول زير :
STACKECX EBP - 4 EBX EBP - 2 EBPESP, EBPEIPEBP + 4ECX EBP + 8
VALUE1EBP + 12VALUE2EBP + 16
…SS
ست ،
تفاده
proc فعال نيس
است stackهاي
%DE %DE MO
Fib(1) = 1 Fib(2)= 1 Fib(n)= F
ود :
cedureي كه
گذاري مكان ه
EFINE a dwoEFINE temp
OV temp , E
Fib ( n-1 ) + Fib
ENTER ( 8
PUSH EBP MOV EBP SUB ESP
ت مي دهند .شنهاد نمي شو حتي در زماني
INT { I }
%d جهت نام گ
ord [EBP+1 dword [EB
AX
b ( n-2 ) دارد .
ت ( 0 , 8P P , ESP , 8
p . معني دارندي خود را از دست
زير پيشدليل 2Stati است و
كند .
T COMPUTE
INT temp , …
defineوان از
2] BP-4]
f( را نگه مي ددل كد زير است
53
procedureل
متغير ها معنايين متغير ها به
Data Se ،c
ند .
recu كار نمي
E (INT a , IN
N ;
وش فوق مي تو
fib مقدار ،(n)
معاد
ه فقط در داخلprocedure م ،
جهت تعريف ايgmentده در
ا اشغال مي كندp هايursive
NT b )
به رو ي محلي
b_hiو متغير
Lo :
هايي هستند كهe اتمام اجراي
Data Segm جصيص داده شدضاي حافظه را
procedureبا
ي به متغير هاي
f(n-1) مقدار
ocal Variable
متغير ه پس از
mentستفاده از
فضاي تخص-1 همچنان فض
اين روش ب-2
ه جاي دسترسي مود .
بوناچي
، fib_loمتغير
es
اس1
2
: 29مثال
بهنم
: فيبو 30مثال
م
54
جهت حذف كردن فضاي ذخيره سازي متغير هايlocal وrestore كردنEBP . از دستورات زير استفاده مي كنيد
LEAVE معادل با كد زير است MOV ESP , EBP POP EBP
.CODE .STARTUP EDX قرار بده ; داري را از كاربر بخوان و درمق
CALL FIBONACCI كه عدد فيبوناچي در آن قرار دارد را چاپ كن ; EAX مقداري DONE : .EXIT % DEFINE fib_lo dword [EBP-4] % DEFINE fib_hi dword [EBP-8] FIBONACCI : ENTER ( 8 , 0 ) PUSH EBX MOV fib_lo , 1 MOV fib_hi , 1 FIB_LOOP : MOV EAX , fib_hi MOV EBX , fib_lo ADD EBX , EAX MOV fib_lo , EAX MOV fib_lo , EBX CMO EBX , EDX JLE fib_loop POP EBX LEAVE RET
STACKEBX EBP - 12
fib_hi EBP - 8 fib_lo EBP - 4 EBP ESP, EBPEIP EBP + 4… SS
شود .
M
R
BEE M
قل مي كند
ي ناميده مي شMemory Add
Immedia Register Direct
Indirect
ر د
R B In B
Register Ind
Based RegisEffective adEffective ad
MOV AX , [منتق AXرا به #
هاي آدرس دهيdressing Mote r
ي شودر داده م
ندارد ، بلكه درقرار دارد از آنها
BRegister Based ndexed Based-Index
direct گيرد .
ster Indirectdd = [ BX +dd = [ BP +
[ BX + 46 ] registered يلد
لوند ) ، روش هodes
ملوند به دستور
در دستور قرار نو يا تركيبي ر
BX , BP , SI
xed
BX قرار ميt
Data + disp ]Stac+ disp ]
محتويات في
55
دستورات ( عملو
يم به عنوان عم
ي آدرس داده دجيستر هاي زيرI , DI
, BP , SI , D
Segment k Segment
: ي
صيص داده به د
رس داده مستقي
ه مي شود يعني يكي از رج
DIيستر هاي
ي آدرس دهي
وش هاي تخص
مقدار آدر
م به دستور داده
ر يكي از رجيي د
روش هاي –
انواع رو
ت غير مستقيم
آدرس داده
7-1 –
س داده به صور
آدرس
In[[
MOV EAX
ESI = 9(
B[[
B[[[[
ndexed Reg[ DISP + SI [ DISP + DI
, [ marks_tab
(مي خوانيم .
Based_Index[ BX + SI ] [ BX + DI ]
Based_Index[ BX + SI + [ BX + DI + [ BP + SI + [ BP + DI +
gister Indire ] ]
ble + ESI * 4 ]
به روش باال مي
xed with no [ BP + SI ] [ BX + SI ]
xed with Dis DISP ] DISP ] DISP ] DISP ]
ect
]
ام را ب 9 . فيلد
Displaceme] ]
splacement
56
بايت است 4ه
ent
. هر فيلد آرايه
از ركورد ها )
اشاره مي كند
ست ( آرايه اي
به ابتداي آرايه
اي دو بعدي اس
marks_tabبه
آن در آرايه ها
ble
كاربرد
57
آرايه يك بعدي
C Language INT test_marks [10] ;
) 9تا 0، محدوده ( (int)بايت ) نوع عنصر 4) ، سايز هر عنصر ( 10تعداد عناصر ( نام آرايه ،
ASSEMBLY Language test_marks resdw 10
يدو بعدآرايه
C Language INT class_marks [5][3] ;
ل روش زير آرايه دو بعدي به يك آرايه يك بعدي تبدي 2حافظه واقعي يك بعدي است و بايد به يكي از شود
Order the array elements row-by-row, starting with the first row ( C Language ) Order the array elements column-by-column, starting with the first column. ( Fortran
Language )
دانشجو 5: هدف جمع نمرات 31مثال .DATA NO_ROWS EQU 5 NO_COLUMNS EQU 3 NO_ROW_BYTES EQU NO_COLUMNS×2 class_marks DW 90 , 89 , 99 DW 79 , 66 , 70 DW 70 , 60 , 77 DW 60 , 55 , 66 DW 51 , 59 , 57 .CODE MOV ECX , NO_ROWS ; loop iteration SUB AX , AX
SUB EBX , EBX MOV ESI , NO_COLUMNS-1 ; ESI = class_marks [ 0 , 2 ]
SUM_LOOP : ADD AX , [class_marks + EBX + ESI × 2] ADD EBX , NO_ROW_BYTES LOOP SUM_LOOP
STACKclass_marks [ 0,0] class_marks [ 0,1] class_marks [ 0,2] class_marks [ 0,3] class_marks [ 0,4]
توضيح : EBX به ابتداي هر سطر اشاره مي كند ESI به ستون مورد نظر در هر سطر اشاره مي كند class_marks كندابتداي آرايه را مشخص مي
S
Z
Status Flags ZF , CF
A I P
ZF ( ZERO F
J J
C
SM O I E
s , OF , SF , ADD , SUB NC , DEC PUSH , POP
FLAG )
JZ ( JJNZ (
CMP CHAR ,
SUB MOV
OUTER_LOOMOV
NNER_LOOINC LOOP DEC JNZ
EXIT_LOOPSMOV
AF , PF ( affect all ( affect all
P ( affect no
Jump if ZF Jump if ZF
, ‘$’ ; ( if E
EAX , EAEDX , M
OP: ECX , M
OP: EAX INNER_LOOEDX OUTER_LOS: SUM , E
58
: تي
status flag status flagone of statu
= 1 ) = 0 )
Equal then Z
AX M
M
OP
OOP
EAX
هاي محاسبا
gs ) s except CFus flags )
دن
ZF = 0 ) ي مشخص
; EAX store
و رجيستر ه
F )
رتبط
ست مساوي بود
مارش تا مقداريes SUM
دستورات –
دستورات مر
كاربرد
تس
شم
8-1 –
چند
C ي دهد .
جمع و تفريق
.
را carryخداد
CF ( CARRY
Carry رخ مي
Under Flo (
J J
b در عمليات ج(
overflo است
تاثير بگذارد . Z مي توان رخ
CI
FLAG ) رجيستر باشد ،
owن است . (
JC ( JJNC ( J
)borrowed
shift /
ت .
wمنزله رخداد
carryارد در
Fنند ، از روي
CL = 225 NC CL Z
ده حافظه و يا ر
از محدوده بود
Jump if CF Jump if CF =
carryاز فته
U
rotate /واده
overflow استoverflow به م
ت و ضرورتي ند يا كسر مي كن
ZF=0 CA
59
خارج از محدود
به منزله خارج
= 1 ) = 0 )
) يا قرض گرف
UnderFlowو
ستورات از خانو
car به منزلهw
wبا carryدن
كرار حلقه است به عدد اضافه
ARRY
خ عالمت بي
22
65537
4294967295نتيجه منفي ، ب
propagate (
OverFlowت
عد از اجراي دس
rryمت رخداد
دار متفاوت بود
نمي گذارد ؟مارش تعداد تك
D اره يكيهمو
اعدادحاسبهداد بي عالمت
25تا 0بيتي : 7تا 0بيتي : 15تا 0بيتي : 3
يهي است كه ن رتبط
( carryشار مه اي
شخيص وضعيتست يك بيت بع
اعداد بي عالم اعداد عالمت
D درCF تاثير
DEC معموال شمDECو INCكه
اگر نتيجه مح محدوده اعد
8 16 32 بدي
دستورات مر
كاربرد
انتشكلم
تش تس
نكته
در در
DECو INC ت
Cو INCكاربرد
في از آنجايي كص داد .
چرا دستورا زيرا كا 1-از طرف 2-
تشخيص
خير
گر به
O
ه شده است يا
( CF=0 و اگ
OF ( OVERF
خارج از محدوده
Under Flo (MA
0 (ه شود آنگاه
J J
LOW FLAG
خ عالمت دار
owن است . (
MOV ADD
. د .
ت در نظر گرفته
JO ( JuJNO ( Ju
)
اعداد عسبات
2
از محدوده بودAL , 72HAL , 0EH
تفسير مي كندSET نمايد مي
عدد بي عالمت
ump if OF = ump if OF =
ت دار
Divide
60
ست .
آيا نتيجه محا
3
2147483647به منزله خارجH ; 114D H ; 14D
; result
بي عالمت ؟امه بيت ها را ت
را OFو CFلبه عنوان ع 12
O (
1 ) = 0 )
عالمت در اعداد ،Multiply و
ات عالمتدار اس كه نشان دهد
128تا
32767تا - 32تا - 2147483
نتيجه منفي ، ب
1000 000t is 128D ou
ت دار است و يااند . منطق برناي كند و معادل
8شد اگر 128( OF = 1شود
د overflowتShift اجراي
CF در محاسباOF اين است
دار داد عالمت- 128بيتي : 2768بيتي : 13648بيتي : 3
يهي است كه ن
0 ≠ 128D ut of range
كه عدد عالمت) چيزي نمي دا
سير را فرض مي8كنيد . حاصل
در نظر گرفته ش
رتبط
شخيص وضعيتست بيت بعد از
OF شريك هدف اصلي.
محدوده اعد 8 16 32 بدي
( OF = 1 )
كجا مي داند كسور ( سيستم )ستور هر دو تفسل قبل توجه كت بي عالمت د
دستورات مر
كاربرد
تش تس
سيستم از ك پروسسپروسسبه مثالصورت
S
SF ( SIGN F
MS
J J
M F F
FLAG )
MOV SUB
S
JS ( JuJNS ( Ju
MOV
FOR_LOOP :<LOOPBDEC ECJNS
FOR_LOOP_<LOOPBCMP JL
EAX , 15EAX , 97
F=1
ump if SF = ump if SF =
ECX , M
: BODY>
CX FOR_LOOP
_WCMP : BODY> ECX , 0 FOR_LOOP
61
(The M
5 7
00001 + 10011 01011
1 ) = 0 )
محاسباتي
COU
M
P
P_WCMP
ost Signific
1111B (81111B (8110B
س از عمليات مUNTING LOO
(cant Bitيت
8-bit signe8-bit signe
رتبط
ست عالمت پس OPاده سازي
CM
CM
مهم ترين بي
ed form ofed number
دستورات مر
كاربرد
تس پيا
MPده از دستور
MPده از دستور
f 15) r for −97)
بدون استفا
با استفاد
مي
ده از
ت
A AF ،SETد ،
B نياز به استفاد
Pر نتيجه عمليات
AF ( AUXILAlow_or شود
MA
BCDتي با فرم
م .
A A A A D D
PF ( PARITY شود ، حتي اگر
P
P
J J
ARY FLAG ) rderچهار بيت
MOV ADD
مليات محاسباتت آشنا مي شويمAAA ; ASCII AAS ; ASCII AAM ASCII;
ASCII AAD ; DecimDAA ; DecimDAS ;
Y FLAG ) نظر گرفته مي
PF = 1 ; اشدPF = 0 ; اشد
JP ( JumpJNP ( Ju
Enc
carry / از چ
AL , 43AL , 84
ي كند . اما عمبا اين دستورات adjust for adjust for I adjust for adjust for
mal adjust fomal adjust fo
در نظ PFكردن
زوج با 1 هايفرد با 1ت هاي
p if PF = 1 )ump if PF =
codingش هاي
62
borrowجاد
3 MOV 4 SUB
AF را چك نميب ) BCDورات
addition subtraction
r multiplicatdivision or addition or subtracti
ك clearردن يا
تعداد بيت تعداد بيت
0 )
در انواع روش
تي منجر به ايج
AL , 43 AL , 92
jump ،F نوع
و( دست 12صل
n ion
ion
l جهتset كر
در ارسال داده
عمليات محاسبات
3 2
و كاربرد رتبطيچ دستوري از
A دارند . در فص
low_order
تي باشد .
رتبط
ك كردن خطا
اگر نتيجه ع شود.
دستورات مر هي
AF
بيت 8فقطبيت 32يا 16
دستورات مر
كاربرد
چك
63
:دستورات محاسباتي – 8-2
. دستورات جمع و تفريق در بخش هاي قبل ياد گرفته شده است
ضرب اتدستور . دستور ضرب از دو جهت با دستورات جمع و تفريق تفاوت دارد
1- ضرب دو عددn 2بيتي ، يكي عددn . بيتي توليد مي كند
2- در صورتي كه اعداد عالمت دار يا بي عالمت تفسير شوند ، نتيجه ضرب متفاوت است . لذا ضرب دستورات عالمتدار با ضرب دستورات بي عالمت تفاوت دارد .
1010B (4-bit unsigned form of 10) × 0100B (4-bit unsigned form of 4) 00101000B (8-bit unsigned form of 40)
1010B (4-bit signed form of -6) × 0100B (4-bit signed form of 4) 11101000B (8-bit signed form of -24)
ضرب بي عالمت
MUL SOURCE Source ( نمي تواند عدد باشد ) . مي تواند رجيستر يا حافظه باشد
MUL 10 ; invalid بيتي باشد . 32بيتي و يا 16بيتي ، 8ورودي مي تواند
AL × ( 8 BIT SOURCE ) = AH ( HIGH ORDER ) AL ( LOW ORDER )
AX × ( 16 BIT SOURCE ) = DX ( HIGH ORDER ) AX ( LOW ORDER ) EAX × ( 32 BIT SOURCE ) = EDX ( HIGH ORDER ) EAX ( LOW ORDER )
معنايcarry وoverflow در دستور ضرب
اگر نصفhigh_order نتيجه ضرب غير از صفر باشدOF و CF ،set و در غير اين صورتclear مي شوند.
در ضربset شدن دوflag وق به معناي فerror نيست بلكه به معناي اين است كهAH ،DX و ياEDX داراي بيت هاي با معني در نتيجه است.
MOV AL , 10 MOV AL , 10 MOV DL , 25 MOV DL , 26 MUL DL MUL DL < 255 OF=CF=0 >255 OF=CF=1
64
مت دار ضرب عال
IMUL SOURCE تفاوت اين دستور با دستور قبلي در اين است كه دوflag ،carry وoverflow در صورتيset مي شوند
د . نباش (lower half)نيمه پاييني sign extension، نتيجه (upper half)كه نيمه بااليي
Sign Extension - 66 10111110 11111111 10111110 66 01000010 00000000 01000010
درIMUL نيز همانندMUL ،set شدن همزمان دوflag به معنيdouble length شدن نتيجه است
MOV DL , OFFH ; DL = -1 MOV AL , 42H ; AL = 66 IMUL DL ( -66 ) OF & CF CLEAR MOV DL , OFFH ; DL = -1 MOV AL , 42H ; AL = -66 IMUL DL ( +66 ) OF & CF CLEAR MOV DL , OFFH ; DL = 25 MOV AL , 42H ; AL = -10 IMUL DL ( -250 ) OF & CF SET
DIV S IDIV S
MMD XMMD
SOURCE SOURCE
MOV MOV DIV C
XOR MOV MOV DIV C
(UNSINGED(SIGNED)
AX , 251 CL , 12 CL
DX . DX AX , 141BHCX , 012CHCX
65
D)
H ; AX = H ; CX = 3
5147D 300D
ستورات تقس سيم دس
66
MOV AL , -95 CBW MOV CL , 12 DIV CL
اگر در دستورIDIV مقسوم عدد منفي باشد ، مانند مثال قبل ابتدا ،XOR DX , DX ، را انجام مي دهيم انجام بدهيم . sign extensionمثبت در نظر گرفته مي شود . لذا بايد عدد
CBW ( Convert Byte to Word ) ( sign extend AL to AH for 8 bit IDIV ) CWD ( Convert Word to Dword ) ( sign extend AX to AX for 16 bit IDIV ) CDQ ( Convert Dword to QWord ) ( sign extend EAX to EAX for 32 bit IDIV )
MOVSX DESTINATION , SOURCE ( mov sign extended source to destination ) MOVZX DESTINATION , SOURCE ( mov zero extended source to destination )
DESTINATION = REGISTER SOURCE = MEMORY OR REGISTER 32 bit or 16 bit 8 bit 32 bit 16 bit
در تقسيمoverflow يك مشكل اساسي است . در چنين شرايطي پروسسور ، فقفه نرم افزاري توليد مي كند .
دستوراتSHIFT براي ضرب و تقسيم MOV CX , 12 MUL CX ; 12 CLOCK SAL AX , 5 ; 1 CLOCK
67
: دستورات منطقي – 10-1
LOGICAL INSTRUCTIONS AND OR XOR TEST NOT
، ملوند نياز دارند ، غير از ع 2همه دستورات رو به روNOT.
بيتي باشد. 32بيتي و يا 16بيتي ، 8عملوند ها مي تواند
همه دستورات فوق رويstatus flag . تاثير مي گذارند
CF & OF is cleared since do not generate carry or overflow AF is undefined ZF , SF & PF are related to result of instructions
AND INSTRUCTION
اجراي منطقAND
CLEAR كردن يك يا چند بيت
جدا كردن يك يا چند بيت
OR INSTRUCTION اجراي منطقOR
SET كردن يك يا چند بيت
كاربردي : 38ثال مand وor درcut وpaste
AND AL , 55H ; CUT ODD BITS AND BL , 0AAH ; CUT EVEN BITS OR AL , BL ; PASTE THEM TOGETHER
AL = 00000000 55H = 01010101 AND AL , 55H 10101010 ( CUT ODD BITS TO AL )
BL = 00000000 0AAH = 10101010 AND BL , 0AAH 01010101 ( CUT EVEN BITS TO BL )
AL = 10101010 BL = 01010101 OR AL , BL 11111111 ( PASTE THEM TOGHTER IN AL )
د .
ثير نمي گذارند
XOR I
AKB
NOT I
TEST
جيستر مقصد تا
INSTRUCTIO
A KEY B
INSTRUCTIO
T INSTRUCT
فاوت كه در رج
ON
XOR
ON
TION
ي كنند با اين تف
68
چند بيت
تر ها
B KEY
A
and عمل مي
XO
دن به يك يا چ صفر به رجيست
XOR
د
همانند cmpو
ORراي منطق
يير وضعيت دادقدار دهي اوليه
مز نگاري
رمز نگاري :
كردن عدكمل
و testستورات
اجر تغي مق رم
در xorكاربرد
مك
دس
39ثال م :
69
: Shiftدستورات – 10-2
SHIFT INSTRUCTIONS SHL SHR SAL ( Shift Arithmetic Left ) SAR ( Shift Arithmetic Right )
دستكاري بيت ها
2ضرب و تقسيم عدد ها به عدد هاي مبناي
OF در شيفت چند بيتي بي تغيير مي ماند ، اما در شيفت يك بيتي اگر بيت عالمت تغيير كند ، مقدار ،OF مي شود. OF ،1، صفر و در غير اين صورت مقدار
AF is undefined CF , ZF & PF are related to output of instruction
كاربرد : 39ثال مshift رمز نگاريدر
; AL contains the byte to be encrypted MOV AH , AL SHL AL , 4 ; move lower nibble to upper SHR AH , 4 ; move upper nibble to lower OR AL , AH ; paste them together
; AL has the encrypted byte چپ بيت سمت راست و 4كردن عوض
در مقصد هم ، همين كار تكرار مي شود تا داده اصلي برگردانده شود
( fit more th
ت زير خارج از 176 (
Arithm S S S S
an require
1
0
بي معني استوده مي شود (
metic Shift SAL DESSAL DESSAR DESSAR DES
ست .
bits. ( گيرند
010 ( -6 )
0110 ( +6 )
Sal بمحدو
InstructionTINATION TINATION
STINATION STINATION
بيت عالمت ا
دربر بگز نياز را
1101 ( -3
0011 (
70
s , COUNT , CL , COUNT , CL
د عالمت دار
Arithme حفظ
ا ت هاي بيشتر
3 )
+3 )
اعداد 2رب درد عالمت دار
eticه صورت
ست ؟
شده اند تا بيت
Sarمت دار
و ضر 2سيم بريفت دادن اعدادف از شيفت بهت حفظ نشده اسsign extene ش
عالم 2سيم بر
تقس شي هد
s بيت عالمت ،edعالمت دار
تقس
چرا درsal
زيرا اعداد ع
مي باشد rotat د .
Doubl S S
Rotate R R
te راه حل آن
BT O
BITSC B B
.
e Shift InstSHLD DESHRD DE
e InstructiRotate withoRotate with گم مي شود .
OPERAND ,
CAN InstruBSF BSR D
ند .
جيستر ) باشد .
صفر باشند
tructions STINATION
ESTINATION
ons out Carry Carry شيفت داده شده
BIT POSIT
.د
ctions DESTINATIDESTINATIOصد بر مي گردا
d حافظه يا رج )
تمام بيت ها ص
71
N , SOURCN , SOURC
ست كه بيت ش
TION
C قرار مي گيرد
ION(REGISTON(REGISTدر رجيستر مقصdouble word
يتي باشد .
يرد زماني كه ت
E , COUNCE , COUN
shift در اين اس
:غيير آنها
CFخاب شده در
:
TER) , OPTER) , OP
عملوند را د 1dو يا wordع
بي 32يا 16يداثير قرار مي گي
NT NT
: Rotateت
tيب دستورات
يت ها و تغ
كپي بيت انتخ
BITSCANت
PERANT ;PERANT ; كان اولين بيت
ملوند بايد از نوعجيستر مقصد باي
تحت تا ZFط
دستورات –
عي
بررسي بي –
دستور 4ر هر
دستورات –
( bit scan ( bit scan r
مك عم رج فقط
10-3
10-4
د
10-5
forward ) reverse )
72
در اين مثال مي خواهيم نشان دهيم كه چگونه مي توان عمل ضرب را فقط با استفاده از دو دستور : 40ثال مshift وadd
انجام داد
بيتي بي عالمت را در هر ضرب كنيم . براي اين كار ابتدا الزم است كه اين اعداد را به 8مثال ما نظر داريم كه دو عدد در ايناگر عدد تواني براي انجام عمل ضرب استفاده كنيم . shiftغير اين صورت نمي توانيم از دستور در آوريم در 2صورت تواني از
2حال اگر عدد تواني از مي توان عمل ضرب را انجام داد . SHLبار استفاده از دستور 6به راحتي با ) 26( 64باشد مثل 2از تبديل كنيم . مثال اگر داشته باشيم 2ا به صورت مجموع چند عدد مضرب نبود ، كه در اكثر موارد اينگونه است آنگاه بايد عدد ر
را به صورت زير بنويسيم . 11) ما بايد عدد X× 11عدد ( X × 11 = ( X × 8 ) + ( X × 2 ) + ( X × 1 ) 3 SHL 1 SHL 0 SHL
يد كه ي توانيم عمل ضرب را انجام دهيم . حال ممكن است از خود سوال كندر اين صورت ما استفاده از عمل شيفت و جمع م دويي عدد توجه كنيد :ي اين كار ابتدا بايد به صورت دومضرب را به صورت باال در آوريم . براچگونه
11 = ( 00001011 ) 8و 2، 1عدد يك داريم كه به ترتيب از راست به چپ با اعداد 3دقت كنيد متوجه مي شويد كه 11اگر در صورت دودويي عدد
به سمت چپ شيفت پيدا كند . در مثال 1ما بايد به اندازه شماره آن بيت Xدر مضرب 1هم وزن هستند . پس به ازاي هر عدد بار شيفت به چپ پيدا كند و سپس سه عدد بدست آمده بايد با هم جمع شوند . براي راحتي 0و 1و 3بايد به اندازه Xباال ابتدا
بار به سمت چپ 3را Xدر نظر مي گيرم كه در ابتدا با صفر مقدار دهي شده است . سپس عدد resultكار يك متغير مانند جمع مي resultبار شيفت مي دهيم و حاصل را با 1را Xجمع مي كنيم . سپس عدد resultشيفت مي دهيم و حاصل را با
را تغيير مي Xمحتويات shiftدستور ) . توجه داشته باشيد كه shl = 0جمع مي كنيم ( resultرا با Xكنيم و سپس خود عدد tempمحتويات قبلي را از طريق انتقال Xنگه داريد و قبل از عمل شيفت بعدي عدد tempرا در Xدهد پس يك كپي اوليه از
به حالت اول در آوريد . خالصه مطالب گفته شده را الگوريتم زير مشاهده مي كنيد :
mult8 (number1, number2) result := 0
for (i = 7 downto 0) if (bit(number2, i) = 1) ;
result := result + number1 * 2i end if
end for end mult8
73
.CODE .STARTUP READ_INPUT:
; قرار بده AXعدد اول را بخوان و در
; قرار بده BXعدد اول را بخوان و در
CALL MULT8
; قرار دارد ، آن را چاپ كن AXنتيجه در
DONE: .EXIT MULT8: PUSH CX PUSH DX PUSH SI XOR DX , DX ; DX=0 ( KEEP MUL RESULT ) MOV CX , 7 ; CX = # BIT ( # OF SHIFT REQUIRE ) MOV SI , AX ; SAVE ORIGINAL NUMBER 1 IN SI REPEAT1: ; ITERATES 7 TIMES ROL BL , 1 ; TEST BIT OF NUMBER2 FROM LEFT ( CF SET ( BIT = 1 ) OR CLEAR ( BIT = 0 ) )
JNC SKIP1 ; IF BIT = 0 , DO NOTHING MOV AX , SI ; ELSE AX = NUMBER1 * BITWEIGHT SHL AX , CL ; CL = # BIT THAT IS 1 ADD DX , AX ; UPDATE SUM IS DX SKIP1 : DEC CX JNZ REPEAT1 ROL BL , 1 ; TEST THE RIGHTMOST BIT OF AL SHL AX , 0 JNC SKIP2 ADD DX , SI ; ELSE ADD NUMBER 1 SKIP2: MOV AX , DX ; MOVE FINAL RESULT INTO AX POP SI POP DX POP CX RET
74
حال مي خواهيم با استفاده از دستورات دستكاري بيت ها اين برنامه را باز نويسي كنيم .
MULT8: PUSH CX PUSH DX PUSH SI XOR DX , DX ; DX=0 ( KEEP MUL RESULT ) MOV SI , AX ; SAVE ORIGINAL NUMBER 1 IN SI REPEAT1: ; ITERATES 7 TIMES BSF CX , BX ; RETURN FIRST 1 BIT POSITION IN CX JZ SKIP1 ; IF ZF = 1 , NO 1 BIT IN BX . DONE MOV AX , SI ; ELSE AX = NUMBER1 * BITWEIGHT SHL AX , CL ; CL = # BIT THAT IS 1 ADD DX , AX ; UPDATE SUM IS DX BTC BX , CX ; COMPLEMENT THE BIT FOUND BY BSF JMP REPEAT 1 ; SKIP1 : MOV AX , DX JNZ REPEAT1 ROL BL , 1 ; TEST THE RIGHTMOST BIT OF AL SHL AX , 0 JNC SKIP2 ADD DX , SI ; ELSE ADD NUMBER 1
75
:پردازش رشته – 11-1
String Processing FIXED - LENGTH VARIABL- LENGTH
FIXED - LENGTTH در string هاي با طول ثابت ، اگر طولstring كمتر باشد ، بقيه كاركتر هايstring باblank پر
ناقص ذخيره مي شود . stringباشد ، stringبزرگتر از سايز stringمي شود و اگر طول
: معايب اين روش
برنامه نويس بايد سايزstring . را پيش بيني كند
فضاي حافظه هدر مي رود . در صورتي كه طولstring ها كمتر ازfixed-length . باشد
VARIABLE - LENGTH
وش كه دو عيب روش قبلي در آن برطرف مي شود ، براي هر در اين رstring بايد مقدارlength attribute اي را نشان مي دهد ، نگه داري مي شود . stringكه سايز آن
مقدارlength attribute روش قابل 2باassign است : شدن
ذخيره كردن صريحlength attribute
استفاده ازsentinel character ( نگهبان )
روش اول ) ذخيره كردن صريحlength attribute
STRING DB ‘ERROR MESSAGE’ STR_LEN DW $ - STRING اسمبل)زمان (درطول رشته را بر مي گرداند
روش دوم ) استفاده ازsentinel character
اري نمي شود بلكه هر در اين روش طول جايي نگهدstring با يك كاركتر غير قابل نمايش است خاتمه مي يابد .
است 00H كه كد اسكي آن NULLمثال
STRING1 DB ‘THIS IS OK’, 0 STRING2 DB ‘PRICE = $ 9.99’, 0
در مابقي اين فصل از از اين روش استفاده مي شود
mem (
شود . تكرار
پذير
mory to memo
ر داشته باشد. تا اضافه مي شيژگي قدرت تشته اي امكان
REP
REPE/
STRIN (
ory( به حافظه
DEDE
DS ياES قرارت 4، دوتا و يا
باشد . اين و دستورات رشت
W E
/REPZ
W E
NG INSTRUCه دو رشته ، ...
مليات حافظه باز مقادير صحيح .
DS : ESI تيES : EDI تيDS : SI بيتيES : DI بيتي
يكسان مانند index ، يكي ،
double wor
به prefixك
WHILE [ ECEXECUTECX = E
END WHILE
WHILE [ ECEXECUTECX = EIF ( ZF END IF
END WHILE
CTIONS رشته ، مقايسه
توان براي عمال كپي يك آرايه ا
بيت 32ند مبداءبيت 32 مقصدند
16لوند مبداء 16 مقصدوند
ر يك سگمنتxجيستر هاي
word و ياrd
ضافه شدن يك
CX ≠ 0 ] TE the strinECX – 1
CX ≠ 0 ] TE the strinECX – 1 = 0 ) THEEXIT LOOP
76
د دارد . ( كپي
ستورات را ميستفاده قرار داد . مثال
عملو عملوند
عمل عملو
بداء و مقصد درst به مقادير رج
d روي بايت ،
ي دهد كه با ا
ng instructio
ng instructio
EN ;
وجو stringبا
ست كه اين دسز رشته نيز مورد اس
رشته اي
ر دو عملوند مبtringر دستور
عمليات رشتهي را به ما مي
on;
on;
دستور مرتبط ب
كته مهم اين اسي داده هاي غير از
ها در عمليات ر
ته مي توان هرد از اجراي هرسته به اينكه عمليات رشته اي
ي شود .
5
نكبراي
عملوند ه
البت بعد
بسعممي
77
REPNE/REPNZ
WHILE [ ECX ≠ 0 ] EXECUTE the string instruction; ECX = ECX – 1 IF ( ZF = 1 ) THEN EXIT LOOP; END IF END WHILE
Direction Flags DF = 0 Forward Direction DF = 1 Backward Direction STD ; Set Direction Flag CLD ; Clear Direction Flag
جهت عمليات رشته اي به مقدارDirection flag ه خاطر داشته باشيد كه يكي از بستگي دارد . ب بوده است . direction flagهمان flag بيت هاي
String Move Instructions
MOVSB DESTINATION , SOURCE ; move a string ( byte ) MOVSW DESTINATION , SOURCE ; move a string ( word ) MOVSD DESTINATION , SOURCE ; move a string ( double word )
بعد از هرmov مقدار DS : ESI ،ES : EDI واحد اضافه مي شود . 4و يا 2، 1به اندازه
روي هيچflag . اي تاثير ندارد
41ثال م :
.DATA STRING 1 DB ‘the original size ‘ , 0 STRLEN EQU $ - STRING 1 .UDATA STRING2 RESB 80 .CODE
.STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , STRLEN ; MOV ESI . STRING1 ; MOV EDI , STRING2 ; CLD ; forward direction REP MOVSB
78
String Load Instructions
LODSB SOURCE ; copy a string ( byte ) LODSW SOURCE ; copy a string ( word ) LODSD SOURCE ; copy a string ( double word )
مقدارstring كه با )DS : ESI اشاره مي كند ) بهAL ،AX و ياEAX . كپي مي شود
اين دستور باrep . مورد استفاده قرار نمي گيرد
اين دستور به همراه دستور بعدي وقتي استفاده مي شود كه در هنگام كپي كردنstring نياز به پردازش وجود داشته باشد .
String Store Instructions STOSB DESTINATION ; store a string ( byte ) STOSW DESTINATION ; store a string ( word ) STOSD DESTINATION ; store a string ( double word )
مقدارAL ،AX و ياEAX را بهES : EDI . در حافظه كپي مي كند
اين دستور به همراه پيشوندrep لوك از حافظه را ، يك كاركتر خاص مقدار دهي اوليه مي نمايد . ، يك ب
1مقدار دهي اوليه يك بلوك حافظه با : 42ثال م-
.UDATA ARRAY1 RESW 100 .CODE
.STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , 100 ; MOV EDI . ARRAY1 ; MOV AX , -1 ; CLD ; forward direction REP STOSW
تبديل رشته با حروف بزرگ به حروف كوچك : 43ثال م
MOV ECX , STRLEN MOV ESI , STRING1 ; MOV EDI , STRING2 ; CLD ; forward direction LOOP 1 : LODSB OR AL , 20H STOSB LOOP LOOP1
79
String Compare Instruction
COMPSB DESTINATION , SOURCE ; compare 2 string byte by byte اثرcompsb رويflag ها همانند اثرcmp رويflag . است
مي توان ازja ،jg ،jc . و ... براي مقايسه دو رشته استفاده نمود
44ثال م :
.DATA STRING 1 DB ‘ abcdfghi ‘ , 0 STRLEN EQU $ - STRING 1 STRING 2 DB ‘ abcdefgh’ , 0 .CODE
.STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , STRLEN MOV ESI . STRING1 MOV EDI , STRING2 CLD ; forward direction
REPE CMPSB ; بودن مواجه مي شودبا نا مساوي مقايسه را تا زماني ادامه مي دهد كه مقايسه
JA STR1_ABOVE ; STRING1در ’g‘به ESIدر پايان اجراي اين دستور
;اشاره مي كند STRING2در ’F‘به EDIو
براي مقايسه دو رشته استفاده نمود ( حلقه ) . تا زماني كه دو رشته تفاوت دارند ادامه مي يابد ، در غير اين صورت REPNEيا REPNZمي توان از ( كه دو كاركتر يكسان مشاهده مي شود ) حلقه خاتمه مي يابد .
.DATA STRING 1 DB ‘ abcdfghi ‘ , 0 STRLEN EQU $ - STRING 1 STRING 2 DB ‘ abcdefgh’ , 0 .CODE
.STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , STRLEN MOV ESI . STRING1 + STRLEN -1 MOV EDI , STRING2+ STRLEN -1 STD ; backward direction
REPNE CMPSB INC ESI INC EDI
80
String Scanning Instruction
SCASB DESTINATION ; scanning a string ( byte ) SCASW DESTINATION ; scanning a string ( word ) SCASD DESTINATION ; scanning a string ( double word )
براي جستجوي يك مقدار يا يك كاركتر درstring . مورد استفاده قرار مي گيرد مقدار بايد درAL ،AX و ياEAX . قرار داشته باشد ES : EDI به آدرسstring . اي اشاره مي كند كه بايد جستجو شود دستور روي تاثير اينflag ها همانند دستورcmp . است همراه اين دستور نيز معموال ازrepe / repz و ياrepnz / repne . استفاده مي شود
SCASB – Scan a byte string compare AL TO the byte at ES : EDI and set flags IF ( DF = 0 ) ; forward direction THEN EDI := EDI + 1 ELSE ; backward direction EDI := EDI – 1 END IF
45ثال م : .DATA STRING 1 DB ‘ abcdefgh ‘ , 0 STRLEN EQU $ - STRING 1
.CODE .STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , STRLEN MOV EDI , STRING1 MOV AL , ‘e’
CLD ; forward direction REPNE SCANB DEC EDI
اين مثال فضاي هاي خالي : 46ثال مblanks مقدار را در نظر نمي گيرد ) .EDI نهايي به اولين كاراكتر غير ازblank اشاره
مي كند . .DATA STRING 1 DB ‘ abc ‘ , 0 STRLEN EQU $ - STRING 1
.CODE .STARTUP MOV AX , DS ; SETUP ES MOV ES , AX MOV ECX , STRLEN MOV EDI , STRING1 MOV AL , ‘ ’ CLD ; forward direction
REPE SCANB DEC EDI
81
در اين مثال : 47 ثالمprocedure ، آدرس رشته اي را به عنوان پارامتر از پشته در يافت مي كند . اگر رشته وجود نداشته باشد
مي شود . در اين مثال CF ،clearقرار داده مي شود و مقدار EAXمي شود و در غير اين صورت طول رشته در CF ،setمقدار همه رجيستر ها حفظ مي شوند .
ابتدا قبل از مثال به اين نكته توجه كنيد .
ذخيره شود . ES : EDIيا DS : ESIزير در يكي ldsو lesآدرس رشته مي تواند توسط دستورات
LES & LDS Instructions
LDS REGISTER , SOURCE LES REGISTER , SOURCE
بيتي اين دستورات روند زير را طي مي كنند : 48بيت باشد و عملوند 32هر گاه رجيستر ما
LDS o REGISTER := (SOURCE) o DS := ( SOURCE + 4 )
LES o REGISTER := (SOURCE) o ES := ( SOURCE + 4 )
اين دستورات تاثيري بر رويflag . ها ندارند
معموال دستورLDS برايload رشته در رجيستر كردنESI به عنوان مبداء وLES برايload كردن شوند .به عنوان مقصد استفاده مي EDIرشته در رجيستر
دستوراتLSS ،LGS وLFS نيز برايload كردن بر روي رجيستر ، سگمنت هاي ديگر درنظر گرفته شده اند .
.DATA STR_MAX EQU 128 %DEFINE STRING 1 [ EBP + 8 ] %DEFINE STRING 2 [ EBP + 16 ]
.CODE STR_LEN : ENTER ( 0 , 0 ) PUSH ECX PUSH EDI PUSH ES LES EDI , STRING 1 ; copy string1 pointer to ES : EDI ‘ use EDI because SCASB need destination operand MOV ECX , STR_MAX ; need to terminate loop if EDI is not pointing to a string CLD ; forward direction MOV AL , 0 ; NULL character REPNE SCASB JCXZ SL_NO_STRING ; if ECX = 0 , not a string DEC EDI ; back up to point to NULL MOV EAX , EDI SUB EAX . [ EBP + 8 ] ; string length in EAX CLS ; no error CF = 0 JMP SHORT SL_DONE
82
SL_NO_STRING : STC ; error CF = 1 no string SL_DONE : POP ES POP EDI POP ECX LEAVE RET 8 (WHY WE USE IT 8 ? because the start of STRING1 IS [EBP + 8 ] so 8 byte is full )
هاي BCD يمال
ارقام منفي
ه اگر خواهد
اما در كاربردDقام را در مد
ASC و يا دسي
ار نشان دادنو به ازاي م 00
hآن است كهunpac يكي خو
مالحظه نيستيما پردازش ارق
II ت را در مد
A U P
ASCII داده مي شود .
12
UNPA د .
12راي عالمت دا
0Hبودن عدد
igh_orderم
ck BCDايش
ي ببريد )
Packe
12
العكس قابل ممستقيماييم و
ستقيما محاسبات
ASCII UNPACKED PACKED BCD
Representaك بايت نمايش234 31
ACKED BCD ذخيره مي شود234 01ته مي شود . بره ازاي مثبت ب
u در چهار رقمش ) دهيم با نما اين موضوع پي
ed BCD Rep شود .
234 12
به باينري و باواگذار مي نم ر
ديگري كه مس شماره است .
BCD D
ation a آن و در يك
1H 32H 33H
Representaل در يك بايت
1H 02H 03Hت در نظر گرفته مي شود كه به
unpacked BC
mask پوشش )كنيد تا بهيسه
resentationت ذخيره مي ش2H 34H
83
ASCII :
ASCIIيل از د
سربار پروسسور. دليل دهيم
ر ارقام در يك
م
asciiت معادل
H 34H
ation هر رقم دسيمالH 04H رت بي عالمتدر نظر گرفتهخود مي گيرد.
ascii و ياCD
high_or راk
را با هم مقاي 1
n مال در يك بايت
و BCDوش
، سربار دو تبدسرا به تبديل
AS انجام ميدود بودن مقدار
مايش ارقام
هر رقم به صورت
عادل باينري ه
ط ارقام به صو براي عالمت د
را به خ 80Hرiقم به صورت
derچهار رقم
234ش متفاوت
هر دو رقم دسيم
ارقام با دو ر
برد هاي سادهسربار تر اين
SCIIو يا مال )
مي دهيم نامحد
وش هاي نم
، ه روش اين
ن روش ، مع اي
اين بحث فقطك بايت مجزا
دن عدد ، مقداراوت نمايش رق
چ ascii روشنمايش 2( د .
ه اين روش ،
نمايش ا –
در كاربپيچيده( ديسمانجام م
انواع ر
در
در
دريكبود
تفادرشد
در
12-1 –
84
: ASCII پردازش ارقام در روش ارائه – 12-2
Processing in ASCII Representation
AAA ( ASCII adjust after addition ) AAS ( ASCII adjust after subtraction ) AAM ( ASCII adjust after multiplication ) AAD ( ASCII adjust before division )
ASCII Addition AAA ( ASCII adjust after addition )
قرار دارد. ( به صورت اسكي ) ALبدون عملوند مي باشد و فرض مي كند كه عملوند در AAA) دستور 1 به صورت زير است : AAA) نحوه عملكرد 2
اضافه كن. AHرا به 1و مقدار ALرا به 6باشد ، مقدار 1برابر AFباشد و يا مقدار 9بزرگتر از AL) اگر چهار بيت كم ارزش 2-1 خواهد شد . صفر AL بيت پر ارزش 4) در همه حالت ها 2-2
را با AXدر بيايد ، بايد ASCIIاست و اگر بخواهيد به صورت UNPACKED BCDبه صورت AXدر AAS) خروجي دستور 3 3030H ،OR .نماييد
49ثال م : ASCII
4 34 H + 5 35 H
9 69 H 4 بيت پر ارزش صفر مي شود 09 H 50ثال م : IIASC
9 39 H + 5 35 H
14 6E H AH = 00H AL = 6EH AAA AH + 1 , AL + 6 AH = 01 AL = 04 OR AX,3030H 3134H
ASCII Subtraction AAS ( ASCII adjust after subtraction )
قرار دارد. ( به صورت اسكي ) ALبدون عملوند مي باشد و فرض مي كند كه عملوند در AAS) دستور 1 به صورت زير است : AAS) نحوه عملكرد 2
كن. كم AHرا از 1و مقدار ALرا از 6باشد ، مقدار 1برابر AFباشد و يا مقدار 9بزرگتر از AL) اگر چهار بيت كم ارزش 2-1 2-2 (CF وAF راset . مي كند خواهد شد . صفر AL بيت پر ارزش 4) در همه حالت ها 2-3
را با AXدر بيايد ، بايد ASCIIاست و اگر بخواهيد به صورت UNPACKED BCDبه صورت AXدر AAA) خروجي دستور 3 3030H ،OR .نماييد
51ثال م :
9 39 H SUB AH , AH ; CLEAR AH - 3 33 H MOV AL , ‘9’ ; AL = 39 H
6 06 H SUB AL , ‘3’ ; AL = 39H – 33H =06H AAS ; AX = 0006 OR AL , 30H ; AL = 36H
85
52ثال م :
3 39 H SUB AH , AH ; CLEAR AH - 9 33 H MOV AL , ‘3’ ; AL = 33 H
4 06 H SUB AL , ‘9’ ; AL = 33H – 39H =FAH AAS ; AX = FF04H OR AL , 30H ; AL = 34H
مقدار درAL قرار مي گيرد وset شدنCF نشان دهنده رخدادborrow . است
ASCII Multiplication AAM ( ASCII adjust after multiplication )
. ASCIIاست و نه UNPACKED BCDبر خالف جمع و تفريق ، ورودي در اين دستور از نوع ) 1 يرد.قرار مي گ ALو باقيمانده در AHدسيمال تقسيم مي شود . خارج قسمت در 10بر ALمقدار ) 2 را با AXدر بيايد ، بايد ASCIIاست و اگر بخواهيد به صورت UNPACKED BCDبه صورت AXدر AAA) خروجي دستور 3
3030H ،OR .نماييد 53ثال م :
3 39 H MOV AL , 3 ; multiplier in unpacked BCD × 9 33 H MOV BL , 9 ; multiplicand in unpacked BCD
27 06 H MUL BL ; result 001BH in AX AAM ; AX = 0207H OR AX , 3030H ; AX = 3237H
بيت پرارزش آن را 4اگر دو مقدار ورودي در كد اسكي باشند ، بايد : 54ثال مmask . كنيم
MOV AL , ‘3’ ; multiplier in unpacked ASCII MOV BL , ‘9’ ; multiplicand in unpacked ASCII AND AL , 0FH ; multiplier in unpacked BCD AND BL , 0FH ; multiplicand in unpacked BCD
MUL BL ; result 001BH in AX AAM ; AX = 0207H OR AX , 3030H ; AX = 3237H
ASCII Division AAD ( ASCII adjust before division )
. ASCIIاست و نه UNPACKED BCD) بر خالف جمع و تفريق ، ورودي در اين دستور از نوع 1 مي كند . AX ،adjustدر رجيستر مقدار صورت كسر را قبل از عمل تقسيم) 2 را صفر مي نمايد . AHاضافه مي كند و همچنين مقدار ALضرب مي كند و آن را به 10را در AHمقدار ) 3
قرار مي گيرد . AHو مقدار باقيمانده در AL) بعد از عمل تقسيم مقدار خارج قسمت در 4 AX = 0207H AH = 02H ×10D AH = 20D AL = 07H +AH AL = 27D = 1BH AH = 00H AX = 001BH
MOV AX , 0207H ; dividend in unpacked ASCII MOV BL , 05H ; divisor in unpacked ASCII
AAD ; AX = 001BH DIV BL ; AX = 0205H AL = 02 (reminder) AX = 05 (quotient)
86
جمع دو عدد دسيمال چند رقمي در روشASCII
. در اين روش در هر زمان يك رقم جمع مي شود كه از رقم سمت راست شروع مي شود مقدارCarry ر مي گيرد .در هر جمع ، در جمع بعدي مورد استفاده قرا
.DATA NUMBER1 DB ‘1234567890’ NUMBER2 DB ‘1098765432’ .CODE .STARTUP ; ESI is used as index into NUMBER1 , NUMBER2 , SUM MOV ESI , 9 ; ESI به رقم سمت راست اشاره مي كند MOV ECX , 10 ; تعداد رقم ها CLC ; clear carry ( we use ADC not ADD ) ADD_LOOP : MOV AL , [ NUMBER1 + ESI ] ADC AL , [ NUMBER1 + ESI ] AAA PUSH F ; save flags because or instruction changes CF that we need in the next iteration OR AL , 30H POPF MOV [ SUM + ESI ] , AL DEC ESI LOOP ADD_LOOP ; print sum .EXIT
: PACKED BCDپردازش ارقام در روش ارائه – 12-3
Processing in PACKED BCD Representation
DAA ( Decimal Adjust After Addition ) DAS ( Decimal Adjust After Subtraction )
ضرب و تقسيم در اين مد وجود ندارد . براي انجام اين عمليات ارقام را به مدUNPACKED BCD ببريد ، عمليات ضرب و تقسيم را انجام دهيد و برگردانيد . PACKED BCDسپس به مد
BCD Addition
DAA ( Decimal Adjust After Addition )
مي كند . setرا AFاضافه مي كند و ALرا به 6باشد ، مقدار 1برابر AFبزرگتر باشد و يا مقدار 9از ALرقم كم ارزش در 4اگر ) 1 را CFاضافه مي كند و سپس ALرا به 60Hباشد ، مقدار 1 برابر با CFباشد و يا مقدار 9بزرگتر از ALاگر چهار بيت پر ارزش ) 2
SET . مي كند MOV AL , 71H
ADD AL , 43H ; AL = B4H DAA ; ADD AL , 60 AL = 14H & CF = 1
87
BCD Subtraction DAS ( Decimal Adjust After Subtraction )
مي كند . setرا AFمي كند و كم AL ازرا 6باشد ، مقدار 1برابر AFبزرگتر باشد و يا مقدار 9از ALرقم كم ارزش در 4 ) اگر 1 را CFمي كند و سپس كم AL ازرا 60Hباشد ، مقدار 1برابر با CFباشد و يا مقدار 9بزرگتر از AL) اگر چهار بيت پر ارزش 2
SET . مي كند MOV AL , 71H
SUB AL , 43H ; AL = 2EH DAS ; SUB AL , 06 AL = 28H & AF = 1
%DEFINE SUM_LENGTH 10 .DATA NUMBER1 DB 12H , 32H , 56H , 78H , 90H NUMBER2 DB 10H , 98H , 76H , 54H , 32H .UDATA BCDSUM RESB 5 .CODE MOV ESI , 4 ; MOV ECX , 5 ; loop iteration count CLC ; clear carry ( we use ADC not ADD ) ADD_LOOP : MOV AL , [ NUMBER1 + ESI ] ADC AL , [ NUMBER1 + ESI ] DAA ; ASCII Adjust MOV [ BCDSUM + ESI ] , AL DEC ESI LOOP ADD_LOOP CALL ASCII_CONVERT ASCII_CONVERT: PUSHAD ; save registers ; ESI is used as index into ASCIISUM MOV ESI , SUM_LENGTH-1 ; EDI is used as index into BCDSUM MOV EDI , 4 MOV ECX , 5 CNV_LOOP: MOV AL , [ BCDSUM+EDI ] ; AL = BCD digit MOV AH , AL ; convert right digit to ASCII & store in ASCIISUM ADD AL , 0FH OR AL , 30H MOV [ ASCIISUM + ESI ] , AL DEC ESI MOV AL , AH ; convert left digit to ASCII & store in ASCIISUM SHR AL , 4 OR AL , 30H MOV [ASCIISUM+ESI] , AL DEC ESI DEC EDI LOOP CNV_LOOP POPAD
ينري
88
ASC و يا باي IIت در حالت سه محاسبات
مقايس
.
جلب براي
د در يستم
.شود
صدا زدن است.
ه پروسسور را جه پروسسور را ب
نوشته مي شوال بخشي از سي
د حافظه مي ش
J
P
I
C افزاري قابل ص
I;
ت افزاري توجهInterru توجه
كردن برنامه ن
ISR ( معموال
ه مي شود وارد .ه مي شود
Softw
S U
ت اجرا
JUMP ( گشتPROCEDURE
NTERRUPT
CALL صورت سخت
NT صفحه كليد
Interrup سختuptد با ايجاد
پردازش شود. جهت بخشInterrupt S
Pr خواندوقتيP با نام صدا زده
ware Interru
SYESTEM-DUSER-DEFIN
ي برنامه جهت ( غير قابل برگE ( بل برگشتT ( ابل برگشت
مي شود
PROCNAMEفزاري و هم بهINTNUMBEمانند خواندن از
ptيق ايجاد طر
، صفحه كليددفشار داده شده برنامه نويس
Service Rou
rocedureكه
Procedureه
upts ق برنامهDIFINED NED
89
Protecte :
دستور بعدي
( قاب ( قا
Pr
زاري صدا زدهE صورت نرم افزER ت نرم افزاري م پروسسور از طفشرده مي شودي كند تا كليد فست كه توسط
Inte ،tine )
ست ، در حالي كد ، در حالي كه
و خروجي از طريق
ed Mode Int
غيير آدرس د
rocedureو
صورت نرم افز
Interru هم به
به صورت زدنزار هاي غير ازوقتي كليدي فمرتبط جلب مي
كاري اس عموالerruptوط به
ه مقيم اسهموارصدا زده مي شود
سي به ورودي و
terrupt Proc
وش هاي تغ
Interruptسه
Procedur به
upt حالي كه
صدا
ال ) سخت افزي كنند. مثال و
م ISRراي كدProcedur مع
لي كه كد مربو مل است .
IS در حافظه هIS با شماره صد
براي دسترس
– cessing
انواع ر
مقايس re
در
مثامياجر
re
حاعا
SR
SR
13-1
90
Hardware Interrupts براي دسترسي سخت افزار به پروسسور
Maskable بعد از اجرا ، بعد از اجراي دستور خطي پروسسور
Nonmaskable ( Memory Panty Error ) اجراي بدون تاخير
Exceptions Fault
Divide to zero Segment not present بعد از اجرا ، پروسسور به وضعيت قبل از اجراي دستور باز مي گردد
Trap Overflow USER-DEFINED Interrupts از اجراي دستور باز مي گردد بعدبعد از اجرا ، پروسسور به وضعيت
Abort Severe Errors خطا هاي سخت افزاري
پردازش نحوهInterrupt
256 نوعInterrupt وجود دارد . هرInterrupt با يك عددكهInterrupt vector ، ناميده مي شود شناخته مي شود .
هرInterrupt vector به بخشي مشخص از حافظه نگاشته مي شود كهISR .آن در آن مكان قرار دارد
وقتيInterrupt . اي رخ مي دهد ، عمليات زير اتفاق مي افتد
ده .قرار ب stackرا در flagرجيستر .1
2. IF ( Interrupt Flag ) ،TF ( Trap Flag ) راclear كن تاInterrupt هاي بعدي غير فعال شود .
3.CS وIP را درstack قرار بده.
مقدار دهي مي شود . ( سگمنت مربوط به وقفه ها ) ISRبا مكان حافظه CSمقدار .4
مربوط باردهي شود . ISRبا مكان اجراي IPمقدار .5
كن . popرا Flag Registerو سپس CSو سپس IPابتدا ISRبعد از اجراي .6
ر هر
س هاي وقفه در
Softw
D
Bضي از سرويس
ند .
ware Interru
DOS Service
BIOS Servicي نيستند . بعض
استفاده مي كن
upts
es 21H
ces 16H تقل و انحصاري
BIOSي وقفه
91
re :
اصلي I/Oي( 80 Differ
BIO لزوما مست
از سرويس هاي
eal Mode Int
به دستگاه هايrent Service
OSو DOSقفه
ا DOSدر واقع
terrupt Proc
دف : دسترسيes )
رويس هاي وقند . دو وجود دار
– cessing
هد
سردو
14-1
92
سرويس هايKeyboard مربوط بهDOS
INT 21H
FUNCTION 01H – KEYBOARD Input with echo Input : AH = 01H Returns: AL = ACSII code of the key
.خواندن كاركتر از بافر صفحه كليد . اگر بافر خالي باشد ، منتظر مي ماند تا كاركتري وارد شودباشد CTRL+BREAKي شود . اگر كاركتر كاركتر وارد شده در صفحه نمايش نشان داده م
INT 23 اجرا مي شود كه برنامه راabort . مي كند
FUNCTION 06H – Direct Console I/O Two sub functions :
Keyboard input Input : AH = 06H
DL = FFH Returns: ZF = 0 if a character is available AND AL = character
ZF = 1 if no character is available منتظر كاركتر نمي ماند
Character Display Input : AH = 06H
DL = Character to be displayed Returns: Nothing
FUNCTION 07H – KEYBOARD Input without echo or CTRL+BREAK Input : AH = 07H Returns: AL = ACSII code of the key
FUNCTION 08H – KEYBOARD Input without echo Input : AH = 08H Returns: AL = ACSII code of the key
و يا بافر به انداززه
F
En وارد شود و
F
F
.
FUNCTION
Input
Retu
nter كه كليد
FUNCTION Input Retu
ك مي شود .
FUNCTION Input
Retu
نجام مي شود
0AH – Bufft : AH DS
شد ) urns: دهد
شوند تا زماني
0BH – Chect : AH urns: AL AL =
CTRL + B چك
0CH – Cleat : AH AL =
urns: Depا ALنين عمل
93
fer Keyboar= 0AH : DX = Poin
ل سايز بافر باشدرودي قرار مي
هم خوانده مي ن پر شود .
ck Keyboard= 0BH = 00H – if = FFH – if
BREAKرودي
ar Keyboard= 0CH = 01H , 06Hpend on AL ي شود ، همچن
rd Input
nter to the i بافر بايد شاملده را در بافر ور
ها پشت سر همتر از طول آن
d Buffer
the keyboathe keyboar
function و ،
d Buffer
H , 07H , 0contents
پاك مي ALت
input buffer ( اولين بايتشته خوانده شد
كاركتريكي كم
ard buffer isrd buffer is
در اين
08H , 0AH
محتويات
r
رش
s empty. s not empty..
00
ي
0Hيرد ، معادل
معادل كد اسكلي
R
IF E E
Exten
بافر قرار مي گي
قرار مي گيرد م
Read the ne
F ( AL ≠ 0 AL =
ELSE { EXT Rea AL =
ENDIF
ded Keyboa
Func Curs Home
ن بايتي كه در ب
ي كه در بافر ق
xt Characte ده شود .
) THEN = ASCII CODTENDED KEd the scan = SCANCOD
ard Keys
ction Keys sor Arrows e , End , …
د
ex نباشد ، اولي ست .
شد ، اولين بايتي .
er code intoيد بايد صدا زد
DE Y } code of the
DE ( Extend
94
…
يد وارد مي شوxtended نوع
SCANCOD اسباش ASCII نوعSC كليد است
AL using fufun خواندن كلي
e extended kded Key Cha
ندارند
ي رو صفحه كلييد وارد شده ازDE دوم معادل
يد وارد شده ازCANCODEوم
DOSكليد در
unction 08Hnctionدو بار
key into ALaracter )
عادل كد اسكي
ماني كه كليدياگر كليد.1
و بايتاگر كليد.2
بايت دووسه خواندن ك
H
extendedيد
L using 07H
مع
زم
پرو
ي خواندن كلي
Function
برا
وارد مقدار
EX بودن كليدو م AL=0دار
I
F
XTENDEDت با N باشد ، مقد
F
F
NT 16H
FUNCTION Input Retu
.
ت ، ممكن استULLارد شده
FUNCTION Input Retu
FUNCTION Input Retu
00H – Reat : AH urns: if A AL = AH if A AH ن كليد مي ماند
است NULLيل اگر كليد وا
01H – Chect : AH urns: ZF ZF Ret Doe
02H – Chet : AH urns: AL =
95
BIOSط به
d a charact= 00H
AL ≠ 0 then = ASCII COD= SCANCODAL = 0 then= SCANCODنتظر وارد شدن
معادل كد اسكيراي رفع مشكل
شود .
ck Keyboard= 01H = 1 ; if the= 0 ; if theurns ASCII
es not remov
ck Keyboard= 02H = Status of
Keybo مربوط
ter from Key
DE of the kDE of the kn DE of the eر خالي باشد من
ل
م 00Hيي كهشتباه شود ، بر
A قرار داده مي
d Buffer
e keyboard bere is at leain AL and Sve them fro
d Status
f Shift and t
oardس هاي
yboard
key entered ey entered
xtended key اگر بافر مشكل
از آنجايشده اشAH=3
buffer is emst one char
SCANCODE om Keyboard
toggle Keys
سرويس
y entered
mpty racter availain AH d buffer
s
able
96
سرويس هايMonitor مربوط بهDOS
INT 21H
FUNCTION 02H – Display a character on the screen Input : AH = 02H
DL = ASCII code of the character to be displayed Returns: Nothing
كاركتر هاي خاص مانندbackspace معادل (08H) Carriage Return معادل (0DH)
Line Feed معادل(0AH) . و ... پردازش مي شوند CTRL+BREAK . پس از نمايش كاركتر اجرا خواهد شد
FUNCTION 06H – Direct Console I/O . قبال بحث شده است
FUNCTION 09H – Display a string of characters
Input : AH = 09H DS : DX = pointer to a character string to be displayed the string must be terminated by $
Returns: Nothing
Direct Control of I/O Devices
3 روش دسترسي بهI/O devises
DOS ISR BIOS ISR Direct Access
o NO DOS or BIOS support o NON Standard Access
64پنتيوم فضايK خاص براي فضاي آدرسI/O . در نظر گرفته است
I/O Port 8 – BIT بيتي ) 8( انتقال
16 – BIT بيتي ) 16( انتقال ) 2آدرس زوج ( مضربي از بايت 2انتقال همزمان
32 – BIT بيتي ) 32( انتقال 4آدرس زوج ( مضربي از (
97
Accessing I/O Ports
Register I/O Instruction انتقال داده از رجيستر به ورودي و خروجي Block I/O Instruction بلوكي از حافظه به ورودي و خروجي انتقال
Register I/O Instructions
IN ACCUMULATOR , PORT ; Direct Addressing Format ( 0 تا FFH )
IN ACCUMULATOR , DX ; در رجيستر قرار مي گيرد پورت آدرس
ACCUMULATOR = AL , AX OR EAX
OUT PORT , ACCUMULATOR ; Direct Addressing Format ( 0 تا FFH )
OUT DX , ACCUMULATOR ; Indirect Addressing Format ACCUMULATOR = AL , AX OR EAX
BLOCK I/O Instructions INS ; PORT ADDRESS IN DX ; MEMORY ADDRESS IN ES : DI
OUTS ; PORT ADDRESS IN DX ; MEMORY ADDRESS IN DS : SI
INSB ; BYTE TRANSFER OUT SB ;
INSW ; WORD TRANSFER OUT SW ;
INSD ; DOUBLEWORD TRANSFER OUT SD ;
فصل مربوط بهSTRING . مطالعه شود . مطالب بيشتر در كتاب مطالعه شود
98
بعضي از وقفه هاي از قبل تعريف شدهDEDICATED INTERRUPTS
PurposeInterrupt Type Divide Error0 Single Step1
Nonmaskable Interrupt2 Break Point3
Overflow4
Divide Error ( INT 0 ) را توليد 0از سايز مقصد در نظر گرفته شده باشد ، پروسسور وقفه بزرگتر idivيا divباقيمانده دستور وقتي
مي كند . MOV AX , 50 MOV AX , FFFF SUB CL , CL MOV BL , 2 DIV CL DIV BL ; 65532 / 2 = 32767
SINGLE - STEP ( INT 1 )
براي مشاهده رفتار برنامه با احراي هر دستور است . Debuggingابزار توليد مي كند . خروجي همه 1اجراي هر دستور وقفه باشد ، پروسسور بعد از TF=1وقتي ها نمايش داده مي شود . رجيستر مي شود . TF=0پايان اجراي اين وقفه براي
سترسي نيست . در فصل هاي آينده توضيح داده خواهد شد .به صورت مستقيم قابل د TFمقدار
Break Point ( INT 3 ) ، برنامه كاربر تا اجراي اين دستور ادامه مي يابد و بعد از اين در نقطه اي از برنامه INT 3گذاشتن با
تعدادي از دستورات برنامه را مشاهده نتيجه محاسبات دستور ، اجراي برنامه متوقف مي شود كه كاربر و بعد ادامه مي دهد . مي كند
، براي اجراي يك به يك 1براي آزمايش يا تست برنامه هاي اسمبلي ، مي توان از وقفه شماره :نكته مي توان براي اجراي تعدادي دستور و بررسي نتايج بهره برد . 3و از وقفه شماره دستورات و ديدن نتايج
Overflow ( INT 4 )
سرويس اين overflowداد در برنامه قرار داده شود ، در صورت رخ INTOدستور ايجاد وقفه سرريز گر ا اجرا نشده و دستور بعدي برنامه اجرا (INT 4)جرا مي شود ، در غير اين صورت سرويس وقفه وقفه ا
مي شود .
MOV AL , DATA1 MOV BL , DATA2 ADD AL , BL INTO MOV SUM , AL
99