بخش دوم: نحوه اجرا و دیباگ یک برنامه در داس باکس

بخش اول: نصب و آماده‌سازی داس باکس DosBoxخوب، انتظار میره که در مرحله قبل تونسته باشید محیط رو برای اجرا و دیباگ یک برنامه آماده بکنینحالا میخوایم یک برنامه رو اجرا کنیم، در قدم اول در پوشه ای که برنامه‌های tasm و لینکر و دیباگر وجود دارند یک فایل با پسوند asm ایجاد کنید و برای نمونه کد زیر رو در این فایل قرار بدید:STACK_SEG segment para stack 'stack' STACK_SEG ends DATA_SEG segment para 'data' array db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 sum db 0 DATA_SEG ends CODE_SEG segment para 'code' main proc far assume cs:CODE_SEG, ds:DATA_SEG, es:DATA_SEG, ss:STACK_SEG mov ax, DATA_SEG mov ds, ax ; Your asm code here mov cx, 0000h mov al, 0 mov bx, offset array startLoop: cmp cx, 10 jge endLoop mov al, [bx] add [sum], al inc cx inc bx jmp startLoop endLoop: ; End your asm code here mov ax, 4c00h int 21h ret main endp CODE_SEG ends end mainتوضیح برنامه: برنامه اسمبلی که ۱۰ عدد رو باهم جمع کرده و در حافظه ذخیره میکندحالا فایل رو ذخیره کنید و داس باکس رو اجرا کنیددستوراتی که در داس باکس بهتره بلد باشید تا راحت تر کار کنید:یک) دستور dir: تمام فایل های موجود در مسیر رو نمایش میده و متوجه میشید در مسیر فایل مورد نظرتون قرار داریددو) دستور cls: صفحه رو پاک میکنهحالا با دستور dir مطمعن میشید که فایلتون در دسترس هست (اگه فایلتون رو نمایش نداد داس باکس رو یک بار بسته و باز کنید)خوب حالا فایل sum من با پسوند asm در کنار بقیه ابزارم قرار گرفته، با دستور cls میتونید صفحه رو پاک کنید.حالا باید با اسمبلر tasm برنامه مون رو ترجمه کنیم به این شکل:tasm sum.asmبا این کار فایل جدیدی با فرمت obj در کنار فایل سورس تولید میشه مثل: sum.objنکته: پارامتر l/ براتون فایل LST هم تولید میکنه که میتونید خطا ها و آدرس قرار گیری متغیر ها و کد ها رو در سگمنت مخصوص خودشون ببینید (کافیه با یک ادیتور دلخواه فایل رو باز کنید):tasm sum.asm /lحالا در قدم بعدی باید با tlink فایل obj رو به یک برنامه قابل اجرا exe تبدیل کنیم، بدین شکل:tlink sum.objحالا فایل دیگه ای به اسم sum.exe در مسیر فایل سورس براتون تولید میشه که فقط کافیه نامش رو داخل داس باکس وارد کنید تا اجرا بشه مثل:sumانتظار میره که تا الان تونسته باشید یک فایل سورس رو در مسیر درست تعریف کرده و با ابزار tasm و لینکر فایل اجرایی رو تولید کنید. و اگر بدون اشکال این مراحل رو پشت سر بگذارید فایل شما اجرا میشه و بدون هیچ گونه خطایی خارج میشه.حالا در قدم بعدی با ابزار debug میخوایم فایل رو خط به خط اجرا کنیم و وضعیت رجیستر ها و خونه های حافظه رو بررسی کنیم تا از صحت عملکرد برنامه اطمینان حاصل کنیم.برای وارد شدن به حالت دیباگ چنین عمل میکنیم:debug sum.exeبا عوض شدن حالت نشانگر روی صفحه داس باکس متوجه میشید که در حالت دیباگر قرار داریداین دستور هارو حفظ کنید:دستور u: میتونید سورس برنامه رو ببینیددستور r: وضعیت ریجستر هارو نشون میدهدستور p: خط به خط برنامه رو اجرا میکنهدستور d: حافظه رو بهمون نشون میدهبرای مثال برنامه بالا رو اجرا میکنم و چک میکنم که خروجی برنامه درست هست یا نهبا دستور p2 دو خط اول برنامه اجرا میشه تا دیتا سگمنت من شناخته بشه و با اجرا دستور d0 خونه صفر دیتا سگمنت به نمایش در میاد که اعداد ۱ تا ۱۰ به ترتیب در حافظه قرار دارند (یادمون باشه که هگز ذخیره میشن نه دسیمال)حالا برنامه بازم اجرا میکنم تا خروجی نهایی رو ببینم، توجه داشته باشید که در هر اجرا وضعیت ریجسترها و خطی که قراره اجرا بشه قابل دیدن هستخوب همونطور که مشاهده میکنید در خونه ۱۱ حافظه عدد ۳۷ (هگز) قرار گرفت که به معنی ۵۵ (دسیمال) هست و نشون میده برنامه ما به درستی اجرا شده.هدف این نوشته تقریبا تموم هست و در ادامه یک اسکریپت batch نوشته میشه که سه ابزار tasm، لینکر و دیباگر رو همزمان اجرا کنه و کمک کنه کمتر وقت خودمون رو شهید کنیم!در مسیر ابزار های خودمون یک فایل با اسم دلخواه با فرمت bat ایجاد کنید و برنامه زیر رو کپی کنید:echo off cls tasm %1 /n /l if errorlevel 1 goto end tlink %1 DEL %1.map DEL %1.obj cls echo Assembled Successfully! Now debug your own shit: debug %1.exe :endحالا هر بار که داس باکس رو اجرا میکنید کافیه اسم این فایل bat رو بنویسید و در ادامه اسم فایل سورس رو بیارید و اجرا کنید برنامه به صورت خودکار سورس رو اسمبل و لینک میکنه و به حالت دیباگ وارد میشه! مثل تصویر:مثلا در اینجا من اسم فایل bat رو azizam گذاشتم و با این دستور میتونم برنامه رو اسمبل و وارد حالت دیباگ بشم:azizam sumبرای بخش سوم سعی میکنم از نظر تئوری در مورد پردازنده 8086 و زبان اسمبلی بیشتر بنویسمتامام./