اطلاعیه

Collapse
No announcement yet.

مشکل در با ضرب در mplab ide

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

    مشکل در با ضرب در mplab ide

    با سلام و خسته نباشید.
    بچه ها من میخام توی اسمبلی ضرب کنم. ولی pic16 همچین دستوری توی دستورات سری 16دش نداره. چیکار میتونم بکنم غیر از جمع متوالی.
    لطفا راهنمایی کنید
    طب اسلامی

    #2
    پاسخ : مشکل در با ضرب در mplab ide

    نوشته اصلی توسط mahdifaheca
    با سلام و خسته نباشید.
    بچه ها من میخام توی اسمبلی ضرب کنم. ولی pic16 همچین دستوری توی دستورات سری 16دش نداره. چیکار میتونم بکنم غیر از جمع متوالی.
    لطفا راهنمایی کنید
    سلام.فکر کنم جواب سوالتون رو بتونین اینجا پیدا کنین:

    http://www.microchip.com/forums/m436121-print.aspx

    به نظر میاد که به جز جمع متوالی، راه دیگه ای نداره.ولی تو سری 18 امکان پذیر هست.

    دیدگاه


      #3
      پاسخ : مشکل در با ضرب در mplab ide

      به نظر منم راه دیگه ای غیر از جمع متوالی نیستش. ولی اگر اینجوریه چطوری توی کامپایلرای دیگه مثل ccs با 1 سیکل کاری یه ضرب انجام میده؟؟ پس حتما یه راه دیگه ای هم هستش
      طب اسلامی

      دیدگاه


        #4
        پاسخ : مشکل در با ضرب در mplab ide

        نوشته اصلی توسط mahdifaheca
        به نظر منم راه دیگه ای غیر از جمع متوالی نیستش. ولی اگر اینجوریه چطوری توی کامپایلرای دیگه مثل ccs با 1 سیکل کاری یه ضرب انجام میده؟؟ پس حتما یه راه دیگه ای هم هستش
        من که با یه خرده گشتن،این لینک رو پیدا کردم.اگه شما هم چیزی گیر آوردین،لطفا اینجا بذارین.برام جالب شد که اینکار چطور امکان پذیره؟

        دیدگاه


          #5
          پاسخ : مشکل در با ضرب در mplab ide

          من خیلی گشتم. ولی هیچی دستگیرم نشد. نمیدونم باید از کجا درش بیاریم. سری 18 خودش دستورش داره و خیلی راحت میتونی ضرب کنی. ولی توی اسمبلی واقعا مکافاته. البته چون روشش بلد نیستم مکافاته
          طب اسلامی

          دیدگاه


            #6
            پاسخ : مشکل در با ضرب در mplab ide

            نوشته اصلی توسط mahdifaheca
            من خیلی گشتم. ولی هیچی دستگیرم نشد. نمیدونم باید از کجا درش بیاریم. سری 18 خودش دستورش داره و خیلی راحت میتونی ضرب کنی. ولی توی اسمبلی واقعا مکافاته. البته چون روشش بلد نیستم مکافاته
            داداش شما همچنان مصمّم به استفاده از اسمبلی هستین؟
            حالا هر چی، خب همین جمع متوالی چه ایرادی داره؟

            دیدگاه


              #7
              پاسخ : مشکل در با ضرب در mplab ide

              آره . تنها مشکلم توی اسمبلی همین عملیات ریاضیه.جمع متوالی خیلی سیکل کاری میبره.مثل توی ضرب 255*255 مثلا 65025 تا سیکل کاری میبره تا ضرب رو انجام بده. توی PIC با فرکانس کریستال 20مگ که بیشترین سرعته میشه 13 میلی ثانیه. یعنی واس یه ضربه اینجوری باید 13 میلی ثانیه وقت بزاریم که به نظر من خیلی زیاده.
              طب اسلامی

              دیدگاه


                #8
                پاسخ : مشکل در با ضرب در mplab ide

                خب یه پیشنهاد دارم، با زبانC یه برنامه بنویسین که دوتا 255 رو تو هم ضرب بکنه و همزمان تایمر هم شروع به کار کنه. بعد اتمام انجام ضرب، مقدار تایمر رو بخونین ببینین به طور تقریبی چقدر زمان برده انجام همین عمل ضرب؟

                دیدگاه


                  #9
                  پاسخ : مشکل در با ضرب در mplab ide

                  توی 400 نانو ثانیه انجام میده.عین آب خوردنه براش.وافعا عحیبه برام.توی 2 سیکل کاری 256 در 256 ضرب میکنه و تو یه متغییر 16 بیتی میریزه!!!!!!!!
                  طب اسلامی

                  دیدگاه


                    #10
                    پاسخ : مشکل در با ضرب در mplab ide

                    آره . تنها مشکلم توی اسمبلی همین عملیات ریاضیه.جمع متوالی خیلی سیکل کاری میبره.مثل توی ضرب 255*255 مثلا 65025 تا سیکل کاری میبره تا ضرب رو انجام بده. توی PIC با فرکانس کریستال 20مگ که بیشترین سرعته میشه 13 میلی ثانیه. یعنی واس یه ضربه اینجوری باید 13 میلی ثانیه وقت بزاریم که به نظر من خیلی زیاده.
                    :eek: :eek: :eek:

                    با سلام
                    فکر کنم تا حالا کسی اینطوری PIC و اسمبلی رو نابود نکرده بود :mrgreen:


                    4x4 bit from John Payson, Ray Gardiner, Dmitry ***yashov (12 cycles/ 12 instructions)
                    8x8 bit from Andrew Warren (10 or 35 instructions, 38 cycles)
                    8x8 bit from unknown author (please step forward) (35 instructions, 37 cycles)
                    8x8 bit from Scott Dattalo with small correction by Dmitry ***yashov (52 instructions, 24-36 cycles, 34 avg)
                    16x8 bit from Dingbat
                    16x8 bit from Martin Sturm (18 instructions, 84-124 cycles, 104 avg)
                    16x8 bit from Martin Sturm (69 instructions, 69 cycles)
                    10x10 bit from Martin Sturm (73 instructions, 57-73 cycles, 65 avg)
                    14x10 bit from Martin Sturm (83 instructions, 71-83 cycles, 77 avg)
                    12x12 bit from Martin Sturm (92 instructions, 92 cycles)
                    16x16 bit from Martin Sturm (140 instructions, 140 cycles)
                    16x16 bit from Jim Bixby Unsigned, fast (16x16 mpy in 164 instructions ~168 cycles):
                    16x16 bit macro from Bob Fehrenbach, Scott Dattalo (22 instructions, 215 to 295 cycles)
                    16x16 bit From Clyde Smith-Stubbs of HI-TECH software (21 instructions, < 289 cycles)
                    16x16 bit from malin. Unsigned (32 instructions, 128 to 229 cycles)
                    16x16 bit from malin. Signed. (64 instructions, 134 to 248 cycles)
                    16x16 bit from Ravi Pailoor Signed or Unsigned (240 instructions, < 282 cycles)

                    http://www.piclist.com/techref/micro.../mul/index.htm




                    http://picprojects.org.uk/projects/p...8_x_8_multiply

                    توی 400 نانو ثانیه انجام میده.عین آب خوردنه براش.وافعا عحیبه برام.توی 2 سیکل کاری 256 در 256 ضرب میکنه و تو یه متغییر 16 بیتی میریزه!!!!!!!!
                    این توی سری 18 هست که سخت افزاری ضرب داره

                    [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                    دیدگاه


                      #11
                      پاسخ : مشکل در با ضرب در mplab ide

                      نوشته اصلی توسط abbasmh

                      با سلام
                      فکر کنم تا حالا کسی اینطوری PIC و اسمبلی رو نابود نکرده بود :mrgreen:
                      :eek: :eek: :eek: oo: oo: :angry: :angry:


                      4x4 bit from John Payson, Ray Gardiner, Dmitry ***yashov (12 cycles/ 12 instructions)
                      8x8 bit from Andrew Warren (10 or 35 instructions, 38 cycles)
                      8x8 bit from unknown author (please step forward) (35 instructions, 37 cycles)
                      8x8 bit from Scott Dattalo with small correction by Dmitry ***yashov (52 instructions, 24-36 cycles, 34 avg)
                      16x8 bit from Dingbat
                      16x8 bit from Martin Sturm (18 instructions, 84-124 cycles, 104 avg)
                      16x8 bit from Martin Sturm (69 instructions, 69 cycles)
                      10x10 bit from Martin Sturm (73 instructions, 57-73 cycles, 65 avg)
                      14x10 bit from Martin Sturm (83 instructions, 71-83 cycles, 77 avg)
                      12x12 bit from Martin Sturm (92 instructions, 92 cycles)
                      16x16 bit from Martin Sturm (140 instructions, 140 cycles)
                      16x16 bit from Jim Bixby Unsigned, fast (16x16 mpy in 164 instructions ~168 cycles):
                      16x16 bit macro from Bob Fehrenbach, Scott Dattalo (22 instructions, 215 to 295 cycles)
                      16x16 bit From Clyde Smith-Stubbs of HI-TECH software (21 instructions, < 289 cycles)
                      16x16 bit from malin. Unsigned (32 instructions, 128 to 229 cycles)
                      16x16 bit from malin. Signed. (64 instructions, 134 to 248 cycles)
                      16x16 bit from Ravi Pailoor Signed or Unsigned (240 instructions, < 282 cycles)

                      http://www.piclist.com/techref/micro.../mul/index.htm




                      http://picprojects.org.uk/projects/p...8_x_8_multiply
                      این توی سری 18 هست که سخت افزاری ضرب داره
                      عزیز اینجارم دیده بودم. ولی مطمینم توی سری 16 هم میشه با 2 تا دستور عمل ضرب رو انجام دادش. توی pic18 که خودش دستورش داره و توی 1 سیکل انجام میده راحت. ولی توی سری 16 هم مطمینم میشه یه کلکی زدش. چون توی ccs توی 2 حرکت ضرب رو انجام میده
                      طب اسلامی

                      دیدگاه


                        #12
                        پاسخ : مشکل در با ضرب در mplab ide

                        عزیز اینجارم دیده بودم. ولی مطمینم توی سری 16 هم میشه با 2 تا دستور عمل ضرب رو انجام دادش. توی pic18 که خودش دستورش داره و توی 1 سیکل انجام میده راحت. ولی توی سری 16 هم مطمینم میشه یه کلکی زدش. چون توی ccs توی 2 حرکت ضرب رو انجام میده
                        ببینید امکانات و دستورات سخت افزاری هر پردازنده ای مشخص هست و احتمال 99.99% توی سری 16 (بدون سخت افزار ضرب) صحبت شما امکان نداره
                        فقط ممکنه شما یه اشتباهی کرده باشید که اومدید کار CCS رو ملاک قرار دادید . اونم بهینه سازی کد برنامه توسط کامپایلر است.
                        بدلیل امکانات و بهینه سازی های کامپایلر های مختلف اونا میان به دو تا متغییر نگاه می کنن و اگه تغییری توی اونا رخ نداده باشه یک دفعه کامپایلر نتیجه ضزب رو خودش محاسبه می کنه و توی متغییر نتیجه می رسه . این کار توی بهینه سازی سرعت و حجم کمک کننده هست ولی وقتی اسمبلی قاطی کد میشه دیگه همه چیز تقریبا قاطی میشه.

                        [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                        دیدگاه


                          #13
                          پاسخ : مشکل در با ضرب در mplab ide

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

                          دیدگاه


                            #14
                            پاسخ : مشکل در با ضرب در mplab ide

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

                            بدلیل امکانات و بهینه سازی های کامپایلر های مختلف اونا میان به دو تا متغییر نگاه می کنن و اگه تغییری توی اونا رخ نداده باشه یک دفعه کامپایلر نتیجه ضزب رو خودش محاسبه می کنه و توی متغییر نتیجه می رسه . این کار توی بهینه سازی سرعت و حجم کمک کننده هست ولی وقتی اسمبلی قاطی کد میشه دیگه همه چیز تقریبا قاطی میشه.
                            مثلا شما میای این کد و به زبون سطح بالا می نویسی:
                            main:
                            a=100
                            b=200
                            c=a*b
                            end.
                            به ظاهر شما داری عملیات ضرب انجام میدی ولی پس از بهینه سازی کامپایلر خودش ضرب رو انجام میده (نه میکرو) و نتیجه رو فقط توی متغییر نتیجه کپی میکنه در واقع چیزی که کامپایلر انجام میده و به اسمبلی تبدیل می کنه اینه :
                            main:
                            c=20000
                            end.
                            نتیجه هر دو عمل یکیه ولی اولی مثلا 50 سیکل زمان برده ولی دومی مثلا 4 سیکل واین به این معنی نیست که میکرو ضرب رو توی 4 سیکل انجام داده در واقع اصلا میکرو ضربی رو انجام نداده و فقط یه جایگزینی متغییر کرده ولی نتیجه ای که ما می بینیم ضربه

                            [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                            دیدگاه


                              #15
                              پاسخ : مشکل در با ضرب در mplab ide

                              شاید اگر متغییر هامون مشخص باشن کامپایلر بتونه این کارو بکنه. ولی وقتی متغییرامون مشخص نیستش چطوری میخاد همچین کاری کنه؟؟ مثلا داریم یه مقداری از ADC میخونیم و در 200 مثلا ضرب میکنیم. اینجوری دیگه کامپایلر سی یا هر کامپایلر دیگه ای نمیتونن جواب یه ضرب از پیش تعیین شدر نشون بدن. پس ضرب انجام میشه با یه دستور خاصی.من فکر میکنم با همین گیتا میشه انجام دادش.ولی چطوری نمیدانم
                              طب اسلامی

                              دیدگاه

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