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



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

جلسه ۱۵ : رشته ها در زبان اسمبلی (Assembly)

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

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

      رشته ها در زبان اسمبلی (Assembly)

       

      طول رشته های متغیر می توانند به اندازه لازم کاراکتر داشته باشند. به طور کلی ، طول رشته را با دو روش مشخص می کنیم.

      • صریحاً طول رشته ذخیره شود.
      • با استفاده از یک کاراکتر sentinel

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

      مثال : 

      اشاره به بایت پس از آخرین کاراکتر متغیر رشته msg. بنابراین ، msg-$ طول رشته را می دهد. ما همچنین می توانیم $ بنویسیم.

       

      مثال : 

      از طرف دیگر ، می توانید رشته ها را با یک کاراکتر trailing sentinel ذخیره کنید تا به جای این که طول رشته را صریح ذخیره کنید ، یک رشته را محدود کنید. کاراکتر sentinel باید یک کاراکتر ویژه باشد که در یک رشته ظاهر نمی شود.

      به عنوان مثال

      مثال : 

      دستورالعمل های رشته

      هر دستورالعمل رشته ممکن است به یک عملوند منبع ، یک عملوند مقصد یا هر دو نیاز داشته باشد. برای سگمنت های ۳۲ بیتی ، دستورالعمل های رشته ای به ترتیب از رجیسترهای ESI و EDI استفاده می کنند برای اشاره به عملوند منبع و مقصد.

      با این حال ، برای سگمنت های ۱۶ بیتی ، از رجیسترهای SI و DI به ترتیب برای اشاره به منبع و مقصد استفاده می شود.

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

      MOVS – این دستورالعمل ۱ بایت ، Word یا Doubleword از داده را از مکان حافظه به مکان دیگری منتقل می کند.

      LODS – این دستورالعمل از حافظه بارگیری می شود. اگر این عملوند یک بایت باشد ، در رجیستر AL بارگیری می شود ، اگر عملوند یک کلمه باشد ، در یک رجیستر AX بارگذاری می شود و یک Doubleword باشد در ثبات EAX بارگذاری می شود.

      STOS – این دستورالعمل داده ها را از ثبات (AL ، AX یا EAX) به حافظه ذخیره می کند.

      CMPS – این دستورالعمل دو مورد داده را در حافظه مقایسه می کند. داده ها می توانند از نظر اندازه ، کلمه یا doubleword و یا بایت باشند.

      SCAS – این دستورالعمل محتویات یک ثبات (AL ، AX یا EAX) را با محتوای یک مورد در حافظه مقایسه می کند.

      هر یک از دستورالعمل فوق دارای ورژن بایت ، کلمه و doubleword است و دستورالعمل های رشته را می توان با استفاده از پیشوند تکرار (repetition)، تکرار کرد.

      این دستورالعمل ها از جفت ثبات های ES:DI و DS:SI استفاده می كنند ، كه ثبات های DI و SI حاوی آدرس های افست معتبر هستند كه به بایت های ذخیره شده در حافظه اشاره دارد. SI معمولاً با DS (سگمنت داده) همراه است و DI همیشه با ES (سگمنت extra) همراه است.

      ثبات های DS: SI (یا ESI) و ES: DI (یا EDI) به ترتیب به عملوندهای منبع و مقصد اشاره دارند. فرض بر این است که عملوند منبع در DS: SI (یا ESI) و عملوند مقصد در ES: DI (یا EDI) در حافظه باشد.

      برای آدرس های ۱۶ بیتی ، از رجیسترهای SI و DI استفاده می شود و برای آدرس های ۳۲ بیتی ، از رجیسترهای ESI و EDI استفاده می شود.

      در جدول زیر ورژن های مختلفی از دستورالعمل های رشته و فضای فرض شده از عملوندها ارائه شده است.

       

      Basic InstructionOperands atByte OperationWord OperationDouble word Operation
      MOVSES:DI, DS:SIMOVSBMOVSWMOVSD
      LODSAX, DS:SILODSBLODSWLODSD
      STOSES:DI, AXSTOSBSTOSWSTOSD
      CMPSDS:SI, ES: DICMPSBCMPSWCMPSD
      SCASES:DI, AXSCASBSCASWSCASD

      پیشوندهای تکرار (Repetition Prefixes)

      پیشوند REP ، هنگامی که قبل از دستورالعمل رشته ای تنظیم شده است ، به عنوان مثال – REP MOVSB ​​، باعث تکرار دستورالعمل بر اساس کانتر قرار داده شده در ثبات CX می شود. REP دستورالعمل را اجرا می کند ، CX را با ۱ کاهش می دهد و بررسی می کند که آیا CX صفر است. پردازش دستورالعمل را تا CX صفر است تکرار می کند.

      (Direction Flag (DF جهت عملیات را تعیین می کند.

      از (CLD (Clear Direction Flag, DF = 0 استفاده کنید تا عملیات از چپ به راست انجام شود.
      از (STD (Set Direction Flag, DF = 1 استفاده کنید تا عملیات از راست به چپ انجام شود.

      پیشوند REP دارای تغییرات زیر است:

      REP: این تکرار غیر شرطی است. این عمل را تا صفر CX است تکرار می کند.

      REPE یا REPZ: تکرار شرطی است. عمل را تکرار می کند در حالی که فلگ صفر equal/zero را نشان می دهد. آن متوقف می شود وقتی که ZF نشان دهنده equal/zero نیست یا زمانی که CX صفر باشد.

      REPNE یا REPNZ: این نیز تکرار شرطی است. این عملیات را تکرار می کند در حالی که فلگ صفر نشان دهنده equal/zero نیست. هنگامی که ZF نشان از equal/zero یا CX به صفر کاهش یافته ، متوقف می شود.

      رشته ها در زبان اسمبلی (Assembly) را به پایان می رسانیم.

      کلام پایانی

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

      QR:  جلسه ۱۵ : رشته ها در  زبان اسمبلی (Assembly)
      به اشتراک بگذارید