1 زبا ياشی اس بهی : ارائه مریم رستگارپور mriausaveh@yahoo.com دانشگاه آزاد اسالمی واحد ساوه بهار 89 1
3 يرجع درش www.assembly.blogfa.com www.rastgarpour.com www.ehsan7150.tk فصم س و زبان اسمبلی 2
5 ص رت كهي يك بر اي ب زبا اس بهي Page 80,132 Title this is the first program for test. ;-----------------------Define Stack Segment------------------ Sseg segment براي تخصیص فضا استفاده مي شود ;.. Sseg Ends ;------------------------Define Data Segment------------------- براي تعریف داده هاي ورودي و متغیرهاي خروجي از این قطعه استفاده مي شود ; Dseg segment...... Dseg ends ;------------------------Define Code Segment-------------------- تمامي دستورات اسمبلي در این قطعه تعریف مي شوند ; Cseg segment Main proc far Assume cs:cseg, ds:dseg, ss:sseg 6 اداي mov ax,dseg mov ds,ax... محل تعریف دستورات اسمبلي ( بدنه برنامه(;. mov ax,4c00 h int 21h main endp Cseg ends end main 3
7 ساختار كهي براي تعريف segment Segment برچسب.. Ends برچسب 8 كت اسمبلر نسبت به بزرگ و كوچك بودن حروف حساس نیست. 4
9 ساختار كهي تعريف پر سیجر نوع پرسیجر Proc برچسب... بدنه پروسیجر ;... Endp برچسب نوع پروسیجر مي تواند far و nearباشد. - اگر far باشد یعني در قطعه كد جاري تعریف نشده است و در قطعه كد دیگري است - اگر از نوع near باشد یعني در قطعه كد جاري است. 10 ساختار كهي تعريف اعداد ر دي يتغیر اي خر جي <مقدار اولیه> <نوع متغیر> <برچسب }نام{ متغیر> 1) DB : Define Byte انواع متغیرها: براي تعریف یك بایت داده براي تعریف دو بایت داده یا یك كلمه (2 DW: Define Word براي تعریف 4 بایت داده 3) DD: Define Double Word براي تعریف 8 بایت داده 4) DQ: Define Quad Word براي تعریف 10 بایت داده 5) DT: Define Ten Byte مثال: متغیري به نام first با ظرفیت دو بایت و مقدار اولیه a34b تعریف كنید. First dw a34bh اگر متغیري مقدار اولیه نداشته باشد و بعنوان خروجي كاربرد داشته باشد به جاي مقدار اولیه آن از عالمت استفاده مي شود. مثال:? dq second براي تعریف متغیر second با ظرفیت 8 بایت به كار مي رود. 5
11 تعريف قطع پشت براي تعریف قطعه پشته كافي است كه به آن قطعه به اندازه مطلوب فضا تخصیص دهیم. نحوه تخصیص فضا: (مقدار اولیه خانه ها) DUP <تعداد خانه ها> <نوع خانه ها> بایت خالي تعریف كنید. Stseg segment DB 64 DUP(?) Stseg ends مثال 1 : قطعه پشته اي با ظرفیت 64 12 مثال 1 : قطعه پشته اي با ظرفیت 32 تعریف كنید. كلمه با مقدار اولیه FFFFH Sts segment Dw 32 DUP(ffff) Sts ends 6
13 ساختار كهي يك دست ر اس بهي > توضیحات;> <عملوند> نمادرمزي <برچسب> از عبارت باال فقط وجود نماد رمزي براي یك دستور اسمبلي الزامي است و مابقي گزینه ها در اختیار نویسنده برنامه است. 14 دست رات اس بهي پركاربرد )انتقال داده( Move Mov <op1>,<op2> ; op1 op2 Op2 )عملوند 2 ( مي تواند داده فوري رجیستر خانه حافظه باشد. Op1 )عملوند 1 ( مي تواند رجیستر خانه حافظه باشد. مثال: Mov ax,bx Mov ax,1458 Mov ax,b Mov cx,[1458] 7
15 كات ي ى براي دست ر Mov دو عملوند بایستي هم اندازه باشند. )یا هردو 16 بیتي یا هر دو 8 بیتي( انتقال مستقیم خانه حافظه به خانه حافظه امكانپذیر نیست. مثال: [5698], [1258] mov امكانپذیر نیست. براي اجراي دستور باال باید به صورت زیر نوشته شود: Mov ax,[5698] mov ah,[5698] Mov [1258],ax mov [1258],ah 16 كات ي ى براي دست ر Mov انتقال مقدار به رجیسترهاي قطعات فقط از طریق رجیستر كمكي امكانپذیر است. مثال: Mov ax,[1245] Mov ds,ax سوال: در مثال باال آیا میتوان به جاي رجیستر ax از ah استفاده نمود چرا پاسخ: خیر. زیرا از آنجا كه آدرسها 16 بیتي هستند رجیستر ds نیز شانزده بیتي است لذا نمی توان از ah استفاده نمود. 8
17 Debug -f 1258 125f 12 55 69 87 a2 3b 5e ef -a 200 0B8D:0200 mov ah,[5698] 0B8D:0204 mov [1258],ah 0B8D:0208 int 3 0B8D:0209 -t=200 2 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B8D ES=0B8D SS=0B8D CS=0B8D IP=0204 NV UP EI PL NZ NA PO NC 0B8D:0204 88265812 MOV [1258],AH DS:1258=12 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B8D ES=0B8D SS=0B8D CS=0B8D IP=0208 NV UP EI PL NZ NA PO NC 0B8D:0208 CC INT 3 -e 5698 0B8D:5698 00. -e 1258 0B8D:1258 00. -e 1259 0B8D:1259 55. -f 5698 5699 aa bb -a 220 0B8D:0220 mov ax,[5698] 0B8D:0223 mov [1258],ax 0B8D:0226 int 3 0B8D:0227 -t=220 2 AX=BBAA BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B8D ES=0B8D SS=0B8D CS=0B8D IP=0223 NV UP EI PL NZ NA PO NC 0B8D:0223 A35812 MOV [1258],AX DS:1258=5500 AX=BBAA BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B8D ES=0B8D SS=0B8D CS=0B8D IP=0226 NV UP EI PL NZ NA PO NC 0B8D:0226 CC INT 3 -e 1258 0B8D:1258 AA. -e 1259 0B8D:1259 BB. يثال در يحیط 18 قرارداد يبت ي بر ك چكتر طبق این قرارداد محتویات بایت كم ارزش در آدرس كمتر و بایت پرارزش در آدرس بیشتر قرار مي گیرد. 1258 01 Mov AX,[5698] 1259 AF [1258]=4B مثال Mov [1258],AX [1259]=C2 5698 5699 4B C2 ax Mov Ah,[5698] Mov [1258],Ah ah al C2 4B [1258]=4B 9
19 دست ر ADD )كپي داده( ADD ADD <op1>,<op2> ; cf+op1 op2+op1 Op2 )عملوند 2 ( مي تواند داده فوري رجیستر خانه حافظه باشد. Op1 )عملوند 1 ( مي تواند رجیستر خانه حافظه باشد. كلیه قوانیني كه براي دستور mov برقرار است براي دستورADD نیز برقرار مي باشد. مثال: ADD ax,bx ; cf,ax=ax+bx ADD ax,1458 ; cf,ax=ax+1458 ADD ax,b ; cf,ax=ax+b ADD cx,[1458] ;cf,cx=cx+[1458] 20 آدرش ي طقي آدرس منطقي براي فهم CPU و كاربر است. ساختار آن به این صورت است: <میزان اختالف از ابتداي قطعه>: <آدرس شروع قطعه> مثال: آدرس منطقي براي قطعه كد آدرس منطقي براي قطعه داده آدرس منطقي براي قطعه پشته آدرس منطقي براي قطعه داده اضافي CS:IP DS:IP SS:SP ES:IP 10
21 آدرش فیسيكي آدرس فیزیكي آدرسي است كه مستقیما براي دسترسي به یك خانه حافظه به طور دقیق تعریف مي شود. ساختار آدرس فیزیكي به صورت یك عدد پنج رقمي)در مبناي 16( مي باشد و از فرمول زیر با داشتن آدرس منطقي بدست مي آید: <ميزان اختالف از ابتداي قطعه < + 10*< آدرس شروع قطعه>=< آدرس فيزيكي> CS*10 =آدرس + IP فيزيكي براي قطعه كد DS*10 =آدرس + IP فيزيكي براي قطعه داده SS*10 =آدرس + SP فيزيكي براي قطعه پشته ES*10 =آدرس + IP فيزيكي براي قطعه داده اضافي براي ذخيره كردن و يا خواندن يك مقدار از خانه حافظه از آدرس فيزيكي استفاده مي شود. 22 يثال براي آدرش فیسيكي ي طقي آدرس فیزیكي و منطقي براي خانه حافظه اي كه در 123 امین خانه قطعه كد با آدرس شروع fa2bh مي باشد بدست آورید CS=FA2BH IP=123H FA2B:0123 CS:IP = =آدرس منطقي CS*10+IP= FA2B*10+123=FA2B0+123= FA3D3 =آدرس فیزیكي FA2B0+ 123 ----------- FA3D3 11
23 يحد د پايی باالي قطع محدوده پایین آدرس اولین خانه از قطعه را میدهد. یعني IP=0000 محدوده باال آدرس آخرین خانه از قطعه را میدهد. یعني IP=FFFF 24 آدرش فیسيكي ي طقي يحد د پايی باالي قطع مثال: آدرس فیزیكي و منطقي براي ابتداي محدوده قطعه و انتهاي محدوده قطعه داده با آدرس شروع 12fbH و خانه حافظه با میزان اختالف از ابتداي قطعه برابر با 5698 h را بدست آورید. DS=12FBH, IP=5698H LA= DS:IP = 12FB:5698 خانه حافظه: PA= DS*10+IP= 12FB*10+5698= 12FB0+5698= 18648 DS=12FBH, IP=0000H LA= DS:IP = 12FB:0000 PA= DS*10+IP= 12FB*10+0000= 12FB0+0000= 12FB0 DS=12FBH, IP=FFFFH LA= DS:IP = 12FB:FFFF PA= DS*10+IP= 12FB*10+FFFF= 12FB0+FFFF= 22FAF محدوده پایین قطعه داده : محدوده باال قطعه داده : 12
25 عدد( ر ش اي آدرش د ي : روشهایي كه cpu براي رسیدن به عملوند به كار مي رود تحت عنوان روشهاي آدرس دهي مي باشد. عبارتند از: ثباتي : از ثبات بعنوان عملوند استفاده مي شود. فوري : از عدد فوري بعنوان عملوند استفاده مي شود. مستقيم: از خانه حافظه )متغیر یا آدرس خانه حافظه( بعنوان عملوند استفاده مي شود. غير مستقيم ثباتي: از [ثبات] )آدرس عملوند در ثبات قرار دارد( بعنوان عملوند استفاده مي شود. نسبي پايه: ازBX+N و BP+N بعنوان آدرس عملوند استفاده مي شود. )N : عدد( نسبي انديس دار: ازDI+N و SI+N بعنوان آدرس عملوند استفاده مي شود. )N نسبي انديس دار پايه: ازBX+DI+N و BP+DI+N و BX+SI+N و BP+SI+N بعنوان آدرس عملوند استفاده مي شود. )N : عدد( ضمنی : به طور ضمنی در دستور وجود دارد. 26 يثال براي ر ش اي آدرش د ي AX,CX MOV ثباتي : AX,1456 MOV عدد فوري: AX,[1456] MOV مستقیم: AX,[CX] MOV غیر مستقیم ثباتي: AX,[BX]+1456 MOV نسبي پایه: نسبي اندیس دار: CX,[DI]+145 MOV نسبي اندیس دارپایه: CX,[BX+DI]+145 MOV ضمنی : bl Mul 13
27 كت بطور پیش فرض در روش نسبي پایه و نسبي اندیس دار پایه ثبات BXبراي قطعه داده و ثبات BPبراي قطعه پشته به كار مي روند. در روش نسبي اندیس دار و نسبي اندیس دار پایه دو ثبات DI و SI براي هر دو قطعه DS و SS قابل بكارگیري هستند. سپ رجیستر پایه مشخص كننده قطعه مورد نظر مي باشند. مثال: MOV [BX][DI]+15,AX براي قطعه داده به كار مي رود. 28 كت دستورات زیر معادلند: MOV CX,[BX+SI+16] MOV CX,[BX][SI]+16 MOV CX,[BX+SI]+16 MOV CX,16[BX][SI] در دستورات مذكور IP=BX+SI+16 14
29 يثال فرض كنید: BP=7000, SI=4000, BX=6080, DS=2000, SS=3000 آدرس فیزیكي حافظه اي كه عملوند در آن ذخیره شده و محتواي مكان هاي حافظه را در دستور زیر بدست آورید: MOV [BP+SI+100],BX IP=BP+SI+100= 7000+4000+100=B100 LA= SS:IP = 3000:B100 PA= SS*10 + IP= 3000*10 + B100= 30000+B100=3B100 [3B100]=80, [3B101]=60 پاسخ: 30 نغ قطع اگر بخواهیم خانه حافظه اي غیر از قطعه پیش فرض در روش آدرس دهي هاي مذكور را در نظر بگیریم از این قاعده استفاده مي شود. نحوه استفاده به فرم زیر است: مثال: MOV DS:[BP+SI+100],BX در این مثال قطعه پیش فرض قطعه پشته بوده كه از قاعده لغو قطعه استفاده شده است. لذا در این دستور خانه حافظه اي از قطعه داده مد نظر مي باشد. آدرس فیزیكي مثال باال: + 100 SI PA= DS*10 + BP + IP 15
31 اجراي بر اي اس بهي با استفاد از MASM شامل مراحل زیر است: نوشتن برنامه در یك محیط ویرایشگر مثل NOTEPAD ذخیره برنامه با پسوند.asm اسمبل كردن با برنامه Assembler) MASM (Micro وایجاد فایل ترجمه شده به كد زبان ماشین با پسوند.obj پیوند زدن با برنامه Linker و ایجاد فایل با پسوند.exe اجراي فایل اجرایي.exe در محیط Debug 32 اجراي بر اي اس بهي با استفاد از Emulator 8086 شامل مراحل زیر است: نوشتن برنامه در یك محیط اموالتور برای راهنمایی به فایل 8086_Emulator-farsi شود. مراجعه 16
33 ت ري در محیط Emulator 8086 برنامه اي بنویسید كه چهار عدد,1145h 98abh,567b, facbh را با یكدیگر جمع نماید. 17