147
ماشين ساختمان وزبان

Assembly

Embed Size (px)

DESCRIPTION

اسلاید یادگیری اسمبلی به زبان فارسیبرای اسمبلی 80x86انطباق نسبی با کتاب مزیدی

Citation preview

Page 1: Assembly

ساختمان وزبان ماشين

Page 2: Assembly

يادآوری

مبنای دو ، هشت ، شانزده ، ده•

عمليات جمع وتفريق درمبنای دو ، هشت وشانزده•

(2و متمم 1متمم -عالمت مقدار) شيوه نمايش اعداد صحيح منفی •

BCDو EBCDICکداسکی و•

Page 3: Assembly

تعريف چنداصطالح

• BIT • NIBBLE • BYTE • WORD • DOUBLEWORD • QUADWORD • KILOBYTE • MEGABYTE • GIGABYTE • TERABYTE

Page 4: Assembly

ساختمان کامپيوتر

RAM وسايل

ورودی وسايل

خروجی CPU

وسايل

ورودی

و خروجی

ROM

گذرگاه آدرس

گذرگاه کنترل

گذرگاه داده

Page 5: Assembly

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 گذرگاه

آدرس

Page 6: Assembly

ساختارپردازنده 8086

FLAGS

ALU

OPERAND

SP

SI

DI

BP

DL DH

CL

BL

AL

CH

BH

AH

IP

DS

SS

ES

CS

توليد آدرس وگذرگاه کنترل

صف دستورالعمل

گذرگاه

Page 7: Assembly

انواع ثبات ها

AX,BX,CX,Dx (AH,AL,…)عمومیثبات های •

CS , DS , SS , ESسگمنتثبات های •

SI , DI (شاخص)ثباتهای ايندکس •

IP , BP , SPاشاره گرثباتهای •

FR ثبات پرچم•

Page 8: Assembly

ثبات های عمومی

•AX درعمليات ورودی وخروجی ومحاسبات مورداستفاده قرار می

گيرد

•BX ثبات پايه برای توسعه آدرس ودرمحاسبات مورد استفاده قرا ر

می گيرد

•CX ثبات شمارنده حلقه است

•DX دراعمال ضرب وتقسيم اعدادبزرگ ودربعضی ازاعمال

.ورودی خروجی نيزبکارمی رود

AH AL BH BL CH CL

DH DL

AX BX CX

DX

Page 9: Assembly

ثبات های سگمنت

16سگمنت بخشی ازحافظه است که آدرس شروع آن بر•

کيلوبايت باشدوچهار نوع 64بخش پذيراست ومی تواند تا

:است

( DS)سگمنت داده ها–

(SS)سگمنت پشته–

( ES)سگمنت اضافی–

( CS)سگمنت کد–

Page 10: Assembly

FLAG ثبات پرچم

.بيتی است وبه آن ثبات وضعيت هم گفته می شود16يک ثبات •

CF پرچم نقلی

PF پرچم توازن

AF پرچم نقلی کمکی

ZF پرچم صفر

SF پرچم عالمت

TF پرچم تله

IF پرچم فعال سازوقفه

DF پرچم جهت

OF پرچم سرريز

OF DF IF TF SF ZF AF PF CF

Page 11: Assembly

دستورالعمل ها درزبان اسمبلی

بخش تشکيل شود4می تواند از•

[ توضيحات;][ عملوند] دستور[ برچسب]

:مثال

MOV AL,BL

Page 12: Assembly

MOV

MOV destination, source

• MOV CL,55H

• MOV AH,DL

• MOV AX,BX

• MOV SI,DI

Page 13: Assembly

رانمی توان CSو ESو SSو DSثبات قطعه ها مانند •

مقداردهی کرد” مستقيما

• MOV SS,2345H اشتباه است

برای انجام اين عمل بايستی ازطريق يک ثبات عمل کرد

بشکل زير

MOV AX,2345H

MOV SS,AX

باشد بقيه بيت FFاگر مقدارانتقال يافته به ثبات کوچکتراز •

ها صفرفرض می شود

MOV BX,5H

Page 14: Assembly

انتقال اعدادبزرگ به ثبات باعث ايجادخطاخواهد شد•

MOV BL,7F2H

MOV AX,2FE456H

Page 15: Assembly

ADD دستور

• ADD destination, source

مثال

Mov AL,25H

MOV BL,34H

ADD AL,BL

مثال

MOV DH,25H

ADD DH,34H

Page 16: Assembly

نشان دهيدکه چگونه ثبات پرچم با اجرای دستورات زير : مثال تنظيم می شود

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

Page 17: Assembly

انواع آدرسها

آدرس فيزيکی•

آدرس تفاوت مکان•

آدرس منطقی•

Page 18: Assembly

آدرسهای فيزيکی

بصورت بيست 8086آدرس فيزيکی در يک کامپيوتر •

بايتی بيان می شود

A32FFH

می باشد FFFFFHتا 00000Hآدرس فيزيکی از عدد •

Page 19: Assembly

آدرس تفاوت مکان

می باشند راگويندپس اين 64Kآدرسهای که درمحدوده •

می باشد FFFFHتا 0000Hآدرسها درمحدوده

EF32

Page 20: Assembly

آدرس منطقی

آدرس منطقی متشکل از آدرس شروع قطعه وآدرس تفاوت •

مکان است مانند مثال زير

2500:95F3

برای محاسبه آدرس فيزيکی ازروی آدرس منطقی بطريق •

:زيرعمل می کنيم

يک صفر درسمت راست اضافه نموده 2500به عدد–

با آدرس تفاوت مکان عدد حاصل را جمع می کنيم–

25000+95F3=2E5F3H

Page 21: Assembly

قطعات برنامه

داريم( سگمنت)درزبان اسمبلی سه نوع قطعه •

قطعه کد –

قطعه داده–

قطعه پشته –

Page 22: Assembly

قطعه کد

تشکيل می IPو CSآدرس منطقی يک آدرس هميشه از •

.می باشد CS:IPشود وبصورت

:باشد IP=634AHو CS=24F6Hاگر : مثال

آدرس منطقی چيست؟ -الف

آدرس تفاوت مکان چيست؟ -ب

آدرس فيزيکی رامحاسبه کنيد؟ -ج

محدوده پايين سگمنت رامحاسبه کنيد؟ -د

محدوده باالی سگمنت رامحاسبه کنيد؟ -ه

Page 23: Assembly

قطعه داده

قرارمی گيرد DSآدرس شروع قطعه داده در •

و DIو BXآدرس تفاوت مکان می تواند در رجيسترهای •

SI نگهداری شود.

:مثال

ADD AL,[BX]

Page 24: Assembly

قرارداد مبتنی برکوچکتری

بيتی 16بيتی است لذا اگر يک عدد8چون فرض براين است که خانه های •

رابخواهيم درآن ذخيره کنيم بايت پايين تر درمکان حافظه پايين تروبايت باالتر

.درآدرس حافظه باالتر قرارخواهدگرفت

:مثال

MOV AX,35F3H

MOV [1500],AX

F3

35

DS:1500

DS:1501

Page 25: Assembly

فرض کنيد داريم:مثال

DS:6826=48H

DS:6827=22H

چه MOV BX,[6826]دراثراجرای دستور BXمحتوی ثبات

.خواهد شد

Page 26: Assembly

STACK پشته چيست؟

برای ذخيره CPUاست که بوسيله RAMبخشی ازحافظه •

.موقت اطالعات بکارمی رود

.استفاده می شود SPو SSبرای دسترسی از دوثبات •

قابل ذخيره spمحتويات هرثبات به غيرازثبات های قطعه و•

.سازی درپشته هستند

Page 27: Assembly

عمل درج درپشته

فرض کنيد داريم : مثال

SP:=1236H

AX=24B6

DI=85C2

DX=5F93

.پس ازاجرای دستورات زيرمحتوی پشته را نمايش دهيد

PUSH AX

PUSH DI

PUSH DX

Page 28: Assembly

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

Page 29: Assembly

بازيابی ازپشته

.بازيابی عکس عمل درج است•

sp=18FAبافرض اينکه درپشته زير داشته باشيم : مثال

محتوی پشته وثبات ها راپس ازاجرای دستورات زير

مشخص کنيد

POP CX

POP DX

POP BX

Page 30: Assembly

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

Page 31: Assembly

انواع روشهای آدرس دهی

ثباتی•

فوری•

مستقيم•

غيرمستقيم ثباتی•

نسبی پايه•

نسبی انديسی•

نسبی انديس دار پايه•

Page 32: Assembly

آدرس دهی ثباتی

دراين نوع آدرس دهی ازثباتها برای نگهداری داده ها ی •

سريع است“ مورددستکاری استفاده می شودبنابراين نسبتا

MOV BX,DX

MOV ES,AX

ADD AL,BH

Page 33: Assembly

آدرس دهی فوری

درآدرس دهی فوری عملوند مبدا يک مقدارثابت است •

وچون دراين حالت نيزحافظه مورددسترسی قرارنمی گيرد و DSسريع است وبرای بارکردن اطالعات درثباتها بجز

FLAG بکارمی رود

MOV AX,2550H

MOV CX,635

MOV BL,40H

Page 34: Assembly

آدرس دهی مستقيم

دراين روش داده درمکانی ازحافظه است وآدرس داده •

اين آدرس ، آدرس . درحافظه بالفاصله بعدازدستورمی آيد

تفاوت مکان است که برای بدست آوردن آدرس فيزيکی .وجمع با آدرس فوق بدست آورد DSبايستی آنرا باشيفت

MOV DL,[2400]

Page 35: Assembly

آدرس فيزيکی مکان حافظه ومحتوی آنراپس ازاجرای : مثال

پيداکنيد DS=1512Hکدهای زيربافرض

MOV AL,99H

MOV [3518],AL

Page 36: Assembly

آدرس دهی غيرمستقيم ثباتی

دراين روش آدرس مکان حافظه ای که عملونددرآن است • SIبرای اينکارازثباتهای . بوسيله ثبات نگهداشته می شود

استفاده می شودکه با زاين ثباتها بعنوان تفاوت BXو DIو

هستند DSمکان نسبت به

MOV AL,[BX]

MOV CL,[SI]

MOV [DI],AH

Page 37: Assembly

AX=17FEو SI=2498و DS=1120فرض کنيد : مثال

باشد پس ازاجرای دستورزيرمحتوی مکانهای حافظه

چيست

MOV [SI],AX

Page 38: Assembly

روش آدرس دهی نسبی پايه

ونيزمقدارجابجايی BPو BXدراين روش ثباتهای پايه •

برای محاسبه آدرس موثربکارمی رود

MOV CX,[BX]+10

Page 39: Assembly

آدرس دهی نسبی انديس دار

برای SIو DIمانند روش قبلی است غيرازاينکه ازثباتهای •

.آدرس تفاوت مکان استفاده می شود

MOV DX,[SI]+5

MOV CL,[DI]+20

Page 40: Assembly

و 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 -د

Page 41: Assembly

آدرس دهی نسبی انديس دارپايه

ازترکيب دوروش پايه وانديس دار روش جديدی به نام •

.انديس دارپايه بوجود می آيد

MOV CL,[BX][DI]+8

MOV CH,[BX][SI]+20

MOV AH,[BP][DI]+12

Page 42: Assembly

(حذف)لغو قطعه

همانطورکه گفته شد آدرس منطقی هرقطعه ازدوبخش تشکيل می • 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

Page 43: Assembly

خالصه انواع آدرس دهی

قطعه پيش فرض عملوند روش آدرس دهی

ندارد رجيستر ثباتی

ندارد داده فوری

DS [ عددافست] مستقيم

DS [DI],[SI],[BX] غيرمستقيم ثباتی

نسبی پايه[BX]+عدد , [BP]+عدد DS

SS

نسبی انديس دار[DI]+عدد , [SI]+عدد DS

DS

نسبی انديس دار پايه

[BX][SI]+عدد

[BX][DI]+عدد

[BP][SI]+عدد

DS

DS

SS

Page 44: Assembly

قطعه يک برنامه

Label SEGMENT [options]

دستورات موردنظر

Label ENDS

Page 45: Assembly

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

Page 46: Assembly

DB شبه دستور

حافظه رابصورت گروههای بااندازه بايت اختصاص می •

.دهد

DATA1 DB 25

DATA2 DB 10001001B

DATA3 DB 12H

DATA4 DB ‘2591’

DATA5 DB ?

Page 47: Assembly

DUPشبه دستور

برای کپی کردن تعدادمفروضی کاراکتربکارمی رود•

DATA DB 6DUP(12H)

DATA DB 32DUP(?)

DATA DB 5DUP(2DUP(99))

Page 48: Assembly

DW شبه دستور

برای اختصاص دوبايت ازحافظه درهرزمان می باشد•

DATA1 DW 954

DATA2 DW 1001010100B

DATA3 DW 253FH

DATA4 DW 9,2,7,0CH,00100000B,’HI’

DATA5 DW 8DUP(?)

Page 49: Assembly

DD شبه دستور

برای اختصاص چهاربايت ازحافظه بکارمی رود•

DATA DD 1023

DATA1 DD 100010010110010111000B

DATA2 DD 5C2A57F2H

DATA3 DD 23H,24789H,65533

Page 50: Assembly

DQشبه دستور

برای تخصيص هشت بايت ازحافظه بکارمی رود•

DATA20 DQ 4523C2H

DATA1 DQ ‘HI’

DATA2 DQ ?

Page 51: Assembly

EQU

برای تعريف يک ثابت بدون اشغال مکان حافظه بکاربرده •

.می شود

COUNT EQU 25

Page 52: Assembly

ORG

برای مشخص کردن شروع آدرس آفست بکاربرده می •

.شود

ORG 0030H

Page 53: Assembly

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

Page 54: Assembly

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 55: Assembly

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

Page 56: Assembly

NEGدستور

مکمل دو آنرا نتيجه می دهد)اين دستور عددی را منفی می کند

MOV AL,100

NEG AL

Page 57: Assembly

NOTدستور

مکمل يک )اين دستور تک تک بيت ها رامعکوس می کند

(عدد رامحاسبه می کند

MOV AL,05H

NOT AL

Page 58: Assembly

LEAدستور

اين دستور بشکل زير است

LEA destination ,source

قرارمی دهد destinationرا در sourceآدرس

LEA BX,X

ذخيرمی کند ومعادل BXرا دررجيستر Xآدرس متغير

است MOV BX, OFFSET Xدستور

بيتی باشد 16بايستی رجيستر “ حتما destination: نکته

Page 59: Assembly

SUB

برای اينکارازروش زير استفاده : تفريق اعداد بدون عالمت• می شود

مفروق رابدست می آورد( متمم دو)مکمل دو–

با مفروق منه جمع می کند–

رقم نقلی را معکوس می کند–

SUB destination, source

Destination=destination-source

ميتوان تشخيص دادعددحاصل مثبت است CFبا کنترل : نکتهباشد CF=1باشدعددحاصل مثبت واگر CF=0يا منفی اگر

آن درمقصد ( متمم دو)عددحاصل منفی بوده ومکمل دو .ذخيره می شود

Page 60: Assembly

چه ALتعيين کنيدکه بعدازاجرای دستورات زير دررجيستر :مثال

چه SFو AFو PFو ZFو CFمقداری ذخيره می شود ومقدار

خواهد شد

MOV AL,3FH

MOV BH,23H

SUB AL,BH

:مثال

MOV AL,3FH

MOV BH,23H

SUB BH,AL

Page 61: Assembly

SBB

باشد همانند CF=0دراين دستوراگر: تفريق بارقم قرضی•

باشديک واحد CF=1عمل می شود ولی اگر SUBدستور

ازنتيجه کم می شود

باشد BL=4Fو AL=95Hو CF=1اگر داشته باشيم : مثال

نتيجه اجرای دستورزيرچيست؟

SBB AL,BL

Page 62: Assembly

:مثال

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

Page 63: Assembly

ADC

.اين دستورعمل جمع را بارقم نقلی را انجام می دهد•

ADC AH,BL

:نتيجه عمل عبارت است از

AH=AH+BL+CF

Page 64: Assembly

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

Page 65: Assembly

خروجی قطعه برنامه زیرچیست: مثال…. 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 …….

Page 66: Assembly

)MUL )ضرب اعدادبدون عالمت

بايت ضربدربايت•

کلمه ضربدرکلمه•

کلمه ضربدربايت•

ضرب عملوند اول عملوند دوم نتيجه

AX ثبات يا حافظه AL بايت دربايت

DX:AX ثبات يا حافظه AX کلمه درکلمه

DX:AX ثبات يا حافظه AH=0,AL بايت درکلمه

Page 67: Assembly

: 1مثال

RESULT DW ?

….

MOV AL,25H

MOV BL,65H

MUL BL

MOV RESULT,AX

Page 68: Assembly

: مثال

DATA3 DW 2378H

DATA4 DW 2F79H

RESULT1 DW 2 DUP(?)

….

MOV AX,DATA3

MUL DATA4

MOV RESULT1,AX

MOV RESULT1+2,DX

Page 69: Assembly

:مثال

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

Page 70: Assembly

DATA1 DB 25H

DATA2 DB 65H

RESULT DW ?

…..

MOV AL,DATA1

MOV SI,OFFSET DATA2

MUL BYTE PTR [SI]

MOV RESULT,AX

Page 71: Assembly

DIV تقسيم اعدادبدون عالمت

بايت تقسيم بربايت•

کلمه تقسيم برکلمه•

کلمه تقسيم بربايت•

کلمه مضاعف تقسيم برکلمه•

باقيمانده

خارج

قسمت تقسيم مقسوم مقسوم عليه

AH AL ثبات يا حافظه AH=0,AX بايت بربايت

DX AX ثبات يا حافظه DX=0,AX=کلمه برکلمه کلمه

AH AL ثبات يا حافظه AX=کلمه بربايت کلمه

DX AX ثبات يا حافظه DX:AX=کلمه مضاعف برکلمه کلمه مضاعف

Page 72: Assembly

MOV AL,95

SUB AH,AH

DIV 10

MOV Q,AL

MOV R,AH

Page 73: Assembly

AND

اول قرارمی دهد عملگر منطقی می کند ونتيجه رادر ANDدوعملگررا بيت به بيت با هم

MOV BL,35H

AND BL,0FH

.راصفرنموده وبقيه پرچمها را با توجه به نتيجه مقدارمی دهد OFو CFپرچمهای ANDعمل •

برای تست صفربودن محتوی يک رجيسترمی توان استفاده کرد ANDاز •

AND AL,AL

JZ WER

…….

WER: …..

Page 74: Assembly

OR

منطقی می کند ونتيجه رادر ORدوعملگررا بيت به بيت با هم • اول قرارمی دهد عملگر

MOV BL,35H

OR BL,0FH

راصفرنموده وبقيه پرچمها را با OFو CFپرچمهای ORعمل •

توجه به نتيجه مقدارمی دهد

برای آزمون صفربودن يک عملوندمی توان استفاده کرد ORاز•

OR BL,0

OR BL,BL يا

Page 75: Assembly

XOR

منطقی می کند ونتيجه رادر XORدوعملگررا بيت به بيت با هم • اول قرارمی دهد عملگر

MOV BL,35H XOR BL,0FH

راصفرنموده وبقيه پرچمها را با OFو CFپرچمهای XORعمل • توجه به نتيجه مقدارمی دهد

می توان برای تست مساوی بودن دوثبات استفاده XORازعملگر • کرد

XOR AH,BL می توان بيت های خاصی رادرعملوند معکوس XORبااستفاده از •

کرد

XOR BH,06H

Page 76: Assembly

SHR شيفت منطقی به راست اين دستوربه تعداددفعات مشخص شده ثبات رابه سمت راست شيفت می دهد •

منتقل می CFورقمهای با ارزش راباصفرپرمی کندوکم ارزشترين بيت رابه .کند

اگرتعداددفعات شيفت يک است می توان آنرادرعملوند ذکرکرد ولی اگر •

.قرارمی دهيم CLبيشترازيک باشد تعداد دفعات را دررجيستر

: مثال

MOV AL,9AH MOV CL,3 SHR AL,CL

: مثال

MOV BX,FFFFH SHR BX,1

MSB LSB 0 CF

Page 77: Assembly

: مثال

DATA1 DW 7777H

TIMES EQU 4

MOV CL,TIMES

SHR DATA1,CL

Page 78: Assembly

SHLشيفت منطقی به چپ

است با اين تفاوت که شيفت ازسمت چپ انجام SHRمانند •

ميشود

:مثال

MOV DH,6

MOV CL,4

SHL DH,CL

MSB LSB CF 0

Page 79: Assembly

JMPدستور پرش غيرشرطی

این دستور دارای فرم زیر. ال می باشدکاسپدر gotoشبیه JMPدستور •

JMP LABEL

تفاوت ) IPبايتی نسبت به 127تا 128-دستور فوق يک پرش کوتاه درمحدوده

.است(مکان

:مثال

LABEL:….. JMP L1

…….. ………..

…….. ………..

JMP LABEL L1:………..

Page 80: Assembly

پرشهای شرطی

و سایر IFپرشهای شرطی به برنامه نویس این امکان را می دهد که ساختارهای • :شکل کلی بصورت زیر می باشد. نماید یجادساختارهای کنترلی را ا

Page 81: Assembly

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

Page 82: Assembly

دستورالعمل مقايسه

.رددگاستفاده می CMPبرای مقایسه دو مقدار از دستورالعمل

:شکل کلی عبارتند از

CMP OPR1 , OPR2 عمل نموده ولی نتایج در جای ی ذخیره نمی شود بلکه محتوی فلگ ها را SUBدستورالعمل مانند CMPدستورالعمل

.تغییر می دهد

CMP AX , 100

Page 83: Assembly

در صورتی که عملوندها بدون عالمت در نظر گرفته شوند از CMPتور سپس از د

: دستورالعملهای پرش شرطی زیر می توان استفاده نمود

فلگها برای پرش معنی نام دستورالعمل

JA پرش در حالت باالتر CF=0,ZF=0

JNBE پرش در حالت پایین یا مساوی

JAE پرش در حالت باالتر یا مساوی CF=0

JNB پرش در حالت پایین تر نبودن

JB پرش در حالت پایین تر CF=1

JNAE پرش در حالت پایین تر یا مساوی نبودن

JBE پرش در حالت پایین تر یا مساوی ZF=1 یاCF=1

JNA پرش در حالت باالتر نبودن

Page 84: Assembly

در صورتیکه عملوندها با عالمت در نظر گرفته شوند از دستورالعملهای پرش شرطی زیر CMPپس از دستور

: می توان استفاده نمود

فلگها برای پرش معنی نام دستورالعمل

JG پرش در حالت بزرگ تر SF=OF,ZF=0

JNLE پرش در حالت کوچک تر یا مساوی نبودن

JGE پرش در حالت بزرگ تر یا مساوی SF=OF

JNL پرش در حالت کوچک تر نبودن

JL پرش در حالت کوچک تر SF<>OF

JNGE پرش در حالت بزرگ تر یا مساوی نبودن

JLE 1 پرش در حالت کوچک تر یا مساوی=ZF یاSF<>OF

Page 85: Assembly

:مثال

CMP AL,61H

JB NEXT

CMP AL,7AH

JA NEXT

AND AL,DFH

NEXT: MOV [SI],AL

Page 86: Assembly

حلقه تکرار

در حلقه تکرار اغلب تعداد دفعاتی که بدنه حلقه بايد اجرا شود از قبل معين قرار داد و CXدر زبان اسمبلی اين تعداد را بايستی در ثبات . می باشد

.می باشد LOOPدستورالعمل تکرار دستورالعمل

:مثال

MOV CX , 10

LABI : .......

..........

. ........

LOOP LAB1 بار هر .گردد اجرا بار تکرار حلقه بدنه که ميشود باعث فوق دستورالعملهای

می کم CX محتوی از واحد يک شود می اجرا LOOP دستورالعمل که .گردد صفر با برابر CX ثبات تعداد که است اين تکرار خاتمه شرط .شود

Page 87: Assembly

JCXZدستورالعمل

انجام فلگی روی پرش منتهی .باشد می پرش نوع يک JCXZ ستورالعملد می انجام پرش باشد صفر با برابر CX ثبات تعداد چنانچه بلکه شود نمی .شود

MOV CX , 50

LABI: .......

..............

..............

DEC CX

JCXZ LABEND

JMP LABI

LABEND:

Page 88: Assembly

LOOPNZ , LOOPZ دستورالعملهایبوده با این تفاوت که این دو LOOPشبیه دستورالعمل LOOPNZ , LOOPZستورالعملهای د

.در بدنه تکرار استفاده می گردند CMPدستورالعمل بعد از دستورالعمل به LOOPNZو فلگ صفر برابر صفر باشد، دستورالعمل صفر نباشد CXچنانچه مقدار جدید در ثبات •

.می کند پرشتعیین شده دستورالعمل

به دستورالعملی LOOPZصفر باشد و فلگ صفر، یک باشد، دستورالعمل CXجدید در ثبات مقدارچنانچه •

.، پرش می کندمشخص شده که

:مثال

MOV CX , 10

FOR :

.

.

.

CMP BX , 0

LOOPNZ FOR

Page 89: Assembly

دستورات چرخش

• ROR

• ROL

• RCR

• RCL

Page 90: Assembly

ROR

درچرخش به راست ، با نقل مکان بيت ها ازچپ به راست ،

ازانتهای سمت راست خارج می شوند وازسمت چپ وارد

بعالوه باهرخروج هربيت يک کپی به پرچم . می گردند

نقلی انتقال می يابد

MSB ----------------- LSB CF

Page 91: Assembly

: مثال

MOV AL,36H

ROR AL,1

ROR AL,1

:مثال

MOV BX,C7E5H

MOV CL,6

ROR BX,CL

Page 92: Assembly

ROL

درچرخش به چپ ، با چرخش راست به چپ ، بيت انتهای

چپ خارج وازسمت راست واردمی شودبعالوه هربيت هم واردمی شود CFخارج شده به

MSB -----------LSB CF

Page 93: Assembly

:مثال

MOV BH,72H

ROL BH,1

:مثال

MOV DX,672AH

MOV CL,3

ROL DX,CL

Page 94: Assembly

……… 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

Page 95: Assembly

RCR

بانقل مکان درجهت چپ به راست ، بيت ها ازانتهای سمت

راست به پرچم نقلی وازپرچم نقلی واردانتهای چپ می .گردند

MSB------------ LSB CF

Page 96: Assembly

:مثال

CLC

MOV AL,26H

RCR AL,1

:مثال

STC

MOV BX,37F1H

MOV CL,5

RCR BX,CL

Page 97: Assembly

RCL

بانقل مکان بيت ها به راست، انتهای چپ واردپرچم نقلی ميگردد وپرچم نقلی واردانتهای سمت راست می گردد

MSB --------------- LSB CF

Page 98: Assembly

مثال

STC

MOV BL,15H

RCL BL,1

مثال

CLC

MOV AX,191CH

MOV CL,5

RCL AX,CL

Page 99: Assembly

BCDعملوندها ودستورات

طبق جدول زيربرای کدکردن اعداد بکار BCDسيستم اعداد •

می روند

BCD رقم

0000 0

0001 1

0010 2

0011 3

0100 4

0101 5

0110 6

0111 7

1000 8

1001 9

Page 100: Assembly

BCD انواع

•BCD دراين نوع برای هررقم يک بايت در : فشرده نشده

.نظرگرفته می شود

ذخيره می شود 00000101بصورت 5رقم : مثال

•BCD دراين نوع دريک بايت دورقم ذخيره : فشرده شده

.می شود

ذخيره می گردد 01011001بصورت 59عدد : مثال

Page 101: Assembly

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

Page 102: Assembly

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

Page 103: Assembly

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

Page 104: Assembly

فشرده به اسکی 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

Page 105: Assembly

BCD جمع

استفاده کنيم نتيجه اشتباه BCDبرای انجام جمع دوعدد ADDاگربخواهيم ازفرمان خواهد بود

: مثال

MOV AL,17H

ADD AL,28H

45نيست وبايستی نتيجه BCDخواهدشدواين نتيجه بصورت 3FHکه نتيجه حاصل رابه نتيجه اضافه کنيم 06برای تصحيح جمع بايستی عدد . می شد

: مثال

MOV AL,87H

ADD AL,52H

را 60برای تصحيح بايستی عدد . نيست BCDخواهدشد که بصورت D9که نتيجه به نتيجه اضافه کنيم

Page 106: Assembly

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).

Page 107: Assembly

DAA

واحد اضافه می 6اين دستورهرگاه الزم باشد به نيبل پايينی

واحد اضافه می کند 6کند وهرگاه الزم باشدبه نيبل بااليی

يا 9نيبل پايينی بزرگتراز ADCيا ADDاگرپس ازاعمال •

AF=1 رااضافه می کند 0110شود به چهاربيت پايين تر

شودبه نيبل بااليی CF=1يا 9اگرنيبل بااليی بزرگتراز•

.را اضافه می کند 0110

می شود نتيجه AF=1چون 18Hبا 29Hدرجمع : مثال

.جمع شود 0110بايستی با

Page 108: Assembly

:مثال

DATA1 DB 47H

DATA2 DB 25H

DATA3 DB ?

….

MOV AL,DATA1

MOV BL,DATA2

ADD AL,BL

DAA

MOV DATA3,AL

Page 109: Assembly

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

Page 110: Assembly

BCDتفريق

دوعددهم مشکل مشابهی وجود دارد وبرای BCDبرای تفريق

وجود داردکه بطريق زير نتيجه را DASاين منظور دستور

اصالح می کند

9نيبل پايين تر بزرگتر از SBBيا SUBاگر پس از دستور •

را ازنيبل پايين کم می کند0110عدد AF=1باشد يا

را از 0110باشد CF=1يا اگر 9اگرنيبل بااليی بزرگتراز•

.نيبل بااليی کسر می نمايد

Page 111: Assembly

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.

Page 112: Assembly

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

Page 113: Assembly

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

Page 114: Assembly

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

Page 115: Assembly

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

Page 116: Assembly

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'

Page 117: Assembly

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'

Page 118: Assembly

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

Page 119: Assembly

وقفه ها

وجود دارند DOSو BIOSزيرروالهای مفيدی هستند که در

قابل دسترس INTوبعضی ازآنها ازطريق دستورالعملهای

بشکل زيرهستند INTدستورات . هستند

INT xx

Xx تا 00شماره وقفه است که محدوده آن ازFF خواهد بود

وقفه می توانيم داشته باشيم 256يعنی

Page 120: Assembly

INT 10H ازBIOS

بوسيله اين وقفه ميتوان بسياری ازدستکاريهای متن يا گرافيک

مانند تغييررنگ کاراکترها . درصفحه نمايش را انجام داد

ورنگ پس زمينه ، پاک کردن صفحه نمايش وتغييرمحل

مکان نما

Page 121: Assembly

پاک کردن صفحه نمايش

. استفاده می شود 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

Page 122: Assembly

استقرارمکان نما دريک محل خاص

INT 10H موقعيت مکان نما رابه هر محل ديگر 02با تابع

.تغييرمی دهد

MOV AH,02

MOV BH,00

MOV DL,25

MOV DH,15

INT 10H

Page 123: Assembly

تعيين محل فعلی مکان نما

INT 10H برای تعيين محل مکان نما بکار ميرود 03با تابع

حاوی شماره DHوبعداز اجرای دستورات زير ثبات

حاوی شماره ستون مکان نما خواهد بود DLسطرو

MOV AH,03

MOV BH,00

INT 10H

Page 124: Assembly

DOSدر INT 21Hوقفه

اين وقفه با وروداطالعات ازورودی ازصفحه کليدسروکار

دارد وخروج اطالعات روی صفحه مونيتور

Page 125: Assembly

خروج رشته ای از داده روی مانيتور

ASCIIبرای ارسال يک رشته داده 09با تابع INT 21Hاز

به مانيتور استفاده می شود

DATA_ASC DB ‘THE EARTH’, $

….

MOV AH,09

MOV DX,OFFSET DATA_ASC

INT 21H

Page 126: Assembly

خروج يک کاراکتربه مانيتور

INT 21H برای انتقال يک کاراکتر به 02با انتخاب

مانيتوربکارمی رود

MOV AH,02

MOV DL,’J’

INT 21H

Page 127: Assembly

وروديک رشته داده از صفحه کليد

INT 21H 0با انتخابAH به مفهوم دريافت داده از صفحه کليدوذخيره

آنرا درمکان حافظه ای که ازقبل درقطعه داده تعريف شده ، بيان

می دارد

.....

DATA1 DB 6DUP(FF)

…..

MOV AH,0AH

MOV DX,OFFSET DATA1

INT 21H

Page 128: Assembly

PROCEDUREروال ها

ای کلمه روال در زبان های برنامه نویسی سطح باال برای بیان زیر برنامه برای فراخوانی روال. که تقریبا یک واحد کامل می باشد به کار می رود

و بددنبال آن لیسدت آرگومانهدای مدورد نظدر را در داخدل پرانتدز نام روال

آرگومانهددا بایسددتی متندداظر بددا پددارامتر هددای مجددازی روال . ذکددر مددی کننددد

آدرس برگشت به برنامه فراخواننده زیدر برنامده در پشدته . مزبور باشند

از طددرد دی ددر مددی تددوان مقددادیر ثبددات هددا در زمددان . ذخیددره مددی گددردد

پشته ذخیره نمود و در زمان برگشت بده درفراخوانی یک زیر برنامه را

. برنامه فراخواننده مقادیر ثبات ها را با استفاده از پشته بازسدازی نمدود

با استفاده از پشته می توان آرگومانها را به یک زیر برنامه انتقال داد و . انتقال داد یا مقادیری را از یک زیر برنامه به برنامه ی فراخواننده

Page 129: Assembly

بدنه يک روال

.گیرد می قرار کدی س منت یک داخل در همیشه روال یک کد

می قرار ENDP و PROC دستورات داخل در روال یک بدنه

که است برچسبی دارای دستورالعملها این از کدام هر و گیرد

.باشد می مزبور روال نام برابر

می فراخوانی که کدی س منت همان در NEAR روال یک

س منت یک در معموال FAR روال یک و گردد می تعرید شود

فراخوانی کار دستور با روال .شود می تعرید مجزائی کدی .شود می

Page 130: Assembly

INITIALIZE PROC NEAR

.

.

.

INITIALIZE ENDP

: و برای فرا خوانی

CALL INITIALIZE

Page 131: Assembly

PUSHF و POPF

همانطورکه گفته شدميتوان محتوی رجيسترها راقبل از ارسال

درپشته ذخيره ويا popو PUSHبه زيربرنامه بادستورات

را flagبازيابی نمود واگر بخواهيد محتوی رجيستر

و برای بازيابی آن PUSHFدرپشته ذخيره کنيد از دستور

استفاده کنيد POPFاز پشته ازدستور

Page 132: Assembly

CDSEG SEGMENT

MAIN PROC FAR

………

…….

CALL ASC

…..

ENDP

ASC PROC

……..

…….

ASC ENDP

Page 133: Assembly

عمل سرريزدرعمليات اعدادعالمت دار

:درعمليات هشت بيتی يک می شودکه OFوقتی پرچم سرريز

از بيت هفت به هشت رقم نقلی وجود داشته باشد ولی •CF=0 باشد

•CF=1 باشد ولی ازرقم هفتم به هشتم رقم نقلی نداشته باشيم

باشد CF=1پس اگر هم رقم نقلی ازبيت هفتم به هشتم وهم •

OF=0 می شود

Page 134: Assembly

:مثال

MOV AL,96

MOV BL,70

ADD AL,BL

:مثال

MOV AL,-2

MOV CL,-5

ADD CL,AL

Page 135: Assembly

:مثال

MOV AL,-120

MOV BL,-10

ADD AL,BL

: مثال

MOV AL,92

MOV BL,89

ADD AL,BL

Page 136: Assembly

برابريک می شود OF بيتی 16درعمليات

ازبيت پانزده به شانزده رقم نقلی وجودداشته باشدولی •CF=0

•CF=1 ولی ازرقم پانزده به شانزده رقم نقلی وجود نداشته

باشد

و رقم نقلی ازبيت پانزده به شانزده وجود داشته CF=1اگر •

OF=0باشد

Page 137: Assembly

:مثال

MOV AX,6E2FH

MOV CX,13D4H

ADD AX,CX

:مثال

MOV DX,542FH

MOV BX,12E0H

ADD DX,BX

Page 138: Assembly

گسترش عالمت عملوند

کپی AHبيت هشتم درتمام بيت های CBWبا استفاده از

ميشود

AL AH

کپی DXبيت شانزدهم درتمام بيت های CWDبا استفاده از

ميشود

AX DX

Page 139: Assembly

مثال

MOV AX,260

CWD

مثال

MOV AL,-2

CBW

Page 140: Assembly

……… 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

Page 141: Assembly

IDIV

دستورفوق دستورتقسيم عالمتداراست•

تقسيم مقسوم مقسوم عليه خارج قسمت باقيمانده

AH AL حافظه ثبات يا AL= بايتCBW بايت/ بايت

DX AX حافظه ثبات يا AX=کلمه CWD کلمه/ کلمه

AH AL حافظه ثبات يا AX کلمه/ بايت

DX AX حافظه ثبات يا DX:AX جفت کلمه/کلمه

Page 142: Assembly

…… 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

Page 143: Assembly

IMUL

برای ضرب اعداد عالمتداربکارمی رود•

2عملوند نتيجه 1عملوند ضرب

AX ثبات يا حافظه AL بايت دربايت

DX:AX ثبات يا حافظه AX کلمه درکلمه

DX:AX ثبات يا حافظه AL=بايت CBW بايت درکلمه

Page 144: Assembly

SAR

شيفت حسابی به چپ بصورت زيرعمل می کند

MSB MSB----------- LSB CF

:مثال

MOV AL,-10

SAR AL,1

استفاده می شود 2برای تقسيم اعدادعالمتداربر SARاز

Page 145: Assembly

:مثال

MOV AX,-9

MOV BL,2

IDIV BL

MOV AX,-9

SAR AX,1

است SHLهمان دستور “ دقيقا SALدستور

Page 146: Assembly

NEGدستور

مکمل دو آنرا نتيجه می دهد)اين دستور عددی را منفی می کند

MOV AL,100

NEG AL

Page 147: Assembly

NOTدستور

مکمل يک )اين دستور تک تک بيت ها رامعکوس می کند

(عدد رامحاسبه می کند

MOV AL,05H

NOT AL