نمایش نتایج 1 تا 7 از 7

نام تاپیک: دسترسی به عناصر ارایه در اسمبلی؟

  1. #1

    دسترسی به عناصر ارایه در اسمبلی؟

    با یاد خدا
    با سلام خدمت دوستان عزیز
    من در مورد آرایه ها سوالی داشتم
    من برای دسترسی به عناصر آرایه مشکل دارم کسی میتونه بگه کد زیر رو تو سی چجوری میتونم تو اسمبلی بنویسم
    tmp=a[0]
    a[0]=a[1]
    a[1]=tmp

    مشکل من در دسترسی به عناصر ارایه هست

  2. #2

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    چیزی که یادم میاد :

    mov si,offset a
    mov ax,[si]
    mov temp ,ax
    mov ax,[si+2]
    mov [si],ax
    mov ax,temp
    mov [si+2],ax


    فکر کنم این جواب بده اما من با جوانب احتیاط این را نوشتم. شاید خلاصه تر هم بشه نوشتش.
    یک نکته دیگه: این برای 8086 بود که من نوشتم. فکر کنم رجیسترها در پنتیوم فرق کنه. شاید...

  3. #3

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    كد بالا درسته البته به اين شكل هم ميشه نوشت
    mov ax,a
    mov bx,a+2
    xchg ax,bx
    mov a,ax
    mov a+2,bx

    یک نکته دیگه: این برای 8086 بود که من نوشتم. فکر کنم رجیسترها در پنتیوم فرق کنه. شاید...
    بله ثبات ها فرق دارند اما دستورات پردازنده هاي قبل پشتيباني ميشن بدليل معماري backward compatible (چون فقط قبلي ها ارتقاع پيدا كردند )
    مثلا al-ah-ax--eax-rax
    eax براي 32بيت
    rax براي 64 بيت
    بقيه ثبات ها هم ارتقاع يافتند يا بعضا ثباتهايي اضافه شده كه بهتره به معماري پردازنده ها مراجعه كنيد.

  4. #4
    کاربر دائمی آواتار asadegha
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    اینجا، همه جا، هیچ جا، چه فرقی داره؟
    پست
    274

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    اگه با پشته كار كني راحت تره.

    push a
    push a+2
    pop a
    pop a+2

  5. #5

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    حالا كه چند مدل مختلف ذكر شد بخوايم بگيم كدوم دستورات بهتره استفاده كنيم
    آيا صرف راحتي كه asadegha گفته خوبه يا ملاك هاي ديگه اي هم هست مثل زمان اجرا و بهينه بودن كد
    جواب در كامنت اولي كه داده شد حد اقل 24 clocks پردازنده رو درگير ميكنه
    كامنت بعدي 19 clocks و كامنت بعدي كه با push و pop هست 20 clocks زمان ميگيره اجراش
    و دستور زير كه الان نوشتم بازم همون كارو انجام ميده اما با 13 clocks
    mov ax,a
    xchg ax,[a+2]
    mov a,ax

    در اين چند دستور مسئله خاصي نيست چون براي ما ملموس نيست، اونم در پردازنده هاي امروزي كه ميليون ها دستورالعمل مثل اينارو در يك ثانيه انجام ميدن،اما اين وقتي خودشو نشون ميده كه برنامه طولاني باشه يا كار هايي كه زمان اجرا و حجم كد مهم باشه(مثل ويروس و يا كار هاي گرافيكي و ...)
    پس ميبينيد جداي از اينكه بايد الگوريتم ما از لحاظ زمان اجرا بهينه شه نوع دستوراتي كه بكار ميبريم هم مهم هست، براي همين هست كه در اسمبلي ميگن سعي كنيد بيشتر كارهارو با رجيستر ها انجام بدين كه سرعت بالايي دارند و حتي در دستورات درون پردازنده بعضي دستورات باز سريعتر هستند مثل دستورات بيتي!

  6. #6

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    ممنون از جوابتون مشکل حل شد اما موضوعی
    اگه من به 3 تا ثبات ایندکس نیاز داشته باشم چکار کنم؟
    si,di دیگه نیست؟؟؟؟؟/

  7. #7

    نقل قول: دسترسی به عناصر ارایه در اسمبلی؟

    از bx هم ميتوني استفاده كني بشه 3 تا
    در اسمبلي 32 همه ثباتها ميتونند اين نقشم داشته باشن توي 16 فقط bx,si,di

قوانین ایجاد تاپیک در تالار

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