assembly 1

199
ASSEMBLY ASSEMBLY

Upload: api-3744913

Post on 07-Jun-2015

725 views

Category:

Documents


7 download

TRANSCRIPT

ASSEMBLYASSEMBLY

object .com , .exe برنامه تایپ

(.asm)

Compile Link

برنامه : نوشتن روش.I دستورDebug درDos.

.II از Turbo Asemblerاستفاده ، Macro Asembler.

با نامی با ذخیرهمثل asm.پسوند

Test.asm

متن ویرایشگر یک

Editor

Compile: برنامه

.ITlink ، Tasm.IIExe2bin ، Link5 ، Masm5.

اول حالت از استفاده1.c:\ asm> tasm test ; / l / zi

2. c:\asm> tlink test ; /t /v

خروجی

Test.obj

خروجی

Test.exe

Test.com

در نکته: ها برنامه اغلب windowsپسوند ، .com پسوند. با فایلها چون فقط com.است ،64 KB از

بقیه شوند می باعث و کنند می اشغال را حافظهبرنامه تا گیرد قرار عامل سیستم اختیار در حافظه

. شوند اجرا بتوانند دیگر، های

از :; استفاده فایل tasmدرهنگام فقط ،Compile میو ........ نداریم را سوئیچی هیچ از استفاده حق و شود

/l: با فایلی شود می باعث سوئیچ، ازین استفاده: bat.پسوند قبل بصورت برنامه شامل که شود ساخته

زیر objاز در ها خط خطا، وجود درصورت که بطوری . فایل در خطا فهمیدن با باشد می مشخص دستور هر

پسوند با دوباره asm.اصلی و کرده رفع را tasmخطا. نمائیم می اجرا را

/zi: سری یک شود می باعث سوئیچ Symbolاینفایل به هنگام obj , .exe.هایی که شود می اضافه

از را Sourceبتوانیم TDاستفاده خود برنامه واقعی . سوئیچ سوئیچ، این مکمل نماییم می در v/مشاهده

Tlink. باشد می/t: فایل که صورتی در کنیم استفاده سوئیچ از اگر

ساختار به comبا مستقیما را آن باشد، شده نوشتهتوسعه با اجرایی .com.فایل کند می تبدیل

/v: اجرایی فایلهای در سوئیچ مورد exe.اینمکمل عنوان به آن نقش و گیرد، می قرار استفاده

.tasmدر zi/سوئیچ باشد می

پسوندهای Testفایل توجه: exe , .bat , .com.با . فایل اجرای الویت دارد ذکر Testوجود پسوندهای با: بود خواهد زیر صورت به شده

حالت از استفادهc:\ asm> masm5 test ; / t.1دوم

2. c:\asm> link5 test ;

خروجی

Test.obj

خروجی

Test.exe3. c:\asm> exe2bin test.exe test.com

ساختار با فایل بخواهیم که صورتی comدرباشد.

1. test.com 2. test.exe 3. test.bat

باشند: مسیر یک در افزارها، نرم تمام بایستی توجه. کنیم کار مسیر همان در ما و

C:\asm> TD [filename.exe or filename.com]

)TDنکته: اجرایی فایلهای برای فقط ،.com , .exe )فایل. و باشد نداشته خطایی هیچ برنامه یعنی است

. باشد اجرایی نیز

CS: code segment

DS: data segment SS: Stack segment

Menu boxAx

bx . . Ip sp

Z s p t I c

ثباتها

ثباتهای Flag

زبان TDبرنامه شبیه محیطی ،C. دارد

. Runعمل F9کلید • شود می انجام

تا F4کلید • برنامه ابتدای از برنامه، اجرای عمل ،. میدهد انجام را نما مکان کنونی محل

اجرا F7کلید • دستور به دستور را برنامه توان می ، ( می. اجرا نیز را روالها درون دستورات حتی کرد

کند(.

را F8کلید • برنامه دستور به دستور اجرای عمل ، ( . اجرا ؟ یک در روالها که تفاوت این با دهد می انجام

.) کند می

. است شده تشکیل کد سری یک از العمل دستوردستورالعمل از متشکل ماشین، زبان که دید خواهیم . شوند می مشخص کد یک با کدام هر که است هایی

ارقام توسط کدها، این پردازشگر 0,1که واحد به ، . شوند می ارسال مرکزی

ماشین زبان به را ای برنامه بخواهیم که صورتی دررا اطالعات و ها دستورالعمل تمام بایستی بنویسم،

کد صورت ارسال 0,1به مرکزی پردازشگر واحد بهاست،. مشکل طریق این به نویسی برنامه اما کنیم . هر که شد ابداع اسمبلی زبان نام به زبانی بنابرایندستورعمل یک معادل آن، های دستورالعمل از یک . پایین سطح زبان یک بنابراین باشد می ماشین زبان

. باشد می

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

ثبات . Registerنام دارد وجود

: ثباتها بندی گروه1 : بیشترازثباتهای- ثباتها ازاین عمومی ثباتهای

ثباتها، این تعداد و شود می استفاده دیگردراسمبلینامهای با که باشد می DX , CX , BX , AXچهارعدد

. باشند می دستیابی قابل

: شوند می تقسیم دسته دو به خود ثباتها، ازاین هریک

بطورخاص، ماشین، زبان دستورالعملهای از بعضی . از بعضی مورد در اما دارد ثباتها ازاین یکی به نیاز

ثباتها، این از یک هر از استفاده دستورالعملها، . کند نمی تفاوتی

8 bit 8 bit

AH )high( AL )Low(AX

Ah

Al

AX . شود: می استفاده محاسبات انجام برای) تقسیم) و ضرب

BX :استفاده دهی آدرس جهت پایه ثبات عنوان بهمیشود.

CX. میشود: استفاده شماره ثبات عنوان بهDX . میشود: استفاده ای رشته عملیات برای بیشتر

Segmentناحیه

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

: کنیم می عمل ترتیب بدین اصلی، حافظه

ناحیه کدام در آدرس، این که شود مشخص باید ابتداابتدای با را قسمت آن تفاوت مقدار سپس دارد قرار

آدرس عنوان به را آن و کرده محاسبه در Offsetناحیه . توان می را حافظه از آدرس هر سپس گیریم می نظر

آدرس یک .Offsetو Segmentبا نمود مشخص

نکات:آدرسهای • از یک یک Offsetو Segmentهر حدود

. اند کلمه

فرد • به منجصر حافظه از بایت یک برای دهی آدرسآدرس به بستگی و .Segmentنیست دارد

هر • از Segmentدر توان حافظه، KB 64می. کرد استفاده

خواهیم • می که عملیاتی از یک هر اسمبلی زبان در . مثال، عنوان به شود انجام ثباتها در باید دهیم انجام

را اول عدد نماییم، جمع هم با را عدد دو بخواهیم اگررا دوم عدد سپس کنیم، می منتقل ثبات یک به

. کنیم می اضافه

1.CS Code Segment

. دارند قرار قطعه این در برنامه دستورات

یک: باید لزوما برنامه، هر اما CSنکته باشند، داشته. ندارند ضرورتی دیگر قسمتهای

2. SS Stack Segment

زیر فراخوانی موقع در بازگشت محلهای های آدرس. شوند می ذخیره ناحیه این در ها، برنامه

3. DS Data Segment

باشد،این داشته متغییر تعریف به نیاز برنامه اگر. داریم را ناحیه

ثباتهای ناحیه

5. ES Extra Segment

فوقانی حافظه به دسترسی و اطالعات ذخیره برای.Video Ramمثل شود می استفاده ناحیه این از

اگر: باشد، offset=438EHو ds=7FA2Hمثالاست مطلوب

`َA )فیزیکی آدرس محاسبه( Bمحاسبهمنطقی آدرس

C )باالترین و ترین پایین دهی Rangتعیین آدرسShiftl)ds(= 7FA20 (A

+ 438E

83DAE)H(

7FA2:438E)H( ( B

شاخص ثباتهای

برای اسمبلی زبان دستورالعملهای از بعضی درشاخص ثباتهای از حافظه با کار و ها رشته انتقال

(di , si. اند( اهمیت حائز بسیار و کنیم می استفاده

)IP )Instruction Pointsثبات ماشین زبان جاری دستورالعمل آدرس ثبات اینمی ذخیره خود در را باشد می اجرا حال در کهکنیم. کاری توانیم می ثبات این دادن تغییر با کند

. باشد اجرا قابل دیگری محل هر از برنامه که

پرچم ) (16ثبات بیتی مقدار خاصی مواقع در ثبات، این بیتهای از یک هر . نام به بیتی دارای ثبات این مثال، بعنوان گیرند می

صورت 0بیت در که باشد نتیجه 0می شدن. شود می چک بیت، آن مقدار محاسبات،

نام به بیتی دارای ( OverFlowضمنا ( می سرریزمقدار محاسبات، شدن سرریز صورت در که باشد

بیت .1این شود می

تغییر قابل ماشین زبان توسط بیتها، این محتویاتاسمبلی، زبان دستورات اکثر توسط و هستند

. کند می تغییر بیتها این محتویات

: است زیر صورت به ثبات این کلی شکل1155

1144

1133

1212 1111 1010 99 88 77 66 55 44 33 22 11 00

RR RR RR RR OFOF DFDF IIFF

TTFF

SSFF

ZZFF

UU AAFF

UU PPFF

UU UU

R = Rexrved U = Undefined

OF = Overflow ZF = Zero Flag

DF = Direction Flag SF = Sign Flag

IF = Interrupt Flag AF = Auxiliary Carry Flag

TF = Trap Flag PF = Parity Flag

CF = Carry Flag

Carry Flag: ) تاثیر ) محاسبات از معموال، انتقال بیت . بیت، ازاین تفریق و جمع اعمال برای پذیرد می

. ) در ) گردد می استفاده نقلی رقم انتقال عدد برایمانند بیت Shiftاعمالی آخرین بیتها، داده Shiftدادن

. گیرد می قرار بیت این در شده،

Parity Flag : زدایی اشکال برای معموال بیت، این از . عبارت به شود می استفاده اطالعات انتقال در. میرود کار به اطالعات صحت کنترل برای دیگر،

Auxiliary Carry Flag: بیت عنوان به بیت، این ازبیت .Carryجانشین شود می استفاده

Zero Flag: محاسباتی عمل نتیجه که صورتی 0دربیت، این مقدار باشد، . 1شده این غیر در شود می

.0صورت بود خواهد

Sign Flag: عملیات نتیجه بررسی برای و عالمت معنی بهمنفی . عملیات نتیجه اگر یعنی رود می بکار محاسباتی

با برابر ثبات یا بیت این شود .0وگرنه 1باشد می

Trap Flag: این از برنامه، دستور به دستور اجرای برای . بیت، این اگر وشد می استفاده به 1بیت برنامه باشد،

. گردد می اجرا دستور به دستور صورت

Interrupt Flag: کاری توانیم می بیت، این از استفاده با . گردند فعال غیر یا فعال ها، وقفه که کنیم

IF=0 فعال غیر ها فعال IF=1 وقفه ها وقفه

Direct Flag: ای رشته اعمال برای معموال بیت، این از . نیز را ها رشته انتقال یا مقایسه جهت شود می استفاده

. کند می مشخص

DF=1 Right to Left DF=0 Left to Right

Overflow: دارای محاسباتی عمل که صورتی دربیت، این مقدار باشد، صورت 1سرریز این غیر 0در

. بود خواهد

)SP )Stack Pointerثبات آدرس ثبات، خود، Topاین در و گرداند می بر را پشته

. کند می ذخیره

)BP )Base Pointerثبات با ) کار پایه، ثبات یک بعنوان ثبات، این استفاده( Stackاز

. شود می

Interruptوقفه انتقال با که هستند ای شده آماده های برنامه ها، وقفه ( می انجام ثبات توسط انتقال، عمل مقادیری دادنانجام( را بخصوصی کارهای توانیم می آنها، با شودنیز. ها وقفه توسط بازگشتی مقادیر ضمنا دهیم . بین ارتباط راههای از یکی گردد می باز ثباتها، توسط

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

حافظه در کامپیوتر، اندازی راه ابتدای در ها وقفهیک ایجاد با و شوند می مقیم ( Signalاصلی ( عالمت

می نویس برنامه چنین هم آیند می در اجرا به خاص،خاص دستوراتی اجرای برای ها، وقفه از تواند

. کلید فضردن با مثال کند وقفه Print Screenاستفادهچاپگر به نمایش صفحه محتویات که گردد می ایجاد

. کلیدهای فشردن با یا و شود می Ctrl+Alt+Delمنتقل.Resetکامپیوتر شود می

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

داخلی خارجی

سخت افزاریسخت افزاری

افزاری افزاری نرم نرم

سیستم کاربر

Dos Bios

: افزاری نرم های وقفه

زبان برنامه یک فراخوانی موقع در که اند هایی وقفه. گردند می اجرا ماشین

: افزاری سخت های وقفه

عمل یک آنها، فراخوانی موقع در که اند هایی وقفه ( . وقفه مانند شود می انجام افزاری (Timerسخت

:Intدستور می استفاده وقفه یک کردن اجرا برای دستور، این

. است. زیر صورت به دستور این کلی شکل شودInt شمارهوقفه

: مهم بسیار نکته

دستور از باشیم خواسته اینکه از استفاده Intقبلاز بعضی به را اولیه مقادیر از سری یک بایستی کنیم

ثبات مخصوصا بدهیم، سرویس ahثباتها شماره که. گیرد می قرار آن در وقفه

وقفه

00010203

سرویس ها

33H

00010203

کردن فعالmouse دادن نشانmouse

مثال

.1Ah =سرویس مقادیر) شماره دادن نیاز صورت در) ثباتها از بعضی به اولیه

وقفه = 2. شماره دستور از intاستفاده

مثالصفحه روی را تان خانوادگی نام که بنویسید ای برنامه

( . ساختار با دهد نشان Assemblerدر com.نمایش) شود Model Tiny,c,os-dos. نوشته

.286

.code

.startupJmp l1 Str1 db “sharifi”,’$’L1: mov dx,offset str1 mov ah,09h int 21h.exitend

نکات:

به 21hوقفه • مربوط ،. است نمایش صفحه

قرار • که ای رشته آدرسدر شود چاپ قرار dxاست

. گیرد می

وقفه 09hسرویس • 21hازمی بکار رشته چاپ برای

رود.

به • اگر ) dosبازگشتاجرا از پس برنامه نباشد

.) کند می قفل

زدایی اشکال Debugبرنامه

ایجاد یا و ها برنامه زدایی اشکال برای است ای وسیلهاجرای همچنین، و ماشین زبان به هایی برنامه کردن

سیستم با کامپیوترهایی در ثباتها دادن تغییر و ها وقفه. Windowsیا Dosعامل کنند می کار

کلمه بایستی برنامه این اجرای در Debugبرای را . که صورتی در کنیم تایپ عامل سیستم اعالن جلوی

در را فایل نام نماییم، زدایی اشکال را فایلی بخواهیم. کنیم می ذکر نیز دستور این جلوی

Debug فایلهای زدایی اشکال برای exe, .com.فقط. دارد کاربرد

به ورود از صفحه )_( Debugپس پایین تیره خط ،آمادگی دهنده .Debugنشان باشد می دستورات برای

به مربوط Debugدستورات

R )Register( :ثباتها محتویات دستود، این از استفاده باثبات بیتهای ؟ همراه به روی Flagرا بر توان می

. این جلوی در اگر اما نمود مشاهده نمایش صفحهدادن نشان ضمن شود، تایپ ثبات یک نام دستور،

خوهد ما به را جدید مقدار دادن امکان آن، محتویاتR-داد.

ax = 0000 bx = 0010 ……

ds = 4cf2 ……

-R cx

cx : فعلی مقدار

1مثال

2مثال

H )Hex Arithmetic( :مبنای در عدد دو که صورتی درو مجموع کنیم، ذکر دستور جلوی در دسیمال هگزاد

. کند می چاپ و محاسبه را آنها اول H-اختالف عدد دوم عدد

-H 5F 2B

Flag Code when set )=1( Code when reset )=0(

Of )Overflow( Df )Direction( If )Interrupt( Sf )Sign( Zf )Zero( Af )Auxiliary( Pf )Parity( Cf )Carry(

OV )Overflow( DN )Down( EI )Enable Interrupt( NG )negative( ZR )Zero( AC)Auxiliary Carry( PE )Parity Even( CY )Carry(

NV )No Overflow( UP )Up( DI )Disable Interrupt( PL )Plus or Positive( NZ )Not Zero( NA )Not Auxiliary( PO )Parity Odd( NC )Not Carry(

وضعیت ثبات کدهای

N )Name( :داخل در را اجرایی فایل یک بخواهیم اگرDebug وجود به را فایلی یا و کنیم زدایی اشکال ،

این توسط کنیم، ذخیره دیسک روی بر یا و آوریم. کنیم مشخص را آن نام توانیم می دستور

-N فایل com.نام

L )Load( :استفاده با فایل، نام کردن مشخص از پسو خوانده دیسک روی از را فایل توان می دستور این از

. نماییم زدایی اشکال آماده را آن

Q )Quit( :از خروج برای دستور، ثبت Debugازاین بدون ،. شود می استفاده شده اعمال تغییرات

W )Write( :را آن نام قبال که فایلی کردن ذخیره برای . نماییم می استفاده دستور این از ایم، کرده مشخص

ثبات در آن تعداد که بایتی تعداد به دستور، Cxایندر موجود برنامه محل ابتدای از دارد، بر Debugقرار

. کنیم می ذخیره دیسک 0100:روی

-R cx01F2:N بایت g تعداد-N test.exe-W

دستورات برنامهثبات محتویات و cxنمایش

آن مقدار تعویض امکان

U )Unassemble( :توانیم می دستور، این از استفاده با ) ( در موجود دستورات از اسمبلی زبان به لیستی ( . حافظه در برنامهای اگر نماییم مشاهده را حافظه

قبال یعنی باشد (. Loadموجود کلی شکل باشد شده: است زیر صورت به دستور این

U <Student address> <End address>U <Student address> <Byte>

. باشد شده مشخص مبدا بایستی حتمادستورات Debugدر شروع آدرس که کنیم دقت باید ،

را کار این که این یا و شود می آغاز آدرسی چه از برنامه،عهده و Debugبه کرده شروع ابتدا، از که بگذاریم

. دهد تشخیص را اسمبلی زبان دستورات

A )Assembler( :زیر صورت به دستور این کلی شکلاست:

-A شروع آدرس

وارد که را محلی آدرس دستور، این کردن وارد از پسدر توانیم می و ظاهرشده چپ سمت در ایم، کرده

. بنویسیم را اسمبلی دستورات فقط آن، جلویcs:offset

-a 100

0100 : شماره

-

آدرس منطقی

Cs آدرس : offset

G )Go( :ازآدرس برنامه، اجرای برای دستور ازاین . این کلی شکل شود می استفاده شده مشخص

: باشد زیرمی صورت به دستورC:\>Debug

-N Reset.com

-l

-U 100 112

-G = 100

-G = 100 112

آدرس از دستورات اجرایموجود 100 دستور آخرین تا

. حافظه درآدرس از دستورات اجرای

آدرس 100 .112تا

<=Start address> <=Stop adress >

T )Trap( :به خط دیدن و کردن اجرا برای دستور، این از . این کلی شکل شود می استفاده نواحی و ثباتها خط

: است زیر صورت به دستور-T <= Start Address> < دستورات < تعداد

-T =100 5

آدرس از دستورات تعداد 100اجرای بهدستور 5

اسمبلی زبان دستوراتMov :یک به مقدار یک دادن انتقال برای دستور، ازاین

. گیرد می قرار استفاده مورد ثبات

Mov x,yMov x,y FF متغییر movmovدر در ازدو توان متغییر نمی ازدو توان نمی . کرد . استفاده کرد استفاده

Mov bl,F2FMov bl,F2F FF BlBl مقدار درحالیکه بایتی، مقدار یک درحالیکه بایتی، یکاز از بیش بایت.بایت.11بیش

Mov ds,42F2HMov ds,42F2H FF به مستقیما توان به نمی مستقیما توان مقدار مقدار dsdsنمیداد.داد.

Mov ax,42F2HMov ax,42F2HMov ds,axMov ds,ax

TT . باالیی دستور صحیح .شکل باالیی دستور صحیح شکل

Mov di,offset areaMov di,offset areaLea di,areaLea di,area

TT ناحیه شروع ناحیه آدرس شروع DIDIدر در areaareaآدرس. گیرد .قرارمی گیرد قرارمی

دریک را ازحافظه ناحیه یک دریک آدرس را ازحافظه ناحیه یک آدرسریزیم می ریزیم ثبات می ثبات

Mov al,’A’Mov al,’A’Mov al,65Mov al,65Mov al, 65decimalMov al, 65decimalMov al,41hexdecimalMov al,41hexdecimal

TT به را مقداری باشیم خواسته به اگر را مقداری باشیم خواسته اگرتوانیم می دهیم، نسبت ثبات توانیم یک می دهیم، نسبت ثبات یک

. کنیم مشخص نیز را آن .نوع کنیم مشخص نیز را آن نوع

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

نظر در دستور این برای بایستی را نکاتیبگیریم.

Mov al,01000001B

سیستم: 19Hوقفه آن، توسط که است ای bootوقفه. شود می

به: 20Hوقفه بازگشت و برنامه اتمام مورد Dosبرای. گیرد می قرار استفاده

وقفه 4CHسرویس تواند: 21Hاز می سرویس، اینبه بازگشت باعث و برد پایان به را برنامه Dosاجرای

(. وقفه شود (20Hمی است معادل سرویس، این با

C:\asm>Debug-a 100… : 0100 int 19H… : 0102 mov ah,4CH… : 0104 int 21H… : 010b-R cx… :6-N Reset.com-W-QC:\asm>Dir Reset.com

تمریندر. 1 ای برنامه

Debug با که بنویسیدبرنامه، این اجرای

شدن Resetباعث شود؟ دستگاه

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

(Debug) C:\asm>Debug-a 100… : 0100 mov ah,06H… : 0102 mov cx,aa… : 0105 mov dx,F65… : 0108 mov al,5… : 010a int 10H

… : 010c-R cx:C-N Cls.com

1 -W-Q:0106 int 10H:0108 int 21H:010a-R cx:A-N Curoor.com-WWriting 0000A Byte-@c:\asm>

2

دستورات. 3 از استفاده برنامه Debugبا اسمبلی و: بنویسید را زیر وقفه به مربوط

وقفه 01Hسرویس تغییر 10Hاز را نما مکان اندازه ، . در اگر دهد در chمی و شروع پایان clخط نقطه

نمائیم اجرا را وقفه این و دهیم تغییر را نما مکانخواهد خط دو این فاصله اندازه به نما مکان اندازه

شد.-a 100

:0100 mov ah,01

:0102 mov ch,01

:0104 mov ch,E)14(

:010a

-R cx

:A

1-N cu.com-WWriting 0000A Byte-@:010C int 21H:010E-R cx

2:E

-N cu1.com

-W

-@

3

بنویسیدکه. 4 ای برنامهاول حالت به را نما مکان

برگرداند؟

بنویسیدکه. 5 ای برنامهدرموقعیت را نما مکان

کند؟ 10,10 چاپ -a 100… : 0100 mov ah,02H… : 0102 mov dh,A… : 0104 mov dl,A… : 0106 int 10H… : 0108 mov ah,02H… : 010A mov dh,41

-a 100… : 0100 mov ah,01H… : 0102 mov ch,c… : 0104 mov cl,c… : 0106 int 10H… : 0108 int 20H

دستورات شبهدر اسمبلی، برنامه توان Macro Assemblerیک می را

. از منظور کرد تقسیم دستورات شبه و دستورات بهدر و باشد می اسمبلی زبان دستورا همان دستورات،تبدیل زبان کد یک به کدام هر برنامه، ترجمه موقع

. شوند می

آدرس با ریز برنامه به کمک برای دستورات، شبه امابرنامه برنامه،به شدن خوانا و حافظه مختلف های . به برنامه، ترجمه موقع در که شوند می اضافه . نام برای مثال، شود می تبدیل نظر مورد های آدرستوسط که دارد وجود دستوراتی شبه متغیرها، گذاریتعریف را متغییرهایی برنامه، طول در توانیم می آنها،متغییری که کجا هر برنامه، ترجمه موقع در و کنیم

. شد خواهد جایگزین آن آدرس باشیم، کرده ذکر

نماد تعریف دستور شبهدر EQUکلمه مساوی عالمت Macro Assemblerیا

رود می بکار تعریف برای خود، متناظر مقادیر توسطشده، داده مقادیر با نمادها برنامه، ترجمه موقع در و

. شوند می متغییر جایگزین EQU ناممقدار

Enter EQU 13

Eoline EQU ‘$’متغییر و داده تعریف

دستورات تعریف DT,DQ,DD,DW,DBشبه برای ، . به تعریف کلی شکل شوند می استفاده متغییر

: است زیر صورتDB متغییر طول نام متغییر

?Dup)(مقدار

زیر صورت به شده گفته دستورات شبه از یک هر. شود می بیان

DB ) Define Byte ( 1 Byte

DW ) Define Word ( 2 Byte

DD ) Define Double Word ( 4 Byte

DQ ) Define Quail Word ( 6 Byte

DT ) Define Ten Byte ( 10 Byte

1.F1 db 30

2.F2 db “Ali”

3.F3 db 65,’L’,’$’

4.F4 db ?

5.F5 db

3FH,2FH,00H,4CH

6.F6 db 10 Dup)0(

F1 طول اولیه 1به مقدار با .30بایت

F2 طول اولیه 1به مقدار با .30بایت

F3 طول به آرایه نوع از مقدار 3متغییری با بایت. متفاوت اولیه

F4 طول به مقدار 1متغییری هنوز که بایت. گیرد نمی

F6 بطول آرایه نوع اولیه 10از مقدار با بایتصفر.

F5 طول به آرایه نوع از اولیه 4متغییری مقدار با بایت. شده داده

7.F7 db 10 Dup)?(

8.F8 dw 10

9.F9 dw 30,40,108,456

10.F10 dw 12 Dup)?(

11.F11 db 1,2,3

db 4,5,6

F7 بطول آرایه نوع اولیه 10از مقدار که بایتندادیم.

F8 مقداراولیه با کلمه یک بطول .10متغییری

F9 بطول ای .4آرایه شده داده مقداراولیه با کلمه

F7 بطول ای مقداراولیه 12آرایه هیچ بدون کلمهای.

F9 بطول آرایه ازنوع با 6متغییری بایت. شده داده مقادیراولیه

دستور Callشبهمورد زیربرنامه یک فراخوانی برای دستور، اینزیربرنامه فراخوانی برای گیرد قرارمی استفادهنام یا و زیربرنامه آدرس باید اصلی، درحافظه موجود

. کنیم قید دستور، این درجلوی را زیربرنامه

: است زیر بصورت دستور ازاین استفاده کلی شکل

Call زیربرنامه نام

Call زیربرنامه cs:offset آدرس

دستور Endpشبهیک ابتدای کردن مشخص برای دستور، شبه این

. صورت این در گیرد می قرار استفاده مورد زیربرنامهدستور شبه از باید برنامه، زیر پایان Endp )End Ofدر

Line(. نمائیم استفاده

باشیم، کرده معرفی صورت بدین را زیربرنامه اگردستور توسط توانیم با callمی را زیربرنامه آن

. کنیم فراخوانی ذکرنام،

روبرو بصورت دستور، این از استفاده کلی شکلاست:

زیربرنامه Proc [near/far] نام

برنامه دستورات

Ret اصلی برنامه به بازگشت

زیربرنامه Endp نام

Near :ودرداخل نباشد خارجی زیربرنامه که درصورتیSegment. باشد جاری

Far :داخل در و باشد خارجی زیربرنامه که صورتی درSegment. نباشد جاری

بنام( روالی که putstrمثال ای رشته در که بنویسیدثبات در آن شود $ dxآدرس می ختم به و دارد قرار

. کند چاپ نما، مکان جاری محل در Putstr proc nearرا

Mov ah,09H

Int 21H

Ret

Putstr endp

که( ای رشته چاپ جهت نکتهثبات در آن قرار dxآدرس

$ از شود می ختم به و داردمربوطه سرویس با وقفه این

. شود می استفاده

::RetRetدستور دستور

زير اجراي ، برنامه زير يك در كه صورتي زير در اجراي ، برنامه زير يك در كه صورتي دربه برنامه اجراي ، برسد دستور اين به به برنامه برنامه اجراي ، برسد دستور اين به برنامه

ابتداي در آن آدرس كه گردد مي باز ابتداي محلي در آن آدرس كه گردد مي باز stackstackمحليدارد . دارد .قرار قرار

زبان در حافظه دهي آدرس زبان انواع در حافظه دهي آدرس انواع:: اسمبلياسمبلي

مستقيم -1 -1 دسترسي و دهي مستقيم آدرس دسترسي و دهي ::آدرس

در متغيير نام مستقيما ، دهي آدرس نوع اين در در متغيير نام مستقيما ، دهي آدرس نوع اين درشود مي ذكر اسمبلي زبان شود دستور مي ذكر اسمبلي زبان .. دستور

:: مثالمثالX db 25X db 25Y db 45Y db 45Mov al,xMov al,xMov ah,yMov ah,y

22 - - : بالفصل :دسترسي بالفصل دسترسي

ذكر دستور در بالفاصله داده دسترسي، نوع اين ذكر در دستور در بالفاصله داده دسترسي، نوع اين درشود شود مي ..مي

Mov bx,4f2hMov bx,4f2h : : مثالمثالMov al,25Mov al,25

ثبات -3 -3 توسط ثبات دسترسي توسط ::دسترسي

دستور در را ثبات يك نام ، دسترسي نوع اين دستور در در را ثبات يك نام ، دسترسي نوع اين درنام ذكر از ما منظور و كنيم مي ذكر اسمبلي نام زبان ذكر از ما منظور و كنيم مي ذكر اسمبلي زبان

دارد قرار ثبات آن در كه است مقداري ، دارد ثبات قرار ثبات آن در كه است مقداري ، .. ثبات

: :مثالمثال

Mov ax,datasegMov ax,datasegMov ds,axMov ds,ax

پايه -4 -4 يا شاخص ثبات توسط مستقيم غير پايه دسترسي يا شاخص ثبات توسط مستقيم غير ::دسترسي

محتويات كه حافظه از محلي دهي آدرس نوع اين محتويات در كه حافظه از محلي دهي آدرس نوع اين درو گيرد قرارمي ثبات يك در ، است نظر مورد و آن گيرد قرارمي ثبات يك در ، است نظر مورد آن

استفاده ، آدرس آن محتويات از ، ثبات آن استفاده توسط ، آدرس آن محتويات از ، ثبات آن توسطكند كند مي .. مي

::مثالمثال

Mov bx,103Mov bx,103

Mov al,[bx] al=9fMov al,[bx] al=9f

8 12

41 9F

27

3E

100 101 102 103 104 105 آدرس ] [ محتويات

شده داده

ثبات -5 -5 به نسبت نسبي مستقيم غير ثبات دسترسي به نسبت نسبي مستقيم غير دسترسي:: پايهپايه

محتويات كه محلي آدرس ، دسترسي نوع اين محتويات در كه محلي آدرس ، دسترسي نوع اين درپايه ثبات در ، است نظر مورد پايه آن ثبات در ، است نظر مورد مي ((BXBX))آن مي قرار قرار

شود . مي اضافه آن به نيز مكان تفاوت و شود .گيرد مي اضافه آن به نيز مكان تفاوت و گيرد

مثال:مثال:

Mov bx,100Mov bx,100

Mov al,[bx+4] al=27Mov al,[bx+4] al=27

8 12

41 9F

27

3E

100 101 102 103 104 105

Mov al,[bx+n]

Mov al,n[bx]

Mov al,[bx]+n

شاخص -6 -6 ثبات به نسبت نسبي شاخص دسترسي ثبات به نسبت نسبي :: دسترسي

بعنوان را حافظه از دسترسي،محلي نوع اين بعنوان در را حافظه از دسترسي،محلي نوع اين دريكي در را آن مكان تفاوت و گرفته نظر در يكي مبدا در را آن مكان تفاوت و گرفته نظر در مبدا

شاخص ) ثباتهاي شاخص )از ثباتهاي دهيم( .didiيا يا sisiاز مي دهيم( .قرار مي قرار

مورد مكان تفاوت اضافه به مبدا محل مورد محتويات مكان تفاوت اضافه به مبدا محل محتوياتاست . است .نظر نظر

مثال:مثال:

String db “abcdefgString db “abcdefg’$’,”’$’,”

Mov si,3Mov si,3

Mov al,string[si] al=‘dMov al,string[si] al=‘d’’

وشاخص -7 -7 پايه ثبات به نسبت نسبي وشاخص دسترسي پايه ثبات به نسبت نسبي ::دسترسي

ئمبدا بعنوان حافظه از محلي ، ديترسي نوع اين ئمبدا در بعنوان حافظه از محلي ، ديترسي نوع اين درثبات هاي آدرس مجموع و شود مي گرفته نظر ثبات در هاي آدرس مجموع و شود مي گرفته نظر در

شود مي جمع مبدا آدرس با ، شاخص و شود پايه مي جمع مبدا آدرس با ، شاخص و .. پايه

BX

BX

BX

BX

SI SI SI SI

Area [bx][si Area [bx][si يايا di ]di ]Area [ bx+si]Area [ bx+si]String db “abcdefg”.’$’String db “abcdefg”.’$’Mov si,3Mov si,3Mov bx,2Mov bx,2Mov al,string[bx][si] al=‘ f ’Mov al,string[bx][si] al=‘ f ’

::تمرينتمرين

اسمبلي زبان در برنامه يك اسمبلي ساختار زبان در برنامه يك :: ساختار

از بايد ، اسمبلي زبان در برنامه يك كلي از بطور بايد ، اسمبلي زبان در برنامه يك كلي بطورباشد شده تشكيل زير قسمت باشد چهار شده تشكيل زير قسمت :: چهار

1.1. CS )code segment(CS )code segment(2.2. DS )data segment(DS )data segment(3.3. SS )stack segment(SS )stack segment(4.4. ES )extra segment(ES )extra segment(

مي cscs قسمتقسمت ضروري هاي قسمت جزء مي برنامه ضروري هاي قسمت جزء برنامهدر. است ممكن آن ديگر قسمت سه اما در. باشد است ممكن آن ديگر قسمت سه اما باشدنگيرد . قرار استفاده مورد ها برنامه از نگيرد .برخي قرار استفاده مورد ها برنامه از برخي

قسمت در را ها متغيير تعريف قسمت اگر در را ها متغيير تعريف دهيم cscsاگر دهيم انجام انجامآدري : روي از كه باشد طوري برنامه اجراي آدري : بايد روي از كه باشد طوري برنامه اجراي بايد

اجرا . موقع در وگرنه كند عبور اجرا . متغييرها موقع در وگرنه كند عبور متغييرهادر دستورالعمل بعنوان را متغييرها در محتويات دستورالعمل بعنوان را متغييرها محتويات

شود . مي مواجه خطا با و گرفته شود . نظر مي مواجه خطا با و گرفته نظر

تعريف قسمت چهار اين تمام ، اي برنامه در تعريف اگر قسمت چهار اين تمام ، اي برنامه در اگربا فايلي به تبديل ،قابل برنامه آن ، با شوند فايلي به تبديل ،قابل برنامه آن ، شوند

از . comcom..پسوند پسوند ، سرعت لحاظ از كه باشد از . مي ، سرعت لحاظ از كه باشد ميهاي هاي فايل باشند .exeexe..فايل مي باشند .سريعتر مي سريعتر

با فايل يك به را برنامه بخواهيم كه صورتي با در فايل يك به را برنامه بخواهيم كه صورتي درچهار comcom..پسوند پسوند اين تمام بايستي نمائيم چهار تبديل اين تمام بايستي نمائيم تبديل

. گيرند قرار قسمت يك در .قسمت گيرند قرار قسمت يك در ((code segmentcode segment))قسمت

هاي فايل مورد در هاي اما فايل مورد در از exeexe..اما توانند مي نواحي از اين توانند مي نواحي ايناين . از يكي كه صورتي در بنابراين باشند جدا اين . هم از يكي كه صورتي در بنابراين باشند جدا همفايل ، كنيم مي معرفي جداگانه طور به را فايل نواحي ، كنيم مي معرفي جداگانه طور به را نواحي

توسعه با فايل به تبديل قابل توسعه حاصل با فايل به تبديل قابل نيست .نيست .comcom..حاصل

هاي هاي فايل : :comcom..فايل

هاي فايل مورد در ، شد گفته كه هاي همانطور فايل مورد در ، شد گفته كه comcom..همانطورصورتي . در باشد ناحيه يك در بايد برنامه صورتي . تمام در باشد ناحيه يك در بايد برنامه تمام ، باشيم داشته برنامه در داده تعريف به نياز ، كه باشيم داشته برنامه در داده تعريف به نياز كهو كرده معرفي برنامه خود داخل در را آنها و بايد كرده معرفي برنامه خود داخل در را آنها بايدسمت به را برنامه مناسب، پرش دستورات سمت با به را برنامه مناسب، پرش دستورات با

كنيم . هدايت ، برنامه اصلي كنيم .كدهاي هدايت ، برنامه اصلي كدهاي

فايل فايل الگوهاي :: الگوهاي

هاي فايل هاي ساختار فايل comcom..ساختارMacro assemblerMacro assembler: :

..model smallmodel small..codecode

Main procMain proc org 100org 100 jmp l1jmp l1

……… ……… ……… ……… L1L1::

………………………………Main endpMain endp………………………………

داده تعريف محلها

دستورات برنامه

مي تعريف باشيم داشته فرعي توابع اگركنيم

برنامه دستورات

هاي فايل هاي ساختار فايل :comcomTurbo assembler:Turbo assembler..ساختار

.model tiny ,c,os_dos.model tiny ,c,os_dos

.286.286

.code.code

.sturtup.sturtup

Jmp l1Jmp l1

………………

………………

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

………………

L1:L1:

…………....

…………....

.exit0.exit0

endend

مي تعريف نظر مورد هاي داده قسمت اين درشود

تعريف قسمت اين در باشيم داشته برنامه زير اگرشود مي

برنامه اصلي دستورات

PSPPSP )programs segment )programs segmentتعريف تعريف prefix(prefix(:) برنامه ) پيشوند (:قطعه برنامه ) پيشوند قطعه

فايل يك اجراي موقع فايل در يك اجراي موقع ، comcom..در عامل ، سيستم عامل 256256سيستمbytebyte مي نظر در برنامه پيشوند قطعه عنوان مي به نظر در برنامه پيشوند قطعه عنوان به

فايل به مربوط دستورات و فايل گيرد به مربوط دستورات و از comcom..گيرد پس از را پس رادهد . مي قرار دهد .اين مي قرار اين

شامل : برنامه مورد در اساسي اطالعات ، ناحيه شامل : اين برنامه مورد در اساسي اطالعات ، ناحيه اينعامل سيستم به بازگشت دستورات ، برنامه عامل حجم سيستم به بازگشت دستورات ، برنامه حجم

dosdos را ديگر اطالعات و برنامه همراه پارامترهاي را ، ديگر اطالعات و برنامه همراه پارامترهاي ،يك . در آدرسها تمامي ، بنابراين دارد بر يك . در در آدرسها تمامي ، بنابراين دارد بر در

بگيرد .comcom..فايل فايل قرار ناحيه اين از بعد بگيرد .بايد قرار ناحيه اين از بعد بايد

آدرس ار را اسمبلي برنامه اينكه آدرس براي ار را اسمبلي برنامه اينكه بعد 256256براي بعد به بهو كنيم و شروع كنيم به 258byte258byteشروع را به اول را اختصاص اختصاص psppsp اول

در ، در دهيم ، دستور debugdebug دهيم از استفاده دستور با از استفاده در aa––با در و وmacro assemblermacro assembler از استفاده از با استفاده اين org 100horg 100h با اين ، ،

256byte256byte. كنيم مي ذخيره برنامه قطعه براي كنيم .را مي ذخيره برنامه قطعه براي را

و نوشته ساختار اين با را اسمبلي برنامه يك و اگر نوشته ساختار اين با را اسمبلي برنامه يك اگرفايل يك فايل به يك اتمام comcom..به از پس ، كنيم اتمام تبديل از پس ، كنيم تبديل

دستور به رسيدن و دستور برنامه به رسيدن و طور retretبرنامه به برنامه طور ، به برنامه ،به به خودكار و psppsp خودكار كرده و مراجعه كرده در int 20hint 20hمراجعه در را را

سيستم به بازگشت براي ، داده قرار آن سيستم ابتداي به بازگشت براي ، داده قرار آن ابتدايكند dosdosعامل عامل مي اجرا را آن و برد مي كار كند به مي اجرا را آن و برد مي كار به

:: تمرينتمرين

ساختار با بنويسيد اي ساختار برنامه با بنويسيد اي صفحه comcom..برنامه صفحه كه كهنمايش صفحه وسط در و نموده پاك را نمايش نمايش صفحه وسط در و نموده پاك را نمايش

فايل فايل ساختار ExeExe :. :.ساختار

فايل ساختار فايل در ساختار از exeexe..در يك از هر يك بصورت segmentsegmentهر بصورت ها هابا برنامه يك كلي شكل شوند مي تعريف با مجزا برنامه يك كلي شكل شوند مي تعريف مجزا

:exeexe..ساختار ساختار است زير :بصورت است زير بصورت

Stseg segmentStseg segment db 64 dup ) ? (db 64 dup ) ? ( Or dw 32 dup) ? ( Or dw 32 dup) ? ( Stseg endsStseg ends;……………)comments(;……………)comments(

Dtseg segment Dtseg segment ……………………....……………………....Dtseg endsDtseg ends;……………..;……………..Cdseg segmentCdseg segment main proc nearmain proc near assume assume

s:cdseg,ds:dtseg,ss:stseg,es:nothing s:cdseg,ds:dtseg,ss:stseg,es:nothing mov ax,dtsegmov ax,dtseg mov ds,axmov ds,ax …………… …………… …………… …………… …………… …………… mov ah,4chmov ah,4ch Int 21hInt 21h main endpmain endp …………… …………… ………… …………...... cdseg endscdseg ends end mainend main

نياز مورد هاي داده تعريف محل برنامه

دستورات نوشتن محلبرنامه

زير و روالها نوشتن محلها برنامه

دستور دستور مفهوم ::)ptrptr )pointer()pointerمفهوم

و حافظه از محلي به كردن اشاره براي دستور و اين حافظه از محلي به كردن اشاره براي دستور اينمي قسمت آن از گرفتن مقدار يا و دادن مي مقدار قسمت آن از گرفتن مقدار يا و دادن مقدار

انواع تواند مي كه انواع باشد تواند مي كه byte,word,dword,qwordbyte,word,dword,qword باشد. كند دهي آدرس .را كند دهي آدرس را

مثال:مثال:

D1 db 32h,7fh,99h,932hD1 db 32h,7fh,99h,932hD2 dw 67f1hD2 dw 67f1hD3 dd 22229999hD3 dd 22229999h

1.1. Mov ax,wordptr d1Mov ax,wordptr d1 ax=7f23ax=7f232.2. Mov bx,wordptr d1+2Mov bx,wordptr d1+2 bx=9299bx=92993.3. Mov al,byteptr d2Mov al,byteptr d2 al=f1hal=f1h4.4. Mov ax,wordptr d3Mov ax,wordptr d3 ax=9999hax=9999h5.5. Mov ax,wordptr d2Mov ax,wordptr d2 ax=67f1hax=67f1h6.6. Mov bx,wordptr d3+2Mov bx,wordptr d3+2 bx=2222hbx=2222h

D1 db 32h,7fh,99h,932hD1 db 32h,7fh,99h,932hD2 dw 67f1hD2 dw 67f1hD3 dd 22229999hD3 dd 22229999h

ثبات يك با مقدار يك كردن جمع براي دستور اين ثبات از يك با مقدار يك كردن جمع براي دستور اين ازبصورت . دستور اين كلي شكل شود مي بصورت . استفاده دستور اين كلي شكل شود مي استفاده

است : است : زير زير

Add op1,op2Add op1,op2

opi=opi+op2opi=opi+op2

نكته:نكته:

BitBit تغيير ، دستور اين انجام با زير وضعيت ثبات تغيير هاي ، دستور اين انجام با زير وضعيت ثبات هاي: كرد :خواهند كرد خواهند

O S Z A P CO S Z A P C

: : addaddدستوردستور

::)adc adc )add with carry()add with carryدستوردستور

بيت دستور اين انجام بيت با دستور اين انجام ، carrycarry با جمع عمليات ، در جمع عمليات درنمود . خواهد نمود .شركت خواهد شركت

تمرين:تمرين:

ثباتهاي ثباتهاي مقدار هاي al,ahal,ah مقدار نشانه هاي و نشانه را را sf,cf,of,zfsf,cf,of,zfوكنيد : مشخص زير دستورات انجام از كنيد :پس مشخص زير دستورات انجام از پس

Mov al,a3hMov al,a3h

Mov bl,8ehMov bl,8eh

Add al,bl al=al+blAdd al,bl al=al+bl

1 1

a 3

+ 8 E

3 1

0011 0001

Sf=0 zf=0

Cf=1 of=1

: : subsubدستوردستور

ثبات يك از مقدار يك كردن كم براي دستور اين ثبات از يك از مقدار يك كردن كم براي دستور اين ازدستور . اين كلي شكا شود مي دستور . استفاده اين كلي شكا شود مي استفاده

است زير است بصورت زير :: بصورت

Sub op1,op2 op1=op1-op2Sub op1,op2 op1=op1-op2

::نكتهنكته

دستور اين انجام دستور با اين انجام بصورت bitbitبا وضعيت ثبات بصورت هاي وضعيت ثبات هاي: كنند مي تغيير :زير كنند مي تغيير زير

O S Z A P CO S Z A P C

::)sbbsbb )sub with barron()sub with barronدستور دستور

اين از انتقال بيت همراه به كردن تفريق اين براي از انتقال بيت همراه به كردن تفريق برايدستور مانند كه شود مي استفاده دستور دستور مانند كه شود مي استفاده adcadcدستور

مي ) كم ديگر عدد از را عدد يك كند مي مي ) عمل كم ديگر عدد از را عدد يك كند مي عملشركت ( نيز انتقال بيت ، محاسبه اين در كه شركت ( كند نيز انتقال بيت ، محاسبه اين در كه كند

كند . كند .مي مي

هم غير متغيرهاي كردن تفريق براي دستور هم اين غير متغيرهاي كردن تفريق براي دستور اينمي استفاده كلمه يك از بيش طول با يا و مي طول استفاده كلمه يك از بيش طول با يا و طول

شود .شود .

::Mul , ImulMul , Imulدستور دستور

اسمبلي زبان در ضرب عمل براي دستور اين اسمبلي از زبان در ضرب عمل براي دستور اين ازداراي . فقط ، دستور دو اين شود مي داراي . استفاده فقط ، دستور دو اين شود مي استفاده

باشند مي عملوند باشند يك مي عملوند .. يك

MulMul و عالمت بدون ضرب و ،براي عالمت بدون ضرب براي ImulImul،براي براي ، ،شود . مي استفاده عالمت با شود .ضرب مي استفاده عالمت با ضرب

ثبات در را ،عملوند دستور دو ثبات اين در را ،عملوند دستور دو ثبات alalاين ثبات يا axaxيا. كنند مي .ضرب كنند مي ضرب

باشد بايتي يك عملوند باشد اگر بايتي يك عملوند ::اگرثبات در را ثبات آن در را ثبات alalآن در را حاصل و كرده ثبات ضرب در را حاصل و كرده ضرب

axax. دهد مي .قرار دهد مي قرار: باشد بايتي دو عملوند :اگر باشد بايتي دو عملوند اگر

ثبات در را ثبات آن در را ثبات axaxآن در را حاصل و كرده ثبات ضرب در را حاصل و كرده ضربax,dxax,dx. ميدهد ميدهد .قرار قرار

در را چپ سمت بايت در دو را چپ سمت بايت سمت dxdxدو بايت دو سمت و بايت دو وثبات در را ثبات راست در را دهد axaxراست مي دهد قرار مي قرار

: است زير بصورت دستور اين كلي :شكل است زير بصورت دستور اين كلي شكل Mul operandMul operand

OrOrImul operandImul operand

دستور اين انجام دستور با اين انجام ، bitbitبا وضعيت ثبات از زير ، هاي وضعيت ثبات از زير هاي: كنند مي :تغيير كنند مي تغيير

O S Z A P CO S Z A P C

byte*byte

word*word

word*byte

AL

AX

Al =byte

Ah=0

يا ثباتحافظه

يا ثباتحافظه

يا ثباتحافظه

AX

DX:AX

DX:AX

::مثالمثال1(Mov al,20h1(Mov al,20h Mov bl,3fhMov bl,3fh Mul bl ax=al*blMul bl ax=al*bl

2(X dw 2051h2(X dw 2051hMov ax,f201hMov ax,f201hMul x dx:axMul x dx:ax

ارزش كم بايت ارزش دو كم بايت ==axaxدوارزش با بايت ارزش دو با بايت ==dxdx دو

3)Mov ah=00h3)Mov ah=00h

Mov al,3bhMov al,3bh

Mov bl,ffhMov bl,ffh

Mul bl dx:ax Mul bl dx:ax

ارزش كم بايت ارزش دو كم بايت ==axaxدو

ارزش با بايت ارزش دو با بايت ==dxdx دو

امتحان سوال امتحان نمونه سوال :: نمونه

طول xx اگراگر به حافظه از متغيير طول يك به حافظه از متغيير و 11يك و بايت يك يك yyبايتطول به حافظه از طول متغيير به حافظه از رابطه 1word1wordمتغيير رابطه باشد باشد

كنيد . سازي شبيه اسمبلي زبان به را كنيد .زير سازي شبيه اسمبلي زبان به را زير

Y=x^3-3x^2+7Y=x^3-3x^2+7

Mov ax , 00h or sub ax,axMov ax , 00h or sub ax,axMov al,xMov al,xMul x ax=x^2Mul x ax=x^2Mov bx,axMov bx,axMul x ax=x^3Mul x ax=x^3Mov y,axMov y,axMov ax,bxMov ax,bxMul 3 ax=3x^2Mul 3 ax=3x^2Mov bx,yMov bx,ySub bx,ax bx=x^3-3x^2Sub bx,ax bx=x^3-3x^2Add bx,7 bx=x^3-3x^2+7Add bx,7 bx=x^3-3x^2+7Mov y,bx y=x^3-3x^2+7 Mov y,bx y=x^3-3x^2+7

:: تمرينتمرين

عدد دو عدد ضرب دو متغييرهاي 44ضرب تفكيك به متغييرهاي بايتي تفكيك به 22بايتي.. بايتيبايتي

*

*

A

B

C C

A A+1 A+2 A+3

B B+1 B+2 B+3

C+1 C+2 C+3 C+4 C+5

+AL +AL+AL

.model tiny,c,os_dos.model tiny,c,os_dos

.286.286

.code.code

.startup.startupJmp l1Jmp l1 a dd 1234567a dd 1234567 b dd 1234567b dd 1234567 c db 6 dup)0(c db 6 dup)0(L1: L1: sub ah,ahsub ah,ah Mov ah, byte ptr aMov ah, byte ptr a mul byte ptr b mul byte ptr b

Mov byte ptr c,alMov byte ptr c,alMov byte ptr c+1,ahMov byte ptr c+1,ahSum ah,ahSum ah,ahMov al,byte ptr a+1Mov al,byte ptr a+1Mul byte ptr b+1Mul byte ptr b+1Add byte ptr c+1,alAdd byte ptr c+1,alMov byte ptr c+2,ahMov byte ptr c+2,ahSub ah,ahSub ah,ahMov al,byte ptr a+2Mov al,byte ptr a+2Mul byte ptr b+2Mul byte ptr b+2Add byte ptr c+2,alAdd byte ptr c+2,alMov byte ptr c+3,ah Mov byte ptr c+3,ah

Sub ah.ahSub ah.ah

Mov al,byte ptr a+3Mov al,byte ptr a+3

Mul byte ptr b+3Mul byte ptr b+3

Add byte ptr c+3,alAdd byte ptr c+3,al

Mov byte ptr c+4,ahMov byte ptr c+4,ah

.exit.exit

endend

::Div, IdivDiv, Idivدستور دستور

در ديگر مقدار يك بر مقدار يك تقسيم جهت دستور در اين ديگر مقدار يك بر مقدار يك تقسيم جهت دستور اينعالمت بدون اعداد و عالمتدار اعداد حالت عالمت دو بدون اعداد و عالمتدار اعداد حالت دو

شود مي شود استفاده مي ..استفادهدستور از باشند عالمت بدون اعداد دستور اگر از باشند عالمت بدون اعداد غير divdivاگر غير در در

دستور از دستور اينصورت از .idividivاينصورت شود مي .استفاده شود مي استفادهدستور مانند دقيقا دستور اين كلي دستور شكل مانند دقيقا دستور اين كلي مي مي mul,imulmul,imul شكل

دستور . دو كه تفاوت اين با دستور . باشد دو كه تفاوت اين با داراي داراي div,idivdiv,idivباشداين كلي شكل هستند قسمت خارج و اين باقيمانده كلي شكل هستند قسمت خارج و باقيمانده

: است زير بصورت :دستور است زير بصورت Div operandDiv operandدستورOr Or Idiv operandIdiv operand

دستور مختلف دستور حاالت مختلف طول divdivحاالت حسب طول بر حسب بر: است زير ،بصورت :متغيير است زير ،بصورت متغيير

مانند دستور اين در وضعيت ثبات بيتهاي مانند تغيير دستور اين در وضعيت ثبات بيتهاي mulmulتغييراست.است.

نوع متغيير

دهي مقداراوليه

AX,DX

عملوند

خارج قسمت

باقي مانده

Byte/Byte

Word/Word

Word/Byte

Doubleword/

Word

Al=byte,ah=0

Ax=word,dx=0

Ax=word

Dx:ax=dw

يا ثباتحافظه

يا ثباتحافظه

يا ثباتحافظه

يا ثباتحافظه

AL

AX

AL

AX

AH

DX

AH

DX

:: مثالمثال

X db 136X db 136

Y db 17Y db 17

R db ?R db ?

Q db ?Q db ?

x/y =? Bytex/y =? Byte

R=R=باقيماندهباقيمانده Q=Q= خارج خارجقسمتقسمت

::جوابجواب

Mov al,xMov al,x

Mov ah,0Mov ah,0

Div yDiv y

Mov r,ahMov r,ah

Mov q,alMov q,al

امتحان سؤال امتحان نمونه سؤال :: نمونه

بطول c,fc,fاگر اگر كدام هر ، حافظه از مكان بطول دو كدام هر ، حافظه از مكان 1word1wordدوزبان دستورات با را زير عبارت ، زبان باشند دستورات با را زير عبارت ، باشند

. نماييد سازي شبيه ، .اسمبلي نماييد سازي شبيه ، اسمبلي

C=)5/9(*)f-32(C=)5/9(*)f-32(

:: جوابجواب

C dw ?C dw ?F dw -10F dw -10Mov ah,5Mov ah,5Idiv 9Idiv 9Mov bx,fMov bx,fSub bx,32Sub bx,32Imul bx ax=(5/9)*(f-Imul bx ax=(5/9)*(f-

32)32)Mov c,ax c=(5/9)*(f-32)Mov c,ax c=(5/9)*(f-32)

::incincدستور دستور

يا باشد ثبات است ممكن كه متغيير به واحد يا يك باشد ثبات است ممكن كه متغيير به واحد يكدستور . اين كلي شكل كند مي اضافه دستور . حافظه اين كلي شكل كند مي اضافه حافظه

: است زير :بصورت است زير بصورت

Inc mem/regInc mem/reg

::decdecدستور دستور

حافظه يا ثبات است ممكن كه متغيير از واحد حافظه يك يا ثبات است ممكن كه متغيير از واحد يكبصورت . دستور اين كاي شكا كند مي كم بصورت . باشد دستور اين كاي شكا كند مي كم باشد

: است :زير است زير

Dec mem/regDec mem/reg

مثال:مثال:

X db 10X db 10

Inc x x=11Inc x x=11

نكته:نكته:

دستورات انجام با وضعيت ثبات از زير دستورات بيتهاي انجام با وضعيت ثبات از زير incincبيتهاي:decdecوو ميكنند :تغيير ميكنند تغيير

O S Z A P CO S Z A P C

: :negnegدستور دستور

اين . شود مي استفاده حافظه يا ثبات يك روي اين . بر شود مي استفاده حافظه يا ثبات يك روي برصورت . در كند مي عوض را عالمت صورت . دستور در كند مي عوض را عالمت دستور

را آن اينصورت غير در و منفي را آن بودن را مثبت آن اينصورت غير در و منفي را آن بودن مثبتبصورت . دستور اين كلي شكل كند مي بصورت . مثبت دستور اين كلي شكل كند مي مثبت

: است :زير است زير

Neg mem/regNeg mem/reg

نكته:نكته:

دستورات انجام با وضعيت ثبات از زير دستورات بيتهاي انجام با وضعيت ثبات از زير negnegبيتهاي: ميكنند :تغيير ميكنند تغيير

O S Z A P CO S Z A P C

::)xchgxchg )xchang()xchangدستور دستور

و ثبات يك يا و ثبات دو نمودن تعويض براي دستور اين و از ثبات يك يا و ثبات دو نمودن تعويض براي دستور اين ازگيرد . مي قرار استفاده مورد ، حافظه از اي گيرد .ناحيه مي قرار استفاده مورد ، حافظه از اي ناحيه

بايد ها ثبات يا متغييرها طول كه باشيم داشته توجه بايد بايستي ها ثبات يا متغييرها طول كه باشيم داشته توجه بايستيباشد . باشد .يكي يكي

است : زير بصورت دستور اين كلي است :شكل زير بصورت دستور اين كلي شكل

Xchg reg , reg/memXchg reg , reg/mem

مثال: مثال:

X dw 2fe0hX dw 2fe0h

Mov ax , 3f25hMov ax , 3f25h

Xchg ax , x ax=2fe0hXchg ax , x ax=2fe0h

x=3f25x=3f25

::jmpjmpدستور دستور

دستور به برنامه كنترل انتقال براي دستور اين دستور از به برنامه كنترل انتقال براي دستور اين ازكنترل . كه صورتي در شود مي استفاده كنترل . خاصي كه صورتي در شود مي استفاده خاصيدر آن برچسب كه دستوري از برنامه اجراي در و آن برچسب كه دستوري از برنامه اجراي و

مي پيدا ،ادامه شده مشخص دستور اين مي جلوي پيدا ،ادامه شده مشخص دستور اين جلويكند.كند.

از بعد يا قبل تواند ،مي دستور اين جلوي از برچسب بعد يا قبل تواند ،مي دستور اين جلوي برچسب. گيرد قرار دستور .اين گيرد قرار دستور اين

نكته:نكته:

LableLable. باشد همنام نبايد ،. باشد همنام نبايد ،

LableLable. باشد بزرگ خيلي نبايد ،. باشد بزرگ خيلي نبايد ،

است زير بصورت دستور اين كلي است شكل زير بصورت دستور اين كلي ::شكلJmp lableJmp lable

::مثالمثال

Lable : jmp lableLable : jmp lable ……… ………. …………. ………… ……… ………. …………. ………… ……… ………. …………. ………… jmp lable lable:jmp lable lable: ………… ………… ………… …………

::LoopLoopدستور دستور

مورد برنامه از قسمتي تكرار جهت ، دستور اين مورد از برنامه از قسمتي تكرار جهت ، دستور اين ازاين . به برنامه اجراي اگر گيرد مي قرار اين . استفاده به برنامه اجراي اگر گيرد مي قرار استفاده

كه دستوري به برنامه كنترل ، برسد كه دستور دستوري به برنامه كنترل ، برسد دستورانتقال ، شده مشخص دستور اين در آن انتقال برچسب ، شده مشخص دستور اين در آن برچسب

از واحد يك ضمنا و كند مي از پيدا واحد يك ضمنا و كند مي .cxcxپيدا شود مي .كم شود مي كم

توانيم مي ، تكرار حلقه يك ايجاد براي توانيم بنابراين مي ، تكرار حلقه يك ايجاد براي بنابرايندر را تكرار در تعداد را تكرار دستور cxcxتعداد اين از و داده دستور قرار اين از و داده قرار

. نماييم .استفاده نماييم استفاده

است : زير صورت به دستور اين كلي است :شكل زير صورت به دستور اين كلي شكل

Loop lableLoop lable

Mov cx,nMov cx,n

Lable: Lable:

……… ………..

……… ………. .

……… ………..

Loop lableLoop lable

مي كه دستورات از اي مجموعه. nخواهيم شوند تكرار ر با

::مثالمثال

هاي رشته كنيد هاي فرض رشته كنيد مشخص s1,s2s1,s2فرض طول با مشخص را طول با را( 55داريم)داريم) كه بنويسيد اي برنامه ،قسمت ( بايت كه بنويسيد اي برنامه ،قسمت بايترشته s1s1رشته رشته در رشته را در كند .s2s2را كند .كپي كپي

S1 db “abcdeS1 db “abcde””

S2 db 5 dupS2 db 5 dup)?()?(

نكته:نكته:

bx,si,dibx,si,di بكار دهي آدرس براي و شمارنده بكار بعنوان دهي آدرس براي و شمارنده بعنوان . روند . مي روند مي

:: جوابجواب

Mov cx,5Mov cx,5

L1:L1:

mov si,cxmov si,cx

dec sidec si

mov al,s1[si]mov al,s1[si]

mov s2[si],almov s2[si],al

Loop l1Loop l1

امتحان سؤال امتحان نمونه سؤال ::نمونه

زبان به كه زير برنامه قسمت زبان معادل به كه زير برنامه قسمت مي مي pascalpascalمعادل (. عضو هر ئيد نما تبديل اسمبلي زبان به را .) باشد عضو هر ئيد نما تبديل اسمبلي زبان به را باشد

AA،،11) است (بايت است بايت

Sum:=0;Sum:=0;For i:=1 to 10 doFor i:=1 to 10 do sum:=sum + a[i]sum:=sum + a[i]

::جوابجوابA db 20,31,A db 20,31,

…,84,32…,84,32Sum dw 0Sum dw 0…………………………………………Mov cx,10Mov cx,10Sub ax,axSub ax,axL1:L1: mov si,cxmov si,cx dec sidec si add ax,a[si]add ax,a[si]Loop l1Loop l1Mov sum,ax Mov sum,ax

: :)cmpcmp )compare()compareدستوردستور

استفاده دستور اين از عملوند دو مقايسه استفاده براي دستور اين از عملوند دو مقايسه برايثبات دو هر توانند مي ، عملوند دو شود ثبات مي دو هر توانند مي ، عملوند دو شود مي

باشند.باشند.

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

ثبات ،در دستور اين مقايسه نوع به ثبات بسته ،در دستور اين مقايسه نوع به تاثير تاثير flagflagبسته. گذارد .مي گذارد مي

شرطي انتقال دستور همراه معموال دستور شرطي اين انتقال دستور همراه معموال دستور اين. گيرد مي قرار استفاده .مورد گيرد مي قرار استفاده مورد

است زير بصورت دستور اين كلي است شكل زير بصورت دستور اين كلي ::شكل

Cmp op1,op2Cmp op1,op2

::مثالمثال

Cmp ax,bxCmp ax,bx

Cmp ax,Cmp ax,متغييرمتغيير

Cmp f1,10Cmp f1,10

شرطي شرطي دستورانتقال ::دستورانتقال

دستور jxjxدستورات دستورات دستور بعداز درجلوي cmpcmpبعداز كه آيند درجلوي مي كه آيند مي. دارد وجود چسب بر يك .آنها دارد وجود چسب بر يك آنها

جاي جاي به مشخص xxبه كه گيرد مي قرار اي مشخص رشته كه گيرد مي قرار اي رشتهثبات مقدار ويا مقايسه ي نتيجه ي ثبات كننده مقدار ويا مقايسه ي نتيجه ي FlagFlagكننده

. باشد .مي باشد مي

كنترل باشد صحيح رشته اين متناظربا ي كنترل اگررابطه باشد صحيح رشته اين متناظربا ي اگررابطه. كند مي پيدا انتقال موردنظر برچسب به .برنامه كند مي پيدا انتقال موردنظر برچسب به برنامه

زيراست : صورت به دستور اين كلي زيراست : شكل صورت به دستور اين كلي شكلCMP OP1,OP2

JX LABLE

JMP

حاالت حاالت جدول : :JXJXجدولبدون بدون

OP1,OP2OP1,OP2عالمتعالمتعالمت عالمت با OP1,OP2OP1,OP2با ثبات ثبات تغييرات تغييرات

وضعيتوضعيت

OP1>OP2 OP1>OP2 JA JA

JGJG JC CARRY JC CARRY FLAG=1FLAG=1

OP1>=OP2 OP1>=OP2 JAEJAE

JGEJGE JNC JNC CARRYFLAG=0CARRYFLAG=0

OP1=OP2 OP1=OP2 JEJE

JEJE JS JS SIGNFLAG=1SIGNFLAG=1

OP1<>OP2 OP1<>OP2 JNEJNE

JNEJNE JNS JNS SIGNFLAG=0SIGNFLAG=0

OP1<OP2 OP1<OP2 JBJB

JLJL JZ JZ ZEROFLAG=1ZEROFLAG=1

OP1<=OP2 OP1<=OP2 JBE JBE

JLEJLE JNZ JNZ ZEROFLAG=0ZEROFLAG=0

A=ABOVEA=ABOVE G=GREATERG=GREATER JP JP PARITYFLAG=1PARITYFLAG=1

B=BELOWB=BELOW L=LESSL=LESS JNP JNP PARITYFLAG=0PARITYFLAG=0

زبانزبانبهبهزيررازيرراپاسكالپاسكالدستوراتدستوراتمعادلمعادلاسمبلياسمبليشبيهشبيهسازيسازيكنيدكنيد

Sum=0

Count=100

While (sum < 500) or (count > 0)

sum = sum + count

count = count – 1

end while

Mov ax,0Mov cx,100While1 : Cmp ax,5000 Jb l1 Cmp cx,0 Jle exit L1 : Add ax,cx Dec cx Jmp while1Exit :

i=0i=0Sum=0Sum=0While )sum<100(While )sum<100({{ for i=1 to 10for i=1 to 10 sum=sum+Isum=sum+I if sum=50 then s1;if sum=50 then s1; else s2;else s2;} }

Mov si,0Mov si,0Mov ax,0Mov ax,0While1: cmp ax,100While1: cmp ax,100 jae exitjae exit

mov si,1mov si,1For1: cmp si,10For1: cmp si,10

ja if1ja if1add ax,siadd ax,siinc siinc sijmp for1jmp for1

If1: cmp ax,50If1: cmp ax,50 jae else1jae else1 call s1call s1

jmp l1jmp l1Else1: call s2Else1: call s2L2: jmp while1L2: jmp while1Exit: Exit:

كليد صفحه از اطالعات كليد دريافت صفحه از اطالعات : :دريافت ( رشته وچه عددي چه مقادير دريافت ) براي رشته وچه عددي چه مقادير دريافت براي

كليد( صفحه از اطالعات بايستي درهرصورت كليد( اي صفحه از اطالعات بايستي درهرصورت ايشود دريافت رشته شود بصورت دريافت رشته بصورت

داد نشان زير بصورتهاي توان مي كاررا داد اين نشان زير بصورتهاي توان مي كاررا ::اين11 : ي- وقفه كاراكتر : كاراكتربه ي- وقفه كاراكتر 08h08hسرويس سرويس 10h10hكاراكتربه

سرويس = ي سرويس = شماره ي شمارهAHAH

INT 10HINT 10H رادرثبات كاراكتردريافتي حالت رادرثبات دراين كاراكتردريافتي حالت ريزد ALALدراين ريزد مي مي

نمي نشان صفحه روي كاراكتررا دريافت نمي وهنگام نشان صفحه روي كاراكتررا دريافت وهنگامي وقفه از استفاده با ي دهدولي وقفه از استفاده با 01h01hسرويس سرويس 21h21hدهدولي

داد . نشان صفحه روي كاراكتررا اتوان داد .مي نشان صفحه روي كاراكتررا اتوان مي

ي- : 22 وقفه اي ي- : رشته وقفه اي 0AH0AHسرويس سرويس 21H21Hرشته

سرويس = ي سرويس = شماره ي AHAHشماره

رشته = رشته = آدرس DXDXآدرس

INT 21HINT 21H

سرويس : دراين ساختاررشته و سرويس :شكل دراين ساختاررشته و شكل

String Lable ByteString Lable Byte ) رشته ) (نام رشته ) نام

واقعي ي رشته واقعي طول ي رشته DBDBطول

Len DBLen DB? ? ) دريافتي ) ي رشته (طول دريافتي ) ي رشته طول

واقعي رشته واقعي طول رشته رشته ) STR1 DBSTR1 DBطول رشته ) محتويات محتوياتدريافتي(دريافتي(

SHIFTSHIFT: منطقي :منطقي

است زير صورت دستوربه اين كلي است شكل زير صورت دستوربه اين كلي :: شكل

SHL mem/reg , nSHL mem/reg , n

SHR mem/reg , nSHR mem/reg , n

NN عمل دفعات عمل تعداد دفعات كند . SHIFTSHIFTتعداد مي مشخص كند .را مي مشخص را

براي دستور دو اين براي از دستور دو اين يا SHIFTSHIFTاز ثبات يا منطقي ثبات منطقيشود . مي استفاده شود . حافظه مي استفاده حافظه

عمل عمل در صفر SHIFTSHIFTدر مقداروارده راست يا چپ صفر به مقداروارده راست يا چپ بهدربيت خارجه دربيت ومقدار خارجه گيرد . Carry flagCarry flagومقدار مي گيرد . قرار مي قرار

:: نكتهنكته

دستور اين اجراي با وضعيت ثبات زيراز هاي دستور بيت اين اجراي با وضعيت ثبات زيراز هاي بيت O-S-Z-A-P-C O-S-Z-A-P-C تغييرتغيير

كرد كرد خواهند :: خواهند

:: نكتهنكته

SHL Mem= mem*2^nSHL Mem= mem*2^n

SHR Mem= mem/2^nSHR Mem= mem/2^n00 00 1 1 00 00 11 11 00

00 11 00 00 11 11 00 00SHL AL,1

SHIFTSHIFT: حسابي :حسابي

است زير صورت دستوربه اين كلي است شكل زير صورت دستوربه اين كلي :: شكل

SAL mem/reg , nSAL mem/reg , n

SAR mem/reg , nSAR mem/reg , n

NN عمل دفعات عمل تعداد دفعات كند SHIFTSHIFTتعداد مي مشخص كند را مي مشخص را..

براي دستور دو براي ازاين دستور دو به SHIFTSHIFTازاين ياراست چپ به به ياراست چپ بهشود . مي استفاده حسابي شود . صورت مي استفاده حسابي صورت

است . عالمت بيت نگهداشتن حسابي است .منظوراز عالمت بيت نگهداشتن حسابي منظوراز

11 00 0 0 00 11 11 11 00

11 11 00 00 00 11 11 11SAR AL,1

00 00 1 1 00 00 11 11 00

00 11 00 00 11 11 00 00SAL AL,1

CF= 0

CF= 0

بيتي بيتي دستورچرخشي :: دستورچرخشي

است زير صورت دستوربه اين كلي است شكل زير صورت دستوربه اين كلي :: شكل

ROR mem/reg , nROR mem/reg , n

ROL mem/reg , nROL mem/reg , n

NN عمل دفعات عمل تعداد دفعات كند . SHIFTSHIFTتعداد مي مشخص كند .را مي مشخص را

براي دستور دو براي ازاين دستور دو مي RRotateotateازاين استفاده بيتها مي كردن استفاده بيتها كردنشود . شود .

در RotateRotateمقدار مقدار ابتدا در شده ابتدا وپس CFCFشده گيرد وپس قرارمي گيرد قرارميپيدا انتقال است شده منتقل كه بيتي آخرين به پيدا ازآن انتقال است شده منتقل كه بيتي آخرين به ازآن

. كند .مي كند مي

11 11 0 0 00 00 11 11 00

11 00 00 00 11 11 00 11ROR AL,1

CF= 1

مثال:

كليد صفحه كاراكتراز يك كه بنويسيد اي برنامهدهد . نشان دو مبناي صورت به را وآن كند دريافت

:: تمرينتمرين

به مربوط به اطالعات مربوط در 1515اطالعات در كارمند ي 1515كارمند ي كلمه كلمهكلمه ) يك كارمند هر براي دارد قرار كلمه ) متوالي يك كارمند هر براي دارد قرار متوالي

( 1616وهركلمه وهركلمه راست سمت بيت اولين است ( بيت راست سمت بيت اولين است بيتوبراي يك مرد براي باشد مي كارمند وبراي كدجنسيت يك مرد براي باشد مي كارمند كدجنسيت

كه بنويسيد اي برنامه قسمت صفراست كه زن بنويسيد اي برنامه قسمت صفراست زنكند . مشخص را مرد كارمندان كند . تعداد مشخص را مرد كارمندان M DB 0تعداد

AREA DW 2048H ,…, 3000AH

:

MOV SI , 0

MOV CX , 15

L1:

MOV AX , AREA [SI]

SHL AX , 1

JNC L2

INC M

L2:

ADD SI , 2

LOOP L1

منطقي : منطقي :عملگرهاي عملگرهاي((Test,And,Or,Not,XorTest,And,Or,Not,Xor ) )

بيتها روي منطقي اعمال انجام براي عملگرها بيتها ازاين روي منطقي اعمال انجام براي عملگرها ازاينبيتهاي . عملگرها اين باانجام شود مي بيتهاي . استفاده عملگرها اين باانجام شود مي استفادهتوجه قابل ي نكته كند مي تغيير وضعيت توجه ثبات قابل ي نكته كند مي تغيير وضعيت ثبات

درابتدا كه ثباتي كاردر ي نتيجه كه است درابتدا ديگراين كه ثباتي كاردر ي نتيجه كه است ديگراينگيرد مي قرار شده گيرد تعريف مي قرار شده .. تعريف

:: نكتهنكته

درثبات AndAndمانند مانند TestTestعملگر عملگر شود مي درثبات استفاده شود مي استفادهدرعملگرهاي ولي كند مي ايجاد تغييراتي درعملگرهاي وضعيت ولي كند مي ايجاد تغييراتي وضعيت

كند . نمي ايجاد تغييري هيچ كند .مربوط نمي ايجاد تغييري هيچ مربوط

زير بصورت دستورات اين از هريك كلي زير شكل بصورت دستورات اين از هريك كلي شكل:: استاست

Xor dest ,src

And dest , src

Not operand

Or dest , src

Test dest , src

عملگرها از هريك عملكرد ي عملگرها نحوه از هريك عملكرد ي :: نحوه

XX YY Xor Xor x,yx,y

And And x,yx,y

Test Test x,yx,y

Or Or x,yx,y

Not Not xx

00 00 00 00 00 00 11

00 11 11 00 00 11 11

11 00 11 00 00 11 00

11 11 00 11 11 11 00

:: نكتهنكته

صفر- 11 را بيت آن كنيم صفر را بيتي بخواهيم صفر- وقتي را بيت آن كنيم صفر را بيتي بخواهيم وقتيوازعملگر يك را بيتها ي وازعملگر وبقيه يك را بيتها ي مي ANDANDوبقيه مي استفاده استفاده

كنيم .كنيم .

وبقيه- 22 يك را بيت آن كنيم يك را بيتي بخواهيم وبقيه- وقتي يك را بيت آن كنيم يك را بيتي بخواهيم وقتيصفروازعملگر را بيتها صفروازعملگر ي را بيتها كنيم .ORORي مي كنيم .استفاده مي استفاده

يك- 33 را بيت آن كنيم متمم را بيتي بخواهيم يك- وقتي را بيت آن كنيم متمم را بيتي بخواهيم وقتيصفروازعملگر را بيتها ي صفروازعملگر وبقيه را بيتها ي مي XORXORوبقيه مي استفاده استفاده

كنيم .كنيم .

11تمرين تمرين : :

در مقداري كنيد در فرض مقداري كنيد برنامه ALALفرض قطعه دارد برنامه قرار قطعه دارد قراربيتهاي كه بنويسيد بيتهاي اي كه بنويسيد بيتهاي 0,70,7اي كند يك بيتهاي را كند يك را را 1,61,6را

بيتهاي بيتهاي صفركند وبيتهاي 5,25,2صفركند كند وبيتهاي متمم كند را را 3,43,4 متممبگذارد . باقي نخورده بگذارد . دست باقي نخورده دست

OR AL , 10000001B

AND AL , 1011101B

XOR AL , 00100100B

22تمرين تمرين : :

AXAX ترين راست سمت كه بنويسيد اي برنامه ترين قسمت راست سمت كه بنويسيد اي برنامه قسمتثبات ثبات بيت ترين بيت چپ صفروسمت ي شماره بيت ترين را چپ صفروسمت ي شماره بيت را

ي شماره رابيت ي بيت شماره رابيت درنظربگيريد .درنظربگيريد . 1515بيت

صفرويك بيتهاي بنويسيدكه دستوراتي صفرويك دنباله بيتهاي بنويسيدكه دستوراتي دنباله 1515و و 1414رابابيتهاي رابابيتهاي

بيتهاي نمايد بيتهاي عوض نمايد باقي 7,87,8عوض نخورده دست باقي را نخورده دست رابيتهاي . بيتهاي . بگذارد بيتهاي . 2,3,42,3,4بگذارد كند متمم بيتهاي . را كند متمم را را 5,65,6را

كند . كند .يك يك

هاي هاي پورت : :PCPCپورت

كامپيوترهاي كامپيوترهاي پورتهاي بين PCPCپورتهاي بين ارتباط وقسمتهاي وقسمتهاي CPUCPUارتباطيك جانبي مدارات از هريك كامپيوتربراي يك مختلف جانبي مدارات از هريك كامپيوتربراي مختلف

كه است شده درنظرگرفته چندثبات كه كامپيوتريا است شده درنظرگرفته چندثبات كامپيوتريابين بين ارتباط كند . CPUCPUارتباط برقرارمي را جانبي كند . ومدارات برقرارمي را جانبي ومدارات

شوند : مي تقسيم دسته دو به پورتها شوند :اين مي تقسيم دسته دو به پورتها اين

از- : 11 اطالعات ورود محل پورتها اين ورودي از- : پورتهاي اطالعات ورود محل پورتها اين ورودي پورتهايبه جانبي به مدارات جانبي باشند . CPUCPUمدارات باشند . مي مي

انتقال- : 22 پورتهاگذرگاه اين خروجي انتقال- : پورتهاي پورتهاگذرگاه اين خروجي پورتهاياز از اطالعات باشند .CPUCPUاطالعات مي جانبي مدارات باشند .به مي جانبي مدارات به

اطالعات جانبي مدارات از يكي به بخواهيم كه اطالعات درصورتي جانبي مدارات از يكي به بخواهيم كه درصورتياينكه ويا كنيم دريافت اطالعات ياازآن كنيم اينكه ارسال ويا كنيم دريافت اطالعات ياازآن كنيم ارسالانجام وقفه هاي برنامه طريق از را اطالعات انجام تبادل وقفه هاي برنامه طريق از را اطالعات تبادل

دركامپيوترهاي دركامپيوترهاي دهيم ي PCPCدهيم ناحيه ي يك ناحيه ثبات 64KB64KBيك ثبات براي برايپورتها از هرسري است شده درنظرگرفته پورتها پورتها هاي از هرسري است شده درنظرگرفته پورتها هاي

كامپيوتراست . از قسمتي به كامپيوتراست .مربوط از قسمتي به مربوطازثباتهامنظورشده بعضي زيرآدرس درجدول مثال ازثباتهامنظورشده بعنوان بعضي زيرآدرس درجدول مثال بعنوانحافظه . هاآدرس آدرس اين كه ذكراست به الزم حافظه . است هاآدرس آدرس اين كه ذكراست به الزم استحافظه به مقداردادن همانند توانند نمي و نيستند حافظه اصلي به مقداردادن همانند توانند نمي و نيستند اصلي

گرفت . مقدار ياازآنها داد مقدار آنها به گرفت .اصلي مقدار ياازآنها داد مقدار آنها به اصليمثل خاصي دستورات آنهااز به مقداردهي مثل براي خاصي دستورات آنهااز به مقداردهي و و ININبراي

OUTOUT. كنيم مي كنيم .استفاده مي استفادهاست : زير صورت به پورتها شماره از برخي است : آدرس زير صورت به پورتها شماره از برخي آدرس

به پورتها شماره از به برخي پورتها شماره از Hexa decimalHexa decimalبرخي::

21H21H وقفه كنترلي هاي وقفه ثبات كنترلي هاي ثبات

40 – 4240 – 42 و و شمارنده TimerTimerشمارنده

6060 كليد صفحه از كليد ورودي صفحه از ورودي

201201 بازي بازي كنترلي كنترلي

3B0 – 3B0 – 3BF3BF

دهنده دهنده تطبيق تطبيق

6161 بيت ) بيت ) بلندگو ((11و و 00بلندگو

3D0 – 3D0 – 3DF3DF

موازي پورت و رنگ تك نمايش موازي صفحه پورت و رنگ تك نمايش صفحهچاپگرچاپگر

3F0 – 3F0 – 3FD3FD

diskdiskكنترلي كنترلي

ورودي : ININدستور دستور از را دوبايت يا دستوريك ورودي : اين از را دوبايت يا دستوريك ايندرثبات را آن و درثبات خوانده را آن و دهد . ALALويا ويا AXAXخوانده مي دهد . قرار مي قرار

است : زير صورت دستوربه اين كلي است :شكل زير صورت دستوربه اين كلي شكل

IN AL,PortnumberIN AL,Portnumber

IN AX,PortnumberIN AX,Portnumber

بايت: OUTOUTدستور دستور يك فرستادن دستوربراي بايت: ازاين يك فرستادن دستوربراي ازاينثبات از كلمه ثبات يايك از كلمه موردنظر ALALيا يا AXAXيايك پورت موردنظر به پورت به

شود . مي شود . استفاده مي استفاده

است : زير صورت دستوربه اين كلي است :شكل زير صورت دستوربه اين كلي شكل

OUT Portnumber,ALOUT Portnumber,AL

OUT Portnumber,AXOUT Portnumber,AX

: : مثالمثال

قسمت پورتها آدرس به دسترسي از قسمت بااستفاده پورتها آدرس به دسترسي از بااستفادهبااستفاده اجرا درصورت كه بنويسيد اي بااستفاده برنامه اجرا درصورت كه بنويسيد اي برنامه

پورت پورت از .61H61Hاز صدانمايد .توليد صدانمايد توليد

START : MOV DX , 1000

TOP : IN AL , 61H

AND AL , 0FEH

XOR AL , 02H

OUT 61H , AL

MOV CX , 1000

DELAY : LOOP DELAY

DEC DX

CMP DX ,

JNE TOP

11تمرين تمرين : :

اي برنامه پورتها آدرس به دسترسي از استفاده اي با برنامه پورتها آدرس به دسترسي از استفاده بانمايد مشخص اجرا صورت در كه نمايد بنويسيد مشخص اجرا صورت در كه بنويسيد

؟ خير يا است آماده ؟ چاپگر خير يا است آماده چاپگر

پورتها: 22تمرين تمرين آدرس به دسترسي از پورتها: بااستفاده آدرس به دسترسي از بااستفادهاز كاراكتررا يك كه بنويسيد اي از برنامه كاراكتررا يك كه بنويسيد اي BufferBufferبرنامه

بخواند . كليد بخواند .صفحه كليد صفحه

MASK1 DB 0000000000001111

MASK2 DB 0000000011110000

MASK3 DB 0000111100000000

MASK4 DB 1111000000000000

MASK_OUT1 DB 10000001

MASK_OUT2 DB 01000010

MASK_OUT3 DB 00100100

MASK_OUT4 DB 00011000

START :

IN AX , 305H

MOV BX , AX

AND AX , MASK1

CMP AX , MASK1

JE LONE

MOV AX , BX

AND AX , MASK2

CMP AX , MASK2

JE LTWO

MOV AX , BX

AND AX , MASK3

CMP AX , MASK3

JE LTHREE

MOV AX , BX

AND AX , MASK4

CMP AX , MASK4

JE LFOUR

EXIT :

LONE : LONE :

MOV AL , MASK_OUT4MOV AL , MASK_OUT4

OUT 307H , AL OUT 307H , AL

JMP EXIT JMP EXIT

LTHREE : LTHREE :

MOV AL , MASK_OUT2MOV AL , MASK_OUT2

OUT 307H , AL OUT 307H , AL

JMP EXIT JMP EXIT

LTWO : LTWO :

MOV AL , MASK_OUT3MOV AL , MASK_OUT3

OUT 307H , AL OUT 307H , AL

JMP EXIT JMP EXIT

LONE : LONE :

MOV AL , MASK_OUT1MOV AL , MASK_OUT1

OUT 307H , AL OUT 307H , AL

JMP EXIT JMP EXIT

: :POPPOP و و PUSHPUSHدستورات دستورات درمواقع كنيم مي فراخواني را زيربرنامه يك كه درمواقع وقتي كنيم مي فراخواني را زيربرنامه يك كه وقتي

ثبات محتويات درابتدا كه بهتراست زيربرنامه ثبات اجراي محتويات درابتدا كه بهتراست زيربرنامه اجرايكاربدين اين خودبرگرداند اول حالت به را كاربدين ها اين خودبرگرداند اول حالت به را ها

ثباتهاي بخصوص ثباتها كه شود مي ثباتهاي منظورانجام بخصوص ثباتها كه شود مي منظورانجامشوند مي استفاده ها زيربرنامه درتمام شوند عمومي مي استفاده ها زيربرنامه درتمام .. عمومي

است ممكن زيربرنامه آنهادرطول مقدار است تغييردادن ممكن زيربرنامه آنهادرطول مقدار تغييردادنكند ايجاد برنامه در كند اختالالتي ايجاد برنامه در . . اختالالتي

از PUSHPUSHدستور دستور محلي يا ثبات يك مقدار تواند از مي محلي يا ثبات يك مقدار تواند ميبنام محلي رادر بنام حافظه محلي رادر نمايد . STACKSTACKحافظه نمايد . ذخيره ذخيره

اطالعات روي جديد اطالعات از هريك محل اطالعات دراين روي جديد اطالعات از هريك محل دراينگيرد . مي قرار گيرد .قبلي مي قرار قبلي

برعكس آنهارا بايد اطالعات بازيابي براي برعكس بنابراين آنهارا بايد اطالعات بازيابي براي بنابرايننمود بازيابي كردن ذخيره نمود زمان بازيابي كردن ذخيره . . زمان

از POPPOPدستور دستور مقداري كردن بازيابي از براي مقداري كردن بازيابي StackStackبرايمي استفاده متغيرحافظه يا ثبات دريك دادن مي وقرار استفاده متغيرحافظه يا ثبات دريك دادن وقرار

شود .شود .

است : زير بصورت دستور اين كلي است :شكل زير بصورت دستور اين كلي شكل

PUSH mem/regPUSH mem/reg

POP mem/regPOP mem/reg

اسمبلي : دستوردر كدام معادل زير دستورات اسمبلي : سؤال دستوردر كدام معادل زير دستورات سؤال؟ ؟ است PUSH AXاست

PUSH BX

POP AX

POP BX

XCHG AX , BX

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

MOV AX , 30F2H

MOV BX , 1200H

MOV CX , 3022H

PUSH AX

PUSH BX

PUSH CX

.

.

POP CX

POP BX

POP AX

12 36

F2

30

00

12

22

30SPSP

SPSP

SPSP

12301231

12321233

12341235

ي : دربرنامه كه بنويسيد اي برنامه قسمت ي : مثال دربرنامه كه بنويسيد اي برنامه قسمت مثالمقدار مقدار اصلي يك bhbhو و ahah اصلي به پارامتر يك بعنوان به پارامتر بعنوان

زيربرنامه در وسپس شوند ارسال زيربرنامه پشته در وسپس شوند ارسال پشتهاز از مقداري شود . StackStackمقداري شود .خوانده AL DW 203FHخوانده

BL DW 3566HSTART: PUSH AL PUSH BL CALL P1 :ENDP1 PROC NEAR MOV BP , SP MOV BX , [BP+2] MOV AX , [BP , 4]

:

ENDP

START

3F

20

60

35

IP BP = SP

BP + 2

BP + 4

:: تكليفتكليف

برنامه وزير اصلي ي برنامه يك براي الزم برنامه دستورات وزير اصلي ي برنامه يك براي الزم دستوراتفايل دريك هركدام كه بنويسيد را اسمبلي زبان فايل به دريك هركدام كه بنويسيد را اسمبلي زبان به

كه عددرا دو اصلي ي وبرنامه قراردارند كه جداگانه عددرا دو اصلي ي وبرنامه قراردارند جداگانهوبصورت data2data2و و data1data1درمكان درمكان وبصورت قراردارند قراردارند

ازطريق باشند مي ازطريق باينري باشند مي زيربرنامه StackStackباينري زيربرنامه به بهبدهد .بدهد .

از عددهارا اين از زيربرنامه عددهارا اين ودرهم StackStackزيربرنامه ودرهم بردارد برداردودر نمايد ودر ضرب نمايد به StackStackضرب كنترل سپس دهد به قرار كنترل سپس دهد قرار

برگردد . اصلي ي برگردد .برنامه اصلي ي برنامه

رااز عدد اين اصلي ي رااز برنامه عدد اين اصلي ي بردارد بردارد StackStackبرنامهدهد . data3data3ودرمكان ودرمكان دهد . قرار قرار

: :LAHFLAHFدستور دستور

دستور دستور اين ( 8BIT8BITاين ( در را وضعيت ثبات ارزش كم ( پايين ( در را وضعيت ثبات ارزش كم AHAHپايينكند . مي كند .بار مي بار

: :SAHFSAHFدستور دستور

دستورمقدار دستورمقدار اين قرار 8BIT8BITرادر رادر AHAHاين وضعيت ثبات قرار پايين وضعيت ثبات پايينميدهد.ميدهد.

: :POPFPOPFدستور دستور

رااز وضعيت دستورمقدارثبات رااز اين وضعيت دستورمقدارثبات گيرد .TOPTOPاين مي گيرد .پشته مي پشته

: :PUSHFPUSHFدستور دستور

در را وضعيت مقدارثبات دستور در اين را وضعيت مقدارثبات دستور مي TOPTOPاين كپي مي پشته كپي پشتهكند . كند .

::تمرينتمرين

بيتهاي كه بنويسيد اي برنامه بيتهاي قسمت كه بنويسيد اي برنامه و و DFDFو و TFTFقسمتOFOF را وضعيت را ازثبات وضعيت كند . كند . SETSETازثبات

TF=8 , DF=10 , OF=11TF=8 , DF=10 , OF=11

PUSHF

POP AX

OR AX , 0000110100000000

PUSH AX

POPF

نمايش صفحه برروي چاپ نمايش انواع صفحه برروي چاپ :: انواع

ها -1 -1 وقفه از استفاده ها با وقفه از استفاده :: با

صورت رابه رشته توان مي ها ازوقفه صورت بااستفاده رابه رشته توان مي ها ازوقفه بااستفادهنمود چاپ وقفه جابايك يك يا حرف به نمود حرف چاپ وقفه جابايك يك يا حرف به . . حرف

ي : باوقفه ي : مثال باوقفه توان 09h09hسرويس سرويس 10h10hمثال توان مي ميچاپ نما مكان جاري محل كاراكتررادر چاپ يك نما مكان جاري محل كاراكتررادر يك

MOV BH , 0كرد .كرد .MOV AL , ‘A’MOV BL , 1FH MOV CX , 1MOV AH , 09HINT 10H

: : مثالمثال

ي وقفه ي با وقفه يك 09H09Hسرويس سرويس 21H21Hبا توان يك مي توان ميكرد . چاپ نما مكان جاري محل در را كرد .رشته چاپ نما مكان جاري محل در را رشته

S DB “This is a test !...”, ‘$’

Lea dx , s

Mov ah , 09h

Int 21h

: : نكتهنكته

ي ي وقفه نمايش 02H02Hسرويس سرويس 21H21Hوقفه نمايش براي برايدر كه در كاراكتري كه .DLDLكاراكتري شود مي استفاده دارد .قرار شود مي استفاده دارد قرار

از- 22 استفاده از- با استفاده : : Video RamVideo Ramبا

Video RamVideo Ram متني متني درحالت آدرس آدرس 2525**8080درحالت0b800:00000b800:0000: باشد زيرمي بصورت كه دارد باشد :را زيرمي بصورت كه دارد را

چاپ براي نقطه يك مختصات آوردن بدست چاپ براي براي نقطه يك مختصات آوردن بدست برايي ي درحافظه شود درحافظه مي زيراستفاده ي شود ازرابطه مي زيراستفاده ي ازرابطه

::Video RamVideo Ramنمايشينمايشي

PTR = 0B800HPTR = 0B800H

PTR = PTR+(X-1)*2+(Y-1)*160PTR = PTR+(X-1)*2+(Y-1)*160

توسط نمايش صفحه كاراكتردر يك كردن چاپ توسط براي نمايش صفحه كاراكتردر يك كردن چاپ برايVRVR كرده رامحاسبه موقعيت آن با متناظر آدرس كرده بايد رامحاسبه موقعيت آن با متناظر آدرس بايد

آن 2Byte2Byteودر ودر رنگ كاراكتروهمچنين كد آن متناظرباآن رنگ كاراكتروهمچنين كد متناظرباآن . نماييم . رامشخص نماييم رامشخص

سمت دوبايت بايدابتدا آدرس يك به مقداردادن سمت براي دوبايت بايدابتدا آدرس يك به مقداردادن برايي ناحيه هاي ازثبات رادريكي آدرس ي چپ ناحيه هاي ازثبات رادريكي آدرس DSDSيا يا ESESچپ

ثبات در را راست سمت بايت ودو ثبات قراردهيم در را راست سمت بايت ودو BXBXقراردهيمبايد و دهيم مي قرار پايه يا شاخص هاي ثبات از بايد يايكي و دهيم مي قرار پايه يا شاخص هاي ثبات از يايكي

دستور دستور توسط را MOVMOVتوسط آدرس آن به انتقال را عمل آدرس آن به انتقال عملدهيم . دهيم . انجام انجام

:: مثالمثالدرموقعيت ''AA‘‘كاراكتر كاراكتر درموقعيت را زمينه ((1,11,1))را و زرد زمينه بارنگ و زرد بارنگ

كنيد . چاپ آبي كنيد . ي چاپ آبي ي

MOV AX , 0B800H

MOV ES , AX

MOV BX , 00H

MOV AL , 65

MOV AH , 04H

MOV ES : [BX] , AX

:: مثالمثال

از بااستفاده كه بنويسيد از تابعي بااستفاده كه بنويسيد در VRVRتابعي كه در كاراكتري كه ALALكاراكتريدر آن داردورنگ در وجود آن داردورنگ چاپ چاپ BHBHوستون وستون BLBLدرسطر درسطر AHAHوجود

كند .كند ..MODEL Tiny,C,,OS_DOS.286.CODE.STARTUPJMP HPUTCH PROC NEAR PUSH ES PUSH AX PUSH BX PUSH CX MOV CX , 0B800H MOV ES , CX DEC BL DEC BH MOV CX , AX

SUB AH , AH MOV AL , 80 MUL BL ADD AL , BH ADC AH , 0 SHL AX , 1 MOV BX , AX MOV AX , CX MOV ES : [BX] , AX POP DX POP CX POP BX POP AX POP ES RET PUTCH ENDP

H : MOV AH , 1HH MOV AL , ‘A’ MOV BL , 20 MOV BH , 10 CALL PUTCH.EXIT0END

11تمرين تمرين : :

پنج بارنگ را نمايش صفحه كه بنويسيد اي پنج برنامه بارنگ را نمايش صفحه كه بنويسيد اي برنامهكند كند پاك .. پاك

از) از) بااستفاده ( (Video RamVideo Ramبااستفاده

22تمرين تمرين : :

از بااستفاده كه بنويسيد اي از برنامه بااستفاده كه بنويسيد اي Video RamVideo Ramبرنامهكند . ((30,1230,12))تا تا ((5,65,6))از از BoxBoxيك يك كند . رسم رسم

33تمرين تمرين : :

از بااستفاده كه بنويسيد اي از برنامه بااستفاده كه بنويسيد اي Video RamVideo Ramبرنامهايجاد نمايش صفحه روي گزينه پنج با منو ايجاد يك نمايش صفحه روي گزينه پنج با منو يك

كليدهاي از بااستفاده كليدهاي كند از بااستفاده و و Arrow upArrow upكندArrow downArrow down حركت آن هاي گزينه حركت روي آن هاي گزينه روي

كليد وبازدن كليد كرده وبازدن خاصي EnterEnterكرده پيغام خاصي هريك پيغام هريكخروج ي گزينه شود چاپ نمايش صفحه خروج برروي ي گزينه شود چاپ نمايش صفحه برروي

باشد . داشته باشد . نيز داشته نيز

:) دستور ) درشت (:ماکرو دستور ) درشت ماکرو

نــــام که است اسمبلی برنامه زیر یک از نــــام قسمتی که است اسمبلی برنامه زیر یک از قسمتی . همانند ماکرو ایم داده اختصاص آن بـــــه را . خاصی همانند ماکرو ایم داده اختصاص آن بـــــه را خاصی

یک فراخوانی بار هر با که تفاوت این با است یک زیربرنامه فراخوانی بار هر با که تفاوت این با است زیربرنامهمحـــــل در ماکــــــرو دستـــورات تمام محـــــل ماکرو در ماکــــــرو دستـــورات تمام ماکرو

. شود می کپی .فراخوانی شود می کپی فراخوانی

دستور از باید ماکرو فراخوانی دستور برای از باید ماکرو فراخوانی استفاده استفاده MACROMACROبراینمود.نمود.

: است زیر صورت به ماکرو یک کلی :شکل است زیر صورت به ماکرو یک کلی شکل

Name_macro MACRO parameter_listName_macro MACRO parameter_listها برچسب ها نام برچسب locallocal نام

ماکرو ماکرو دستورات دستورات

ENDMENDM

ماکرو ماکرو فراخوانی فراخوانیدر را آن نام است کافی ماکرو یک فراخوانی در برای را آن نام است کافی ماکرو یک فراخوانی برای

. می ماکرو پارامترهای نماییم ذکر نیاز مــورد . محــل می ماکرو پارامترهای نماییم ذکر نیاز مــورد محــلهم “ , “ از همراه به ماکرو کلمه جلوی در هم “ , “ توانند از همراه به ماکرو کلمه جلوی در توانند

. شوند .متمایز شوند متمایز

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

. کنیم ذکر نیاز مورد .محل کنیم ذکر نیاز مورد محل

: نکته :چند نکته چندمالحظه- 11 قابل طور به را برنامه حجم ماکرو از مالحظه- استفاده قابل طور به را برنامه حجم ماکرو از استفاده

. برنامه خوانایی به طرفی از اما دهد می افزایش . ای برنامه خوانایی به طرفی از اما دهد می افزایش ایرا ها زیربرنامه به دسترسی همچنــین و کند می را کمک ها زیربرنامه به دسترسی همچنــین و کند می کمک

. کند می تر .ساده کند می تر ساده

ماکرو- 22 از استفاده موقع در برنامه حجم اینکه ماکرو- برای از استفاده موقع در برنامه حجم اینکه برایفقط ماکرو در است بهتر نکند پیـــدا فقط افزایــش ماکرو در است بهتر نکند پیـــدا افزایــش

زیربرنامه آن انتهای در و دهیم انجام را ثباتها زیربرنامه مقداردهی آن انتهای در و دهیم انجام را ثباتها مقداردهی. کنیم فراخوانی را .مربوطه کنیم فراخوانی را مربوطه

تعاریف- 33 از قبل باید ماکرو تعاریف- تعریف از قبل باید ماکرو .SegmentSegmentتعریف باشد .برنامه باشد برنامه

مثال:مثال:سطر به را نما مکان که بنویسید سطر ماکرویی به را نما مکان که بنویسید ستون rowrowماکرویی ستون و و

colcol ببرد؟ ببرد؟Gotoxy MACRO col,rowGotoxy MACRO col,row

mov ah,02hmov ah,02h mov al,00hmov al,00h mov bh,00hmov bh,00h mov dh,colmov dh,col mov dl,rowmov dl,row int 21hint 21hENDMENDM

mov row,5mov row,5

mov col,7mov col,7

Gotoxy col,row Gotoxy col,row برنامه در ماکرو برنامه فراخوانی در ماکرو فراخوانی

مثال:مثال:در , را رشته رشته دریافت با که بنویسید در , ماکرویی را رشته رشته دریافت با که بنویسید ماکرویی

کند؟ چاپ نما مکان جــاری کند؟ محــــل چاپ نما مکان جــاری محــــل

Put_str MACRO stringPut_str MACRO string

mov ah,09hmov ah,09h

lea dx,stringlea dx,string

int 21hint 21h

ENDMENDM

ماکرو ماکرو فراخوانی put_str msg1put_str msg1 فراخوانی

مثال:مثال: , نام به ماکرویی ماکرو از استفاده , با نام به ماکرویی ماکرو از استفاده کــــه کــــه putchmputchmبا

پارامتر چــــهار پارامتر دارای چــــهار را col,row,char,attrcol,row,char,attrدارای باشد را می باشد میبنویسید؟ اسمبــــلی زبــــــان بنویسید؟ به اسمبــــلی زبــــــان به

. Model tiny,c,os_dos. Model tiny,c,os_dos. 286. 286Putchm MACRO col,row,char,attrPutchm MACRO col,row,char,attr push axpush ax push bxpush bx mov al,charmov al,char mov ah,attrmov ah,attr mov bl,colmov bl,col

mov bh,rowmov bh,row Call putchCall putch pop bxpop bx pop axpop axENDMENDM.code .code . Startup. Startupjmp Ljmp Lputch proc nearputch proc near

putch endpputch endp

L:L:

putchm 2,2,’A’,1fHputchm 2,2,’A’,1fH

putchm 10,10,’B’,4fHputchm 10,10,’B’,4fH

.Exit0.Exit0

EndEnd

: ای رشته :دستورات ای رشته دستوراتچیز هر از قبل بایستی ای رشته دستورات انجام چیز برای هر از قبل بایستی ای رشته دستورات انجام برای

بیت بیت وضعیت . )DF )Direction Flag(DF )Direction Flagوضعیت کنیم مشخص . را کنیم مشخص رامقدار دو با بیـــت این مقدار زیرا دو با بیـــت این کننده 11و و 00زیرا تنظیم کننده خود تنظیم خود

به چپ از یا چپ به راست از ای رشته به عملیات چپ از یا چپ به راست از ای رشته عملیات. باشد می .راست باشد می راست

))CLDCLD ) ) Clear Direction FlagClear Direction Flagدستور دستور بیــــت دستور این از استفاده بیــــت با دستور این از استفاده ثبات DFDFبا ثبات از از

. کنیم می صـــفر را .وضعیــــت کنیم می صـــفر را وضعیــــت

::))STDSTD ) )Set Direction FlagSet Direction Flagدستور دستور

بیت دستور این اجرای بیت با دستور این اجرای یک DFDFبا را وضعیت ثبات یک از را وضعیت ثبات از. کنیم .می کنیم می

::) ) REPREP ) )RepeatRepeatدستور دستور آن جلوی دستور توانیم می دستور این از استفاده آن با جلوی دستور توانیم می دستور این از استفاده با

اندازه به اندازه را به . CxCxرا که زمانی تا عملیات کنیم . تکرار که زمانی تا عملیات کنیم cxcxتکرار. یابد می ادامه شود صــــفر و یافته .کاهش یابد می ادامه شود صــــفر و یافته کاهش

mov cx,nmov cx,n

RepRepدستور دستور

: :MOVSB , MOVSWMOVSB , MOVSWدستورات دستورات

از محلی از رشته یک دادن انتقال برای دستور دو از این محلی از رشته یک دادن انتقال برای دستور دو این. شوند می استفاده حافظه از دیگری محل بـــه .حافــظه شوند می استفاده حافظه از دیگری محل بـــه حافــظه

MovsbMovsb که محـــلی از بایــت یک بار که هر محـــلی از بایــت یک بار را DS:SIDS:SIهر آن را آدرس آن آدرسکه محـــلی به بــردارد که در محـــلی به بــردارد در ES:DIES:DIدر را آن در آدرس را آن آدرس

. دستور از استفاده وبا کند می کپــــی . بـــردارد دستور از استفاده وبا کند می کپــــی MovswMovswبـــردارد . یک کردن کپی از پس شود می کپـــی بایــــت دو بار . هر یک کردن کپی از پس شود می کپـــی بایــــت دو بار هر

به واحد دو یا یک دستــورات این توسط بایت دو به یا واحد دو یا یک دستــورات این توسط بایت دو یا.DIDIو و SISIثباتهای ثباتهای گردد می کم یا .اضافه گردد می کم یا اضافه

نکته:نکته:.DIDIو و SISIباشد باشد DF=0DF=0اگر اگر کنند می پیدا .افزایش کنند می پیدا افزایش.DIDIو و SISIباشد باشد DF=1DF=1اگر اگر کنند می پیدا .کاهش کنند می پیدا کاهش

مثال:مثال:رشته که بنـــویسید رشته دستــــوراتی که بنـــویسید طول str1str1دستــــوراتی طول به 1010به

رشته در را رشته بایت در را کند؟ str2str2بایت کند؟ کپی کپی

Str1 db “abcdefghij”Str1 db “abcdefghij”Str2 db 10 dup )?(Str2 db 10 dup )?(mov si,offset str1mov si,offset str1mov di,offset str2mov di,offset str2CLDCLDmov cx,10mov cx,10Rep movsbRep movsb

مثال:مثال:مـــی انــجام را عمــلی چه زیر دستــورات مـــی مجموعه انــجام را عمــلی چه زیر دستــورات مجموعه

رشته محتویات انتها در رشته دهند؟ محتویات انتها در مشخص StringStringدهند؟ مشخص را رانمائید.نمائید.

String db “ABCDEFGHIJ”String db “ABCDEFGHIJ”mov cx,4mov cx,4mov si,offset string+4mov si,offset string+4mov di,offset string+9mov di,offset string+9STDSTDRep movsbRep movsb

result string:”ABCDEFBCDEresult string:”ABCDEFBCDE””

AA BB CC DD EE FF BB CC DD EE

AA BB CC DD EE FF GG HH II JJ

SI DI

مثال:مثال:که بنویسید که دستوراتی بنویسید از 1010دستوراتی از کلمه در str1str1کلمه در را کپی کپی str2str2را

کند؟کند؟

Str1 dw “ ABCDEFGHIJ”Str1 dw “ ABCDEFGHIJ”Str2 dw 10 dup)?(Str2 dw 10 dup)?(mov si,offset str1mov si,offset str1mov di,offset str2mov di,offset str2CLDCLDmov cx,5mov cx,5Rep movswRep movsw

: :LODSB , LODSWLODSB , LODSWدستورات دستورات

آدرس از دستــــور دو آدرس این از دستــــور دو در DS:SIDS:SIاین بایت در یک بایت یا alalیک یا و ودر بایت در دو بایت .axaxدو کنند می .کپی کنند می کپی

نکته:نکته:اگر فوق دستورات اجرای اگر با فوق دستورات اجرای دو SISIباشد باشد DF=1DF=1با یا دو یک یا یک

اگر و یابـــد می کاهش اگر بایت و یابـــد می کاهش یا SISIباشد باشد DF=0DF=0بایت یا یک یک. کند می پیدا افزایش بایــــــت .دو کند می پیدا افزایش بایــــــت دو

مثال:مثال:رشته معکوس که بنویسید رشته دستوراتی معکوس که بنویسید رشته str1str1دستوراتی در رشته را در را

str2str2 دهد؟ دهد؟ قرار قرار

Str1 db “ABCDFG”Str1 db “ABCDFG”Str2 db 6 dup )?(Str2 db 6 dup )?(mov si,offset str1mov si,offset str1mov di,offset str2+5mov di,offset str2+5CLDCLDmov cx,6mov cx,6L1: LODSBL1: LODSB mov [di],almov [di],al dec didec di Loop L1Loop L1

: :STOSB , STOSWSTOSB , STOSWدستورات دستورات

محتـــویات توان می دستــور دو این از استفاده محتـــویات با توان می دستــور دو این از استفاده alalبایا یا و آدرس axaxو در آدرس را در کپی DS:DIDS:DIرا حافظه کپی از حافظه از

. شود. می انجام بایتــــی دو یا یک کپی عمل .نمود شود. می انجام بایتــــی دو یا یک کپی عمل نمود

نکته:نکته:اگر دستـــــور دو این اجرای اگر با دستـــــور دو این اجرای یا DIDIباشد باشد DF=0DF=0با یا یک یک

اگر و یابد می افزایش بایــــت اگر دو و یابد می افزایش بایــــت DIDIباشد باشد DF=1DF=1دو. یابد می کاهش بایــــت دو یا .یک یابد می کاهش بایــــت دو یا یک

مثال:مثال:رشته که بنویسید ای برنامه رشته قسمت که بنویسید ای برنامه طول str1str1قسمت طول به 1010به

کاراکتر با را کاراکتر بایـــــت با را کند؟ SpaceSpaceبایـــــت کند؟ پر پر

کاراکتر کاراکتر کد SpaceSpaceکد

Str1 db 10 dup )?(Str1 db 10 dup )?(mov cx,5mov cx,5CLDCLDLea di,str1Lea di,str1mov ax,2020H mov ax,2020H Rep stoswRep stosw

: :REPZREPZیا یا REPEREPEدستور دستور

که زمانی تا که عملیات زمانی تا صفر ZFZFعملیات یا مساوی بر صفر مبتنی یا مساوی بر مبتنی . که وقتی یابد می ادامــــه . باشـــــد که وقتی یابد می ادامــــه صفر ZFZFباشـــــد بر صفر مبتنی بر مبتنی

یا شـــــود یا نبودن شـــــود عملیات cxcxنبودن شود وصفر یافته عملیات کاهش شود وصفر یافته کاهش. یابد می .خاتمه یابد می خاتمه

: :REPNZREPNZیا یا REPNEREPNEدستور دستور که زمانی تا که عملیات زمانی تا نامســــاوی ZFZFعملیات یا صفر عدم بر نامســــاوی مبنی یا صفر عدم بر مبنی

. که وقتی شود می تکرار . باشــــــد که وقتی شود می تکرار یا ZFZFباشــــــد صفر بر یا مبنی صفر بر مبنییا شود بودن یا مســــــاوی شود بودن شود cxcxمســــــاوی صفر و یافته شود کاهش صفر و یافته کاهش

. یابد می .خاتمه یابد می خاتمه

: :CMPSB , CMPSWCMPSB , CMPSWدستورات دستورات

آدرس از بایــت دو یا بایت یک دستور دو آدرس این از بایــت دو یا بایت یک دستور دو را را DS:SIDS:SIاینآدرس آدرس بــا زیر ES:DIES:DIبــا های پرچم که کند می زیر مقایسه های پرچم که کند می مقایسه

. کند می تنظیم .را کند می تنظیم را

ZF,AF,OF,CF,SF,PFZF,AF,OF,CF,SF,PF

اگر دستور دو این اجرای اگر با دستور دو این اجرای یا SISIیا یا DIDIباشد باشد DF=0DF=0با یا یک یکاگر و یابد می افزایش واحــد اگر دو و یابد می افزایش واحــد یا یا DIDIباشد باشد DF=1DF=1دو

SISI . یابد می کاهش واحــــــد دو یا . یک یابد می کاهش واحــــــد دو یا یک

مثال:مثال:رشتـــه دو که بنویــسید ای برنامه رشتـــه قسمت دو که بنویــسید ای برنامه S2S2و و S1S1قسمت

طول بــه طول را بــه . 55را رشته دو این اگر کند مقایسه . بایت رشته دو این اگر کند مقایسه بایتدر بودند در برابر بودند ادامه 11مقدار مقدار BHBHبرابر در و دهد قرار ادامه را در و دهد قرار را

رشته S2S2رشته رشته با رشته را با برابر S3S3را اگر کنــد برابر مقایـــسه اگر کنــد مقایـــسهدر در نبودند دهد؟ 22مقدار مقدار BHBHنبودند قرار دهد؟ را قرار را

S1 db “ABCDE”S1 db “ABCDE”S2 db “ABCDE”S2 db “ABCDE”S3 db “AKMNO”S3 db “AKMNO”mov si,offset S1mov si,offset S1mov di,offset S2mov di,offset S2CLDCLD

mov cx,5mov cx,5 Repe cmpsb L2Repe cmpsb L2::

Jne L1Jne L1 mov bh,1mov bh,1L1L1::

mov cx,5mov cx,5 lea si,S2lea si,S2 lea di,S3lea di,S3

Repe cmpsbRepe cmpsb je L2je L2

mov bh,2mov bh,2

: :SCASB , SCASWSCASB , SCASWدستورات دستورات

در که کاراکتری جستجوی برای دستور دو این در از که کاراکتری جستجوی برای دستور دو این یا یا alalازدر که در مقداری که آدرس axaxمقداری در دارد آدرس وجود در دارد ES:DIES:DIوجود

شرایط به توجه با که شود می شرایط استفاده به توجه با که شود می DIDIفقط فقط DFDFاستفاده. یابد می کاهش یا .افزایش یابد می کاهش یا افزایش

مثال:مثال:به ای رشتـــه در که بنویـــسید ای برنـــامه به قسمت ای رشتـــه در که بنویـــسید ای برنـــامه قسمت

در 1010طول طول که کاراکتـــری در بایـــت که کاراکتـــری را alalبایـــت دارد را وجـــود دارد وجـــودمقدار کرد پیدا اگر کند مقدار جستجــو کرد پیدا اگر کند در 0303جستجــو در را قرار قرار alalرا

دهد؟دهد؟

Str1 db “ABCDEFGHMLStr1 db “ABCDEFGHML””

mov cx,10mov cx,10

CLDCLD

Lea di,str1Lea di,str1

mov al,’Fmov al,’F’’

Repne scasbRepne scasb

Jne L1Jne L1

mov al,03Hmov al,03H

L1L1::

مثال:مثال:کاراکتر که بنویسید ای برنامه کاراکتر قسمت که بنویسید ای برنامه رشته ‘*’‘*’قسمت در رشته را در را

strstr طول طول به . 66به را آن کرد پیدا اگر کند جستجو . بایت را آن کرد پیدا اگر کند جستجو بایتکند؟ SpaceSpaceبا با کند؟ جایگزین جایگزین

Str db “ABC*EF” L1:Str db “ABC*EF” L1:mov cx,6mov cx,6CLDCLDLea di,strLea di,strmov al,’*’mov al,’*’Repne scasbRepne scasbJne L1Jne L1mov byteptr [di+1],20Hmov byteptr [di+1],20H

مثال:مثال:بنـــام رشتـــه یک در که بنویسید ای برنامه بنـــام قسمت رشتـــه یک در که بنویسید ای برنامه قسمت

strstr طول طول به کاراکتر 2020به کاراکتر بایت . ‘*’‘*’بایت به کند جستجو . را به کند جستجو راکاراکترهای تمام کاراکترهای طوریــکه تمام را ‘*’‘*’طوریــکه رشته در را موجود رشته در موجود

کند؟ SpaceSpaceبا با کند؟ جایگزین )?Str db 20 dup)?(Str db 20 dup)جایگزینMov cx,20Mov cx,20CLDCLDmov di,offset strmov di,offset strmov al,’*’mov al,’*’

RepeatRepeat::

Repne scasbRepne scasb

jne L1jne L1

mov byteptr [di+1],20Hmov byteptr [di+1],20H

Loop RepeatLoop Repeat

L1L1 : :

: حافظه در مقیم های :برنامه حافظه در مقیم های برنامه

برنامه کردن مقیم اسمبلی زبان کاربردهای از برنامه یکی کردن مقیم اسمبلی زبان کاربردهای از یکی. باشد می حافظه در اجرایـی .های باشد می حافظه در اجرایـی های

: حافظه در را آن اینــکه یعنی برنامه یک کردن : مقیم حافظه در را آن اینــکه یعنی برنامه یک کردن مقیمو خاصی های زمان در که دهیم قرار طوری و اصــلی خاصی های زمان در که دهیم قرار طوری اصــلی

. شود اجـــرا خودکـــار طور به خاص شرایـــط . در شود اجـــرا خودکـــار طور به خاص شرایـــط درکامپیوتر در بتـــوانیم همزمان طور به حالیـــکه کامپیوتر در در بتـــوانیم همزمان طور به حالیـــکه در

. نماییم اجرا را دیگری های .برنامه نماییم اجرا را دیگری های برنامه

وقفه مورد در که وقفه همانطور مورد در که وقفه 55همانطور شد داده وقفه توضیح شد داده توضیححافظه در مقیم های برنامه افزاری نرم حافظه های در مقیم های برنامه افزاری نرم های

. شوند می اجـــرا خاص شرایـــط در که . هســـتند شوند می اجـــرا خاص شرایـــط در که هســـتند

مانند ساختــاری از نیز دیگر های برنامه کردن مقیـــم مانند برای ساختــاری از نیز دیگر های برنامه کردن مقیـــم برای. کرد استفاده توان می ها وقفه .ساختـار کرد استفاده توان می ها وقفه ساختـار

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

از را وقفه برنامه آدرس عامل سیستم شـــود می از فراهم را وقفه برنامه آدرس عامل سیستم شـــود می فراهممراجعه آن آدرس به سپس و کند مـی پیدا حافظه مراجعه ابتدای آن آدرس به سپس و کند مـی پیدا حافظه ابتدای

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

اند گرفتـــه قرار حافــــظه ابتدای در وقفه های برنامه اند آدرس گرفتـــه قرار حافــــظه ابتدای در وقفه های برنامه آدرسهر هر و تفـــاوت , 44و و ناحیه آدرس قسمـــت این از تفـــاوت , بایـــت و ناحیه آدرس قسمـــت این از بایـــت

آدرس و آدرس مـــــکان و وقفه OffsetOffsetو و SegmentSegmentمـــــکان از یکی به وقفه مربوط از یکی به مربوط. بردارد در را .ها بردارد در را ها

را صفر وقفــــه آدرس سوم بایـــت تا صفــرم بایت از را یعنی صفر وقفــــه آدرس سوم بایـــت تا صفــرم بایت از یعنی . وقفه آدرس هفتم بایت تا چهارم بایت از دهد می . تشکیـــل وقفه آدرس هفتم بایت تا چهارم بایت از دهد می تشکیـــل

بعدی بایتهای در ها وقفه بقیه آدرس ترتیب همــــین به و بعدی یک بایتهای در ها وقفه بقیه آدرس ترتیب همــــین به و یک. دارند .قرار دارند قرار

0 1 2 3 4 5 6 7 8 9 10 11 ... 255 254 253 252

صفر وقفه

یک وقفه 255وقفه

دو وقفه

مثال:مثال:دستور از استفاده بدون که بنویسید ای دستور برنامه از استفاده بدون که بنویسید ای وقفه وقفه intintبرنامه

شماره ) 55شماره شماره وقفه کند؟ اجرا شماره ) را وقفه کند؟ اجرا کلید 55را به کلید مربوط به مربوطprint screenprint screen) است (است

.model tiny,c,os_dos.model tiny,c,os_dos

.286.286

.code.code

.startup.startupOldint dd ?Oldint dd ?Start:Start: mov bx,0mov bx,0

mov ES,bxmov ES,bx

mov bx,4*5mov bx,4*5

mov ax,ES:[bx]mov ax,ES:[bx]

mov dword ptr oldint,axmov dword ptr oldint,ax

mov ax, ES:[bx+2]mov ax, ES:[bx+2]

mov dword ptr oldint+2,axmov dword ptr oldint+2,ax

call oldintcall oldint

..exit0exit0

EndEnd

حافظه در مقیـــم بصورت را ای برنامه اینـــکه حافظه برای در مقیـــم بصورت را ای برنامه اینـــکه برایبصورت برنامه این که کنیم کاری باید بصورت بنویسیــم برنامه این که کنیم کاری باید بنویسیــم

اجرا ها وقفـــه از یکی توسط غیرمستقیـــم یا اجرا مستقیـم ها وقفـــه از یکی توسط غیرمستقیـــم یا مستقیـمو. دهیم تغییر را ها وقفه از یکی آدرس باید بنابراین و. شود دهیم تغییر را ها وقفه از یکی آدرس باید بنابراین شود

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

تواند نــمی حافظه در برنامه کردن مقیم تنــها تواند پس نــمی حافظه در برنامه کردن مقیم تنــها پس. شود برنامه اجـــرای .باعـــث شود برنامه اجـــرای باعـــث

بنـــویسیم ای برنامه بخواهیـــم که کنید فرض مثال بنـــویسیم برای ای برنامه بخواهیـــم که کنید فرض مثال برایکلیـــد زدن با کلیـــد که زدن با . Print ScreenPrint Screenکه ایـــن برای شود . اجـــرا ایـــن برای شود اجـــرا

. این اینــــکه اول کنیم عمل توانیم می روش دو به . کار این اینــــکه اول کنیم عمل توانیم می روش دو به کاروقفه اصـــلی برنامه جایگزین را وقفه برنامه اصـــلی برنامه جایگزین را . 55برنامه از یعنی . نماییم از یعنی نماییم

های های آدرس وقفه 2323تا تا 2020آدرس به مربوط وقفه که به مربوط , 55که باشد , می باشد می. دهیم قرار را خود برنامه .آدرس دهیم قرار را خود برنامه آدرس

وقفه اصلی برنامه افتادن کار از باعث کار وقفه این اصلی برنامه افتادن کار از باعث کار 55این. شد .خواهد شد خواهد

بایت در را خود برنامه آدرس که است این دوم بایت روش در را خود برنامه آدرس که است این دوم روشفوق 2323تا تا 2020ها ها برنامه انتهای در و دهیم فوق قرار برنامه انتهای در و دهیم قرار

وقفه اصلی وقفه برنامه اصلی . 55برنامه را عمل این نماییم اجرا . را را عمل این نماییم اجرا را. نامند می وقفه بردار .انحراف نامند می وقفه بردار 23 22 21 20انحراف

Userبرنامه call

Print Screen

حافظه در برنامه یک کردن مقیـــم برای حافظه بنـــابراین در برنامه یک کردن مقیـــم برای بنـــابراینمنـــاسب طور به را وقـــفه بردار ابتدا منـــاسب باید طور به را وقـــفه بردار ابتدا باید

مقیم بصورت را بــــرنامه سپـــس و کرد مقیم منحرف بصورت را بــــرنامه سپـــس و کرد منحرف. درآورد حافظه .در درآورد حافظه در

: حافظه در برنامه یک کردن :مقیم حافظه در برنامه یک کردن مقیموقفه 27H27Hسرویس) سرویس) وقفه از ( (21H21Hاز

ثبات در باید برنامه این اجرای ثبات برای در باید برنامه این اجرای آدرس آدرس bxbxبرایانتهای که دهیم قرار را بـــرنامه از انتهای قسمتی که دهیم قرار را بـــرنامه از قسمتی

. کند مشخص را حافظه در مقیم .نقطه کند مشخص را حافظه در مقیم نقطه

بایـــت از وقفه این اجرای صورت بایـــت در از وقفه این اجرای صورت تا تا CS:0000CS:0000درCS:DXCS:DX. شود می مقیم حافظه .در شود می مقیم حافظه در

: وقفه بردار :تغییر وقفه بردار تغییروقفه 35H35Hسرویس) سرویس) وقفه از ( (21H21Hاز

سرویس ) سرویس ) شماره 35H35H=) =) AHAHشماره

= وقفه =شماره وقفه ALALشماره

= وقفه روال =آدرس وقفه روال ES:BXES:BXآدرس

Int 21HInt 21H

وقفه 35H35Hتابع تابع وقفه از وقـــفه 21H21Hاز اصلی بــرنامه وقـــفه آدرس اصلی بــرنامه آدرسثـــبات در ثـــبات را در . ES:BXES:BXرا این برای دهد می . قرار این برای دهد می قرار

ثبات در باید را وقـفه شماره ثبات منظور در باید را وقـفه شماره .ALALمنظور دهیم .قرار دهیم قرار) وقفه) یک روال آدرس (تعیین وقفه) یک روال آدرس تعیین

: وقفه بردار آدرس :تغییر وقفه بردار آدرس تغییروقفه 25H25Hسرویس سرویس وقفه از 21H21Hاز

سرویس ) سرویس ) شماره = = 25H25H) ) AHAHشمارهوقفه وقفه شماره ==ALALشماره

وقفه روتین جدید وقفه آدرس روتین جدید ==DS:DXDS:DXآدرسInt 21Int 21

وقفه 25H25Hتابع تابع وقفه از در 21H21Hاز را جدید برنامه یک در آدرس را جدید برنامه یک آدرس . ثبات در منظور این برای دهد می قرار وقفــه . بردار ثبات در منظور این برای دهد می قرار وقفــه بردار

ALAL ثبـــات در و وقفـــه ثبـــات شماره در و وقفـــه را را 25H25Hشماره شماره AHAHشمارهثبـــات در و داده ثبـــات قــرار در و داده مکان DXDXقــرار تـــفاوت مکان آدرس تـــفاوت آدرس

. مقدار وقفه این اجرای با دهیم می قرار را . برنامه مقدار وقفه این اجرای با دهیم می قرار را برنامهCSCS و وDXDX. نشینند می وقفه بردار .در نشینند می وقفه بردار در

استفاده 27H27Hوقفه وقفه حافظه در برنامه یک کردن مقیم استفاده برای حافظه در برنامه یک کردن مقیم برای . ثبات در وقـــفه این از استـــفاده برای شود . می ثبات در وقـــفه این از استـــفاده برای شود DXDXمی

. دهیم می قرار را برنامه انتهای مکان تـــفاوت .آدرس دهیم می قرار را برنامه انتهای مکان تـــفاوت آدرسآدرس از برنامه آدرس این از برنامه حافظه CS:0000CS:0000تا تا CS:DXCS:DXاین در حافظه را در را

. حافظه در برنامه یک کردن مقیم برای کند می . مقیم حافظه در برنامه یک کردن مقیم برای کند می مقیم (. انتخاب نماییم می انتخاب را ها برنـامه از یکی .) ابتدا انتخاب نماییم می انتخاب را ها برنـامه از یکی ابتدا

. عنوان به دارد ما نیاز به بستـگی ها وقفه از یکی . شماره عنوان به دارد ما نیاز به بستـگی ها وقفه از یکی شمارهکلید بخواهیم اگر کلید مثال بخواهیم اگر باید Print ScreenPrint Screenمثال دهیم تغییر باید را دهیم تغییر را

وقـــفه 55وقــــفه وقــــفه بخواهیـــم اگـــر و کنیم انتـــخاب وقـــفه را بخواهیـــم اگـــر و کنیم انتـــخاب راTimerTimer وقفه بایستی دهیم تغییر وقفه را بایستی دهیم تغییر .(88را نماییم انتخاب .(را نماییم انتخاب را

را آن اصلی برنامه آدرس باید وقفه انتخاب از را پس آن اصلی برنامه آدرس باید وقفه انتخاب از پس . تابع توسط کار این آوریم . بـــــدست تابع توسط کار این آوریم وقفه 35H35Hبـــــدست وقفه از 21H21Hاز

. خود برنامه آدرس باید سپس باشد مـــــی پذیر . امکان خود برنامه آدرس باید سپس باشد مـــــی پذیر امکانکار . این که دهیم قرار وقفه اصـلی برنامه جای به کار . را این که دهیم قرار وقفه اصـلی برنامه جای به را

تابع تابع توسط وقفه 25H25Hتوسط وقفه از پذیر 21H21Hاز پذیر امـــــکان امـــــکان

تابع. از استفاده با را برنامه بایــد آن از پـــس تابع. است از استفاده با را برنامه بایــد آن از پـــس 27H27Hاست . شده مقیم برنامه در درآوریم حافظه در مقــــیم . بصورت شده مقیم برنامه در درآوریم حافظه در مقــــیم بصورت

و ابتدا در ثباتها بازیابی و ذخیره عمـل که کنیم دقت و باید ابتدا در ثباتها بازیابی و ذخیره عمـل که کنیم دقت بایدوقفه اصلی برنامه فــــراخوانی همچنـین و برنامه وقفه انتهای اصلی برنامه فــــراخوانی همچنـین و برنامه انتهای

. دستور هز شده مقیم برنـامه در ضمنا شود می . انجام دستور هز شده مقیم برنـامه در ضمنا شود می iretiretانجام. کنیم می استفاده برنامه اتمام .برای کنیم می استفاده برنامه اتمام برای

::11نکتهنکتهدستور از ابتدا تغییربرداروقفه دستور درموقع از ابتدا تغییربرداروقفه ))CLICLI ) )Clear InterruptClear Interruptدرموقع

, از تنظیم عمل پایان از پس و وقفه انداختن کار از , برای از تنظیم عمل پایان از پس و وقفه انداختن کار از برایاستفاده ) ) STISTI ) )Set InterruptSet Interruptدستـور دستـور وقفه کردن فعال استفاده برای وقفه کردن فعال برای

: . موقع در که است دلیل این به کار این انجام کنــیم : می . موقع در که است دلیل این به کار این انجام کنــیم می , اجرای برای شرایط است ممکن وقــــفه بــردار , تنظیم اجرای برای شرایط است ممکن وقــــفه بــردار تنظیم

بردار کامل تنظیم عـدم دلیـــل به و شود فراهم بردار وقفه کامل تنظیم عـدم دلیـــل به و شود فراهم وقفه . کند, قفل کامپیوتر . وقفه کند, قفل کامپیوتر وقفه

::22نکتهنکتهجای به حافظه در مقیم های برنامه در است جای بهتر به حافظه در مقیم های برنامه در است بهتر

وقـــفه از وقـــفه استـفاده از از DosDosاستـفاده چاپ از برای چاپ Video RamVideo Ramبرای. شود .استفاده شود استفاده

مثال:مثال:که بنویسید حافظه در مقیم بصورت ای که برنامه بنویسید حافظه در مقیم بصورت ای برنامه

نمایش ‘*’‘*’کاراکتر کاراکتر صفحه باالی گوشه نمایش همیشه صفحه باالی گوشه همیشهشود؟ داده شود؟ نشان داده نشان

..model tiny,c,Os_dosmodel tiny,c,Os_dos

..286286

..codecode

..startupstartup

Oldint ddOldint dd? ?

Newint procNewint proc

CLICLI

push cspush cs

call ds:[oldint]call ds:[oldint]

push espush es

push 0B800Hpush 0B800H

pop espop es

mov es:[0],1F2AHmov es:[0],1F2AHPop esPop esSTISTIIretIretNewint endpNewint endpComCom::

mov ax,3508Hmov ax,3508H int 21Hint 21H

mov wordptr oldin,bxmov wordptr oldin,bx mov wordptr oldint[2],esmov wordptr oldint[2],es

mov dx,offset newintmov dx,offset newint

Push csPush cs

Pop dsPop ds

mov ax,2508Hmov ax,2508H

Int 21HInt 21H

mov ax,0000Hmov ax,0000H

mov dx,offset commov dx,offset com

Int 21HInt 21H

: :16H16Hوقفه وقفه

و کلید صفحه با کار برای وقفه و این کلید صفحه با کار برای وقفه کلید BufferBufferاین کلید صفحه صفحه. شود می .انتخاب شود می انتخاب

وقفه 01H01Hسرویس سرویس وقفه از : :16H16Hازوضعیت از اطالع کسب منظور به سرویس وضعیت این از اطالع کسب منظور به سرویس این

BufferBuffer. شود می استفاده کلید .صـــــفحه شود می استفاده کلید صـــــفحه

AH=01H ZF=0AH=01H ZF=0

Int 16H ZF=1Int 16H ZF=1

خروجی

وقفه 02H02Hسرویس سرویس وقفه از : :16H16Hاز

وضعیـــت از گیری گزارش منظور به سرویس وضعیـــت این از گیری گزارش منظور به سرویس این. شود می استفاده کلیـــد .صفـــحه شود می استفاده کلیـــد صفـــحه

AH=02H ALAH=02H AL

Int 21HInt 21Hخروجی 0 1 2 3 4 5 6 7

.=ShiftShiftکلید: کلید: 00بیت بیت شده فشرده .=راست شده فشرده 11راست

.=ShiftShiftکلید: کلید: 11بیت بیت شده فشرده .=چپ شده فشرده 11چپ

.=CtrlCtrlکلید: کلید: 22بیت بیت شده فشرده .=چپ شده فشرده 11چپ

.=AltAltکلید: کلید: 33بیت بیت شده فشرده .=چپ شده فشرده 11چپ

.=Scroll LockScroll Lockکلید: کلید: 44بیت بیت است .=روشن است 11روشن

.=Num LockNum Lockکلید: کلید: 55بیت بیت است .=روشن است 11روشن

.=Caps LockCaps Lockکلید: کلید: 66بیت بیت شده .=فشرده شده 11فشرده

.=77بیت بیت شده: فشرده .=کلید شده: فشرده 11کلید

مثال:مثال:که بنویسید ای برنامه که قسمت بنویسید ای برنامه به XXقسمت حافـــظه در که به را حافـــظه در که را

, 11طـول طـول بنام ای حافظه در باشد می , بایت بنام ای حافظه در باشد می که که AreaAreaبایتآن طول و شده مرتب صــعودی آن بصورت طول و شده مرتب صــعودی 1010بصورت

, روش به باشد می , بایـــت روش به باشد می جستجو جستجو Binary SearchBinary Searchبایـــتکند؟کند؟

Area db 11,12,19,36,81,91Area db 11,12,19,36,81,91

db 100,102,104,110db 100,102,104,110

I db -1I db -1

X db 102X db 102

mov si,0mov si,0mov di,9mov di,9WhileWhile::

cmp si,dicmp si,di jae exitjae exit

mov ax,simov ax,si add ax,diadd ax,di

shr ax,1shr ax,1 mov bh,0mov bh,0 mov bl,almov bl,al

mov al,area[bx]mov al,area[bx]

cmp al,xcmp al,x jne L1jne L1

mov I,blmov I,bl jmp exitjmp exit

L1L1:: cmp al,xcmp al,x

ja L2ja L2 mov di,bx-1mov di,bx-1

jmp whilejmp whileL2L2::

mov si,bx+1mov si,bx+1

jmp whilejmp while

ExitExit::

مثال:مثال:که بنـــویسیـــد ای که برنامه بنـــویسیـــد ای از 1010برنامه را اطالعات از بایت را اطالعات بایت

. 3F7H3F7Hپـــورت پـــورت اعداد میانـــگین سپــس . بخواند اعداد میانـــگین سپــس بخواندنام به حافظه از محلی در را نام دریافتی به حافظه از محلی در را قرار قرار avgavgدریافتی

دهد؟دهد؟

adc bl,aladc bl,al loop startloop start

mov ax,bxmov ax,bxDiv tenDiv tenmov avg,almov avg,almov si,0mov si,0mov di,7mov di,7L3L3::

cmp si,dicmp si,di jae exitjae exit

mov al,area[si]mov al,area[si]

cmp al,area[di]cmp al,area[di]

je L4je L4

L4L4::

inc siinc si

dec didec di

jmp L3jmp L3

ExitExit::

Avg db ?Avg db ?Ten db 10Ten db 10mov cx,10mov cx,10mov bx,0mov bx,0Start:Start:in al,3F7Hin al,3F7H

مثال:مثال:

تـشخیص که بنویسید اسمبلی زبان به روال تـشخیص یک که بنویسید اسمبلی زبان به روال یکیک BHBHدهددهد یک حـــاوی با ) PalindramPalindramحـــاوی عددی باشد؟ با ) می عددی باشد؟ می

قرینه ( قرینه (بیتهای )?Area db 8 dup )?(Area db 8 dup )بیتهایSw db 1Sw db 1mov cx,8mov cx,8mov si,0mov si,0L:L: shl bh,1shl bh,1 jnc L2jnc L2 mov area[si],1mov area[si],1L2:L2: inc siinc si loop Lloop L

ENENDD