در صورتی که برای اولین بار از این سایت دیدن میکنید برای استفاده کامل از تمام امکانات سایت لازم است کهثبت نام کنید امکان ارسال مطلب و دانلود فایل و همچنین دسترسی به انجمن هایی که فقط اعضا ثبت نام شده امکان دسترسی به آن را دارند از امتیازات ثبت نام در سایت میباشد.
![]() |
| | 1 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| توضيح : هر وقت تاپيكي در مورد برنامه نويسي ايجاد كردم به مشكلاتي برخورد كردم كه مجبور شدم آن را رها كنم . با توجه به تجربه هاي قبلي اين بار با شيوه اي متفاوت شروع كردم . نكته : از آموزش نترسيد . اگر منبع مناسبي داريد شروع كنيد حتي اگر مبتدي باشيد . آموزش روش خوبي براي ياد گرفتن هم است . | ||||||||
|
| 3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: |
| | 2 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| چرا اسمبلي ؟ امروزه زباني مانند C يا ++C سرعت بسيار زيادي در اجراي برنامه ها دارند و جايگزين اسمبلي شده اند . با توجه به اينكه اسمبلي يك زبان سنگين بوده و وابسته به پلتفرم است سوال اين است چرا اسمبلي ؟ در مهندسي معكوس و كار با Debugger و Disassembler با اين كدها رو به رو مي شويم . برنامه هاي نوشته شده با اسمبلي نسبت به زبانهاي سطح بالا حجم كمتري داشته و با سرعت بيشتري اجرا مي شوند . در واقع با اين زبان هر كاري مي توان كرد . | ||||||||
|
| 3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: |
| | 3 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| مقدمات زبان اسمبلي در اسمبلي بر خلاف زبانهاي سطح بالا با كدهاي واضحي رو به رو نمي شويم . فرمانهايي كه زبانهاي سطح بالا براي دريافت اطلاعات و خروجي آن دارند وجود ندارند . در اين زبان با وقفه ها كار مي كنيم . به عبارتي كار اصلي ما فراخواني وقفه ها است . وقفه چيست ؟ زماني كه كامپيوتر در حال كار است سخت افزارها و نرم افزارها كار خود را انجام مي دهند . در اين حالت اگر سخت افزار يا نرم افزاري به رسيدگي CPU نياز داشته باشد تقاضاي وقفه مي كند . همانطور كه از نام آن پيداست زماني كه CPU يك درخواست وقفه را دريافت مي كند كاري را كه انجام مي دهد به طور موقت رها كرده و به درخواست كننده وقفه پاسخ مي دهد . CPU براي اين كار - آدرس فعلي را در پشته ذخيره مي كند . - شماره وقفه را تعيين مي كند . - به جدول بردار وقفه مراجعه مي كند . اين جدول تعيين مي كند چه رويدادي به چه وقفه اي پاسخ مي دهد . - كنترل به رويداد مناسب داده مي شود . - بعد از اجراي وقفه آدرس از پشته خوانده مي شود و CPU كار قبلي خود را دنبال مي كند . هر وقفه با يك عدد در مبناي 16 بيان مي شود . برخي وقفه ها توابع گوناگوني دارند كه كارهاي گوناگوني نيز انجام مي دهند . كامپايلرهاي اسمبلي [تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ] [تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ] [تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ] | ||||||||
|
| 2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: | Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹) |
| | 4 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| از آنجايي كه ما سيستم عامل ويندوز داريم داشتن يك اسمبلر با رابط گرافيكي بهتر است ( كامپايلر اسمبلي اسمبلر ناميده مي شود ) . پيشنهاد برنامه Flat Assembler است : [تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ] | ||||||||
|
| | 5 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| از آنجايي كه ما سيستم عامل ويندوز داريم داشتن يك اسمبلر با رابط گرافيكي بهتر است ( كامپايلر اسمبلي اسمبلر ناميده مي شود ) . پيشنهاد برنامه Flat Assembler است : [تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ] | ||||||||
|
| | 6 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| كار را با سيستمهاي عددي شروع مي كنيم . گفته مي شود از آنجايي كه انسان ده انگشت داشت سيستم مبناي 10 را ملاك كار خود قرار داد . در اين سيستم 10 رقم از 0 تا 9 در دسترس است . در رياضي مبناهاي ديگري هم وجود دارند كه 3 سيستم عددي در كامپيوتر استفاده مي شود . 1- مبناي 2 يا باينري : در اين سيستم فقط دو رقم 0 و 1 وجود دارد و اعداد با رشته اي از اين ارقام نمايش داده مي شود . 2- مبناي 8 يا اكتال : اين سيستم از 8 رقم استفاده مي كند كه از 0 تا 7 مي باشند . 3- مبناي 16 يا هگزادسيمال : مبناي 16 از 16 رقم بهره مي برد كه از 0 تا 15 هستند . به علت اينكه عددهاي 10 تا 15 در اين سيستم تك رقمي حساب مي شوند براي آنها معادل حرفي از a تا f استفاده مي شود . تبديل مبناها براي تبديل مبناي 10 به بقيه مبناها از تقسيمهاي با خارج قسمت صحيح و باقيمانده استفاده مي شود . تقسيم آن قدر ادامه پيدا مي كند تا خارج قسمت صفر شود . مثال : عدد 24 را در مبناي 8 و عدد 58 را در مبناي 16 بنويسيد : براي تبديل عدد 24 به مبناي 8 3=8÷24 0 ( باقيمانده ) حال از انتها آخرين باقيمانده و به ترتيب خارج قسمتها را حساب مي كنيم كه 30 در مبناي 8 است . توجه كنيد اين عدد ديگر سي خوانده نمي شود و رقم رقم خوانده مي شود يعني مي گوييم سه صفر در مبناي 8 . براي تبديل عدد 58 به مبناي 16 به روش مشابه عمل مي كنيم : 3=16÷58 10 ( باقيمانده ) 10 معادل a مي شود و عدد در مبناي 16 معادل 3a است . مثال : عدد 92 را در مبناي 2 بنويسيد : 46=2÷92 0 ----------- 23=2÷46 0 ----------- 11=2÷23 1 ----------- 5=2÷11 1 ----------- 2=2÷5 1 ---------- 1=2÷2 0 عدد مورد نظر 11100 مي باشد . | ||||||||
|
| 3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: |
| | 7 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| مبناهاي عددي براي تبديل ساير مبناها به مبناي 10 از توان استفاده مي كنيم . اگر دقت كنيد عددي مانند 389 در مبناي 10 به صورت زير است : کد: 3*10^2+8*10^1+9*10^0 کد: 1*2^6+1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0 اعداد منفي در سيستمهاي باينري و ديجيتالي نمايش اعداد منفي در سيستم باينري رياضي مانند نوع مثبت است . به عبارتي عدد بدون علامت به مبناي 2 تبديل شده و علامت اضافه مي شود . اما در سيستمهاي ديجيتالي و كامپيوتر اعداد منفي به اين صورت ذخيره نمي شوند بلكه به صورت مكمل هستند . براي روشن شدن موضوع ابتدا مكمل را در مبناي 10 بيان مي كنيم . ما 4 رقم را ملاك قرار مي دهيم . عددي مثل 691 را در نظر مي گيريم . از آنجايي كه ملاك 4 رقم است عبارت زير را حساب مي كنيم : 691-9999 جواب 9301 است . اين عدد مكمل 9 عدد 691 در چهار رقم است . اگر به مكمل 9 يك واحد اضافه كنيم مكمل 10 به دست مي آيد يعني 9302 . اين عدد در مبناي 4 رقمي ما معادل 691- است . يك سيستم ديجيتالي اين عدد را ذخيره مي كند و براي تفريق اين عدد را با عدد ديگر جمع مي كند ! در سيستم باينري نيز به همين صورت عمل مي شود . معمولا در اينجا از بايت يا 8 بيت استفاده مي شود كه يك عدد 8 رقمي مي باشد . اگر بيت بالاتر 1 باشد عدد منفي و اگر صفر باشد عدد مثبت است . به عنوان مثال عدد 110 به صورت 00000110 مي باشد كه حاصل 00000110-11111111 مكمل 1 آن است ( 11111001 ) و مكمل 2 آن 11111010 خواهد شد ( يك واحد به مكمل 1 اضافه شده است ) . در واقع 11111010 همان 110- است . با توجه به اين نكته بزرگترين عدد مثبتي كه در يك بايت ذخيره مي شود 01111111 بوده كه 127 در مبناي 10 است و كوچكترين عدد 128- خواهد بود . | ||||||||
|
| 3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: |
| | 8 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| استاندارد اسكي ( ASCII ) زماني كه هنوز اينترنت فراگير نشده بود نقل و انتقالها به صورت محلي بود و بيشتر سيستمهاي يك منطقه هم از يك نوع بودند . هر شركتي از كد گذاري مخصوص به خود استفاده مي كرد . كم كم اينترنت گسترش پيدا كرد و مشكلي بروز كرد . فايلي كه توسط سيستم يك شركت ايجاد مي شد روي سيستم شركت ديگر باز نمي شد . در واقع اختلاف كد گذاريها باعث به وجود آمدن اين مشكل شد . سرانجام موسسه ANSI اقدام به ايجاد يك كد گذاري استاندارد نمود و بسياري از شركتها به اين استاندارد پيوستند . اين استاندارد ASCII نام دارد . در برنامه نويسي كدهاي اين استاندارد كاربرد زيادي دارد . | ||||||||
|
| 2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: | Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹) |
| | 9 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| ثباتها مهمترين جز كامپيوتر كه در برنامه نويسي اسمبلي با آن سر و كار داريم ثباتهاي پردازنده هستند . اين ثباتها براي انجام عمليات و فراخواني وقفه ها استفاده مي شوند . ثباتهاي عمومي 16 بيتي عبارتند از : ax اين ثبات در اعمالي كه نياز به ورودي و خروجي دارند استفاده مي شود . بخش پر ارزش اين ثبات ah و بخش كم ارزش آن al نام دارد . نوع 32 بيتي آن هم eax ناميده مي شود . bx اين ثبات به عنوان ثبات پايه معروف است و بيشتر به عنوان انديس در توسعه آدرس استفاده مي شود . bx هم داراي دو قسمت bl و bh است و نوع 32 بيتي آن ebx است . cx به عنوان ثبات شمارنده در كنترل حلقه ها و شيفت دادن استفاده مي شود . داراي دو بخش cl و ch است و نوع 32 بيتي آن ecx نام دارد . dx با نام ثبات داده معروف است و در ضرب و تقسيم با مقدارهاي بزرگ و بعضي ورودي و خروجيها استفاده مي شود . داراي دو بخش dl و dh بوده و نوع 32 بيتي آن edx نام دارد . | ||||||||
|
| 2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: | Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹) |
| | 10 | ||||||||
| سمت: سرپرست ارشد تالار كامپيوتر و اينترنت تاریخ عضویت: مرداد ۱۳۸۸ وضعیت : آفلاین است. پستها: 1,145 تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
| سگمنتها و ثباتهاي سگمنت برنامه نويسي اسمبلي به صورت سگمنت ( Segment ) است . هر سگمنت بخشي از حافظه و ضريبي از 16 است . چهار نمونه سگمنت وجود دارد : سگمنت كد ( Code Segment ) كدهاي اجرايي برنامه در اين قسمت قرار مي گيرند . برنامه مي تواند شامل چن سگمنت كد باشد . سگمنت داده ( Data Segment ) داده هاي برنامه در اين قسمت هستند . برنامه همچنين مي تواند شامل چند سگمنت داده باشد . سگمنت پشته ( Stack Segment ) آدرسهاي برگشت در اين قسمت قرار مي گيرند . سگمنت اضافي ( Extra Segment ) اين قسمت براي كار بر روي رشته و مديريت آدرسها است . ثباتهاي سگمنت در بالا ثباتهاي عمومي معرفي شدند . حال ثباتهاي سگمنت را بررسي مي كنيم . ثباتهاي سگمنت cs - ds - ss و es هستند كه نوع 32 بيتي آنها ecs - eds - ess و ees نام دارند . هر كدام از اين ثباتها آدرس يك سگمنت را در خود نگه مي دارد كه عبارتند از : cs : شامل آدرس سگمنت كد است . ds : آدرس سگمنت داده را نگه مي دارد . ss : آدرس سگمنت پشته را در خود دارد . es : آدرس سگمنت اضافي را در خود نگه مي دارد . ویرایش توسط Kowongo : ۱۰ مرداد ۱۳۸۹ در ساعت ۴:۱۵ ب.ظ | ||||||||
|
| یک کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند: | Ryanblack (۱۱ مرداد ۱۳۸۹) |
![]() |
| برچسب ها |
| نويسي, اسمبلي, به, برنامه, زبان |
| کاربران در حال دیدن موضوع: 2 نفر (0 عضو و 2 مهمان) | |
| ابزارهای تاپیک | جستجو در تایپک |
| نحوه نمایش | |
| |