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



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

جلسه ۲۰ : مدیریت فایل در زبان اسمبلی (Assembly)

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

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

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

      سیستم هر داده ورودی یا خروجی را به عنوان جریان بایت در نظر می گیرد. سه جریان فایل استاندارد وجود دارد.

      ورودی استاندارد (stdin)
      خروجی استاندارد (stdout)
      خطای استاندارد (stderr)

      توصیف گر فایل – File Descriptor

      File Descriptor یک عدد صحیح ۱۶ بیتی است که به عنوان شناسه فایل به یک فایل اختصاص داده می شود. هنگامی که یک فایل جدید ایجاد شده یا یک فایل موجود باز می شود ، از تFile Descriptor برای دسترسی به فایل استفاده می شود.

      File Descriptor جریان های استاندارد  stdin ، stdout و stderr به ترتیب ۰ ، ۱ و ۲ هستند.

      اشاره گر فایل (File Pointer)

      یک اشاره گر فایل مکان را برای یک عمل خواندن یا نوشتن بعدی در فایل از نظر بایت مشخص می کند. هر فایل به عنوان دنباله ای از بایت در نظر گرفته می شود. هر فایل باز با یک اشاره گر فایل همراه است که offset در بایت ها را مشخص می کند ، نسبت به ابتدای فایل. با باز کردن فایل، اشاره گر فایل روی صفر تنظیم می شود.

      فراخوان های سیستمی

      در جدول زیر به طور خلاصه فراخوان های سیستمی مربوط به file handling توضیح داده شده است.

       eax%Nameebx% ecx%edx%
      ۲sys_forkstruct pt_regs
      ۳sys_readunsigned intchar *size_t
      ۴sys_writeunsigned intconst char *size_t
      ۵sys_openconst char *intint
      ۶sys_closeunsigned int
      ۸sys_creatconst char *int
      ۱۹sys_lseekunsigned intoff_tunsigned int

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

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

      • شماره فراخوان سیستمی را در رجیستری EAX قرار دهید.
      • آرگومان های مربوط به فراخوان سیستمی در رجیسترهای EBX ، ECX و غیره ذخیره کنید.
      • با وقفه مربوطه را فراخوانی کنید. (۸۰h).
      • نتیجه معمولاً در ثبات EAX برمی گردد.

      ایجاد و باز کردن فایل

      برای ایجاد و باز کردن فایل، کارهای زیر را باید انجام دهید.

      • فراخوان سیستم ()sys_creat شماره ۸ را در ثبات EAX قرار دهید.
      • فایل نیم (filename  را در رجیستری EBX قرار دهید.
      • مجوزهای فایل را در رجیستری ECX قرار دهید.

      فراخوان سیستم توصیف گر فایل (file descriptor) ایجاد شده را در ثبات EAX برمی گرداند ، در صورت بروز خطا ، کد خطا در ثبات EAX است.

      باز کردن فایل موجود

      برای باز کردن فایل موجود ، موارد زیر را باید انجام دهید.

      • فراخوان سیستم ()sys_open شماره ۵ را در ثبات EAX قرار دهید.
      • filename را در رجیستری EBX قرار دهید.
      • حالت دسترسی فایل را در رجیستری ECX قرار دهید.
      • مجوزهای (permissions) فایل را در رجیستری EDX قرار دهید.

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

      در بین حالت های دستیابی به فایل ، متداول ترین آن ها عبارتند از: (read-only (0) , write-only (1) و (read-write (2

      خواندن از یک فایل

      برای خواندن از یک فایل ، کارهای زیر را باید انجام دهید.

      • فراخوان سیستم ()sys_read شماره ۳ را در ثبات EAX قرار دهید.
      • توصیف گر فایل را در رجیستری EBX قرار دهید.
      • اشاره گر به بافر ورودی را در ثبات ECX قرار دهید.
      • اندازه بافر را قرار دهید، یعنی شماره بایت ها برای خواندن را در ثبات EDX قرار دهید.

      system call تعداد بایت های خوانده شده در ثبات EAX را برمی گرداند ، در صورت بروز خطا ، کد خطا در EAX ثبت می شود.

      نوشتن به یک فایل

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

      • فراخوان سیستم sys_write () شماره ۴ را در رجیستر EAX قرار دهید.
      • توصیف گر فایل را در رجیستری EBX قرار دهید.
      • اشاره گر به بافر خروجی را در رجیستر ECX قرار دهید.
      • اندازه بافر ، یعنی شماره بایت های نوشتن را در رجیستر EDX قرار دهید.

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

      بستن فایل

      برای بستن فایل، کارهای زیر را باید انجام دهید.

      • فراخوان سیستم ()sys_close شماره ۶ را در ثبات EAX قرار دهید.
      • توصیف گر فایل را در رجیستری EBX قرار دهید.

      فراخوان سیستم در صورت بروز خطا ، کد خطا در ثبات EAX را برمی گرداند.

      به روز رسانی یک فایل

      برای به روز کردن فایل ، کارهای زیر را باید انجام دهید.

      • فراخوان سیستم sys_lseek () شماره ۱۹ را در ثبات EAX قرار دهید.
      • توصیف گر فایل را در رجیستری EBX قرار دهید.
      • مقدار افست را در رجیستری ECX قرار دهید.
      • موقعیت منبع برای offset را در رجیستری EDX قرار دهید.

      موقعیت منبع می تواند:

      • شروع فایل – مقدار ۰
      • موقعیت فعلی – مقدار ۱
      • پایان فایل – مقدار ۲

      فراخوان سیستم در صورت بروز خطا ، کد خطا در ثبت EAX را برمی گرداند.

      مثال

      برنامه زیر فایلی به نام myfile.txt ایجاد و باز می کند و متن ‘Welcome to Tutorials Point’ را در این فایل می نویسد. در مرحله بعد ، برنامه از فایل خوانده می شود و داده ها را در یک بافر به نام info ذخیره می کند. در آخر ، متن را به صورت ذخیره شده در info نمایش می دهد.

      مثال : 

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

      مثال : 

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

      کلام پایانی

      مدیریت فایل در زبان اسمبلی (Assembly) که شامل ایجاد و باز کردن فایل ها، بستن، خواندن از یک فایل، به روز رسانی و نوشتن به یک فایل است را به همراه مفهوم File Descriptor و فراخوان های سیستمی دنبال نمودیم. در جلسه ی آینده با مبحث مدیریت حافظه (Memory Management) در خدمتتون خواهیم بود. با ادامه ی آموزش زبان اسمبلی (Assembly) از وب سایت آموزشی پی وی لرن همراه باشید.

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