PDA

View Full Version : چطور اسمبلی رو شروع کنیم



mostafi1391
چهارشنبه 03 مهر 1392, 02:25 صبح
با سلام
لطفا به عنوان گیر ندین چون مناسبتر از این چیزی سراغ نداشتم

راستش من با چند تا زبون مثل vb & c &C++‎ & C#‎ آشنایی نسبی دارم ولی اینا راضیم نمیکنه راستش بهتره بگم احساس میکنم بچه بازین ...
نمیخوام بهم اسم کتاب بگین چون به قدره کافی منبع دارم تصمیم گرفتم شروع کنم به یادگیری اسمبلی البته بگما یه چیزایی ازش حالیمه... اومدم ازتون بپرسم چطوری با چه روالی با چه نگرشی اسمبلی رو یاد بگیرم
ضمنا یه چند تا سوال همین اول کاری برام پیش اومدن
1- وقتی که میگن دستورات اسمبلی از این پردازنده تا اون پردازنده با هم فرق میکنن یعنی چی ؟تو چه چیزایی فرق میکنن
مثلا اگه بخوام برای اینتل کد بزنم با amd چه تفاوتی داره یا برای arm یا مثلا این mac os که ذاتا واسه سیستمای مکینتاش چطوری واسه چیپسا اینتل ریلیز شده؟
2- میخوام با توربو اسمبل کار عملی کنم موافقین؟
3- نزدیک 1سال 24 ساعته تو کار برنامه نویسم و اون زبونای که عرض کردم تواین مدت یاد گرفتم ( هرچند به صورت تخصص باهاشون پیش نرفتم) به نظرتون چه مدت طول میکشه تا بتونم بگم یه اسمبلی کار جرفه ای هستم که میتونم با اسمبلی کار کنم؟
4- به نظرتون اسمبلی میتونه واسم شغل ساز بشه یا نه؟

اینم از منابع فعلیم:
http://worldbook.ir/1391/11/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B2%D8%A8%D8%A7%D9%86-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D9%88-%D8%A7%D8%B3%D9%85%D8%A8%D9%84%DB%8C

http://mihandownload.com/tag/دانلود-رایگان-کتاب-آموزش-اسمبلی
تشکر پیشاپیش

fjm11100
چهارشنبه 03 مهر 1392, 08:11 صبح
اول جواب سوالات
1- توی خیلی چیزها از دستورات بگیر تا رجیسترها و آدرس دهی و ... یا مثلا ARM معماریش کلا یه چیز دیگه است و کلا یک Core است و بسته به برند تولید کننده رجیسترها و نحوه راه اندازی peripheral هاش فرق داره(یعنی خود ARM میشه دهها پردازنده) بعد چیزایی مثل MMX، 3Dnow، SSE و ... هست که توی پردازنده های X86 تفاوت داره
2- نه مال عهد بوقه بهترین اسمبلر اول NASM و ساده ترش FASM است.
3- اگر برنامه نویس خوبی باشی(یه جورایی استعداد میخاد و خیلی با مطالعه بدست نمیاد) کمتر از 2 ماه کامل یاد میگیری البته اسمبلی یک پردازنده خاص را نه مفاهیم سخت افزاری که پایه اش است (مثل نحوه عملکرد کارت گرافیک یا لایه های شبکه، فرمت های فایلهای اجرایی، فایل سیستم ها) و نه مفاهیم پایه سیستم عاملها(مثل نحوه کار با کرنل یا درایور نویسی)
4- در ایران بطور مطلق نه و در خارج ایران هم بهتره کنارش C/C++ بلد باشی و بیشتر بدرد شرکتهای تولید کننده سخت افزار میخوره
ضمنا هیچ زبونی بچه بازی نیست و فقط هرکدام کاربرد خاص خودشون را دارند، مثلا وقتی با C# میشه 3 سوته یک برنامه بزرگ دیتابیس نوشت یا وب اپلیکیشن ایجاد کرد چرا بریم سراغ C++ که حرفه ای ترین برنامه نویساش همون کار را حداقل با 2-3 برابر زمان بیشتر انجام میدن یا vb چون کلا به هیچی گیر نمیده میشه 3 سوته باهاش پروتوتایپ ساخت و C++ که برای برنامه های سیستمی بزرگ عالیه و C که برای کدهای کوچک سیستمی خیلی بهینه تر و ساده تره

UfnCod3r
چهارشنبه 03 مهر 1392, 09:17 صبح
شما ازونا هستی که تو هرچی ی انگولکی می کنن :قهقهه:
اگه تو یک سال vb & c &C++‎‎ & C# رو یاد گرفتی پس معلومه که هیچی بلد نیستی .
درضمن اینا هم بچه بازی نیستن مخصوصا سی/سی++.
3 سال 24 ساعت سی++ نوشتی تازه می شه گفت برنامه نویسی بلدی .
من خودم بعد 2.5 سال سی++ کار کردن تازه می تونم ادعا کنم که برنامه نویسی بلدم .
همیشه خودت رو با بهترین ها مقایسه کن. اون طوری می فهمی که هیچی
کلا اسمبل اونقدر هم سخت نیست یبشتر باید درکش کنی . این طور نیست که از 0 به طور خالص با اسمبل برامه بنویسی . فهمیدن اسمبلی تو بهینه کردن کدها خیلی کمکت می کنه .
بهتره اول سی/سی++ حرفه ای بشی بعد بری اسمبل. اینطوری نحوه کار کامپایلر ها و کدی که تولید می کنن رو کلا می فهمی
سری دستورات عمومی برا همه پردازنده ها یکی هست . البته باید معماری ها یکی باشن
ولی ی سری الحاقی ها هم سی پی یو ها دارن مثلا AMD 3DNow داره ولی اینتل نداره .
کلا مدل سی پی یو فرقی نداره اصل کار معماریه .

mostafi1391
چهارشنبه 03 مهر 1392, 15:58 عصر
مطالب جالبی فرمودین اگه ممکنه ادامه بدین چون این حرفا رو تو هیچ کتابی نمینویسن فقط با تجربه به دست می آید

تو مطالبی گفته شد یه چیزی نظرم جلب کرد


البته اسمبلی یک پردازنده خاص را نه مفاهیم سخت افزاری


منظور شما اینکه می میتونم اسمبلی رو ظرف 2 ماه فقط برا یه نوع پردازنده یاد بگیرم؟ خب اون موفع که به دردی نمیخورم همونطور که عرض کردم میخوام اسمبلی کار بشم ( هدف نهاییم کار با سیستمای صنعتی)

fjm11100
چهارشنبه 03 مهر 1392, 19:29 عصر
خب داستان زیاد داره. چیزهایی که خیلی ربط به اسمبلی نداره پیش نیازه. مثلا توی هر کتاب اسمبلی راجع به مودهای کارت گرافیک حرف زده شده اما در حد VGA و نه بیشتر. حالا اگه بیشتر بخوای دیگه با دو ماه نمیشه بلکه شاخه شاخه میشه و شما باید یک شاخه را بگیری بری جلو. دقیقا معنی حرف من اینه که اسمبلی یا C و هر زبون دیگه ای به تنهایی مهم نیست بلکه حوزه ای که میخوای بکارش ببری مهمه
توصیه میکنم خیلی روی اسمبلی مخصوصا pc مایه نزار بلکه بیشتر مفاهیم و نکات کار با لایه های سخت افزار را دنبال کن مخصوصا توی سیستم های Embedded (مخصوصا میکروکنترلرهای ARM)

darknes666
چهارشنبه 03 مهر 1392, 19:29 عصر
راستش من با چند تا زبون مثل vb & c &C++‎‎ & C#‎‎ آشنایی نسبی دارم ولی اینا راضیم نمیکنه راستش بهتره بگم احساس میکنم بچه بازین ...


هیچ زبان برنامه نویسی سخت نیست.
این نوشتن و پیاده سازی برنامه نویسی کد هدف هست که میتونه به شدت سخت باشه.
سوال G مسابقات ACM امسال رو برو ببین تا بفهمی چی میگم.
برای مثال روندن ماشینو همه میتونن یاد بگیرن اما حالا شما بیا مسیر مسابقه ی ماشینو هییی بپیچون.خوب اونوقت هرکسی از پسش بر نمیاد.
حالا میخواد C باشه.میخواد VB باشه میخواد اسمبلی باشه.

و اما در رابطه با اینکه "اسمبلی به عنوان یک شغل" باید بگم که :


بیشتر در برنامه نویسی سیستمی،مهندسی معکوس و هک کاربرد داره،شرکت هایی هم در ایران در زمینه امنیت و تحقیق و توسعه کار میکنند به افرادی با دانش اسمبلی و برنامه نویسی سیستمی نیاز دارند
البته اسمبلی رو باید در سطح intel manual یاد بگیرید.


و در فرق داشتن دستورات اسمبلی بهتون بگم که:
مثلا در پروسسور های شرکت موتورولا برای جمع کردن کدش به شکل زیر هست:
ADD R1,R2,R3
یعنی ثبات R1 و R2 رو جمع کن و جوابو تو ثبات R3 قرار بده.
در حالی که تو X86 اینجوری نیست.

اسمبل کار حرفه ای به قدرتش تو تحلیل کد هست(میتونه مثل آب خوردن باشه یا میتونه در حد مرگ سخت باشه).
شما به هر بچه ای میتونی یاد بدی ADD چیکار میکنه.ولی به هر بچه ای نمیتونی یاد بدی فلان کد رو تحلیل کن بگو چیکار میکنه.
از طرفی همه ی فوت های کوزه گری رو نمیشه به دیگران انتقال داد بلکه باید اونا رو هنگام کد نوشتن به دست آورد.

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

1-هدف وسیله را توجیه میکند
یا
2-هدف وسیله را توجیه نمیکند

اهداف ما یا جز 1 هستن یا 2.

xman_1365_x
پنج شنبه 04 مهر 1392, 18:48 عصر
با توجه به عنوان و گفتن هدفتون
( هدف نهاییم کار با سیستمای صنعتی) بهتره برین PLC یاد بگیرین و کار با میکرو کنترلر ها
با این حال نظرمو در ارتباط با سوالات دیگتون میگم(البته قسمت هایی رو دوستان قبلا اشاره کردن نمیگم):

1- وقتی که میگن دستورات اسمبلی از این پردازنده تا اون پردازنده با هم فرق میکنن یعنی چی ؟تو چه چیزایی فرق میکنن
یعنی هم معماری متفاوت میشه هم دستورات و تعداد ، اما یه شباهت دارند اونم اینه نزدیک ترین زبان که قابل تبدیل به معادل کد ماشین هست!

2- میخوام با توربو اسمبل کار عملی کنم موافقین؟
اگر از صفر شروع کنید، موافقم چون مجبورتون میکنه بعضی چیزا رو درک کنید مثل تعداد بایت پرش ها( far و near) اما اسمبلری مثل FASM خودش براتون اصلاحش میکنه(وقتی تعیین نمیکنید)!

3- نزدیک 1سال 24 ساعته تو کار برنامه نویسم و اون زبونای که عرض کردم تواین مدت یاد گرفتم ( هرچند به صورت تخصص باهاشون پیش نرفتم) به نظرتون چه مدت طول میکشه تا بتونم بگم یه اسمبلی کار جرفه ای هستم که میتونم با اسمبلی کار کنم؟
به نظرم دنبال این واژه ها نباشید(سودی نداره جز اینکه باعث شه روزی که احساس کردی همه چی رو میدونی دست از یادگیری بکشی)، و فقط بسته به هدفتون به اندازه ای که نیاز دارین از دانش سیراب شید. بنظرم مهمتر اینه از دانشی که تا الان دارین چه استفاده ای میکنید،نه اینکه همه چیزو صفر تا صد یاد بگیرید بدون کاربرد!
در کل سعی کنید بسته به هدفتون از ابزار و دانش استفاده کنید،ببینید اسمبلی میتونه در چه حوزه هایی به دردتون بخوره،اگر علاقه مند بودید با سمت و سوی اون هدف دنبالش کنید.
موفق باشید.