اطلاعیه

Collapse
No announcement yet.

برنامه نویسی به زبان اسمبلی

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : برنامه نویسی به زبان اسمبلی

    نوشته اصلی توسط مــــــیــــــــلاد
    آرگومان یعنی چی؟ :sad: معنی کلی؟
    توی ویژوال بیسیک 6 آرگومان متغیری بود که هنگام صدا کردن تابع فرستاده میشد.
    منظور از آرگومان یا argument در اصطلاح همان مقدار ورودی به دستورالعمل، تابع و ... است که مقادیر مختلفی را می تواند بپذیرد.
    [hr]
    یک مطلب آموزشی در استفاده از رجیسترهای X و Y و Z توجه به نحوه استفاده از آنها در زمانی است که قصد دسترسی غیر مستقیم به SRAM را داریم. در این حالت باید آدرس Base مورد نظر از طریق دستور LDI در این رجیسترها قرار داده شود و مقدار Offset با آنها جمع شود. مثلا اگر بخواهیم از جدولی در SRAM که آدرس شروع آن با Address_0 نام گذاری شده مقداری را در فاصله offset موجود در R16 بخوانیم و حاصل در همان R16 قرار بگیرد:

    LDI ZL,LOW(Address_0)
    LDI ZH,HIGH(Address_0)
    ADD ZL,R16
    CLR R16
    ADC ZH,R16
    LD R16,Z
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      پاسخ : برنامه نویسی به زبان اسمبلی

      در دو هفته گذشته من درگیر یک ماراتن واقعی کدنویسی برای تولید یک محصول جدید صنعتی مرتبط با زمینه CNC بودم که با موفقیت انجام شد. بخشی از این کار باید حتما با زبان اسمبلی انجام می شد که در این پست قصد دارم به یکی از دهها نکته و به اصطلاح فوت کوزه گری موجود در انجام این کار اشاره کنم تا معنی این جمله که برخی کارها را فقط می توان با برنامه نویسی اسمبلی انجام داد در این مثال روشن شود.
      فرض کنیم با کلاک 16 مگاهرتز قرار است دویست هزار وقفه در ثانیه اتفاق بیافتد که در این وقفه ها باید بسته به شرایطی تصمیم گرفته شود که آیا پالسی ایجاد شود یا خیر. به عبارت دیگر بین صفر تا دویست هزار پالس بسته به شرایط ممکن است تولید شود. حال جدای از آنکه روتین این وقفه باید تا حد امکان کوتاه باشد که بتواند جوابگوی این نیاز باشد و بین یک وقفه تا وقفه بعدی تداخل ایجاد نشود، فرض کنیم که عرض پالسی هم که قرار است ایجاد شود دارای یک محدودیت حداقل باشد. به عبارت دیگر اگر عرض پالس از یک حد کمتر باشد، تاثیر لازم را نخواهد داشت. بنابراین در اینجا با یک تضاد مواجه هستیم که از طرفی باید روتین وقفه تا حد ممکن کوتاه باشد و از طرف دیگر پالس تولید شده در آن تا حد امکان برای آن روتین پهن تر باشد. راه چاره این قضیه آن است که هرگاه در روتین وقفه خروجی پالس High شد، آنگاه Low شدن آن تا حد ممکن در آخرین لحظه خروج از وقفه انجام شود. در ایجاد وقفه ها در ابتدا همیشه بخشی از رجیسترهای مورد استفاده در سایر وقفه ها و حلقه اصلی و همینطور SREG در STACK ذخیره می شود و هنگام بازگشت از وقفه دوباره بازیابی می شود. کامپایلرهای سطح بالا این ذخیره سازی را معمولا در پشته نرم افزاری خود انجام می دهند و در برنامه نویسی اسمبلی هم اینکار باید توسط برنامه نویس انجام شود.
      فرض کنیم در روتین این وقفه لازم باشد رجیسترهای R16 و R17 و ZL و ZH ذخیره و مجددا بازیابی شوند. یک شکل ذخیره سازی در ابتدای وقفه می تواند به این صورت باشد:

      PUSH R16
      IN R16,SREG
      PUSH R16
      PUSH R17
      PUSH ZL
      PUSH ZH


      و در بین وقفه درجایی مثلا PA0 به عنوان خروجی پالس یک می شود:
      SBI PORTA,0


      در هنگام خروج هم رجیسترها بصورت زیر بازیابی می شوند:

      POP ZH
      POP ZL
      POP R17
      POP R16
      OUT SREG,R16
      POP R16
      RETI


      نکته مورد نظر در این پست این است که برای طولانی کردن هرچه بیشتر عرض پالس مورد نظر و با توجه به اینکه دستورات CBI و SBI روی SREG هیچ تاثیری نمی گذارند، می توان صفر کردن مجدد پالس را به صورت زیر انجام داد:

      POP ZH
      POP ZL
      POP R17
      POP R16
      OUT SREG,R16
      POP R16
      CBI PORTA,0
      RETI


      و این کاری است که در برنامه نویسی با یک کامپایلر High level به هیچ صورتی مقدور نیست و نمی توان کامپایلر را مجبور کرد که از طریق انجام چنین تمهیدی، عرض پالس مورد نظر را تا حد امکان طولانی تر کند. این که این توضیحات تا چه حد برای دوستان قابل استفاده باشد، برای من روشن نیست. اما در همین حد خلاصه کنم که حاصل آن امکان یا عدم امکان انجام یک پروژه صنعتی و در حال کار با خانواده AVR است.
      اوژن: به معنای افکننده و شکست دهنده است
      دانایی، توانایی است-Knowledge is POWER
      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

      دیدگاه


        پاسخ : برنامه نویسی به زبان اسمبلی

        نوشته اصلی توسط طراح
        در ایجاد وقفه ها در ابتدا همیشه بخشی از رجیسترهای مورد استفاده در سایر وقفه ها و حلقه اصلی و همینطور SREG در STACK ذخیره می شود و هنگام بازگشت از وقفه دوباره بازیابی می شود. کامپایلرهای سطح بالا این ذخیره سازی را معمولا در پشته نرم افزاری خود انجام می دهند و در برنامه نویسی اسمبلی هم اینکار باید توسط برنامه نویس انجام شود.
        ببخشید الان یک تناقض تو ذهن من ایجاد شد
        اینکه اول گفتید :در ایجاد وقفه ها در ابتدا همیشه بخشی از رجیسترهای مورد استفاده در سایر وقفه ها و حلقه اصلی و همینطور SREG در STACK ذخیره می شود و هنگام بازگشت از وقفه دوباره بازیابی می شود
        پس چرا برنامه نویس باید دوباره برنامه این کار رو بنویسه مگه منظور شما این نیست که خود میکرو مقادیر رو ذخیره و سپس دوباره بازیابی می کنه؟

        دیدگاه


          پاسخ : برنامه نویسی به زبان اسمبلی

          منظور جناب طراح این بود که "روال کار اینگونه هست" نه اینکه "اینکار خودبخود انجام میشود" بعضی موارد ممکنه حتی SREG هم ذخیره و بازیابی نشه.
          بنا براین این وظیفه برنامه نویس هست. البته در بعضی موارد مثل پروسسورهای x86 رجیستر FLAGS که همون SREG خودمون هست ذخیره و بازیابی میشه ولی اینجا دست خودتون رو میبوسه.

          دیدگاه


            پاسخ : برنامه نویسی به زبان اسمبلی

            امروز برای رفع خستگی(!) کار چند روز گذشته و قرار دادن یک پروژه جدید در انجمن، تصمیم گرفتم پروژه تبدیل اسیلوسکوپ به صفحه نمایش 128x128 را که بتواند مانند یک LCD کاراکتری عمل کند، با DAC های XMEGA پیاده سازی کنم. در همین راستا برنامه ای با IAR نوشتم و کلاک XMEGA را روی 32 مگاهرتز قرار دادم. اما در کمال تعجب مشاهده شد که XMEGA با برنامه نوشته شده به زبان C و با وجود قرار دادن Optimization در حداکثر مقدار خود از نظر سرعت، قادر بود که حداکثر حدود 10 بار صفحه اسیلوسکوپ را Refresh کند و این سرعت برای انجام این پروژه کافی نیست. حال در اولین فرصت سعی می کنم همین پروژه را با زبان اسمبلی انجام دهم و بعد از به جواب رسیدن، نتیجه را به عنوان یک نمونه اساسی از این نوع برنامه نویسی در انجمن قرار دهم.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              پاسخ : برنامه نویسی به زبان اسمبلی

              با سلام خدمت استاد گرامی
              در پست قبلی گفتین برای یه کار cnc در گیر برنامه نویسی اسمبلی بودید می خواستم بپرسم با توجه به اینکه یه plc کار هستم و کاربرد سی ان سی ها در صنعت و محیطهای پر نویز دیدم میخوام بدونم این طراحی شما ایا بخوبی کار می کنه ؟

              با تشکر
              نابرده رنج گنج میسر نمی شود مزد آن گرفت جان برادر که کار کرد !

              دیدگاه


                پاسخ : برنامه نویسی به زبان اسمبلی

                نوشته اصلی توسط mac_mac_1
                در پست قبلی گفتین برای یه کار cnc در گیر برنامه نویسی اسمبلی بودید می خواستم بپرسم با توجه به اینکه یه plc کار هستم و کاربرد سی ان سی ها در صنعت و محیطهای پر نویز دیدم میخوام بدونم این طراحی شما ایا بخوبی کار می کنه ؟
                نه تنها این طراحی و بلکه موارد متعدد دیگر مبتنی بر AVR در شرایط کاملا صنعتی و با اشتراک تغذیه با درایور موتور AC سه فاز و سروموتورهای صنعتی و پمپ هیدرولیک مانند آن، به خوبی و بدون هیچ مشکلی کار می کند.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  پاسخ : برنامه نویسی به زبان اسمبلی

                  نوشته اصلی توسط طراح
                  نه تنها این طراحی و بلکه موارد متعدد دیگر مبتنی بر AVR در شرایط کاملا صنعتی و با اشتراک تغذیه با درایور موتور AC سه فاز و سروموتورهای صنعتی و پمپ هیدرولیک مانند آن، به خوبی و بدون هیچ مشکلی کار می کند.
                  یعنی آقای طراح شما همه پروژه های صنعتی را با Avr انجام میدین! واسم همیشه سوال بود.

                  چون من با هر دانشجویی که صحبت میکنم میگن استاد ما میگه Avr صنعتی نیست. ولی کار های شما حجتی میشه واسه دانشجو هایی که میگن Avr ....

                  میشه نام چند تا از پروژه های صنعتی خودتون را بگین ؟

                  متشکرم
                  یادش بخیر یه وقتایی هر روز میومدم اینجا !

                  دیدگاه


                    پاسخ : برنامه نویسی به زبان اسمبلی

                    نوشته اصلی توسط مــــــیــــــــلاد
                    میشه نام چند تا از پروژه های صنعتی خودتون را بگین ؟
                    پروژه های مورد اشاره شامل بردهای مختلفی است که در ایجاد فرمان و کنترل ماشین آلات و دستگاه های CNC مورد استفاده قرار می گیرد. به عنوان یک مثال مشخص بردی است که بصورت سریال به کامپیوتر یا هر کنترل کننده دیگری متصل می شود و برای چند محور موتور پالس های لازم را تحت فرمان سریال تولید می کند. یک مثال دیگر درایور میکرواستپ است که در انجمن رباتیک یا CNC در مورد آن به تفصیل توضیح داده شده است. مثال سوم درایور موتور AC سه فاز در توان حدود 2 کیلووات است.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      شمارنده 99 تا 0 به زبان اسمبلی

                      سلام خسته نباشید
                      یه شمارنده میخوام که با هر بار فشار دادن به شستی از 99 شروع به شمارش کنه و به صفر برسه و به همین ترتیب تکرار بشه (به زبان اسمبلی و atmega16 ) اگه فایل پروتئوس هم بذارین ممنوم میشم

                      دیدگاه


                        پاسخ : برنامه نویسی به زبان اسمبلی

                        با سلام قرار هست یه برنامه واسه ATmega32 در زبان اسمبلی بنویسم که اصل مبحث ریشه در تایمر کانتر صفر و مباحث مربوط به اون داره.....
                        از دوستان اگه کسی بتونه کمک کنه , ممنون میشم...

                        - یک سیستم شیشه پرکن را در نظر بگیرید که به صورت زیر کار می کند:
                        -- وقتی برق سیستم وصل میشود, موتور چرخ نقاله روشن می گردد.
                        --سنسور تشخیص بطری به ورودی INT0 ,interupt وصل است.
                        --به محض فعال شدن وقفه خارجی صفر ( سنسور تشخیص بطری) موتور تسمه نقاله باید متوقف گردد. سپس به مدت 100 ms شیر برقی ماده A و سپس به مدت 200 ms شیر برقی ماده B فعال گردد.
                        --در مرحله بعد پس از قطع شیر برقی ها , موتور تسمه نقاله روشن میشود تا بطری بعدی تشخیص داده شود.


                        فرضیات: f=1.28MHZ
                        N= 1024

                        دیدگاه


                          پاسخ : برنامه نویسی به زبان اسمبلی

                          در رابطه با دو پست اخیر، بنایی برای سفارش پروژه یا انجام تکلیف درسی و مانند آن وجود ندارد. بنابراین دوستانی که این دو سوال را مطرح کردند باید برای انجام آن تلاش لازم را انجام دهند و اگر اشکالی بود در انجمن مطرح کنند.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            پاسخ : برنامه نویسی به زبان اسمبلی

                            کم کم دارم جایی خالی اسمبلی رو درک می کنم و نیازی که به یادگیری اون می بینم
                            از دوستان درخواست منبع برای یادگیری اسمبلی رو داشتم
                            هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                            بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                            میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                            تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                            دیدگاه


                              پاسخ : برنامه نویسی به زبان اسمبلی

                              از دوستان درخواست منبع برای یادگیری اسمبلی رو داشتم
                              توضیحات مجموعه دستورالعمل های خانواده AVR یکی از بهترین مراجع برای درک عملکرد دستورات است:

                              http://www.atmel.com/dyn/resources/p...ts/doc0856.pdf
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                پاسخ : برنامه نویسی به زبان اسمبلی

                                با سلام
                                یه کمی در مورد کلاک دستور CPSE و مشابه آن که توی دیتاشیت بصورت 1/2/3 نوشته توضیح دهید.

                                یادش بخیر یه وقتایی هر روز میومدم اینجا !

                                دیدگاه

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