Upload
ali-nafariyeh
View
37
Download
0
Embed Size (px)
DESCRIPTION
اسلاید یادگیری اسمبلی به زبان فارسیبرای اسمبلی 80x86انطباق نسبی با کتاب مزیدی
Citation preview
ساختمان وزبان ماشين
يادآوری
مبنای دو ، هشت ، شانزده ، ده•
عمليات جمع وتفريق درمبنای دو ، هشت وشانزده•
(2و متمم 1متمم -عالمت مقدار) شيوه نمايش اعداد صحيح منفی •
BCDو EBCDICکداسکی و•
تعريف چنداصطالح
• BIT • NIBBLE • BYTE • WORD • DOUBLEWORD • QUADWORD • KILOBYTE • MEGABYTE • GIGABYTE • TERABYTE
ساختمان کامپيوتر
RAM وسايل
ورودی وسايل
خروجی CPU
وسايل
ورودی
و خروجی
ROM
گذرگاه آدرس
گذرگاه کنترل
گذرگاه داده
Cpuها مقايسه تعدادی از
Pentium Pro
pentium 80486 80386 80286 8086
64G 4G 4G 4G 16M 1M حافظه
فيزيکی
32 32 32 32 16 16 گذرگاه داده
درونی
64 64 32 32 16 16 گذرگاه داده
بيرونی
36 32 32 32 24 20 گذرگاه
آدرس
ساختارپردازنده 8086
FLAGS
ALU
OPERAND
SP
SI
DI
BP
DL DH
CL
BL
AL
CH
BH
AH
IP
DS
SS
ES
CS
توليد آدرس وگذرگاه کنترل
صف دستورالعمل
گذرگاه
انواع ثبات ها
AX,BX,CX,Dx (AH,AL,…)عمومیثبات های •
CS , DS , SS , ESسگمنتثبات های •
SI , DI (شاخص)ثباتهای ايندکس •
IP , BP , SPاشاره گرثباتهای •
FR ثبات پرچم•
ثبات های عمومی
•AX درعمليات ورودی وخروجی ومحاسبات مورداستفاده قرار می
گيرد
•BX ثبات پايه برای توسعه آدرس ودرمحاسبات مورد استفاده قرا ر
می گيرد
•CX ثبات شمارنده حلقه است
•DX دراعمال ضرب وتقسيم اعدادبزرگ ودربعضی ازاعمال
.ورودی خروجی نيزبکارمی رود
AH AL BH BL CH CL
DH DL
AX BX CX
DX
ثبات های سگمنت
16سگمنت بخشی ازحافظه است که آدرس شروع آن بر•
کيلوبايت باشدوچهار نوع 64بخش پذيراست ومی تواند تا
:است
( DS)سگمنت داده ها–
(SS)سگمنت پشته–
( ES)سگمنت اضافی–
( CS)سگمنت کد–
FLAG ثبات پرچم
.بيتی است وبه آن ثبات وضعيت هم گفته می شود16يک ثبات •
CF پرچم نقلی
PF پرچم توازن
AF پرچم نقلی کمکی
ZF پرچم صفر
SF پرچم عالمت
TF پرچم تله
IF پرچم فعال سازوقفه
DF پرچم جهت
OF پرچم سرريز
OF DF IF TF SF ZF AF PF CF
دستورالعمل ها درزبان اسمبلی
بخش تشکيل شود4می تواند از•
[ توضيحات;][ عملوند] دستور[ برچسب]
:مثال
MOV AL,BL
MOV
MOV destination, source
• MOV CL,55H
• MOV AH,DL
• MOV AX,BX
• MOV SI,DI
رانمی توان CSو ESو SSو DSثبات قطعه ها مانند •
مقداردهی کرد” مستقيما
• MOV SS,2345H اشتباه است
برای انجام اين عمل بايستی ازطريق يک ثبات عمل کرد
بشکل زير
MOV AX,2345H
MOV SS,AX
باشد بقيه بيت FFاگر مقدارانتقال يافته به ثبات کوچکتراز •
ها صفرفرض می شود
MOV BX,5H
انتقال اعدادبزرگ به ثبات باعث ايجادخطاخواهد شد•
MOV BL,7F2H
MOV AX,2FE456H
ADD دستور
• ADD destination, source
مثال
Mov AL,25H
MOV BL,34H
ADD AL,BL
مثال
MOV DH,25H
ADD DH,34H
نشان دهيدکه چگونه ثبات پرچم با اجرای دستورات زير : مثال تنظيم می شود
MOV BH,38H
ADD BH,2FH
38 0011 1000
2F 0010 1111
---- --------------
67 0110 0111
CF=0 وPF=0 وAF=1 وzf=0 وSF=0
انواع آدرسها
آدرس فيزيکی•
آدرس تفاوت مکان•
آدرس منطقی•
آدرسهای فيزيکی
بصورت بيست 8086آدرس فيزيکی در يک کامپيوتر •
بايتی بيان می شود
A32FFH
می باشد FFFFFHتا 00000Hآدرس فيزيکی از عدد •
آدرس تفاوت مکان
می باشند راگويندپس اين 64Kآدرسهای که درمحدوده •
می باشد FFFFHتا 0000Hآدرسها درمحدوده
EF32
آدرس منطقی
آدرس منطقی متشکل از آدرس شروع قطعه وآدرس تفاوت •
مکان است مانند مثال زير
2500:95F3
برای محاسبه آدرس فيزيکی ازروی آدرس منطقی بطريق •
:زيرعمل می کنيم
يک صفر درسمت راست اضافه نموده 2500به عدد–
با آدرس تفاوت مکان عدد حاصل را جمع می کنيم–
25000+95F3=2E5F3H
قطعات برنامه
داريم( سگمنت)درزبان اسمبلی سه نوع قطعه •
قطعه کد –
قطعه داده–
قطعه پشته –
قطعه کد
تشکيل می IPو CSآدرس منطقی يک آدرس هميشه از •
.می باشد CS:IPشود وبصورت
:باشد IP=634AHو CS=24F6Hاگر : مثال
آدرس منطقی چيست؟ -الف
آدرس تفاوت مکان چيست؟ -ب
آدرس فيزيکی رامحاسبه کنيد؟ -ج
محدوده پايين سگمنت رامحاسبه کنيد؟ -د
محدوده باالی سگمنت رامحاسبه کنيد؟ -ه
قطعه داده
قرارمی گيرد DSآدرس شروع قطعه داده در •
و DIو BXآدرس تفاوت مکان می تواند در رجيسترهای •
SI نگهداری شود.
:مثال
ADD AL,[BX]
قرارداد مبتنی برکوچکتری
بيتی 16بيتی است لذا اگر يک عدد8چون فرض براين است که خانه های •
رابخواهيم درآن ذخيره کنيم بايت پايين تر درمکان حافظه پايين تروبايت باالتر
.درآدرس حافظه باالتر قرارخواهدگرفت
:مثال
MOV AX,35F3H
MOV [1500],AX
F3
35
DS:1500
DS:1501
فرض کنيد داريم:مثال
DS:6826=48H
DS:6827=22H
چه MOV BX,[6826]دراثراجرای دستور BXمحتوی ثبات
.خواهد شد
STACK پشته چيست؟
برای ذخيره CPUاست که بوسيله RAMبخشی ازحافظه •
.موقت اطالعات بکارمی رود
.استفاده می شود SPو SSبرای دسترسی از دوثبات •
قابل ذخيره spمحتويات هرثبات به غيرازثبات های قطعه و•
.سازی درپشته هستند
عمل درج درپشته
فرض کنيد داريم : مثال
SP:=1236H
AX=24B6
DI=85C2
DX=5F93
.پس ازاجرای دستورات زيرمحتوی پشته را نمايش دهيد
PUSH AX
PUSH DI
PUSH DX
C2
85
B6
24 SS:1236
SS:1235
SS:1234
SS:1233
SS:1232
SS:1231
SS:1230
B6
24
PUSH AX
93
5F
C2
85
B6
24
PUSH DI PUSH DX START
بازيابی ازپشته
.بازيابی عکس عمل درج است•
sp=18FAبافرض اينکه درپشته زير داشته باشيم : مثال
محتوی پشته وثبات ها راپس ازاجرای دستورات زير
مشخص کنيد
POP CX
POP DX
POP BX
91
F6 SS:1900
SS:18FF
SS:18FE
SS:18FD
SS:18FC
SS:18FB
SS:18FA
23
14
6B
2C
91
F6
6B
2C
91
F6
POP CX
SP=18FC CX=1423
POP DX
SP=18FE DX=2C6B
POP BX SP=1900 BX=F691 START
انواع روشهای آدرس دهی
ثباتی•
فوری•
مستقيم•
غيرمستقيم ثباتی•
نسبی پايه•
نسبی انديسی•
نسبی انديس دار پايه•
آدرس دهی ثباتی
دراين نوع آدرس دهی ازثباتها برای نگهداری داده ها ی •
سريع است“ مورددستکاری استفاده می شودبنابراين نسبتا
MOV BX,DX
MOV ES,AX
ADD AL,BH
آدرس دهی فوری
درآدرس دهی فوری عملوند مبدا يک مقدارثابت است •
وچون دراين حالت نيزحافظه مورددسترسی قرارنمی گيرد و DSسريع است وبرای بارکردن اطالعات درثباتها بجز
FLAG بکارمی رود
MOV AX,2550H
MOV CX,635
MOV BL,40H
آدرس دهی مستقيم
دراين روش داده درمکانی ازحافظه است وآدرس داده •
اين آدرس ، آدرس . درحافظه بالفاصله بعدازدستورمی آيد
تفاوت مکان است که برای بدست آوردن آدرس فيزيکی .وجمع با آدرس فوق بدست آورد DSبايستی آنرا باشيفت
MOV DL,[2400]
آدرس فيزيکی مکان حافظه ومحتوی آنراپس ازاجرای : مثال
پيداکنيد DS=1512Hکدهای زيربافرض
MOV AL,99H
MOV [3518],AL
آدرس دهی غيرمستقيم ثباتی
دراين روش آدرس مکان حافظه ای که عملونددرآن است • SIبرای اينکارازثباتهای . بوسيله ثبات نگهداشته می شود
استفاده می شودکه با زاين ثباتها بعنوان تفاوت BXو DIو
هستند DSمکان نسبت به
MOV AL,[BX]
MOV CL,[SI]
MOV [DI],AH
AX=17FEو SI=2498و DS=1120فرض کنيد : مثال
باشد پس ازاجرای دستورزيرمحتوی مکانهای حافظه
چيست
MOV [SI],AX
روش آدرس دهی نسبی پايه
ونيزمقدارجابجايی BPو BXدراين روش ثباتهای پايه •
برای محاسبه آدرس موثربکارمی رود
MOV CX,[BX]+10
آدرس دهی نسبی انديس دار
برای SIو DIمانند روش قبلی است غيرازاينکه ازثباتهای •
.آدرس تفاوت مکان استفاده می شود
MOV DX,[SI]+5
MOV CL,[DI]+20
و BX=2100و SS=2000و DS=4500فرض کنيد : مثال
DI=8500 وBP=7814 وAX=2512 آدرس فيزيکی
درآن ذخيره می شود را برای موارد AXمکانی که
زيرتعيين کنيد
MOV [BX]+20,AX -الف
MOV [SI]+10,AX -ب
MOV [DI]+4,AX -ج
MOV [BP]+12,AX -د
آدرس دهی نسبی انديس دارپايه
ازترکيب دوروش پايه وانديس دار روش جديدی به نام •
.انديس دارپايه بوجود می آيد
MOV CL,[BX][DI]+8
MOV CH,[BX][SI]+20
MOV AH,[BP][DI]+12
(حذف)لغو قطعه
همانطورکه گفته شد آدرس منطقی هرقطعه ازدوبخش تشکيل می • DS:BXيعنی آدرس منطقی بصورت MOV AX,[BX]وقتی می نويسيم “ شود مثال
است حال اگربخواهيد اين قطعه رالغوکنيد يعنی ازآدرس شروع قطعه دررجيسترديگری استفاده MOV AX,ES:[BX]کنيد بطريق زيربايد دستوررابنويسيد
:مثال
MOV AX,CS:[BP]
ثباتهای تغييرمکان نام ثبات
CS IP
DS SI,DI,BX
ES SI,DI,BX
SS SP,BP
خالصه انواع آدرس دهی
قطعه پيش فرض عملوند روش آدرس دهی
ندارد رجيستر ثباتی
ندارد داده فوری
DS [ عددافست] مستقيم
DS [DI],[SI],[BX] غيرمستقيم ثباتی
نسبی پايه[BX]+عدد , [BP]+عدد DS
SS
نسبی انديس دار[DI]+عدد , [SI]+عدد DS
DS
نسبی انديس دار پايه
[BX][SI]+عدد
[BX][DI]+عدد
[BP][SI]+عدد
DS
DS
SS
قطعه يک برنامه
Label SEGMENT [options]
دستورات موردنظر
Label ENDS
STACK _ SEG SEGMENT PARA STACK ‘STACK’
.اندازه پشته مشخص می گردد
STACK _ SEG ENDS DATA _ SEG SEGMENT PARA ‘DATA’
متغیر ها اعالن می شوند
DATA _ SEG ENDS EXTRA _ SEG SEGMENT PARA ‘EXTRA’
متغیرهای مربوط به پردازش رشته ها اعالن می شوند
EXTRA _ SEG ENDS CODE _ SEG SEGMENT PARA ‘CODE’
دستورالعمل های برنامه
CODE _ SEG ENDS
DB شبه دستور
حافظه رابصورت گروههای بااندازه بايت اختصاص می •
.دهد
DATA1 DB 25
DATA2 DB 10001001B
DATA3 DB 12H
DATA4 DB ‘2591’
DATA5 DB ?
DUPشبه دستور
برای کپی کردن تعدادمفروضی کاراکتربکارمی رود•
DATA DB 6DUP(12H)
DATA DB 32DUP(?)
DATA DB 5DUP(2DUP(99))
DW شبه دستور
برای اختصاص دوبايت ازحافظه درهرزمان می باشد•
DATA1 DW 954
DATA2 DW 1001010100B
DATA3 DW 253FH
DATA4 DW 9,2,7,0CH,00100000B,’HI’
DATA5 DW 8DUP(?)
DD شبه دستور
برای اختصاص چهاربايت ازحافظه بکارمی رود•
DATA DD 1023
DATA1 DD 100010010110010111000B
DATA2 DD 5C2A57F2H
DATA3 DD 23H,24789H,65533
DQشبه دستور
برای تخصيص هشت بايت ازحافظه بکارمی رود•
DATA20 DQ 4523C2H
DATA1 DQ ‘HI’
DATA2 DQ ?
EQU
برای تعريف يک ثابت بدون اشغال مکان حافظه بکاربرده •
.می شود
COUNT EQU 25
ORG
برای مشخص کردن شروع آدرس آفست بکاربرده می •
.شود
ORG 0030H
TITLE PROG3 PAGE 60,132 STSEG SEGMENT DB 32 DUP(?) STSEG ENDS DTSEG SEGMENT ORG 10H DATA_IN DB 25H.4FH,85H,1FH,2BH,C4H ORG 28H COPY DB 6 DUP(?) DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX,DTSEG MOV DS,AX MOV SI,OFFSET DATA_IN MOV DI,OFFSET COPY MOV CX,06H MOV_LOOP: MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ MOV_LOOP MOV AH,4CH INT 21H MAIN ENDP CDSEG ENDS END MAIN
STSEG SEGMENT DB 32 DUP(?) STSEG ENDS DTSEG SEGMENT DATA_IN DW 234DH,1DE6H,3BC7H,566AH ORG 10H SUM DW ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX,DTSEG MOV DS,AX MOV CX,04 MOV DI,OFFSET DATA_IN MOV BX,00 ADD_LP: ADD BX,[DI] INC DI INC DI DEC CX JNZ ADD_LP MOV SI,OFFSET SUM MOV [SI],BX MOV AH,4CH INT 21H MAIN ENDP CDSEG ENDS END MAIN
PAGE 60,132 TITLE SAMPLEPROG STSEG SEGMENT DB 32 DUP(?) STSEG ENDS DTSEG SEGMENT DATA_IN DB 25H,12H,15H,1FH,2BH SUM DB ? DTSEG ENDS CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX ,DTSEG MOV DS,AX MOV CX,05 MOV BX,OFFSET DATA_IN MOV AL,0 AGAIN: ADD AL,[BX] INC BX DEC CX JNZ AGAIN MOV SUM,AL MOV AH,4CH INT 21H MAIN: ENDP CDSEG ENDS END MAIN
NEGدستور
مکمل دو آنرا نتيجه می دهد)اين دستور عددی را منفی می کند
MOV AL,100
NEG AL
NOTدستور
مکمل يک )اين دستور تک تک بيت ها رامعکوس می کند
(عدد رامحاسبه می کند
MOV AL,05H
NOT AL
LEAدستور
اين دستور بشکل زير است
LEA destination ,source
قرارمی دهد destinationرا در sourceآدرس
LEA BX,X
ذخيرمی کند ومعادل BXرا دررجيستر Xآدرس متغير
است MOV BX, OFFSET Xدستور
بيتی باشد 16بايستی رجيستر “ حتما destination: نکته
SUB
برای اينکارازروش زير استفاده : تفريق اعداد بدون عالمت• می شود
مفروق رابدست می آورد( متمم دو)مکمل دو–
با مفروق منه جمع می کند–
رقم نقلی را معکوس می کند–
SUB destination, source
Destination=destination-source
ميتوان تشخيص دادعددحاصل مثبت است CFبا کنترل : نکتهباشد CF=1باشدعددحاصل مثبت واگر CF=0يا منفی اگر
آن درمقصد ( متمم دو)عددحاصل منفی بوده ومکمل دو .ذخيره می شود
چه ALتعيين کنيدکه بعدازاجرای دستورات زير دررجيستر :مثال
چه SFو AFو PFو ZFو CFمقداری ذخيره می شود ومقدار
خواهد شد
MOV AL,3FH
MOV BH,23H
SUB AL,BH
:مثال
MOV AL,3FH
MOV BH,23H
SUB BH,AL
SBB
باشد همانند CF=0دراين دستوراگر: تفريق بارقم قرضی•
باشديک واحد CF=1عمل می شود ولی اگر SUBدستور
ازنتيجه کم می شود
باشد BL=4Fو AL=95Hو CF=1اگر داشته باشيم : مثال
نتيجه اجرای دستورزيرچيست؟
SBB AL,BL
:مثال
DATA_A DD 62562FAH
DATA_B DD 412963BH
RESULT DD ?
….
MOV AX,WORD PTR DATA_A
SUB AX,WORD PTR DATA_B
MOVE WORD PTR RESULT,AX
MOV AX,WORD PTR DATA_A+2
SBB AX,WORD PTR DATA_B+2
MOVE WORD PTR RESULT+2,AX
ADC
.اين دستورعمل جمع را بارقم نقلی را انجام می دهد•
ADC AH,BL
:نتيجه عمل عبارت است از
AH=AH+BL+CF
X DD 45ED23AF Y DD 6785FF23 Z DD ? MOV AX ,WORD PTR X ADD AX , WORD PTR Y MOV WORD PTR Z , AX MOV AX ,WORD PTR X + 2 ADC AX , WORD PTR Y + 2 MOV WORD PTR Z + 2 , AX
خروجی قطعه برنامه زیرچیست: مثال…. DTSEG SEGMENT DATA1 DQ 548FB9963CE7H DATA2 DQ 3FCD4FA23B8DH DATA3 DQ ? SEGMENT …….
CLC MOV SI,OFFSET DATA1 MOVE DI,OFFSET DATA2 MOVE BX,OFFSET DATA3 MOV CX,04
BACK: MOV AX,[SI] ADC AX,[DI] MOV [BX],AX INC DI INC DI INC SI INC SI INC BX INC BX
LOOP BACK …….
)MUL )ضرب اعدادبدون عالمت
بايت ضربدربايت•
کلمه ضربدرکلمه•
کلمه ضربدربايت•
ضرب عملوند اول عملوند دوم نتيجه
AX ثبات يا حافظه AL بايت دربايت
DX:AX ثبات يا حافظه AX کلمه درکلمه
DX:AX ثبات يا حافظه AH=0,AL بايت درکلمه
: 1مثال
RESULT DW ?
….
MOV AL,25H
MOV BL,65H
MUL BL
MOV RESULT,AX
: مثال
DATA3 DW 2378H
DATA4 DW 2F79H
RESULT1 DW 2 DUP(?)
….
MOV AX,DATA3
MUL DATA4
MOV RESULT1,AX
MOV RESULT1+2,DX
:مثال
DATA5 DB 6BH
DATA6 DW 12C3H
RESULT3 DW 2 DUP(?)
…….
MOV AL,DATA5
SUB AH,AH
MUL DATA6
MOV BX,OFFSET RESULT3
MOV [BX],AX
MOV [BX]+2,DX
DATA1 DB 25H
DATA2 DB 65H
RESULT DW ?
…..
MOV AL,DATA1
MOV SI,OFFSET DATA2
MUL BYTE PTR [SI]
MOV RESULT,AX
DIV تقسيم اعدادبدون عالمت
بايت تقسيم بربايت•
کلمه تقسيم برکلمه•
کلمه تقسيم بربايت•
کلمه مضاعف تقسيم برکلمه•
باقيمانده
خارج
قسمت تقسيم مقسوم مقسوم عليه
AH AL ثبات يا حافظه AH=0,AX بايت بربايت
DX AX ثبات يا حافظه DX=0,AX=کلمه برکلمه کلمه
AH AL ثبات يا حافظه AX=کلمه بربايت کلمه
DX AX ثبات يا حافظه DX:AX=کلمه مضاعف برکلمه کلمه مضاعف
MOV AL,95
SUB AH,AH
DIV 10
MOV Q,AL
MOV R,AH
AND
اول قرارمی دهد عملگر منطقی می کند ونتيجه رادر ANDدوعملگررا بيت به بيت با هم
MOV BL,35H
AND BL,0FH
.راصفرنموده وبقيه پرچمها را با توجه به نتيجه مقدارمی دهد OFو CFپرچمهای ANDعمل •
برای تست صفربودن محتوی يک رجيسترمی توان استفاده کرد ANDاز •
AND AL,AL
JZ WER
…….
WER: …..
OR
منطقی می کند ونتيجه رادر ORدوعملگررا بيت به بيت با هم • اول قرارمی دهد عملگر
MOV BL,35H
OR BL,0FH
راصفرنموده وبقيه پرچمها را با OFو CFپرچمهای ORعمل •
توجه به نتيجه مقدارمی دهد
برای آزمون صفربودن يک عملوندمی توان استفاده کرد ORاز•
OR BL,0
OR BL,BL يا
XOR
منطقی می کند ونتيجه رادر XORدوعملگررا بيت به بيت با هم • اول قرارمی دهد عملگر
MOV BL,35H XOR BL,0FH
راصفرنموده وبقيه پرچمها را با OFو CFپرچمهای XORعمل • توجه به نتيجه مقدارمی دهد
می توان برای تست مساوی بودن دوثبات استفاده XORازعملگر • کرد
XOR AH,BL می توان بيت های خاصی رادرعملوند معکوس XORبااستفاده از •
کرد
XOR BH,06H
SHR شيفت منطقی به راست اين دستوربه تعداددفعات مشخص شده ثبات رابه سمت راست شيفت می دهد •
منتقل می CFورقمهای با ارزش راباصفرپرمی کندوکم ارزشترين بيت رابه .کند
اگرتعداددفعات شيفت يک است می توان آنرادرعملوند ذکرکرد ولی اگر •
.قرارمی دهيم CLبيشترازيک باشد تعداد دفعات را دررجيستر
: مثال
MOV AL,9AH MOV CL,3 SHR AL,CL
: مثال
MOV BX,FFFFH SHR BX,1
MSB LSB 0 CF
: مثال
DATA1 DW 7777H
TIMES EQU 4
MOV CL,TIMES
SHR DATA1,CL
SHLشيفت منطقی به چپ
است با اين تفاوت که شيفت ازسمت چپ انجام SHRمانند •
ميشود
:مثال
MOV DH,6
MOV CL,4
SHL DH,CL
MSB LSB CF 0
JMPدستور پرش غيرشرطی
این دستور دارای فرم زیر. ال می باشدکاسپدر gotoشبیه JMPدستور •
JMP LABEL
تفاوت ) IPبايتی نسبت به 127تا 128-دستور فوق يک پرش کوتاه درمحدوده
.است(مکان
:مثال
LABEL:….. JMP L1
…….. ………..
…….. ………..
JMP LABEL L1:………..
پرشهای شرطی
و سایر IFپرشهای شرطی به برنامه نویس این امکان را می دهد که ساختارهای • :شکل کلی بصورت زیر می باشد. نماید یجادساختارهای کنترلی را ا
Je ZF = 1
Jz
Jne
ZF = 0
Jnz
Js
SF = 1
Jns
SF = 0
Jc
CF = 1
Jnc
CF = 0
Jp PF = 1
Jpe
Jnp
PF = 0
Jpo
Jo
OF = 1
Jno
OF = 0
دستورالعمل مقايسه
.رددگاستفاده می CMPبرای مقایسه دو مقدار از دستورالعمل
:شکل کلی عبارتند از
CMP OPR1 , OPR2 عمل نموده ولی نتایج در جای ی ذخیره نمی شود بلکه محتوی فلگ ها را SUBدستورالعمل مانند CMPدستورالعمل
.تغییر می دهد
CMP AX , 100
در صورتی که عملوندها بدون عالمت در نظر گرفته شوند از CMPتور سپس از د
: دستورالعملهای پرش شرطی زیر می توان استفاده نمود
فلگها برای پرش معنی نام دستورالعمل
JA پرش در حالت باالتر CF=0,ZF=0
JNBE پرش در حالت پایین یا مساوی
JAE پرش در حالت باالتر یا مساوی CF=0
JNB پرش در حالت پایین تر نبودن
JB پرش در حالت پایین تر CF=1
JNAE پرش در حالت پایین تر یا مساوی نبودن
JBE پرش در حالت پایین تر یا مساوی ZF=1 یاCF=1
JNA پرش در حالت باالتر نبودن
در صورتیکه عملوندها با عالمت در نظر گرفته شوند از دستورالعملهای پرش شرطی زیر CMPپس از دستور
: می توان استفاده نمود
فلگها برای پرش معنی نام دستورالعمل
JG پرش در حالت بزرگ تر SF=OF,ZF=0
JNLE پرش در حالت کوچک تر یا مساوی نبودن
JGE پرش در حالت بزرگ تر یا مساوی SF=OF
JNL پرش در حالت کوچک تر نبودن
JL پرش در حالت کوچک تر SF<>OF
JNGE پرش در حالت بزرگ تر یا مساوی نبودن
JLE 1 پرش در حالت کوچک تر یا مساوی=ZF یاSF<>OF
:مثال
CMP AL,61H
JB NEXT
CMP AL,7AH
JA NEXT
AND AL,DFH
NEXT: MOV [SI],AL
حلقه تکرار
در حلقه تکرار اغلب تعداد دفعاتی که بدنه حلقه بايد اجرا شود از قبل معين قرار داد و CXدر زبان اسمبلی اين تعداد را بايستی در ثبات . می باشد
.می باشد LOOPدستورالعمل تکرار دستورالعمل
:مثال
MOV CX , 10
LABI : .......
..........
. ........
LOOP LAB1 بار هر .گردد اجرا بار تکرار حلقه بدنه که ميشود باعث فوق دستورالعملهای
می کم CX محتوی از واحد يک شود می اجرا LOOP دستورالعمل که .گردد صفر با برابر CX ثبات تعداد که است اين تکرار خاتمه شرط .شود
JCXZدستورالعمل
انجام فلگی روی پرش منتهی .باشد می پرش نوع يک JCXZ ستورالعملد می انجام پرش باشد صفر با برابر CX ثبات تعداد چنانچه بلکه شود نمی .شود
MOV CX , 50
LABI: .......
..............
..............
DEC CX
JCXZ LABEND
JMP LABI
LABEND:
LOOPNZ , LOOPZ دستورالعملهایبوده با این تفاوت که این دو LOOPشبیه دستورالعمل LOOPNZ , LOOPZستورالعملهای د
.در بدنه تکرار استفاده می گردند CMPدستورالعمل بعد از دستورالعمل به LOOPNZو فلگ صفر برابر صفر باشد، دستورالعمل صفر نباشد CXچنانچه مقدار جدید در ثبات •
.می کند پرشتعیین شده دستورالعمل
به دستورالعملی LOOPZصفر باشد و فلگ صفر، یک باشد، دستورالعمل CXجدید در ثبات مقدارچنانچه •
.، پرش می کندمشخص شده که
:مثال
MOV CX , 10
FOR :
.
.
.
CMP BX , 0
LOOPNZ FOR
دستورات چرخش
• ROR
• ROL
• RCR
• RCL
ROR
درچرخش به راست ، با نقل مکان بيت ها ازچپ به راست ،
ازانتهای سمت راست خارج می شوند وازسمت چپ وارد
بعالوه باهرخروج هربيت يک کپی به پرچم . می گردند
نقلی انتقال می يابد
MSB ----------------- LSB CF
: مثال
MOV AL,36H
ROR AL,1
ROR AL,1
:مثال
MOV BX,C7E5H
MOV CL,6
ROR BX,CL
ROL
درچرخش به چپ ، با چرخش راست به چپ ، بيت انتهای
چپ خارج وازسمت راست واردمی شودبعالوه هربيت هم واردمی شود CFخارج شده به
MSB -----------LSB CF
:مثال
MOV BH,72H
ROL BH,1
:مثال
MOV DX,672AH
MOV CL,3
ROL DX,CL
……… DATA1 DB 97H COUNT DB ? ……. SUB BL,BL MOV DL,8 MOV AL,DATA1 AGAIN:ROL AL,1 JNC NEXT INC BL NEXT: DEC DL JNZ AGAIN MOV COUNT,BL
RCR
بانقل مکان درجهت چپ به راست ، بيت ها ازانتهای سمت
راست به پرچم نقلی وازپرچم نقلی واردانتهای چپ می .گردند
MSB------------ LSB CF
:مثال
CLC
MOV AL,26H
RCR AL,1
:مثال
STC
MOV BX,37F1H
MOV CL,5
RCR BX,CL
RCL
بانقل مکان بيت ها به راست، انتهای چپ واردپرچم نقلی ميگردد وپرچم نقلی واردانتهای سمت راست می گردد
MSB --------------- LSB CF
مثال
STC
MOV BL,15H
RCL BL,1
مثال
CLC
MOV AX,191CH
MOV CL,5
RCL AX,CL
BCDعملوندها ودستورات
طبق جدول زيربرای کدکردن اعداد بکار BCDسيستم اعداد •
می روند
BCD رقم
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
BCD انواع
•BCD دراين نوع برای هررقم يک بايت در : فشرده نشده
.نظرگرفته می شود
ذخيره می شود 00000101بصورت 5رقم : مثال
•BCD دراين نوع دريک بايت دورقم ذخيره : فشرده شده
.می شود
ذخيره می گردد 01011001بصورت 59عدد : مثال
BCD,ASCIIمقايسه
کد BCDفشرده نشده کداسکی درمبنای دو کداسکی رقم
0 30 0110000 00000000
1 31 0110001 00000001
2 32 0110010 00000010
3 33 0110011 00000011
4 34 0110100 00000100
5 35 0110101 00000101
6 36 0110110 00000110
7 37 0110111 00000111
8 38 0111000 00001000
9 39 0111001 00001001
BCDفشرده نشده تبديل اسکی به
…. ASC DB ‘9562481273’ ORG 0010H UNPACK DB 10 DUP(?) ….. MOV CX,5 MOV BX,OFFSET ASC MOV DI,OFFSET UNPACK AGAIN:MOV AX,WORD PTR [BX] AND AX,0F0FH MOV WORD PTR [DI],AX ADD DI,2 ADD BX,2 LOOP AGAIN
BCDتبديل اسکی به
…. VAL_ASC DB ’47’ VAL_BCD DB 2DUP(?) … MOV AX,WORD PTR VAL_ASC AND AX,0F0FH XCHG AH,AL MOV CL,4 SHL AH,CL OR AL,AH MOV VAL_BCD,AL
فشرده به اسکی BCDتبديل
VAL1_BCD DB 29H VAL3_ASC DW ? ….. MOV AL,VAL1_BCD MOV AH,AL AND AX,F00FH MOV CL,4 SHR AH,CL OR AX,3030H XCHG AH,AL MOV VAL3_ASC,AX
BCD جمع
استفاده کنيم نتيجه اشتباه BCDبرای انجام جمع دوعدد ADDاگربخواهيم ازفرمان خواهد بود
: مثال
MOV AL,17H
ADD AL,28H
45نيست وبايستی نتيجه BCDخواهدشدواين نتيجه بصورت 3FHکه نتيجه حاصل رابه نتيجه اضافه کنيم 06برای تصحيح جمع بايستی عدد . می شد
: مثال
MOV AL,87H
ADD AL,52H
را 60برای تصحيح بايستی عدد . نيست BCDخواهدشد که بصورت D9که نتيجه به نتيجه اضافه کنيم
106
DAA Logic
If (AL(lo) > 9) or (AuxCarry = 1)
AL = AL + 6
AuxCarry = 1
Else
AuxCarry = 0
Endif
If (AL(hi) > 9) or Carry = 1
AL = AL + 60h
Carry = 1
Else
Carry = 0
Endif
If AL = AL + 6 sets the
Carry flag, its value is
used when evaluating
AL(hi).
DAA
واحد اضافه می 6اين دستورهرگاه الزم باشد به نيبل پايينی
واحد اضافه می کند 6کند وهرگاه الزم باشدبه نيبل بااليی
يا 9نيبل پايينی بزرگتراز ADCيا ADDاگرپس ازاعمال •
AF=1 رااضافه می کند 0110شود به چهاربيت پايين تر
شودبه نيبل بااليی CF=1يا 9اگرنيبل بااليی بزرگتراز•
.را اضافه می کند 0110
می شود نتيجه AF=1چون 18Hبا 29Hدرجمع : مثال
.جمع شود 0110بايستی با
:مثال
DATA1 DB 47H
DATA2 DB 25H
DATA3 DB ?
….
MOV AL,DATA1
MOV BL,DATA2
ADD AL,BL
DAA
MOV DATA3,AL
109
DAA Examples • Example: calculate BCD 35 + 48
mov al,35h
add al,48h ; AL = 7Dh
daa ; AL = 83h, CF = 0
• Example: calculate BCD 35 + 65
mov al,35h
add al,65h ; AL = 9Ah
daa ; AL = 00h, CF = 1
• Example: calculate BCD 69 + 29
mov al,69h
add al,29h ; AL = 92h
daa ; AL = 98h, CF = 0
BCDتفريق
دوعددهم مشکل مشابهی وجود دارد وبرای BCDبرای تفريق
وجود داردکه بطريق زير نتيجه را DASاين منظور دستور
اصالح می کند
9نيبل پايين تر بزرگتر از SBBيا SUBاگر پس از دستور •
را ازنيبل پايين کم می کند0110عدد AF=1باشد يا
را از 0110باشد CF=1يا اگر 9اگرنيبل بااليی بزرگتراز•
.نيبل بااليی کسر می نمايد
111
DAS Logic
If (AL(lo) > 9) OR (AuxCarry = 1)
AL = AL − 6;
AuxCarry = 1;
Else
AuxCarry = 0;
Endif
If (AL > 9FH) or (Carry = 1)
AL = AL − 60h;
Carry = 1;
Else
Carry = 0;
Endif
If AL = AL - 6 sets the
Carry flag, its value is
used when evaluating AL
in the second IF
statement.
BUD DT 87965141012 EXP DT 31610640392 BAL DT ? ….. MOV CX,11 MOV BX,00 CLC BACK: MOV AL,BYTE PTR BUD[BX] SBB AL,BYTE PTR EXP[BX] DAS MOV BYTE PTR BAL[BX],AL INC BX LOOP BACK
113
DAS Examples (1 of 2)
• Example: subtract BCD 48 – 35
mov al,48h
sub al,35h ; AL = 13h
das ; AL = 13h CF = 0
• Example: subtract BCD 62 – 35
mov al,62h
sub al,35h ; AL = 2Dh, CF = 0
das ; AL = 27h, CF = 0
• Example: subtract BCD 32 – 29
mov al,32h
add al,29h ; AL = 09h, CF = 0
daa ; AL = 03h, CF = 0
114
DAS Examples (2 of 2)
• Example: subtract BCD 32 – 39
mov al,32h
sub al,39h ; AL = F9h, CF = 1
das ; AL = 93h, CF = 1
Steps:
AL = F9h
CF = 1, so subtract 6 from F9h
AL = F3h
F3h > 9Fh, so subtract 60h from F3h
AL = 93h, CF = 1
115
ASCII Decimal
• A number using ASCII Decimal representation stores a single ASCII digit in each byte
– For example, 5,678 is stored as the following sequence of hexadecimal bytes:
35 36 37 38
116
AAA Instruction • The AAA (ASCII adjust after addition)
instruction adjusts the binary result of an ADD or ADC instruction. It makes the result in AL consistent with ASCII decimal representation. – The Carry value, if any ends up in AH
• Example: Add '8' and '2'
mov ah,0
mov al,'8' ; AX = 0038h
add al,'2' ; AX = 006Ah
aaa ; AX = 0100h (adjust result), CF=1
or ax,3030h ; AX = 3130h = '10'
117
AAS Instruction
• The AAS (ASCII adjust after subtraction) instruction adjusts the binary result of an SUB or SBB instruction. It makes the result in AL consistent with ASCII decimal representation. – It places the Carry value, if any, in AH
• Example: Subtract '9' from '8'
mov ah,0
mov al,'8' ; AX = 0038h
sub al,'9' ; AX = 00FFh
aas ; AX = FF09h, CF=1
or al,30h ; AL = '9'
118
AAM Instruction
• The AAM (ASCII adjust after multiplication) instruction adjusts the binary result of a MUL instruction. The multiplication must have been performed on unpacked BCD numbers.
mov bl,05h ; first operand
mov al,06h ; second operand
mul bl ; AX = 001Eh
aam ; AX = 0300h
وقفه ها
وجود دارند DOSو BIOSزيرروالهای مفيدی هستند که در
قابل دسترس INTوبعضی ازآنها ازطريق دستورالعملهای
بشکل زيرهستند INTدستورات . هستند
INT xx
Xx تا 00شماره وقفه است که محدوده آن ازFF خواهد بود
وقفه می توانيم داشته باشيم 256يعنی
INT 10H ازBIOS
بوسيله اين وقفه ميتوان بسياری ازدستکاريهای متن يا گرافيک
مانند تغييررنگ کاراکترها . درصفحه نمايش را انجام داد
ورنگ پس زمينه ، پاک کردن صفحه نمايش وتغييرمحل
مکان نما
پاک کردن صفحه نمايش
. استفاده می شود 06Hاز تابع INT 10Hبرای پاک کردن صفحه نمايش بکمک
MOV AH,06 MOV AL,00 MOV BH,07 MOV CH,00 MOV CL,00 MOV DH,24 MOV DL,79 INT 10H
يا
MOV AX,0600H MOV BH,07 MOV CX,0000 MOV DX,184FH INT 10H
استقرارمکان نما دريک محل خاص
INT 10H موقعيت مکان نما رابه هر محل ديگر 02با تابع
.تغييرمی دهد
MOV AH,02
MOV BH,00
MOV DL,25
MOV DH,15
INT 10H
تعيين محل فعلی مکان نما
INT 10H برای تعيين محل مکان نما بکار ميرود 03با تابع
حاوی شماره DHوبعداز اجرای دستورات زير ثبات
حاوی شماره ستون مکان نما خواهد بود DLسطرو
MOV AH,03
MOV BH,00
INT 10H
DOSدر INT 21Hوقفه
اين وقفه با وروداطالعات ازورودی ازصفحه کليدسروکار
دارد وخروج اطالعات روی صفحه مونيتور
خروج رشته ای از داده روی مانيتور
ASCIIبرای ارسال يک رشته داده 09با تابع INT 21Hاز
به مانيتور استفاده می شود
DATA_ASC DB ‘THE EARTH’, $
….
MOV AH,09
MOV DX,OFFSET DATA_ASC
INT 21H
خروج يک کاراکتربه مانيتور
INT 21H برای انتقال يک کاراکتر به 02با انتخاب
مانيتوربکارمی رود
MOV AH,02
MOV DL,’J’
INT 21H
وروديک رشته داده از صفحه کليد
INT 21H 0با انتخابAH به مفهوم دريافت داده از صفحه کليدوذخيره
آنرا درمکان حافظه ای که ازقبل درقطعه داده تعريف شده ، بيان
می دارد
.....
DATA1 DB 6DUP(FF)
…..
MOV AH,0AH
MOV DX,OFFSET DATA1
INT 21H
PROCEDUREروال ها
ای کلمه روال در زبان های برنامه نویسی سطح باال برای بیان زیر برنامه برای فراخوانی روال. که تقریبا یک واحد کامل می باشد به کار می رود
و بددنبال آن لیسدت آرگومانهدای مدورد نظدر را در داخدل پرانتدز نام روال
آرگومانهددا بایسددتی متندداظر بددا پددارامتر هددای مجددازی روال . ذکددر مددی کننددد
آدرس برگشت به برنامه فراخواننده زیدر برنامده در پشدته . مزبور باشند
از طددرد دی ددر مددی تددوان مقددادیر ثبددات هددا در زمددان . ذخیددره مددی گددردد
پشته ذخیره نمود و در زمان برگشت بده درفراخوانی یک زیر برنامه را
. برنامه فراخواننده مقادیر ثبات ها را با استفاده از پشته بازسدازی نمدود
با استفاده از پشته می توان آرگومانها را به یک زیر برنامه انتقال داد و . انتقال داد یا مقادیری را از یک زیر برنامه به برنامه ی فراخواننده
بدنه يک روال
.گیرد می قرار کدی س منت یک داخل در همیشه روال یک کد
می قرار ENDP و PROC دستورات داخل در روال یک بدنه
که است برچسبی دارای دستورالعملها این از کدام هر و گیرد
.باشد می مزبور روال نام برابر
می فراخوانی که کدی س منت همان در NEAR روال یک
س منت یک در معموال FAR روال یک و گردد می تعرید شود
فراخوانی کار دستور با روال .شود می تعرید مجزائی کدی .شود می
INITIALIZE PROC NEAR
.
.
.
INITIALIZE ENDP
: و برای فرا خوانی
CALL INITIALIZE
PUSHF و POPF
همانطورکه گفته شدميتوان محتوی رجيسترها راقبل از ارسال
درپشته ذخيره ويا popو PUSHبه زيربرنامه بادستورات
را flagبازيابی نمود واگر بخواهيد محتوی رجيستر
و برای بازيابی آن PUSHFدرپشته ذخيره کنيد از دستور
استفاده کنيد POPFاز پشته ازدستور
CDSEG SEGMENT
MAIN PROC FAR
………
…….
CALL ASC
…..
ENDP
ASC PROC
……..
…….
ASC ENDP
عمل سرريزدرعمليات اعدادعالمت دار
:درعمليات هشت بيتی يک می شودکه OFوقتی پرچم سرريز
از بيت هفت به هشت رقم نقلی وجود داشته باشد ولی •CF=0 باشد
•CF=1 باشد ولی ازرقم هفتم به هشتم رقم نقلی نداشته باشيم
باشد CF=1پس اگر هم رقم نقلی ازبيت هفتم به هشتم وهم •
OF=0 می شود
:مثال
MOV AL,96
MOV BL,70
ADD AL,BL
:مثال
MOV AL,-2
MOV CL,-5
ADD CL,AL
:مثال
MOV AL,-120
MOV BL,-10
ADD AL,BL
: مثال
MOV AL,92
MOV BL,89
ADD AL,BL
برابريک می شود OF بيتی 16درعمليات
ازبيت پانزده به شانزده رقم نقلی وجودداشته باشدولی •CF=0
•CF=1 ولی ازرقم پانزده به شانزده رقم نقلی وجود نداشته
باشد
و رقم نقلی ازبيت پانزده به شانزده وجود داشته CF=1اگر •
OF=0باشد
:مثال
MOV AX,6E2FH
MOV CX,13D4H
ADD AX,CX
:مثال
MOV DX,542FH
MOV BX,12E0H
ADD DX,BX
گسترش عالمت عملوند
کپی AHبيت هشتم درتمام بيت های CBWبا استفاده از
ميشود
AL AH
کپی DXبيت شانزدهم درتمام بيت های CWDبا استفاده از
ميشود
AX DX
مثال
MOV AX,260
CWD
مثال
MOV AL,-2
CBW
……… DATA1 DB 96 DATA2 DB 70 RESULT DW ? …. SUB AH,AH MOV AL,DATA1 MOV BL,DATA2 ADD AL,BL JNO OVER MOV AL,DATA2 CBW MOV BX,AX MOV AL,DATA1 CBW ADD AX,BX OVER: MOV RESULT,AX
IDIV
دستورفوق دستورتقسيم عالمتداراست•
تقسيم مقسوم مقسوم عليه خارج قسمت باقيمانده
AH AL حافظه ثبات يا AL= بايتCBW بايت/ بايت
DX AX حافظه ثبات يا AX=کلمه CWD کلمه/ کلمه
AH AL حافظه ثبات يا AX کلمه/ بايت
DX AX حافظه ثبات يا DX:AX جفت کلمه/کلمه
…… SIGN_DAT DB +13,-10,+19,+14,-18 AV DW ? RE DW ? ….. MOV CX,5 SUB BX,BX MOV SI,OFFSET SIGN_DAT BACK: MOV AL,[SI] CBW ADD BX,AX INC SI LOOP BACK MOV AL,5 CBW MOV CX,AX MOV AX,BX CWD IDIV CX MOV AV,AX MOV RE,DX
IMUL
برای ضرب اعداد عالمتداربکارمی رود•
2عملوند نتيجه 1عملوند ضرب
AX ثبات يا حافظه AL بايت دربايت
DX:AX ثبات يا حافظه AX کلمه درکلمه
DX:AX ثبات يا حافظه AL=بايت CBW بايت درکلمه
SAR
شيفت حسابی به چپ بصورت زيرعمل می کند
MSB MSB----------- LSB CF
:مثال
MOV AL,-10
SAR AL,1
استفاده می شود 2برای تقسيم اعدادعالمتداربر SARاز
:مثال
MOV AX,-9
MOV BL,2
IDIV BL
MOV AX,-9
SAR AX,1
است SHLهمان دستور “ دقيقا SALدستور
NEGدستور
مکمل دو آنرا نتيجه می دهد)اين دستور عددی را منفی می کند
MOV AL,100
NEG AL
NOTدستور
مکمل يک )اين دستور تک تک بيت ها رامعکوس می کند
(عدد رامحاسبه می کند
MOV AL,05H
NOT AL