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

نام تاپیک: ASSEMBLY 64 BIT

  1. #1
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    ASSEMBLY 64 BIT

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

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

    و اما بریم سر اصل ماجرا:
    برای سالهاست که برنامه نویسای کامپیوتر از assembly x86 برای نوشتن کد های حیاتی استفاده میکنن.
    اگر چه جای کامپیوتر های 32 بیتی با کامپیوتر های 64 بیتی عوض شده و ساختار کد ها تغییر اساسی کرده.
    به طور خلاصه مفهوم اسمبلی 64 بیتی اینه که ما یک سری رجیستر های اضافی تو معماری cpu ها داریم.
    اگر چه بین cpu های اینتل و AMD کمی تفاوت هست ولی عملکردشون نسبتا شبیه هم دیگست.
    حتما کسانی که از دانش اسمبلی برخوردار هستن میدونن که این دانش چقدر سودمنده.
    در کل اگر کسی از اسمبلی سر در بیاره کامپیوتر رو به خوبی درک میکنه.
    وقتی زبان اسمبلی رو برای یک پلتفرم یاد میگیریم اولین چیز اشنایی با رجیستر هاست.
    و برای جلوگیری از طولانی شدن پست رجیستر ها رو تو پست بعدی توضیح میدم.
    پایان بخش اول.

  2. #2
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: ASSEMBLY 64 BIT

    رجیستر ها

    همه ی شما ax-bx-cx-al-bl-cl-... میشناسین.رجیستر های 8 بیتی و 16 بیتی.

    خب کار با این ثبات ها یکم ادم محدود میکنه
    خب عوضش ما EAX-EBX-ECX-EDX رو داریم.ثبات های 32 بیتی که از 0 تا 4294967295 میوتونین مقداردهی کنین.خب اینا دست آدمو بیشتر باز میکنه.
    و ادم راحت تر میتونه بر نامه هاشو بنویسه و الگوریتم ها رو کوتاه تر کنه.

    و اما 64 بیتی از 0 تا 18446744073709551615 میتونین مقدار دهی کنین .دیگه دستمون خیلی آزاد تر شده.

    و اما بریم سراغ رجیستر های 64 بیتی :
    RAX
    RBX
    RCX
    RDX
    RBP
    RSI
    RDI
    RSP
    R8
    R9
    R10
    R11
    R12
    R13
    R14
    R15
    خیلی خوب.حالا دیگه خیلی بهتر شده

    ولی یه سری رجیسترای دیگه هم مونده

    XMM registers 128 bit
    خب اینا دیگه واقعا ....
    از 0 تا 340282366920938463463374607431768211455
    قابل مقدار دهی هستن .
    که عبارتند از:
    XMM1
    XMM2
    XMM3
    XMM4
    XMM5
    XMM6
    XMM7
    XMM8
    XMM9
    XMM10
    XMM11
    XMM12
    XMM13
    XMM14
    XMM15.
    پایان بخش دوم.

  3. #3
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: ASSEMBLY 64 BIT

    پاسخ به یکسری سوالات

    خب حالا ممکنه یک سری سوال پیش بیاد که من جوابشونو میدم.

    1-آیا میشه از تمام امکانات رجیستر ها استفاده کرد؟
    باید بگم نه.CHIP های امروزی این اجازه رو بما نمیدن.برای مثال معماری AMD فقط از 48 بیت کم ارزش میتونه بهره ببره.
    2- از چه ابزار هایی میتونم برای نوشتن برنامه های اسمبلی 64 بیت استفاده کنم؟
    جدیدترین نسخه ی FASM,NASM میتونن خواسته های شما رو بر آورده کنن
    3- میتونم از اسمبلی 64 بیت تو C/C++‎‎‎‎‎ استفاده کنم؟asm__
    به احتمال زیاد تو vC++‎‎‎‎‎ برای بهینه شدن کدها این امکان حذف شده.
    برای این کار دو انتخاب دارین.استفاده از فایل های اسمبلی و اسمبلر جداگونه.
    و یا استفاده از هدر فایل intrn.h
    انیجا رو نگاه کنین:
    http://msdn.microsoft.com/en-us/library/hh977022.aspx

    پایان بخش سوم.
    آخرین ویرایش به وسیله darknes666 : شنبه 02 فروردین 1393 در 22:43 عصر

  4. #4
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: ASSEMBLY 64 BIT

    مدتی بود پست نمیزاشتم و شاید از هفته ی بعد خیلی کمتر پست بزارم.(از فرت خستگی و یه سری مسایل دیگه )

    خب بریم سر ادامه ی مطلب.

    تفاوت های اساس 32bit و 64bit چیست؟
    خب دوستان ممکنه یکی بیاد بگه 64 بهتره دیگه کلا بیخیال 32 بیت بشیم.
    باید بگم اشتباهه.
    چرا که ثبات های 32 بیتی سریعتر و با استقامت تر از ثبات های 64 بیتی هستند.
    از طرفی در برنامه های سنگین ثبات های 64 بیتی بعضی از مقادیر رو گم میکنن.
    ولی خوبیه 64 بیتی اینه که الگوریتم هاتون ساده تر و خطوط برنامه کمتر میشه.

    و اما بریم سراغ دستور های جدید برای ثبات های 128 بیتی.
    MOVSS:
    خب از این دستور برای انتقال از ثبات به ثبات-حافظه به ثبات-ثبات به حافظه استفاده میشه.
    MOVSS XMM0,[ECX]

    نکته:MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS هم مثل بالا هستن ولی یه تفاوت هایی باهم دارن که بعدا میگم.

    دستور CMPSS:
    مشخصه چیکار میکنه.CMPSS, COMISS, UCOMISS,CMPPS هم مثل بالا هستن ولی یه تفاوت هایی باهم دارن که بعدا میگم.

    دستورات محاسباتی جدید:
    ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSSوADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS

    تبدیل داده ها به هم(کاربرد نسبتا زیادی دارن که اونارم میگم):
    CVTSI2SS, CVTSS2SI, CVTTSS2SIوCVTPI2PS, CVTPS2PI, CVTTPS2PI

    خیلی خوب این دستورات FLOATING POINT بود.

    حالا دستورات INTEGER:
    دستورات محاسباتی:
    PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW

    دستورات انتقالی:
    PEXTRW, PINSRW

    دستورات MXCSR:
    LDMXCSR, STMXCSR

    دستورات اداره ی حافظه و cache:
    MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

    به مرور زمان دستورات بالا رو کار میکنیم. ولی اینا دستورات جدیدن و مثل اسمبلی 32 بیتی ساده نیستن و به ابزار نسبتا جدیدی نیاز دارن.
    منظورم cpu های جدید برای پشتیبانی از این دستوراته.
    این رو میتونین با برنامه ی CPU-Z تشخیص بدین.

    پایان بخش چهار.

  5. #5

    نقل قول: ASSEMBLY 64 BIT

    سلام و خسته نباشید..
    اگه راجع به inline نوشتن داخل x64 platform بیشتر توضیح بدید ممنون میشم
    آخرین ویرایش به وسیله p3m4ni : شنبه 16 شهریور 1392 در 10:24 صبح

  6. #6
    کاربر دائمی آواتار darknes666
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    دونستنش فایده ای نداره
    پست
    399

    نقل قول: ASSEMBLY 64 BIT

    سلام خدمت همه ی دوستان.
    پس از یه مدت طولانی برگشتم.
    و اما ادامه ی ماجرا
    حالا میخوام یک سری مبانیه پایه که لازم هست رو بگم.
    MOV R8W, 1234[8*RAX+RCX]

    کد بالا رو در نظر بگیرین.این کد عددی که تو آدرس ( RCX+1234+(8*RAX قرار داره توی R8W قرار میده.مشابه این دستور رو به شکل های زیر هم میشه نوشت.
    MOV     ECX, dword ptr table[RBX][RDI]

    MOV     ECX, dword ptr table[RDI][RBX]

    MOV     ECX, dword ptr table[RBX+RDI]

    MOV     ECX, dword ptr [table+RBX+RDI]


    کلمه ی DWORD PTR به اسمبلر میگه که چجوری دستور MOV رو ENCODE کنه.
    متاسفانه MASM اینا رو قبول نمیکنه ولی YASM و FASM قبول میکنه.

    حالا میرم سراغ انواع داده ها در ASM.
    خب اولیش db هست که یعنی بایت خالی مثل 0x55
    dw میشه دو بایت مثلا 0x1234
    dd میشه هشت تا db یا دوتا dw مثلا 0x12345678
    و.....
    البته داده ها یکسری جزیات دارن که بعدا راجبش صحبت میکنیم.
    آخرین ویرایش به وسیله darknes666 : شنبه 02 فروردین 1393 در 03:26 صبح

  7. #7

    نقل قول: ASSEMBLY 64 BIT

    دوستان سلام
    چرا این مبحث ادامه پیدا نمیکنه؟

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    اسفند 1396
    محل زندگی
    ایران .
    پست
    77

    نقل قول: ASSEMBLY 64 BIT

    نقل قول نوشته شده توسط zh00bin مشاهده تاپیک
    دوستان سلام
    چرا این مبحث ادامه پیدا نمیکنه؟

    سلام:
    برای اسمبلی 64 بیت تحت ویندوز یا لینوکس به سایت اسمبلر Fasm مراجعه کن.
    ادرس اسمبلر Fasm

    https://flatassembler.net

    وارد سایت که شدی روی گزینه ی Message Board کلیک کن تا وارد انجمن برنامه نویسان اسمبلی بشوی . هر سوالی که داری باید عضو بشی . برای عضویت اول اسمبلر Fasm رو دانلود کن بعد اجرا کن و بعد ماشین حسابش را فعال کن تا کد مربوط به فعالسازی عضویتت را بتونی وارد کنی .

    هرچیزی از اسمبلی که دوست داری بدونی به این سایت مراجعه کن . Fasm اسمبلر جاودانه و همیشگی است و برای همه ی سیستم عاملها نسخه دارد . برای معماریهای مختلف هم از ماکرو استفاده می کند .

تاپیک های مشابه

  1. Assembly AVR 8-BIT [Mega32] Multiprocessing
    نوشته شده توسط Hr.Ziggurat در بخش توسعه‌ی هسته‌ی سیستم عامل
    پاسخ: 2
    آخرین پست: شنبه 10 فروردین 1392, 11:42 صبح
  2. درس 2: Assembly
    نوشته شده توسط Best Programmer در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 1
    آخرین پست: پنج شنبه 10 اسفند 1385, 17:08 عصر
  3. Visual Assembler
    نوشته شده توسط Inprise در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 9
    آخرین پست: شنبه 18 تیر 1384, 16:06 عصر
  4. High Level Assembly
    نوشته شده توسط Inprise در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 4
    آخرین پست: جمعه 06 خرداد 1384, 21:28 عصر
  5. درس یک : Assembly
    نوشته شده توسط Best Programmer در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 0
    آخرین پست: یک شنبه 07 دی 1382, 00:41 صبح

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

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