بخش اول: نصب و آمادهسازی داس باکس 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 و زبان اسمبلی بیشتر بنویسم
تامام./