برگزیده های پرشین تولز

اسمبلی رو از رو چی بخونم!

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
دوستان كسي كتاب خوب و جامع در مورد اسمبلی سراغ داره.من بعضی کتابها رو دیدم که خیلی دری وری می نویسن برای همین هم دنبال کتابی هستم که مطالبش طبقه بندی شده باشه و مثالهای متنوعی رو در خلال مباحث مطرح کرده باشه.در ضمن از پایه شروع کنه چون من زیاد تو این زمینه مطالعه نکردم.ممنون.
 

night_walker

کاربر تازه وارد
تاریخ عضویت
12 مارس 2005
نوشته‌ها
73
لایک‌ها
0
محل سکونت
Tabriz
دوست عزیز ... کتابی هست بنامه "برنامه نویسی و زبان اسمبلی کامپیوترهای شخصی" ترجمه مهندس کیمیایی ... احتمالا همون چیزی باشه که دنبالشی... در صورتی که اطلاعات بیشتر بخوایی بهترین مرجع همون اینترنته.
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
به نقل از night_walker :
دوست عزیز ... کتابی هست بنامه "برنامه نویسی و زبان اسمبلی کامپیوترهای شخصی" ترجمه مهندس کیمیایی ... احتمالا همون چیزی باشه که دنبالشی... در صورتی که اطلاعات بیشتر بخوایی بهترین مرجع همون اینترنته.
ممنون دوست خوب.راستي اون كتابي گفتي ناشرش كيه؟
 

hwt

کاربر قدیمی پرشین تولز*مدیر سخت افزار
مدیر انجمن
مدیر انجمن
تاریخ عضویت
11 آگوست 2004
نوشته‌ها
15,953
لایک‌ها
2,415
نويسنده پيتر ايبل

انتشارات نما . رو من دارم .
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
به نقل از hwt :
نويسنده پيتر ايبل

انتشارات نما . رو من دارم .
راستي hwt جان خودت اينو خوندي.چهجورياست.ارزششو داره.منظورم اينكه مطالبش جامعن يا اينكه....
 

night_walker

کاربر تازه وارد
تاریخ عضویت
12 مارس 2005
نوشته‌ها
73
لایک‌ها
0
محل سکونت
Tabriz
بستگی داره به چی بگی جامع... اگه برای درس و دانشگاه میخوایش , کافیه !
 

hwt

کاربر قدیمی پرشین تولز*مدیر سخت افزار
مدیر انجمن
مدیر انجمن
تاریخ عضویت
11 آگوست 2004
نوشته‌ها
15,953
لایک‌ها
2,415
والا معروفترين كتابيه كه راجب اسمبلي هست .

من اينو 6 سال پيش گرفتم كه با ديباگ اشنا بشم .

خيلي جامع نيست اما جوابگو هست .
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
به نقل از night_walker :
بستگی داره به چی بگی جامع... اگه برای درس و دانشگاه میخوایش , کافیه !
نه بابا تو دانشگاه كي كتاب مي خره!!من براي خودم مي خوام.بالاخره كسي كه داره برق مي خونه بايد اسمبلي بلد باشه.انم از نوع خيلي پيشرفته ش.خلاصه مي خوام تا مي تونم IQ بسوزونم!حالا به نظر شما این کتاب به شرایط من می خوره؟
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
به نقل از hwt :
والا معروفترين كتابيه كه راجب اسمبلي هست .

من اينو 6 سال پيش گرفتم كه با ديباگ اشنا بشم .

خيلي جامع نيست اما جوابگو هست .
دستت درد نكنه پس به عنوان يه منبع جنبي ميشه ازش استفاده كرد.
 

night_walker

کاربر تازه وارد
تاریخ عضویت
12 مارس 2005
نوشته‌ها
73
لایک‌ها
0
محل سکونت
Tabriz
فک نکنم... من 2 سال پیش برای یه قفل سخت افزاری می خواستم برنامه بنویسم (Rainbo RS-232 -LQ8700) تنها مرجع من این کتاب بود ولی موفق نشدم. این کتاب در حد متوسطه. اگه کاملا پیاده ای اینو بخر... برا شروع بد نیست... ولی قدرت مخ ترکوندن نداره
04.gif


یه چیز دیگم یادم افتاد... یه سری برنامه ها میشن برا ديباگ كردن برنامه هاي ميكرو كنترلرها ... همراه اين برنامه ها سورساي و راهنما هاي جالبي ميشه... حتما امتحانشون كن !
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
به نقل از night_walker :
فک نکنم... من 2 سال پیش برای یه قفل سخت افزاری می خواستم برنامه بنویسم (Rainbo RS-232 -LQ8700) تنها مرجع من این کتاب بود ولی موفق نشدم. این کتاب در حد متوسطه. اگه کاملا پیاده ای اینو بخر... برا شروع بد نیست... ولی قدرت مخ ترکوندن نداره
04.gif


یه چیز دیگم یادم افتاد... یه سری برنامه ها میشن برا ديباگ كردن برنامه هاي ميكرو كنترلرها ... همراه اين برنامه ها سورساي و راهنما هاي جالبي ميشه... حتما امتحانشون كن !
دستت درد نكنه.حتما امتحانش مي كنم.كسي ديگه نظري نداره؟
 

mazoolagh

Registered User
تاریخ عضویت
10 آپریل 2004
نوشته‌ها
2,938
لایک‌ها
7
يادگيري اسمبلي كلا با بقيه متفاوت هست. در زبانهاي سطح بالا اولين مثال معمولا چاپ يك عبارت هست. در اسمبلي اينطور نيست. يعني انجام ساده ترين كارها مثل چاپ يك كارآكتر در خروجي يا گرفتن يك كارآكتر در ورودي نياز به استفاده از توابع آماده سيستم عامل يا BIOS داره. براي شروع يادگيري اين زبان بهترين برنامه همون ديباگ هست كه بتوني از ماشين كد بصورت mnemonic استفاده و برنامه رو دستور به دستور trace و محتويات رجيسترها رو بررسي كني. ولي قبل از اون بايد ساختار كلي خانواده 80x86 (رجيسترها - آدرس دهي - segmentation و مدل حافظه - وقفه ها - ...) رو بلد باشي. براي دانشجويان الكترونيك كه دروس پايه ساخت و طراحي ميكروپروسسور رو ميخونن ياد گرفتن اين موارد خيلي ساده و سريع هست و بدليل همين درك عمقي مطالب بهترين اسمبلي نويسان هم در همه جا مهندسين الكترونيك هستند!
بعد از اين كه تونستي در محيط ديباگ برنامه هاي ساده بنويسي و انواع دستوراالعملها (محاسباتي - منطقي - مقايسه - انتقال اطلاعات - كنترل گردش برنامه - ورودي و خروجي - ...) رو مسلط شدي ميتوني از اسمبلر استفاده كني. اسمبلر اين امكان رو بهت ميده كه كه براي كنترل گردش برنامه از label بجاي آدرس استفاده كني - ثابتها و متغيرهاي نوع byte, word,dword بنام تعريف كني - از directiveهاي مختلف سود ببري - ماكرو بنويسي و ...
در هر صورت يك برنامه مستقل اسمبلي بدون استفاده از توابع سيستم عامل و BIOS معني نداره مگر اينكه تمام سخت افزار طراحي خودت باشه! - بهمين خاطر از هر سيستم عاملي كه استفاده ميكني بايد راهنماي توابعش رو هم داشته باشي.
براي پيدا كردن مرجع آموزش هم ميتوني توي گوگل دنبال pc assembly tutorial جستجو كني!
 

night_walker

کاربر تازه وارد
تاریخ عضویت
12 مارس 2005
نوشته‌ها
73
لایک‌ها
0
محل سکونت
Tabriz
به نقل از mazoolagh :
يادگيري اسمبلي كلا با بقيه متفاوت هست. در زبانهاي سطح بالا اولين مثال معمولا چاپ يك عبارت هست. در اسمبلي اينطور نيست. يعني انجام ساده ترين كارها مثل چاپ يك كارآكتر در خروجي يا گرفتن يك كارآكتر در ورودي نياز به استفاده از توابع آماده سيستم عامل يا BIOS داره. براي شروع يادگيري اين زبان بهترين برنامه همون ديباگ هست كه بتوني از ماشين كد بصورت mnemonic استفاده و برنامه رو دستور به دستور trace و محتويات رجيسترها رو بررسي كني. ولي قبل از اون بايد ساختار كلي خانواده 80x86 (رجيسترها - آدرس دهي - segmentation و مدل حافظه - وقفه ها - ...) رو بلد باشي. براي دانشجويان الكترونيك كه دروس پايه ساخت و طراحي ميكروپروسسور رو ميخونن ياد گرفتن اين موارد خيلي ساده و سريع هست و بدليل همين درك عمقي مطالب بهترين اسمبلي نويسان هم در همه جا مهندسين الكترونيك هستند!
بعد از اين كه تونستي در محيط ديباگ برنامه هاي ساده بنويسي و انواع دستوراالعملها (محاسباتي - منطقي - مقايسه - انتقال اطلاعات - كنترل گردش برنامه - ورودي و خروجي - ...) رو مسلط شدي ميتوني از اسمبلر استفاده كني. اسمبلر اين امكان رو بهت ميده كه كه براي كنترل گردش برنامه از label بجاي آدرس استفاده كني - ثابتها و متغيرهاي نوع byte, word,dword بنام تعريف كني - از directiveهاي مختلف سود ببري - ماكرو بنويسي و ...
در هر صورت يك برنامه مستقل اسمبلي بدون استفاده از توابع سيستم عامل و BIOS معني نداره مگر اينكه تمام سخت افزار طراحي خودت باشه! - بهمين خاطر از هر سيستم عاملي كه استفاده ميكني بايد راهنماي توابعش رو هم داشته باشي.
براي پيدا كردن مرجع آموزش هم ميتوني توي گوگل دنبال pc assembly tutorial جستجو كني!
منم صد در صد موافقم !
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
دستت درد نكنه mazoolagh جان.راستي چند تا سوال داشتم (هرچند كه ممكنه خيلي مبتدي جلوه كنه اما خوب اطلاعاتم در مورد اسمبلي خيلي كمه):

براي شروع يادگيري اين زبان بهترين برنامه همون ديباگ هست كه بتوني از ماشين كد بصورت mnemonic استفاده و برنامه رو دستور به دستور trace و محتويات رجيسترها رو بررسي كني.

1-فرق ديباگ با اسمبلر چيه يا بهتر بگم اينا دو چيز جدا از هم هستن؟اگه اينجوريه ممنون ميشم يه خورده در موردشون توضيح بدي.

ولي قبل از اون بايد ساختار كلي خانواده 80x86 (رجيسترها - آدرس دهي - segmentation و مدل حافظه - وقفه ها - ...) رو بلد باشي. براي دانشجويان الكترونيك كه دروس پايه ساخت و طراحي ميكروپروسسور رو ميخونن ياد گرفتن اين موارد خيلي ساده و سريع هست و بدليل همين درك عمقي مطالب بهترين اسمبلي نويسان هم در همه جا مهندسين الكترونيك هستند!

2-راستش من مي خواستم از همين الان اسمبلي رو شروع كنم تا سالهاي بعد پايه م قوي باشه.(چون هنوز درسامون تو دانشگاه به اون سطحي كه اشاره كردي (ساخت و طراحي ميكروپروسسور) نرسيده.) به نظرت اين كار مثمر ثمره يا اينكه نه تا رسيدن به اون سطح از الكترونيك بايد صبر كنم.


براي پيدا كردن مرجع آموزش هم ميتوني توي گوگل دنبال pc assembly tutorial جستجو كني!

3- تو اكثر سايتهايي كه من ديدم مطالب متفرقه اي رو در مورد اين زبان نوشتن اما من دنبال يه مرجع كامل و طبقه بندي شده هستم كه كمتر مطالب رو جا انداخته باشه.بازم جستجو مي كنم اما اگه خودت هم جاي خوبي رو سراغ داري خوشحال مي شم لينكش رو برام بذاري.

4-برنامه نويس اسمبلي تحت ويندوز چقدر با اسمبلي تحت لينوكس فرق مي كنه و اصولا يه همچين تقسيم بندي وجود داره؟اگه اينطوريه كدومش رو پيشنهاد ميكني و قدرت و كارايي كدومشون بالاتره.

5-آيا اون كاهايي رو كه با اسمبلي انجام مي گيره نميشه با حفظ همون كيفيت و كارايي با سي هم انجام داد؟

6-به نظرت يه برنامه نويس اسمبلي بيشتر احتياج داره كه الكترونيك بخونه يا نه براي يه مهندس الكترونيك هم ضرورت داره كه با اسمبلي آشنا باشه.

ببخشيد كه سرت رو درد آوردم!چون مي خوام با آگاهي كامل وارد اين زمينه بشم و به قول شاعر:

كنون كه امكان گفتار هست ................................................. بگو اي برادر به لطف و خوشي
كه فردا چو پيك اجل در رسيد ................................................ به حكم ضرورت زبان در كشي!

بازم از لطفت ممنون.
 

mazoolagh

Registered User
تاریخ عضویت
10 آپریل 2004
نوشته‌ها
2,938
لایک‌ها
7
1- DEBUG از برنامه هاي كمكي است كه از اولين ورژن DOS تا آخرين نسخه هاي Windows Server و XP همراه اين سيستم عامل ها بوده و علاوه بر قابليت اجراي خط به خط برنامه هاي كاربردي (البته در سطح ماشين كد) امكاناتي نظير Memory Dump - Assemble - UnAssemble - Memory Search - Block Transfer - .... و تغيير محتويات حافظه و ذخيره فايل خوانده شده يا اسمبل شده رو به شما ميده.
Assembler يك برنامه كاربردي براي ايجاد فايلهاي از نوع Object از روي فايل متني به زبان اسمبلي است و از اين نظر مشابه كامپايلر زبانهاي سطح بالا عمل ميكنه. فايل Object فايلي است كه شامل دستورات ماشين كد و ديتاي برنامه است ولي قابل اجرا نيست (بدليل دارا نبودن روتين هاي خارجي يا توابع كتابخانه اي كه در سورس برنامه از آنها استفاده شده و همچنين خام بودن آدرسها) و توسط برنامه ديگري بنام Linker به فايلهاي Object ديگر يا كتابخانه ها متصل شده و آدرسهاي Relocatable محاسبه و در صورت لزوم Headerي براي Load&Execute شدن توسط سيستم عامل به آن اضافه شده و تبديل به يك فايل اجرايي (معمولا EXE) ميشه.

2- هر چه زودتر بهتر!

3- زماني كه اسمبلي PC رو شروع كردم هيچ مرجعي غير كتاب نبود (سال 62 اينترنت هنوز نيومده بود). بذار به كتابخونه ام يك نگاهي بندازم! اگر ميخواي واقعا ياد بگيري سراغ هيچ منبع فارسي نرو! براي منبع اينترنتي بايد واسط جستجو كنم و مطلبش رو هم قدري بخونم كه اگر وقت كنم چشم!

4- هر نوع دستورالعمل از خانواده IO يا هر نوع درخواست و پردازش وقفه نرم افزاري يا پردازش هر وقفه سخت افزاري كاملا به سخت افزار و سيستم عامل وابسته هست. اسمبلي مطلقا براي كاربردهاي پرتابل مناسب نيست! اينكه كدوم سيستم عامل بهتره سوال درستي نيست. اگر لازم باشه در هر محيطي كه نياز هست و از شما خواسته شده بايد بتوني كار كني. اگر به اصول مسط باشي در هر دو محيط ميشه كار كرد!

5- بستگي داره! اكثر كامپايلرهاي خانواده C امكاناتي براي قرار دادن كدهاي اسمبلي داخل برنامه به شما ميدن. در هر صورت بايد اسمبلي رو بلد باشين.

6- برنامه نويس عادي يا اسمبلي اصلا نميدونه يا اگر هم بدونه باندازه مهندس الكترونيك نميدونه دليلش هم اينه كه اسمبلي معمولا وقتي نياز ميشه كه شما نياز به يك برنامه نزديك به سخت افزار پيدا ميكني. مهندس الكترونيك اگر قراره درايور براي سخت افزار بنويسه - سيستم هاي مبتني بر ميكروپروسسور و ميكروكنترلر بسازه و برنامه نويسي كنه - بردهاي كنترلي قابل نصب در كامپيوتر بسازه و كارهايي از اين دست لازمه كه اسمبلي در حد عالي بلد باشه!

موفق باشي!
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
خدا خیرتون بده واقعا جامع و راه گشا بود.
فقط یه نکته برام باقی موند اونم اینکه این برنامه ی کمکی DEBUG همین الان تو خود ویندوز وجود داره یا اینکه اونو باید از جایی بارگیری کرد.در ضمن من اینطور فهمیدم که DEBUG حالت خاصی از اسمبلی می تونه باشه.یا بهتر بگم یه نمونه اولیه برای برنامه نویسی اسمبلی شمرده میشه.اشتباه که برداشت نکردم!(لابد از اون سوالاست!) بازم ممنون.
 

mazoolagh

Registered User
تاریخ عضویت
10 آپریل 2004
نوشته‌ها
2,938
لایک‌ها
7
در محيط command prompt دستور debug رو اجرا كن. پرامپت محيط ديباگ - هست. دستور ؟ رو بنويس تا ليست دستورات ديباگ رو ببيني:
کد:
-?

assemble     A [address]
compare      C range address
dump         D [range]
enter        E address [list]
fill         F range list
go           G [=address] [addresses]
hex          H value1 value2
input        I port
load         L [address] [drive] [firstsector] [number]
move         M range address
name         N [pathname] [arglist]
output       O port byte
proceed      P [=address] [number]
quit         Q
register     R [register]
search       S range list
trace        T [=address] [value]
unassemble   U [range]
write        W [address] [drive] [firstsector] [number]
allocate expanded memory        XA [#pages]
deallocate expanded memory      XD [handle]
map expanded memory pages       XM [Lpage] [Ppage] [handle]
display expanded memory status  XS

از اين لينكها بعنوان راهنماي استفاده از ديباگ استفاده كن:
http://www.nuvisionmiami.com/books/asm/debug/Debug_Tutorial.pdf
http://merlin.cs.uah.edu/labs/CS308/E-Books/DOS DEBUG Commands.doc
http://www.ohmslaw.com/LAB7.pdf
 

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
42
محل سکونت
Iran
بالاخره كسي كه داره برق مي خونه بايد اسمبلي بلد باشه.انم از نوع خيلي پيشرفته ش
این که من پایم (پایه خنده!!!) من که خودم برق خوندم... تا تهش برو اون دکتراش هم چیزی از اسمبلی مدرن سر در نمیارن :)
دانشجويان الكترونيك كه دروس پايه ساخت و طراحي ميكروپروسسور رو ميخونن
بوق!!!!!
ببخشید؟؟؟؟

برنامه نويس اسمبلي تحت ويندوز چقدر با اسمبلي تحت لينوكس فرق مي كنه و اصولا يه همچين تقسيم بندي وجود داره؟اگه اينطوريه كدومش رو پيشنهاد ميكني و قدرت و كارايي كدومشون بالاتره
این سوال یه کم یه جوریه!! - میگم چرا ... بذار این QUOTE بازی رو تموم کنم.
برنامه نويس عادي يا اسمبلي اصلا نميدونه يا اگر هم بدونه باندازه مهندس الكترونيك نميدونه دليلش هم اينه كه اسمبلي معمولا وقتي نياز ميشه كه شما نياز به يك برنامه نزديك به سخت افزار پيدا ميكني. مهندس الكترونيك اگر قراره درايور براي سخت افزار بنويسه

مطمئنی؟؟؟ من که نیستم.


--------------------------------------
1- اولا اینکه تمام این بحثها یه چیزی کم داره. اونم اینه که رو کدوم Platform????
2- برنامه نویسی برای سیستم های میکرو پروسسور و ... همه این کوفت و زهر ماریها بستگی مستقیم به دستوراتی داره که وندور -بذارید پای کلاس گذاشتن من : vendor - اون قطعه معرفی میکنه. اما برای برنامه نویسی روی یک سیستم عامل قضیه فرق میکنه
3- وقتی میگی سیستم عامل ، خیلی صریح اعلام میکنی که میخوای وابسته به یک نرم افزار (سیستم عامل ) برنامه بنویسی و کمتر با سخت افزار کار داری. منظورم از سیستم عامل ، سیستم عاملهای Posix Base یا دست کم سیستم عاملهای پدر و مادر دار (مثل XP/2000 و نه 9X ) هست. در این صورت باید مشخص کنی کدوم طرف میخوای برنامه نویسی کنی(مانیتور یا کاربر؟؟).
البته هنوز یه سری دستورات هستن که مستقیم جواب میدن و شما باید اونا رو بشناسید و تا حد زیادی به سخت افزار بستگی دارن. مثلا سی پی یو های مدل قدیمی تر اینتل ، دستور CPUID یا دستور شماره (آدرس اگه بگم بهتره) A20F رو ندارن. (قسمت مقالات رو نگاه کنید یه جا توضیح دادم که چطور میشه این تابع رو استفاده کرد. ) البته اینتوابع خیلی کمن. و الان تقزیبا یه استاندارد رعایت میشه و همه سی پی یو ها یه سری دستور رو حتما دارن و بعضی بیشتر دارن.
4-یک سیستم عامل استاندارد (همونا که بالاتر گفتم سیستم عاملهای Posix Base یا دست کم سیستم عاملهای پدر و مادر دار (مثل XP/2000 و نه 9X )) دو مود داره. Mod - یکی مود مانیتور یکی مود کاربر. برنامه نویسی این دو قسمت کمی (یا حقیقتا : خیلی!!!) با هم فرق میکنند. الان سی پی یو ها همه از یک فلگ پشتیبانی برای کنترل این قضیه برخوردارند و به هیچ وجه نمیشه -اگه بشه یه باگ محسوب میشه- برنامه مود کاربر رو با اختیارات مود مانیتور اجرا کرد. اما مود مانیتور چیه؟ وقتی سی پی یو تو سیستم عاملهایی که چند وظیفه ای هستن میره روی کاری که مربوط به سیستم عامله اون فلگ ست میشه و کلیه دستوراتی که مستقیما با سخت افزار سر و کار دارن مجاز میشن. اما وقتی برمیگرده رو برنامه من و شما -تو Task Manager ببینید برنامه هایی که Owner اونا کاربره- کلیه اون فراخوانی ها ممنوع میشن. بازم میگم سیستم عاملهای پدر و مادر دار و مدرن. مثلا تو 9X میتونی با دو تا خط اسمبلی با پورتها بازی کنی. اما تو XP یا 2000 خطا میگیره.
5- حالا پس چطوری میتونی تو مود کاربر با سخت افزار ارتباط برقرار کنی؟ سادست. شما یک سری Api داری که وقتی فراخوانی میشن از اول فراخوانی تا آخرش میرن تو مود مانیتور. مثلا برای دسترسی به یک پورت باید (تو ویندوز از لینوکس در این مورد چیزی نمیدونم) با فراخوانی CreateFile که یه تابع kernel هست ، اونو به صورت یک فایل باز کنی (ویندوز اینها رو به صورت فایل در اختیار شما میذاره همون طور که Pipe ها و Disk devices -مثلا سی دی رام رو به صورت سکتور به سکتور و نه به صورت فایل به فایل-رو به صورت فایل باز میکنه) حالا این فایل با همون فراخوانی ها عادی Read و Write قابل استفادست. یا اینکه میتونی فراخوانی ها یپیشرفته تر رو مثل DeviceIoControl رو استفاده کنی. مثلا من یه برنامه نوشتم که از سی دی Image میگیره (بدون ForceApi و فقط با Api خود ویندوز و pure delphi) اگه میبینید به کار میاد بگید (البته فقط NT/2K/XP هست) -من که هر چی داشتم و نداشتم اتچ کردم اینم روش!!!! -
6- اما برنامه نویسی مود مانیتور. اونجا شما دیگه یا برنامه نویس سیستم عاملید و یا اینکه دارید درایور مینویسید. اونجا باید بگم که قضیه فرق میکنه. فعلا بی خیال برنامه نویسی سیستم عامل، اما برای درایور نویسها ویندوز یه سیستم داره به نام DDK که راهنمای همین کاره. میتونی دانلودش کنی( اما بدردت نخواهد خورد - اشتباه منو تکرار نکن!!!) یه تیکه هایی رو میتونی تو MSDN هم پیدا کنی.
7- برگردیم به بحث: همونطور که گفتم همه میکرو ها (پروسسورهای بدون سیستم عامل ) دستوراتی رو دارن که وندورشون بهتون میده. مثلا من یه زمان لازم شد و یک پروگرامر برای 8051 ساختم(ساختیم). (بازم بووووووقق!!! یادش بخیر بر وبچ ،فتل و ابی... و اصولا دورانی که دانشجو بودم!) یه سری دستور + یه سری راهنما که وقت پروگرام شدن این پایه باید ست باشه اون یکی ..... بعد هم یه فایل هگز ساده که با دستم میتونی ترجمش کنی هر دستور یه دو بایت و بعد آرگومانهاش. معمولا هم 256 تا دستورم ندارنکار کامپایلرش حتی به یک گذر هم نمیرسه. چه برسه به اینکه واسش دو گذره کامپایلر بنویسی!
به هر صورت این کار یه اسمبلی ساده داره که شما به عنوان یه مهندس الکترونیک و اصولا برق باید بشناسید و مسلط باشید. اما برنامه نویسی برای سیستم عامل حقیقتا فرق داره.
یه فایل اجرایی سیستم عامل (که شما میخواید با اسمبلی ایجادش کنید) خیلی مکافات داره! برای اینکار
الف : باید PE Coff رو فول باشی! -واسه لینوکس هم مربوط به خود اون- میتونی بری تو سایت MS و همین PE Coff رو سرچ کنی. من خیلی وقت پیش گرفتمش (وقتی داشتم یه ادیتور فایلهای PE مینوشتم یه چیزی تو مایه های eXe Scope یا Resource Hacker البته برای کاربردهای دیگه. اگه بر و بچ برنامه SS Builder منو دیده باشن میفهمن منظورم چیه) اینجا دستورات رو وندور سیستم عامل (در این مورد MS ) معین میکنه و شما باید تابع اون باشید.
مثلا تو Windows همه توابع stdcall هستند. یعنی آرگومانها از طریق پشته فرستاده میشن و از راست به چپ (به خدا یادم نیست !!! شاید غلط باشه) اما تو لینوکس برعکسه همه cdecl هستن. در اینجا وقتی شما میخواید یه تابع سیستمی رو صدا بزنید باید بدونید قبل از فزاخوانی آرگومانها رو از طریق پشته بفرستید یا رجیسترها؟؟ از چپ به راست باید بذاریدشون تو پشته یا از راست به چپ؟ -مشکلاتی که تو زبانهای برنامه نویسی سطح بالا ندارید. - اینحاست که شما باید بگی سیستم عامل عزیز هر چی شما بفرمایید!!! من که ..... شدم !! تا یکی دو تا برنامه نوشتم (یکی و نصفی!!) بعدشم تا ابد قیدشو زدم. الانم فقط برای دیباگ از اون چیزایی که یاد گرفتم استفاده میکنم (من دیباگر SoftIce رو پیشنهاد میکنم که نرم افزار های ایرانی مثل سگ ازش میترسن! مثلا پارسا 2001 تا اینو میبینه هشدار میده و میپره بیرون. زرشک!ا بچه ترسو.گه حوصله داشتم و این نوشته جا داشت مینویسم این کوفتی چی هست ولی حقیقتا قاط زدم اینقدر نوشتم!)
ب : با یه نرم افزار مدرن مثل Tourbo Assembler نسخه های آخرش آشنایی کامل داشته باشی.
ج : واسه خودت یه کتابخانه کامل بنویسی. چون دیگه نه Header فایل هست و نه....

حالا اینجا باید مشخص کنی برای کدوم Platform? ویندوز یا لینوکس یا اصلا بدون سکو میخوای بری سراغ یه میکرو بدون سیستم عامل؟


برنامه نويس اسمبلي تحت ويندوز چقدر با اسمبلي تحت لينوكس فرق مي كنه و اصولا يه همچين تقسيم بندي وجود داره؟اگه اينطوريه كدومش رو پيشنهاد ميكني و قدرت و كارايي كدومشون بالاتره.

وقتی داری با یه سیستم عامل کار میکنی لازمه که بدونی آیا احتیاج به فراخوانی سیستمی داری یا نه؟ مثلا UCL یا LZO یه پیاده سازی اسمبلی هم دارن. (هر دوتا متد های کمپرس هستن کار این بابایی که UPX رو نوشته و اسمش به تنهایی اندازه تمام اسامی همه افراد خانواده منه!) اما اونها اصلا نیازی به سیتم عامل ندارن. یه سری بایت میگیرن و کمپرس میکنن. بنابراین این نوع کد روی لینوکس یا روی ویندوز عین همن و راحت هم رو هر دوتا کامپایل میشن. اما وقتی با سیستم عامل کار داری هر دو تا متفاوتن. در اون صورت شما خوب بالاخره اول سیستم رو انتخاب میکنی یا نه؟ یعنی خودت از اول میدونی با کدوم کار داری دیگه! در کل اونقدرها فرق ندارن. اما فرقهایی که دارن به اندازه کافی آزار دهنده هست.

-----------------------------------------------------------------
از اینجا به بعد نظر شخصی منه و اصلا هیچ بحثی رو -اگه احساس کنم بیفایدست - جواب نمیدم.
شما مهندس برقی یا میشی (انشالله) -خودمو قاطی نمیکنم. چون من یه جورایی خائنم به این رشته- اما ببین لازم نیست شما به عنوان مهندس برق از همه چیز سر در بیاری. مثلا اگه قرار باشه یه سخت افزار بسازی مطمئن باش که تکی کارت راه نمیفته. اینجا شما یه تیم برنامه نویس هم میخوای. دیگه لازم نیست که هم کارها رو خودت انجام بدی مثلا اسمبلی بیشتر از اشنایی با سیستمهای میکرو پروسسور برای شما لزومی نداره و وقت تلف کردنه. البته اگه صرفا محض علاقه داری کار میکنی که قضیه یه چیز دیگست. حیفه IQ الکی حروم کنی. (میدونی من خودم دو بیت مغز دارم که تا چهار کلمه بیشتر نمیتونم آدرس دهی کنم اگه جمله بیشتر از چهار کلمه باشه به آخرش برسم اولش یادم میره!!! یه بیتشم نیمسوزه! اینه که دلم میسوزه!! قبول داری منم میتونم شاعر بشم یا نه؟) بذار وقتتو رو چیزایی که حقیقتا بدرد میخورن. و برنامه نویسی رو هم تا حدی یاد بگیر که لازم داری. دونستن زیاد خوبه اما کسی که به اندازه میدونه از اون کسی که زیاد میدونه ولی همه چیزو نیمه تموم کار آمد تر میتونه باشه. مثلا یه مهندس برق دیباگ کردن برنامه های کامپیوترو میخواد چی کار؟دیگه دوره ابن سینا نیست که یه تنه بتونی هم دکتر باشی هم ستاره شناس هم فیزیکدان هم شیمیدان بعد هزار سال بعد هم واست هزاره بگیرن. البته قصدم این نیست که نصیحت کنم (لعنت به هر چی ناصح الکیه) ولی این تجربه منه که هنوزم پیرهنم پارست و وقت نکردم عوضش کنم! زلیخای نامرد! حقیقتا افتادم به دری ور گفتن آخه وقت خوابمه.


اما بقیه قضایا :
SoftIce یه دیباگره که من وقتی عصبی میشم میرم سراغش. البته برنامه های خودمو کاری ندارم چون سورس دارم راحت تر میتونم دیباگشون کنم.
اما یه چز خیلی کوچیک اینه که مثلا در یه ثانیه یه چیزی بیشتر از 100 تا پیغام برای یه پنجره ارسال میشه. (برنامه Spy++ رو که با ویژوال استدیو هست اجرا کن و یه پنجره رو چک کن میفهمی. ) وقت دیباگ ،همه اینها میشن فراخوانی یه تابع. یعنی اگه بخوای با یه دیباگری مثل ویژوال سی یا دلفی عمل کنی سرسام میگیری! هر ثانیه n تا تابع. ده روزباید Trace کنی تا تازه به Entry Point برسی .... اما این برنامه کلا سیستم رو منجمد میکنه و فقط با یه سری دستوراتی که داره میتونی یه دستور یه دستور یا ... جلو بری. اینم بگم : لطفا از من نپرسید برنامه کجاست و کرکش کجاست و .... این چیزا رو میتونید تو قسمت کرک مطرح کنید. اگه اینجا ببینم مجبور میشم برخورد کنم. (باور کنید تو این یه ماه دو سه تا برخورد خفن داشتم همین که زنده ام خیلیه!! ) و البته فکر نکنید یه برنامه مثل این میتونه از شما یه کرکر بسازه ... یه کم منطقی باشید و به جای خراب کاری فکر ساختن باشید)

یه اخطار دیگه !!! اگه کس دیگه ای بیاد و بازم از این سوالها رو بپرسه و منو مجبور کنه اینهمه تایپ کنم، اونم فارسی دعا میکنم یا کامپیوترش بسوزه یا اینکه (اگه پسره) زودتر زنش بدن و اگه دختره من که با دخترا شوخی ندارم! :D :D :D :D ....

حقیقت اینه که خیلی دوستت داشتم که اینهمه نوشتم واست! اگه حرفی میزنم بدل نگیر. :) :) :) :) :)
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
mazoolagh جان دستت درد نکنه.خیلی مفید بود.
 

electronic

Registered User
تاریخ عضویت
16 ژانویه 2005
نوشته‌ها
1,661
لایک‌ها
75
سن
37
محل سکونت
USA
دستت درد نکنه فرود جان.اما چند نکته به ذهنم رسید که دلم می خواد بگم:
این که من پایم (پایه خنده!!!) من که خودم برق خوندم... تا تهش برو اون دکتراش هم چیزی از اسمبلی مدرن سر در
نمیارن
من خودم هستم به مردم چی کار دارم! هر کسی مسول خودشه! در ثانی با این سیستم آموزشی عجیب و غریب بی پایه و اساس استعداد ویران کن! به وجود اومدن اینجور آدمها همچین بعیدم نیست.منم مهندس(شبه مهندس!کپی مهندس!مهندس واره!مهندس گون و.....!) کامپیوتر می شناسم که حتی اسم دستور netsend به گوشش نخورده! به قول شاعر:
بخت ودولت به کاردانی نیست ..................................... جز به تایید آسمانی نیست
اوفتاده است در جهان بسیار ......................................... بی تمیز ارجمند و عاقل خوار!
کیمیاگر به غصه مرده و رنج .......................................... ابله اندر خرابه یافته گنج!
دانشجويان الكترونيك كه دروس پايه ساخت و طراحي ميكروپروسسور رو ميخونن

بوق!!!!!
من به بقیه کاری ندارم! البته شابد شما به عینه این چیزها رو دیده باشید اما دانشجوهای دیگه می خوان بخونن می خوان نخون! اما اگه به دردم بخوره من یکی می خونم!
اما ببین لازم نیست شما به عنوان مهندس برق از همه چیز سر در بیاری. مثلا اگه قرار باشه یه سخت افزار بسازی مطمئن باش که تکی کارت راه نمیفته. اینجا شما یه تیم برنامه نویس هم میخوای
این یکی رو کاملا قبول دارم دربست! من خودم جز اون اقلیت بزرگی هستم که خودخواهی رو بوسیدن و گذاشتن کنار و با کارهای گروهی موافقند!

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

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