برای مشاهده مفیدترین ارسال در این موضوع اینجا کلیک کنید

نمایش نتایج: از شماره 1 تا 1 از مجموع 1
  1. #1
    بنیانگذار
    تاریخ عضویت
    2010 January
    محل سکونت
    زیر سایه خدا
    سن
    33
    ارسال ها
    1,308
    تشکر
    2,923
    تشکر شده 2,205 بار در 886 پست
    نوشته های وبلاگ
    37


    1 امتياز مثبت از 1 راي
    آيا اين پست براي شما سودمند بود؟ بله | خیر

    توضیحات مقدماتی بوت لودر اول تدرس شده در کلاس استاد رحیم پور

    در این مقاله من اومدم خط به خط کد بوت لودری که در درس برنامه نویسی سیستم به دانشجوها ارائه شده بود توضیح دادم .
    بوت لودری که در کلاس به دانشجوها داده شد به سه صورت بود . ورژن اول بوت لودر تنها یک پیام چاپ میکنه .
    در مقاله زیر شما با توضیحاتی بصورت زیر مواجه هستید . تا جایی که ممکن بود سعی کردم ساده و روان توضیح بدم .
    ; IN The Name of GOD
    ;seyyed hossein Hasan pour
    ;Master.huricane@gmail.com
    ;www.forum.ustmb.ir
    ;in bootloader tanha yek payam be ma neshan midahad
    ;قبل از اینکه ادامه بدیم . بزارید تکلیفمونو روشن کنیم . سوال : کار بوت لودر چیه ؟ خوب مشخصه دیگه
    ;1بیاد برامون بوق بزنه؟ !!2. پیام چاپ کنه بعدش سیستم به فنا بره؟
    ;جفت گزینه های بالا؟
    ;نه . بوت لودر فقط قراره یه کار انجام بده و اونم لود کردن کرنل ماست
    ;برای این کار هم باید یک فایل رو لود کنه توی رم . درسته ؟ آخه کرنل یه فایله ناسلامتی
    ;فایل هم اول باید پیدا بشه و بعد بازیابی بشه .
    ;چون فایل ما بزرگه بنابراین تو یه سکتور عموما جا نمیشه .
    ;گیریم تو یه سکتورم جا شد . برای اینکه بفهمیم کدوم سکتوره و یا این سکتوره چقدر اندازشه
    ;و این سکتوره کجاست اصلا ,ما به یک سری اطلاعات نیاز داریم .
    ;این اطلاعات بما کمک میکنه تا موقع ساخت بوت لودر بتونیم توابعی رو پیاده سازی کنیم تا بوت لودر ما
    ;بتونه فایل کرنل رو پیدا کنه و بعد اونو بازیابی کنه و سپس توی رم قرار بده
    ;این کاری هست که بوت لودر باید انجام بده.
    ;اما خوب کاری که ما الان قراره بکنیم همون بوق زدن و ایناست .اصلا دنبایل فایلی نیستیم که بخواهیم به اطلاعات زیادی نیاز داشته باشیم
    ;در حال حاضر فقط میخواهیم بوت لودر ما کامپیوتر رو بوت کنه و یه متن بما نمایش بده .
    ;تو قدم های بعدی وقتی خواستیم بوت لودر رو کامل کنیم اطلاعات مورد نیازمون رو هم اضافه میکنیم .
    ;ممکنه بگید اه ما که بخش قبل این کارو کردیم .! بله کردیم اما به شیوه من! نه به شیوه استاد! از این به بعد
    ;ما به شیوه ای که استاد کد رو پیاده کرد شروع به ساخت بوت لودر میکنیم و هر جا که نیاز به توضیح داشته باشه توضیحشو میدیم
    ;همین.

    ; در اینجا چون ما داریم یه برنامه ویندوزی مینویسیم یه چند تا مطلب هست که باید بهش توجه کنیم
    ;اینکه 512 بایت اولشو میندازیم دور و یه یه 512 بایت دومی رو نگه میداریم . پس
    ;یک این که ما فقط و فقط یک سگمنت بیشتر نخواهیم داشت . که اونم سگمنت کد خواهد بود
    ;دو هر سگمنت دیگه ای که نیاز داشته باشیم ناگزریم که یه جوری تو همین سکمنت کد سرو تهشو هم بیاریم
    ;اینجوری میشه که ما تعریف متغیر هامون هم تو بخش سگمنت کد انجام میگیره.
    ;نتکه سوم این هست که بوت لودر ما تو آدرس
    ;0X7C00
    ;قرار میگیره توسط بایوس . پس متوجه هستید که تمامی ادرس دهی های توی برنامه ما باید بر اساس این ادرس باشه
    ;بطور صریح و ساده یعنی اینکه سگمنت کد ما باید این ادرسو داشته باشه ( از این آدرس شروع بشه)تا
    ;وقتی که این کدها میخوان اجرا بشن اشکالی پیش نیاد .
    ;(که اینطور هست)
    ;نیاز نیست که من دوباره یاد اوری کنم که تمامی ادرس دهی هایی که ما تو زمان کد نویسی تو برناممون داریم
    ;نسبی هستند . پس مثلا اگه من خط 25 اوم برنامم یه متغییر رشته ای تعریف کردم . آفست یا آدرس این متغییر نسبی هست
    ;و موقع اجرا با آدرس سگمنت جمع میشه و میشه آدرس اصلی ! (بصورت خیلی ساده!)پس برای اینکه کد ما درست کار کنه
    ;این اتفاق باید بیوفته
    ;کد ما (کل برنامه ما ) در آدرس
    ;0X7C00
    ;لود میشه و کنترل به سی پی یو داده میشه . سی پی یو هم شروع میکنه که یکی یکی دستورات رو از "این آدرس به بعد بخونه "پس
    ;ما هم کاری میکنیم که دستوراتمون بر این اساس مرتب بشن .
    ;این کار رو با قرار دادن آدرس سگمنت های دیگه برابر مقدار موردنظر انجام میدیم .
    ;پس دلیل اینکه چرا ما سگمنت های دیگمون مثل دی اس و ای اس رو برابر
    ;0X7c00
    ;قرار دادیم الان مشخص شد .
    ;در بخش آخر اموزش بوت لودر مقدماتی (بخش سوم)توضیح داده بودم که ما باید کنترل اجرای کد رو بدست بگیریم
    ;و این کار رو با یه پرش به محل شروع دستوراتمون انجام میدادیم . و یادتون هست که این کار رو برای این میکردیم که
    ;چون یه سگمنت بیشتر نداشتیم و تمام تعریف متغییر ها و تعریف توابع اون بالای کد نوشته شده بود و ما نمیخواستیم که سی پی یو بی پدر
    ;همینجوری سرخود اینها رو پشت سر هم اجرا کنه و باعث کرش برنامه ما بشه میومدیم و یک پرش میکردیم به جایی که دستورات اصلیمونو نوشتیم
    ;بنابراین این کارو اینجا هم تکرار کردیم اول برنامه .

    ;include nadarim
    ;segmeneti gheir az code nadarim
    ;pas khahim dasht

    code Segment
    Assume cs : code

    Start:
    JMP begin

    Message Db "IN the name of GOD",10,13,"Hello Everybody",0
    Print:
    lodsb
    OR AL,AL
    JZ Exit
    MOV AH,0eh
    MOV BH,00h
    MOV BL,07h
    INT 10h
    JMP Print
    Exit:
    Ret



    ;اینجا هم بخش اصلی کد ماست که ما تازه شروع کردیم به کد نوشتن
    ;واسه این میگم اصلی که ما کد نوشتیم . ما اینجا بر اساس کاری که در نظر داشتیم اومدیم یک سری کد نوشتیم توابع رو فراخونی کردیم
    ;مثل بالا نیست که تعریف یه تابع باشه ! یه تعریف یه متغییر که سی پی یو تا به اونها برسه و اجراشون کنه بخاطر ست نبودن مقادیر ثباتها برنامه
    ;بن کل کرش کنه! مشخصه دیگه نه ؟
    begin :
    ;این دستور زیری باعث میشه که بردار وقفه برای مدتی بشینه سرجاش و در نتیجه وقفه ای در کار نباشه! که خدای نکرده کار ما باعث بشه
    ;سیستم یا کل برنامه کرش کنه .
    CLI
    ;اینجا هم همونطوری که بالا گفتم میاییم مشخص میکنیم که سگمنت های دیگه ما به کجا اشاره بکنن یا بهتر بگم از کجا شروع بشن .
    ;کجاشو که همه میدونیم درسته ؟ حالا چرا همه سگمنتها باید به یه جا اشاره کنن؟
    ;چون که یه سگمنت بیشتر نداریم و ناگزیر اگه قراره ازشون استفاده بشه جمیعا باید از یه جا شروع شده باشن که
    ;اینجوری آدرس های نسبی اینها جور در بیاد و تو این بازه باشه و برنامه کرش نکنه .

    ;البته همونطور که تو اموزشهای قبلی با هم دیدیم بجای اینجوری خفه کردن خودمون خیلی راحت میتونستیم یه
    ; ORG 07C0h
    ;بزاریم . ( تو این مدل کدنویسی این خط بالا رو بعد از کد سگمنت و قبل از اسوم مینویسیم یعنی اینجوری
    ;code segment
    ;org 0x7c00
    ;assume cs:code,ds:code,es:code
    ;همین دیگه لازم نبود این 4 5 تا خط زیری رو بنویسیم .

    MOv AX,07C0h
    MOV DS,AX
    MOV ES,AX

    ;اینجا هم اومدیم مشخص کردیم و گفتیم که اومد و ما به استک نیاز داشتیم چه کنیم بدون استک ؟ ها؟ نمیشه که اینجوری ؟
    ;بعد نتیجه گرفتیم که باید یه بخشی برا استکمون هم بسازیم . باز تو همین سگمنت کد
    ;گفتیم که استک ما از آخر کد سگمنت برای کارش استفاده کنه

    MOv AX,0
    MOV SS,AX
    MOV SP,0FFFFh;این استک پوینتره که به پایین کد سگمنت اشاره میکنه! مشخصه چرا دیگه! چون این استک پوینتر بالا پایین میکنه!و با این داده ای ک باید پاپ بشه مشخص میشه
    ;بعد از اینکه تغییرات خطرناکمون :دی رو اعمال کردیم حالا میتونیم دوباره اون بردار وقفه رو فعال کنیم تا بشه از این وقفه ها استفاده کرد

    STI
    ;این خط هم که مشخصه کارش . آدرس مسج رو در اس آی قرار میده تا تابع بعدی که فراخونی شد اون رشته رو تو صفحه چاپ کنه .
    Mov Si, Message
    CALL Print
    ;بعد هم سیستم هنگ کنه .
    hang : jmp hang;یعنی یه لوپ بینهایت ! دیگه .

    ;این هم نوشتیم که کد اضافه رو تا بایت 510 پر کنیم تا بتونیم نشانگر بوت رو تو بایت آخر بوت لودرمون قرار بدیم .
    Times DB (510 - ( $ - offset Start)) dup (0)

    ;این هم اینجوری نوشتیم جون تمام سیستم های ایکس 86 همشون اصطلاحا
    ;LITTLE ENIDIAN
    ;هستند . بایت کم ارزش تو شماره کمتر قرار میگیره .و بایت با ارزش تو شماره بالاتر

    db 55h
    db 0AAh

    ;بجای خط بالا ما میتونستیم بنویسیم
    ;dw 0AA55h

    ;این هم که مشخصه چه کاری میکنه
    Code ends

    End
    ;یک سری توابع دیگه هم بودن که اینا رو تو بخش بعدی توضیح میدم . نمیخوام خیلی شلوغ پلوغ بشن!
    ;این توابع هم یکی تابع تبدیل عدد به رشته بود برای اینکه روی صفحه نمایش داده بشه
    ;یکی هم تابع تاخیر بود . که مثلا نقطه نقطه که روی صفحه چاپ میشه بعد از یه مدت زمانی باش . همین . اینا رو تو بخش بعد توضیح میدیم .

    [/QUOTE]برای دنلود مقاله کامل از لینک زیر استفاده کنید :
    بخش اول توضیحات بوت لودر استاد (توضیحات مقدماتی بوت لودر اول)

    موضوعات مشابه:
    فایل های پیوست شده
    • نوع فایل: asm gc.asm (10.8 کیلو بایت,  این فایل 4 بار دانلود شده است)
    ویرایش توسط Hossein : 15th July 2014 در ساعت 12:07 AM
    توکل بخدا
    http://DeepLearning.ir
    اولین و تنها مرجع یادگیری عمیق ایران


    هرکس از ظن خود شد یار من
    از درون من نجست اسرار من




 

 

کاربران برچسب خورده در این موضوع

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 10:03 PM بر حسب GMT +4 می باشد.