دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۱۵
  • اردیبهشت

جلسه ۰۷ : حالتهای آدرس دهی در زبان اسمبلی (Assembly)

  • دسته‌بندی‌ها :
جلسه ۰۷ : حالتهای آدرس دهی در زبان اسمبلی (Assembly)
    • جزئیات
    • نوع محتواآموزشی

      همراهان عزیز وب سایت آموزشی پی وی لرن وقتتون بخیر و شادی، با آموزش زبان برنامه نویسی اسمبلی (Assembly) در خدمتتون خواهیم بود. بررسی مدهای آدرس دهی را در این بخش از آموزش خواهیم داشت و با سه حالت اصلی آدرس دهی آشنا خواهیم شد. با ادامه ی آموزش ها با ما همراه باشید.

      بررسی مدهای آدرس دهی

      بیش تر دستورالعمل های زبان اسمبلی نیاز به پردازش عملگرها دارد. یک آدرس operand یا عملوند موقعیت مکانی را که داده های پردازش شده در آن ذخیره می شود ، فراهم می کند. بعضی از دستورالعمل ها نیازی به عملوند ندارند ، در حالی که برخی دستورالعمل های دیگر ممکن است به یک ، دو یا سه عملوند نیاز داشته باشند.

      هنگامی که یک دستورالعمل به دو عملوند نیاز دارد ، عملوند اول به طور کلی مقصد است که شامل داده هایی در یک رجیستر یا محل حافظه و عملوند دوم منبع است. منبع شامل داده هایی است که باید تحویل داده شود (آدرس دهی فوری) یا آدرس (در ثبات یا حافظه) داده هاست. به طور کلی ، داده های منبع پس از عملیات بدون تغییر باقی می مانند.

      سه حالت اصلی آدرس دهی شامل موارد زیر می باشد.

      • آدرس دهی ثباتی (Register addressing)
      • آدرس دهی فوری (Immediate addressing)
      • آدرس دهی حافظه (Memory addressing)

      آدرس دهی ثباتی (Register addressing)

      در این حالت آدرس دهی ، یک رجیستر حاوی عملوند است. بسته به دستورالعمل ، رجیستر می تواند اولین عملوند ، دومین عملوند یا هر دو باشد.

      مثلا،

      مثال : 

      از آن جا که پردازش داده ها بین ثبات ها شامل حافظه نیست ، سریع ترین پردازش داده ها را فراهم می کند.

      آدرس دهی فوری (Immediate addressing)

      یک عملوند فوری یک مقدار ثابت یا یک عبارت دارد. هنگامی که یک دستورالعمل با دو عملوند، از آدرس دهی فوری استفاده می کند ، اولین عملوند ممکن است یک رجیستری یا یک مکان حافظه باشد و عملوند دوم یک ثابت فوری است. اولین عملوند طول داده را مشخص می کند.

      برای مثال،

      مثال : 

      آدرس دهی حافظه مستقيم

      هنگامی که عملوندها در حالت آدرس دهی حافظه مشخص می شوند ، دسترسی مستقیم به حافظه اصلی ، معمولاً به data segment ، لازم است. این روش آدرس دهی، به پردازش کندتر داده منجر می شود. برای قرار دادن مکان دقیق داده ها در حافظه ، به آدرس segment start نیاز داریم که به طور معمول در ثبات DS و یک مقدار offset وجود دارد. به این مقدار افست آدرس موثر گفته می شود.

      در حالت آدرس دهی مستقیم ، مقدار افست مستقیماً به عنوان بخشی از دستورالعمل مشخص می شود که معمولاً با نام متغیر مشخص می شود. اسمبلر مقدار افست را محاسبه می کند و یک جدول symbol را نگه می دارد ، که مقادیر جبران کلیه متغیرهای مورد استفاده در برنامه را ذخیره می کند.

      در آدرس دهی مستقیم حافظه ، یکی از عملوندها به یک مکان حافظه و عملوند دیگری به یک ثبات اشاره می کند.

      برای مثال،

      مثال : 

      آدرس دهی افست مستقیم

      در این حالت آدرس دهی از عملگرهای حسابی برای مدیریت آدرس استفاده می شود. به عنوان مثال ، به تعاریف زیر توجه کنید که جداول داده (tables of data) را تعریف می کنند.

      مثال : 

      عملیات زیر به داده ها از جداول موجود در حافظه به رجیستری ها دسترسی پیدا می کند.

       

      مثال : 

      آدرس دهی غیر مستقیم حافظه

      این حالت آدرس دهی از قابلیت رایانه از آدرس دهی Segment:Offset استفاده می کند. به طور کلی ، ثبات های پایه EBX ، EBP (یا BX ، BP) و رجیسترهای ایندکس (DI ، SI) ، که در براکت های مربعی برای رفرنس های حافظه کدگذاری شده اند ، برای این منظور استفاده می شوند.

      آدرس دهی غیر مستقیم به طور کلی برای متغیرهای حاوی چندین عنصر مانند ، آرایه ها استفاده می شود.

      قطعه کد زیر نحوه دستیابی به عناصر مختلف متغیر را نشان می دهد.

      مثال : 

      با مبحث بررسی مدهای آدرس دهی همراه هستیم.

      دستورالعمل MOV

      ما قبلاً از دستورالعمل MOV استفاده کرده ایم که برای انتقال داده ها از یک فضای ذخیره سازی به دیگری استفاده می شود. دستورالعمل MOV دو عملوند دارد.

      سینتکس

      سینتکس دستورالعمل MOV به شکل زیر است.

      مثال : 

      دستورالعمل MOV ممکن است یکی از پنج شکل زیر را داشته باشد.

      مثال : 

      لطفاً توجه داشته باشید که:

      • هر دو عملوند در عملیات MOV باید هم اندازه باشند.
      • مقدار عملوند منبع بدون تغییر باقی می ماند.
      • دستورالعمل MOV در بعضی مواقع باعث ابهام می شود. به عنوان مثال ، به عبارات زیر نگاهی داشته باشید.

      مثال : 

      در این جا مشخص نیست که آیا شما می خواهید معادل بایت یا معادل word از عدد ۱۱۰ را جابه جا کنید. در چنین مواردی ، استفاده از مشخصات type عاقلانه است.

      جدول زیر برخی از مشخصات type متداول را نشان می دهد.

      Type SpecifierBytes addressed
      BYTE۱
      WORD۲
      DWORD۴
      QWORD۸
      TBYTE۱۰

      مثال

      برنامه زیر برخی از مفاهیم مورد بحث در بالا را نشان می دهد. نامی را در بخش داده های حافظه “Zara Ali” ذخیره می کند ، سپس مقدار آن را به طور برنامه ای به نام دیگری “Nuha Ali” تغییر می دهد و هر دو نام را نشان می دهد.

      مثال : 

      هنگامی که کد فوق کامپایل و اجرا شد ، نتیجه زیر را ایجاد می کند.

      مثال : 

      بررسی مدهای آدرس دهی را در این جا به پایان می رسانیم.

      کلام پایانی

      متشکریم که با مباحث آموزش زبان اسمبلی (Assembly) با ما همراه هستید. بررسی مدهای آدرس دهی را در این بخش از آموزش زبان اسمبلی (Assembly) دنبال نمودیم و با انواع حالت های آدرس دهی آشنا شدیم. در جلسه ی بعد با بررسی متغیرها (Variables) در خدمتتون خواهیم بود. با وب سایت آموزشی پی وی لرن همراه باشید.

      QR:  جلسه ۰۷ : حالتهای آدرس دهی در زبان اسمبلی (Assembly)
      به اشتراک بگذارید