400 likes | 689 Views
اجرای دستورات و برنامه اسمبلی در محیط نرم افزار Debug. استاد راهنما : آقای عبّاسی تهیه کننده: سعید رضا ولی زاده E-mail: srvalizadeh@yahoo.com. آشنایی با چند دستور اسمبلی و کاربرد آن ها. نکته اگر در دستور فقط عدد نوشته شود مانند: MOV BL,12
E N D
اجرای دستورات و برنامه اسمبلی در محیط نرم افزار Debug استاد راهنما : آقای عبّاسی تهیه کننده: سعید رضا ولی زاده E-mail: srvalizadeh@yahoo.com
آشنایی با چند دستور اسمبلی و کاربرد آن ها • نکته اگر در دستور فقط عدد نوشته شود مانند: MOV BL,12 در این صورت عدد 12 به ثبات BL منتقل می شود. ولی اگر عدد داخل کروشه نوشته شود مثلا [0200] محتوای خانه حافظه ای که آدرس آن ، در سگمنت داده برابر 0200 است در نظر گرفته می شود. به عنوان مثال اگر نوشته شود: MOV BL,[0200] یعنی محتوای خانه حافظه ای که آدرس آن 0200 است به ثبات BL منتقل شود ، و اگر محتوای خانه حافظه آدرس مذکور ، عدد 25 باشد ، در این صورت عدد 25 به ثبات BL منتقل خواهد شد.
کاربرد دستورات وقفه • دستور INT : باعث می شود که برنامه شما موقتا قطع شود ، و به برنامه های سیستم عامل ، یا برنامه های BIOS مراجعه شود ، عملیات خواسته شده را انجام دهد ، و دوباره به برنامه شما برگردد. • توجه : تمام مقادیر در مبنای hex هستند.
تعدادی از سرویس های وقفه • گرفتن تاریخ سیستم از دستور INT 21H استفاده می شود، به شرطی که قبلا در ثبات AH مقدار 2AH قرار داده شده باشد. یعنی: MOV AH,2A INT 21 با اجرای این دستورات تاریخ سیستم در ثبات های زیر قرار میگیرد روزهای هفته ( 0 برای یکشنبه ، 1 جهت دوشنبه ،2...) AL= سال ( به صورت هگزا مثلا 07D0=2000 ) = CX ماه (به صورت هگزا 01 تا 0CH ) = DH روز (از 01 تا 1F به فرم هگزا) = DL • مثال
دستور وقفه INT 3 2)پایان اجرای دستورات توسط دستور INT 3 CPU به محض اجرای این دستور متوقف می شود و در صورت لزوم می توان محتویات ثبات ها و خانه های حافظه را برسی کرد. • البته این دستور را می توان برای توقف اجرای دستورات برنامه نیز به کار برد ، در صورتی که از این دستور استفاده نشود ممکن است کامپیوتر قفل کند.
DEBUG نرم افزار • ابزاری کمکی جهت اجرای دستورات زبان اسمبلی و برای ایجاد ، آزمایش ، اجرا ، تغییر و اشکال یابی برنامه ، به زبان اسمبلی است. • نکته : یکی از مزیت های استفاده از DEBUG ، این است که برنامه مستقیما قابل اجرا بوده ، نیازی به ترجمه ندارد
مزیت های استفاده از محیط debug • مستقیما به زبان اسمبلی برنامه نوشت و آن را اجرا نمود. • برنامه آماده به زبان اسمبلی را می توان به محیط deubug انتقال داده و آن را آزمایش کرد • برنامه اسمبلی را می توان دستور به دستور اجرا کرد ، و محتوات ثبات ها ، و خانه حافظه را مشاهده و تغییرات لازم را انجام داد. • محتویات حافظه هر سگمنت را می توان دید • می توان تمام دستورات را به زبان اسمبلی و معادل آن را به زبان ماشین نشان داد.
وارد شدن به محیط debug • کافیست فایل اجرایی این نرم افزار را یعنی debug.exe زا توسط سیستم عامل اجرا کنیم ، در این حالت محیط کاری شبیه به DOS باز می شود با این تفاوت که به جای خط فرمان داس (C:\>) یک علامت تیره(-) ظاهر می شود
اجرای debug در windows • از start منو run را انتخاب می کنیم سپس کلمه debug را در run تایپ کرده دکمه enter را فشار می دهیم START MENU RUN DEBUG
خارج شدن از محیط DEBUG • نکته: تمام دستورات debug تک حرفی هستند • جهت خارج شدن از محیط DEBUG از فرمان Q استفاده می کنیم ، که این فرمان باعث می شود به سیستم عامل برگردیم
فرمان های برنامه DEBUG • فرمان A(Assemble) : این فرمان برای وارد کردن دستورات زبان اسمبلی در حافظه ، و ترجمه آن هاست. • شکل کلی این فرمان به صورت : • <آدرس شروع> A می باشد که این آدرس ، آدرس شروع خانه حافظه ای در سگمنت کد است که ما می خواهیم دستور از آن آدرس به بعد نوشته شود • (چون سیستم عامل به حافظه ای با افست آدرس 00 تا FF برای اطلاعات خود نیاز دارد ، لذا نرم افزار debug ، به عنوان پیش فرض از آدرس 100H برنامه را اجرا می کند.)
پس از وارد کردن A100 دو عدد چهار رقمی ظاهر می شود که با یک علامت : از هم جدا شده اند مانند : -A 100 13BC:0100 عدد سمت چپ ، شماره سگمنت یعنی CS=13BC است و شماره سمت راست ، شماره افست خانه حافظه یعنی IP=100 می باشد. پس از دیدن این اعداد دستورات اسمبلی را وارد می کنیم. پس از هر دستور دکمه ENTER را می زنیم. • وقتی که دستورات به پایان رسید یک بار ، بدون نوشتن دستوری ، دکمه ENTER را فشار می دهیم تا کار ورود دستورات اسمبلی به پایان رسد.
مثال (تایپ دستورات اسمبلی در محیط debug ) • MOV AL,6 ; (1) MOV BL,8 ; (2) ADD AL,BL ; (3) MOV DL,5 ; (4)
نام گذاری برنامه • کافیست از فرمان : -N نام برنامه استفاده کنیم.مثلا در این مورد TEST.COM نام برنامه مربوطه می باشد که با فرمان زیر : -N TEST.COM این نام به برنامه اختصاص داده می شود
فرمانU • دستور U (Un assemble) باعث می شود که دستوراتی که به زبان ماشین در حافظه قرار دارند ، به زبان اسمبلی برگردانده شود شکل کلی فرمان U <آدرس شروع> <آدرس پایان>
مثال اگر بخواهیم از دستور 100H تا 104H را به صورت اسمبلی ببینیم U 100 104 نتیجه:
اگر مقابل فرمان U شماره ای نگذاریم ، محتویات حافظه از CS:100 تا CS:120 را که 32 بایت می شود به صورت دستورات اسمبلی و معادل آن ها را به صورت دستورات زبان ماشین نشان می دهد دستورات زبان اسمبلی دستورات زبان ماشین
فرمان R • R(Register) • این فرمان محتوای ثبات ها را نمایش می دهد ، علاوه بر این وضعیت بیت های پرچم را نشان می دهد R [نام ثبات] اگر نام ثبات ذکر نشود ، تمامی ثبات ها را روی مانیتور نمایش می دهد
مثال -R توجه: وضعیت بیت های پرچم به صورت NV UP .. نوشته شده است.
مشاهده محتویات یک ثبات خاص • کافی است بعد از فرمان R نام ثبات را تایپ کنیم به عنوان مثال: -R AX AX 000E :0000 محتویات ثبات AX را برابر 000E نشان می دهد. و در سطر بعد علامت : را می گذارد که اگر بخواهیم مقدار ثبات را عوض کنیم ، کافیست عدد مربوطه را تایپ کنیم که در این مثال بعد از علامت : عدد جدید مثلا صفر را وارد ثبات AX می کینم
مشاهده محتویات ثبات پرچم • با استفاده از دستور -RF
تغییر مقادیر بیت های پرچم • زمانی که دستور RF اجرا می شود ، پس از نمایش بیت های پرچم علامت – چشمک زن قرار می گیرد.در این زمان می توان مقادیر جدیدی به بیت ها اختصاص داد در اینجا مقدار NC را به CY تغییر می دهیم
فرمان G • این فرمان باعث اجرای برنامه اسمبلی درون حافظه می شود • شکل کلی G <=آدرس شروع> <آدرس توقف> اولین آدرس که با علامت = شروع می شود به DEBUG می گوید که از چه آدرسی شروع به اجرای برنامه کند • اگر تنها یک عدد جلوی G نوشته شود ، دستورات تا زمانی ادامه دارد که برنامه خود به نحوی کار خود را به پایان برساند • اگر دستوری برای پایان دادن به کار وجود نداشته باشد ، اجرای برنامه متوقف نخواهد شد و کامپیوتر قفل می کند. علامت مساوی
در ضمن این فرمان وضعیت ثبات ها در پایان اجرای دستورات را نیز نشان خواهد داد. • همچنین در سطر آخر ، دستور زبان اسمبلی که بعدا باید اجرا شود ، همراه با ترجمه آن به زبان ماشین را ، نیز نمایش می دهد.
مثال کلی • کاربرد دستورات A,U,R,G وارد کردن برنامه در حافظه با فرمان A100 • MOV AX,1 • MOV BX,2 • MOV CX,3 • ADD AX,BX • ADD AX,CX • INT 3
روند کار • نوشتن برنامه با دستور A • Unassemble کردن برنامه با فرمان U 100 10D • نشان دادن محتویات ثبات ها با فرمان R • اجرای برنامه با دستور G
فرمان T • باعث اجرای خط به خط دستورات می شود T <=آدرس شروع> <تعداد دستورات> عدد اول آدرس اولین دستور شروع است و دومی تعداد دستوراتی است که باید اجرا شود. • با اجرای هر دستور ، محتویات ثبات ها و بیت های پرچم نمایش داده می شود • در صورتی که تعداد دستورات ذکر نشود تعداد دستور را یک فرض خواهد کرد.
مثال • اجرای برنامه با دستور T • MOV AX,1 • MOV BX,2 • MOV CX,3 • ADD AX,BX • ADD AX,CX • INT 3
فرمان E(ENTER) • جهت بررسی و تغییر محتویات یک خانه می باشد. • شکل کلی این فرمان E <آدرس> مثال E 120 اگر بخواهیم مقدار جدیدی مثلا 20 را وارد کنیم پس از ورود عدد کلید ENTER را فشار می دهیم
فرمان F(FILL) • برای ذخیره داده ای در ناحیه خاصی از حافظه به کار برده می شود F <آدرس شروع> <آدرس پایان> <داده ها> مثلا اگر بخواهیم از آدرس 100تا 106را با مقدار 23 پر کنیم. F 100 106 23
فرمان D(DUMP) • این فرمان باعث می شود که محتویات خانه های حافظه به صورت کد هگزادسیمال نمایش داده شود • علاوه بر این حروف و ارقامی که کد های اسکی آن ها قابل نمایش روی مانیتور هستند ، سمت راست مانیتور نمایش داده می شوند • اگر آدرس انتهای را نگذاریم محتوای 128بایت خانه حافظه نمایش داده می شود • اگر کدهای اسکی قابل نمایش نباشند در سمت راست نقطه نمایش داده خواهد شد
فرمان W • فرمان نوشتن بر روی دیسک • ابتدا توسط فرمان N به برنامه نامی نسبت می دهیم و سپس توسط فرمان W آن را دخیره می کنیم • فقط برنامه های با پسوند .COM را می توان به این طریق ذخیره نمود.
فرمان های ورودی و خروجی • با فرمان ها ی ورودی و خروجی می توان اطلاعات را از پورت ها خواند یا در پورت ها نوشت . • فرمان I (برای خواندن یک بایت اطلاعات پورت ها ) -I <شماره پورت>
مثال) پورت مربوط به وضعیت چراغ های روی صفحه کلید 417 است -I 417 که کامپیوتر عدد 20H را روی مانیتور می نویسد یعنی : شماره بیت : 7 6 5 4 3 2 1 0 مقدار بیت : 0 0 1 0 0 0 0 0 4SCROLL LOCK 5NUM LUCK 6CAPSLOCK
فرمان خروجی O • برای فرستادن اطلاعات بر روی پورت O <شماره پورت> <مقدار جدید> مثال( فرمان اول باعث می شود بلند گو کامپیوتر یک سوت ممتد بکشد و فرمان دوم باعث قطع صدای بلندگو می شود -O 61 4F -O 61 4E
مثال) گرفتن تاریخ از سیستم MOV AH,2AH INT 21H • با اجرای دستور فوق مقادیر تاریخ امروز در ثبات ها قرار می گیرد • شماره 1 یعنی دوشنبه AL=1 َچون به صورت هگزا است پس سال برابر 2006 می باشدCX=7D6 ماه یازدهم میلادی یعنی نوامبر DH=0B 14 هگزا به صورت دهدهی برابر 20 می شود DL=14 بنابراین تاریخ برابر دوشنبه 20 نوامبر 2006 می باشد.
نتیجه AL روز هفته CX سال DH ماه DL روز
مرجع : زبان ماشین و اسمبلی دکتر حسن سید رضی