# برنامه نویسی سطح پایین > برنامه نویسی اسمبلی خانواده x86 >  اسمبلی 32 با 64 چه فرقی دارند؟

## complexcoding

سلام دوستان 
من تازه کارهستم و می خوام بدونم با کدوم یک از نوع های زبان اسمبلی کنترل بهتری بر سیستم و کامپیوتر و سخت افزار داریم؟
خیلی خیلی خیلی ممنونننننننننن :قلب:  :قلب:  :قلب:  :قلب:  :قلب:  :قلب:  :قلب:  :قلب:  :قلب:

----------


## jeson_park

سلام
اسمبلی 32 یا 64 بستگی به سخت افزارتون داره
شما از همون 32 بیت شروع کنید خوب که راه افتادید برید سمت 64 بیت

----------


## AMIBCT

در ویندوز دسترسی مستقیم به سخت‌افزار وجود ندارد( اسمبلی 32 و 64 بیتی )

باید به سمت نوشتن درایور برید که فکر نمی‌کنم هدف شما این باشه

در حقیقت سوال شما چیز دیگری باید باشد که به اشتباه این طوری پرسیده شده
اسمبلی 32 بیتی برای سخت‌افزار 32 بیتی است
و اسمبلی 64 بیتی برای سخت‌افزار 64 بیتی

پیچیدگی‌های زیاد در اسمبلی 64 بیتی و توسعه نیافتن ابزارهای کمکی برای آن( تا حالا )
باعث شده اسمبلی 64 بیتی خیلی کمتر از اسمبلی 32 بیتی مورد استفاده باشه

----------


## complexcoding

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

----------


## jeson_park

با سلام
دوست عزیز ذکر این نکته خالی از لطف نیست که قبلش باید یه پیش ضمینه برنامه نویسی (مثل سی یا سی پلاس پلاس) داشته باشید
برای اسمبلی هم کتاب *زبان ماشین و اسمبلی: کاربرد آن در کامپیوترهای شخصی*   خوبه 
چون اسمبلی تا حدودی نیاز به دونستن سخت افزار داره پیشنهاد می کنم کتاب "اصول سیستم های کامپیوتری " رو هم برای مطالعه(بخشی از کتاب و نه کل کتاب)
رو هم داشته باشید
**اگه کسی از دوستان منبعی (چه کتاب و چه  وب سایت) برای سخت افزار سراغ داره که می تونه جایگیزین برای کتاب "اصول سیستم های کامپیوتری " باشه معرفی کنه  :قلب:

----------


## Delphi Coder

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


 دنیای DOS با دنیای Windows تفاوت زیادی داره. من خودم اسمبلی رو از DOS شروع کردم با یه کتاب آموزش اسمبلی که مال جهاد دانشگاهی مشهد بود شونصد بار خوندم تا بالاخره یه چیزایی دستم اومد چون اونموقع منابع مثل الان زیاد نبود ولی کتابهایی که برای DOS خیلی مفید دیدم یکی کتاب Peter Norton بود (که متاسفانه اسم کتاب دقیق یادم نیست PC Programming Guide یه همچین چیزی) و دیگری PC Intern. وقتی مباحث Protected Mode و سیستم عامل Windows مطرح شد تازه فهمیدم که خیلی از اطلاعاتی که داشتم زیاد به درد نمی خوره و باید با مفاهیم برنامه نویسی توی ویندوز آشنا شد توی DOS درایور و این چیزا زیاد مثل ویندوز معنی نداره و معمولا برنامه نویسا برای رسیدن به هدف با خود سیستم و وقفه ها مستقیما درگیر بودند تو ویندوز کاملا متفاوت هست و همه چی API و درایور ها هست برنامه Resident یا وقفه مفهوم چندانی ندارند همونطور که تو DOS کلمه ای مثل Thread مفهوم نداره.
تنها چیزی که از برنامه نویسی اسمبلی DOS برای ٌWindows می مونه چند تا دستور اسمبلی مثل movو َAdd و Sub و Neg و ... بیشتر نیست.
بنابراین من فکر میکنم حداقل باید مرز DOS یا Windows رو برای خودتون جدا کنید و بعد به یاد گیری ادامه بدید.

----------


## complexcoding

همون منظورم ویندوز هستش

----------


## Xarjam

> دنیای DOS با دنیای Windows تفاوت زیادی داره. من خودم اسمبلی رو از DOS شروع کردم با یه کتاب آموزش اسمبلی که مال جهاد دانشگاهی مشهد بود شونصد بار خوندم تا بالاخره یه چیزایی دستم اومد چون اونموقع منابع مثل الان زیاد نبود ولی کتابهایی که برای DOS خیلی مفید دیدم یکی کتاب Peter Norton بود (که متاسفانه اسم کتاب دقیق یادم نیست PC Programming Guide یه همچین چیزی) و دیگری PC Intern. وقتی مباحث Protected Mode و سیستم عامل Windows مطرح شد تازه فهمیدم که خیلی از اطلاعاتی که داشتم زیاد به درد نمی خوره و باید با مفاهیم برنامه نویسی توی ویندوز آشنا شد توی DOS درایور و این چیزا زیاد مثل ویندوز معنی نداره و معمولا برنامه نویسا برای رسیدن به هدف با خود سیستم و وقفه ها مستقیما درگیر بودند تو ویندوز کاملا متفاوت هست و همه چی API و درایور ها هست برنامه Resident یا وقفه مفهوم چندانی ندارند همونطور که تو DOS کلمه ای مثل Thread مفهوم نداره.
> تنها چیزی که از برنامه نویسی اسمبلی DOS برای ٌWindows می مونه چند تا دستور اسمبلی مثل movو َAdd و Sub و Neg و ... بیشتر نیست.
> بنابراین من فکر میکنم حداقل باید مرز DOS یا Windows رو برای خودتون جدا کنید و بعد به یاد گیری ادامه بدید.


خیلی ممنون می شوم اگر کتاب Peter Norton رو دارید به ما هم بدهید؟خیلی وقته دنبالش هستم.

----------


## AMIBCT

کتاب Peter Norton به درد شما نمی‌خوره
اسمبلی 16 بیتی اونم با Tasm آموزش داده

شما اگه بخواهید از اون کتاب استفاده کنید
اول باید یک کتاب بخونید که چه طوری Tasm رو پیدا کنید و چه طوری اون رو روی سیستم‌های جدید اجرا کنید !

----------


## joker

یه توضیح سریع در مورد تفاوت اصلی اسمبلی 16 - 32 - 64 بیتی

----------


## xman_1365_x

> اسمبلی 32 با 64 چه فرقی دارند؟


جدا از اینکه سازنده پردازنده کی باشه چرا که به طور کلی دستورات و ساختار پردازنده ها با هم متفاوت هستن 
این بحث خیلی طولانی هست و نیاز به شناخت پردازنده داره که از جنبه های نرم و سخت افزاری تغییرات زیادی کردن(اما با حفظ امکانات قبل)
به عنوان مثال موارد قابل لمس برای برنامه نویس سایز رجیستر ها و آدرس دهی سرعت چندین برابر اجرا روی 64 بیت ها و در کل تکنولوژی های جدید بکار رفته کاملا متفاوت هست اما همه پردازنده های قبل رو پشتیبانی میکنند بدلیل بکوارد کامپتیبل بودن(همه پردازنده های با ساختار اینتل)
برای اطلاعات بیشتر
http://en.wikipedia.org/wiki/List_of...icroprocessors
در این لینک از شروع تولید پردازنده اینتل تا به نسل های امروز رو ببنید و با کلیک بر روی هر مدل از پردازنده ها اطلاعات بیشتری رو بدست بیارید .





> من تازه کارهستم و می خوام بدونم با کدوم یک از نوع های زبان اسمبلی کنترل بهتری بر سیستم و کامپیوتر و سخت افزار داریم؟


نیاز به آشنایی پلتفورم x86,x64,ia32 و یا ia64 دارین
میتونید در لینوکس برای هر پردازنده ای اسمبلی قابل حمل بنویسید بله قابل حمل تعجب نکنید :D
برای مثال: با سینتکس at&t برای mac,win,linux &etc برنامه بنویسید.
البته سینکس اینتل که خیلی روان تر هست برای شروع!!!
به نظر من از صفر شروع کنید به یادگیری بدلیل فهم بهتر و پیچدیگی کمتر پردازنده البته به این شکل هم نیست که مد پردازنده عوض شده و در یوزر مد و فلت مدل شدن حافظه در ویندوز نمیتونید خیلی کار هارو بکنید و اون دانش در حد آشنایی با سمبل ها به کارتون بیاد
 از 8086 بعد 80286 و بعد 80386 و بعد دستورات جدید و امکانات اضافه شده پردازنده ها مثل مد های کاری و سمبل و تغییرات رجیستر و...
و بعد برای داس ،ویندوز و یا بدون سیستم عامل نیاز به آشنایی با وقفه های بایوس ، داس و  api های 16 و 32  ویندوز دارین و کار کردن با دستگاه های ورودی - خروجی نیاز به آشنایی با پورت ها
بهترین ابزار برای 8086 ، emu8086 هست قابل اجرا روی ویندوز7، 64 بیتی و برای اجرای فایل روی وین 7 x64 بدون emu نیاز به dosbox یا VM ها دارین. البته به این معنی نیست که فقط برای 16 بیتی استفاده میشه میتونید برای 32 بیتی هم استفاده کنید چون از flat assembler برای اسمبل کردن استفاده میکنه
در ویندوز برای 32 هم masm32 & winasm بهترین ها هست.
و در نهایت به 64 برسید و api هاش ...





> (ارتباط با نرم افزارهای ویندوز ، کرک ، ساخت نرم افزارهای گرافیکی و داس و یا کمک گرفتن از آن در نرم افزار به دلیل حجم کم و سرعت بالای اسمبلی)


همه موارد بالا با زبان سطح بالا قابل انجام هست و اگر نیاز مبرم به سرعت بود یا اپتیمایز کردن کد(باز بعضیا نگن کامپایلر امروزی اپتیمایر میکنه پس نیازی نیست بهتره کتاب های این زمینه رو مطالعه کنید مثل pro asm language ) و... میشه از میکس کردن کد اسمبلی یا نوشتن dll برای زبان سطح بالا و... استفاده کرد
البته فقط کرکینگ برای شروع نیاز به دونستن اسمبلی داره و همچنین مباحث دیگه مثل دیباگر ها ، دی اسمبلر ها و دی کامپایلرها ، هگز ادیتور ها وآشنایی با ابزارهای این کار همچنین آشنایی به سیستم عامل و توابع api چون برنامه ها به صورت انبوه استفاده میکنند.


 موفق باشید

----------


## Xarjam

> کتاب Peter Norton به درد شما نمی‌خوره
> اسمبلی 16 بیتی اونم با Tasm آموزش داده
> 
> شما اگه بخواهید از اون کتاب استفاده کنید
> اول باید یک کتاب بخونید که چه طوری Tasm رو پیدا کنید و چه طوری اون رو روی سیستم‌های جدید اجرا کنید !


سلام و ممنونم.

حالا اگر از کتاب های Peter Norton رو دارید رو لینک دانلود بدهید تا برای افزایش اطلاعاتمون استفاده کنیم.

ممنونم.

----------

