مقدمه
وظیفه یک اسمبلر آ ن است که کد منبع زبان اسمبلی را به کد هدف تبدیل نماید در سیستمهای کامپیوتری ساده تر این کد هدف همان زبان ماشین است
که در حافظه قرار گرفته و اجرا میگردد .
در سیستمهای کامپیوتری پیچیده تر کد هدفی که به وسیله اسمبلر ایجاد می شود باید به وسیله لینکر و یا لودر در قبل از اجرا تنظیم گردد.
اسمبلی دو گذاری
ماکرو اسمبلر مایکرو سافت یک اسمبلر دو گذاری است . این به آن معنی است
که یک برنامه منبع زبان اسمبلی دو به وسیله پویش می شود تا فایل کد هدف آن ایجاد شود می توان یک اسمبلر را به صورت یک گذری طرح کرد و
بعضی اسمبلرها برنامه منبع را سه بار یا بیشتر پویش می کنند اما بیشتر اسمبلرها
از دو گذر بهره می برند . این بخش به توضیح یک اسمبلر دو گذری نمونه می پردازد.
یک مزیت نوشتن برنامه به زبان اسمبلی نسبت به زبان ماشین آن است که در آن می توان از شناسه ها یا نمادها برای رجوع به داده ها در سگمنت داده و دستور العمل ها در سگمنت کد استفاده نمود. برای آن که بتوان برنامه را به زبان ماشین نوشت برنامه نویس باید آدرسهای داده ها و دستورالعمل ها را بداند
یک وظیفه اسمبلر آن است که یک جدول علائم در ارتباط با هر شناسه با مشخصه های مختلف را تشکیل داده و آنرا حفظ کند . یک مشخصه برابر نوع یک نماد است این انواع شامل برچسب داده ها و دستور ا لعملها نمادهائی که مساوی ثابتها در نظر گرفته شده اند اسامی روالها اسامی ماکروها و اسامی سگمنت ها می با شند بعضی اسمبلرها کار ترجمه برنامه منبع را با یک جدول
علامت که حاوی مشخصه تمام نام دستور العمل های زبان اسامی تمام ثباتها و
نمادهای دیگر می باشد شروع می کنند.
اگر نمادی مربوط به یک بر چسب و یا داده باشد آنگاه جدول علائم حاوی اندازه داده ها نیز خواهد بود. بطور مثال اگر شبه دستور زیر را اسمبل
نماید :
آنگاه بعنوان برچسب یک کلمه ثبت خواهد گردید . بدین ترتیب
می تواند استفاده غلط از علامت ها را تشخیص دهد . با توجه به دستور اسمبلر
فوق دستور زیررااشتباه تشخیص خواهد داد .
زیرا اندازه ثبات برابر بایت است ولی از جدول علائم بعنوان یک کلمه
ذکر شده است علا وه بر اندازه چنانچه نمادی در ارتباط با چندین کد باشد ممکن است جدول علائم تعداد کدها یا تعداد کل بایت های در ارتباط با نماد مزبوربرخورد نماید مقدار ضبط شده در جدول علائم را به جای آن قرار می دهد. چنانچه نمادی مربوط به داده یا دستورالعمل باشد آنگاه موقعیت آن در جدول علائم وارد می شود . اسمبلر دارای یک شمارنده موقعیت است که این مقدار را محاسبه می کند معمولا در یک اسمبلر شمارنده موقعیت در ابتدای برنامه یا در ابتدای بخشهای مهمی از برنامه صفر می گردد .
ماکرو اسمبلرمایکرو سافت شمارنده موقعیت رادر ابتدای هر سگمنت صفر می گردد همانطور که اسمبلر کد منبع را پویش می نماید موقعیت هر داده یا دستور العمل عبارت از مقدار شمارنده موقعیت قبل از اسمبل شدن عبارت مزبور می باشد تعداد بایت های مورد نیاز به شمارنده موقعیت اضافه می شود تا موقعیت
دستور العمل بعدی بدست آید.
بعنوان یک مثال برای آنکه بدانیم شمارنده موقعیت چگونه مورد استفاده قرار می گیرد فرض کنید که یک برنامه زبان اسمبلی 8088 حاوی سگمنت داده زیر
می باشد :
شمارنده موقعیت (که به صورت چهار رقم بیان می شود ) از آدرس 0000 شروع می شود بنابراین در جدول علائم مقدار0000 به موقعیت نسبت
داده می شود . سپس دستور اسمبلر ترجمه گردیده و یک کلمه برای
ذخیره می گردد دو بایتی که برای این کلمه لازم هستند به شمارنده موقعیت
اضافه شده و مقدار 0002 برای آن به دست می آ ید بنابراین وقتی اسمبلر
به نمادمی رسد مقدار شمارنده موقعیت برابر 0002 است و این موقعیت
برای ثبت می گردد ده بایت در با می باشد بنابراین بعد از اسمبل شدن دستور اسمبلز شمارنده موقعیت حاوی مقدارخواهد بود
وقتی نوبت به نمادمی رسد شمارنده موقعیت حاوی مقدار است
بنابراین همین مقدار به عنوان موقعیت ذخیره می شود