اطلاعیه

Collapse
No announcement yet.

مقداردهی به رجیسترها چطوری انجام میشه؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مقداردهی به رجیسترها چطوری انجام میشه؟

    سلام خوبید؟
    ببینید مقدار دهی به رجیسترها چطوری انجام میشه؟
    مثلا ما یک برنامه می نویسیم رجیسترها رو داخل تعیین تکلیف میکنیم درسته؟ یک بخش برنامه نویسی میکرو این کار هست درسته؟
    خب حالا در واقع cpu میاد به روی رجیسترها مقدار دهی میکنه؟
    و اینکه بر چه بستر یا از چه راهی این کار میکنه؟ باس؟ باس چیه؟

    #2
    پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

    نوشته اصلی توسط alibbb نمایش پست ها
    سلام خوبید؟
    ببینید مقدار دهی به رجیسترها چطوری انجام میشه؟
    مثلا ما یک برنامه می نویسیم رجیسترها رو داخل تعیین تکلیف میکنیم درسته؟ یک بخش برنامه نویسی میکرو این کار هست درسته؟
    خب حالا در واقع cpu میاد به روی رجیسترها مقدار دهی میکنه؟
    و اینکه بر چه بستر یا از چه راهی این کار میکنه؟ باس؟ باس چیه؟
    سلام
    جواب این سوال طولی به اندازه کتاب معماری کامپیوتر موریس مانو داره! اون کتاب رو مطالعه کنید، به پاسخ سوالاتون میرسید.

    دیدگاه


      #3
      پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

      تشکر. حالا از بحث مدارمنطقیش بگذریم. این مقداردهی رجیستر تو زبان سی چطور انجام میشه؟ مثلا در دو حال زیر
      وقتی بخوایم کل 8 بیت رجیستر مقدار دهی کنیم؟ چون رجیستر هر بیتش یک نام گذاری کردند نمیشه که دونه به دونه مقدار دهی کرد.
      دوم در حالتی که تکی بخوایم یک بیت رجیستر مقدار دهی کنیم.
      آیا باید دستور خاصی asm به کار ببریم؟



      نوشته اصلی توسط hossein.m98 نمایش پست ها
      سلام
      جواب این سوال طولی به اندازه کتاب معماری کامپیوتر موریس مانو داره! اون کتاب رو مطالعه کنید، به پاسخ سوالاتون میرسید.

      دیدگاه


        #4
        پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

        نوشته اصلی توسط alibbb نمایش پست ها
        تشکر. حالا از بحث مدارمنطقیش بگذریم. این مقداردهی رجیستر تو زبان سی چطور انجام میشه؟ مثلا در دو حال زیر
        وقتی بخوایم کل 8 بیت رجیستر مقدار دهی کنیم؟ چون رجیستر هر بیتش یک نام گذاری کردند نمیشه که دونه به دونه مقدار دهی کرد.
        دوم در حالتی که تکی بخوایم یک بیت رجیستر مقدار دهی کنیم.
        آیا باید دستور خاصی asm به کار ببریم؟
        با عملگرهای بیتی!
        فرض که اسم رجیسترمون REG باشه. برای ۱ کردن بیت یا بیت هایی با ارزش مکانی n0 و n1 و... در زبان C باید به شکل زیر عمل کرد. دقت کنید که میشه هر تعداد بیتی که میخوایید با این روش ۱ کنید:

        REG |= (1<<n0) | (1<<n1) /* ... | (1<<nn) */;

        برای صفر کردن:

        REG &= ~((1<<n0) | (1<<n1) /* ... | (1<<nn) */);

        برای not کردن:

        REG ^= (1<<n0) | (1<<n1) /* ... | (1<<nn) */;

        دیدگاه


          #5
          پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

          سلام. آها پس کلا میشه رجیستر از طریق اسمش مقدار دهی کرد. من فکر میکردم باید دستور ASM اسمبلی به کار برد. دست شما درد نکنه.
          پس این دستورات asm برای چین؟ اینو شما میدونید؟

          نوشته اصلی توسط hossein.m98 نمایش پست ها
          با عملگرهای بیتی!
          فرض که اسم رجیسترمون REG باشه. برای ۱ کردن بیت یا بیت هایی با ارزش مکانی n0 و n1 و... در زبان C باید به شکل زیر عمل کرد. دقت کنید که میشه هر تعداد بیتی که میخوایید با این روش ۱ کنید:

          REG |= (1<<n0) | (1<<n1) /* ... | (1<<nn) */;

          برای صفر کردن:

          REG &= ~((1<<n0) | (1<<n1) /* ... | (1<<nn) */);

          برای not کردن:

          REG ^= (1<<n0) | (1<<n1) /* ... | (1<<nn) */;

          دیدگاه


            #6
            پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

            نوشته اصلی توسط alibbb نمایش پست ها
            سلام. آها پس کلا میشه رجیستر از طریق اسمش مقدار دهی کرد. من فکر میکردم باید دستور ASM اسمبلی به کار برد. دست شما درد نکنه.
            پس این دستورات asm برای چین؟ اینو شما میدونید؟
            کدوم دستورات asm؟

            دیدگاه


              #7
              پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

              یکسری دستورات asm هستند تو برنامه ها دیدم. اینا بهشون میگن دستورات اسمبلی. نمیدونم از کجا اومدن؟
              لیست کاملشو از کجا باید پیدا کنم تا بفهمم چی کار می کنن؟
              نوشته اصلی توسط hossein.m98 نمایش پست ها
              کدوم دستورات asm؟

              دیدگاه


                #8
                پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

                نوشته اصلی توسط alibbb نمایش پست ها
                یکسری دستورات asm هستند تو برنامه ها دیدم. اینا بهشون میگن دستورات اسمبلی. نمیدونم از کجا اومدن؟
                لیست کاملشو از کجا باید پیدا کنم تا بفهمم چی کار می کنن؟
                باسلام.
                هر معماری یک سری دستورالعمل های خاص خودشو داره که شرکت سازنده اونا رو در غالب Instruction Set منتشر میکنه.نسخه خیلی خلاصه این مجموعه معمولا در انتهای دیتاشیت کامل(نه خلاصه) هر یک از محصولات خانواده AVR وجود داره
                لینک دانلود مجموعه دستورات خانواده AVR : اینجا

                دیدگاه


                  #9
                  پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

                  نوشته اصلی توسط alibbb نمایش پست ها
                  یکسری دستورات asm هستند تو برنامه ها دیدم. اینا بهشون میگن دستورات اسمبلی. نمیدونم از کجا اومدن؟
                  لیست کاملشو از کجا باید پیدا کنم تا بفهمم چی کار می کنن؟
                  خوب ببینید همونطوری که دوستمون گفتن هر پردازنده ای یک سری دستورات اسمبلی داره که در نهایت هر برنامه ای به اونا ترجمه میشه و خود کد اسمبلی هم مستقیما تبدیل به کد ماشین یا همون ۰ و ۱ میشه. این مجموعه دستورات توسط سازنده ارائه میشه، همراه با یک سری قوانین دیگه که لازم هستش رعایت بشن.
                  از اونجایی که زبان C به زبان اسمبلی خیلی نزدیکه، میشه داخلش کد اسمبلی هم وارد کرد. این کار مواقعی کاربرد داره که یا نشه با زبان C کاری که میخواییم انجام بدیم مثل فراخوانی بعضی دستورات مربوط به مد Sleep و یا Set و Clear کردن وقفه عمومی توی AVR، یا این که بخواییم عملکردی رو به شکل کاملا بهینه خودمون بنویسیم. مثلا یک تابع داریم که یک کار مشخص انجام میده، میاییم بدنه تابع رو خودمون با اسمبلی مینویسیم که دقیقا همون کاری که ما میخواییم در سطح اسمبلی انجام بده؛ البته لازمه این کار اینه که به اسمبلی اون پردازنده و قوانینی مثل قواعد فراخوانی (Calling Convention) اون پردازنده مسلط بود.

                  دیدگاه


                    #10
                    پاسخ : مقداردهی به رجیسترها چطوری انجام میشه؟

                    دست شما درد نکنه دوستان. خسته نباشید.

                    دیدگاه

                    لطفا صبر کنید...
                    X