پاسخ
قدیمی ۷ مرداد ۱۳۸۹, ۱۰:۴۶ ق.ظ   1
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض برنامه نويسي به زبان اسمبلي

توضيح : هر وقت تاپيكي در مورد برنامه نويسي ايجاد كردم به مشكلاتي برخورد كردم كه مجبور شدم آن را رها كنم . با توجه به تجربه هاي قبلي اين بار با شيوه اي متفاوت شروع كردم .
نكته : از آموزش نترسيد . اگر منبع مناسبي داريد شروع كنيد حتي اگر مبتدي باشيد . آموزش روش خوبي براي ياد گرفتن هم است .
  پاسخ با نقل قول
3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۷ مرداد ۱۳۸۹, ۱۰:۵۰ ق.ظ   2
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

چرا اسمبلي ؟
امروزه زباني مانند C يا ++C سرعت بسيار زيادي در اجراي برنامه ها دارند و جايگزين اسمبلي شده اند . با توجه به اينكه اسمبلي يك زبان سنگين بوده و وابسته به پلتفرم است سوال اين است چرا اسمبلي ؟
در مهندسي معكوس و كار با Debugger و Disassembler با اين كدها رو به رو مي شويم . برنامه هاي نوشته شده با اسمبلي نسبت به زبانهاي سطح بالا حجم كمتري داشته و با سرعت بيشتري اجرا مي شوند . در واقع با اين زبان هر كاري مي توان كرد .
  پاسخ با نقل قول
3 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۷ مرداد ۱۳۸۹, ۱۱:۰۲ ق.ظ   3
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

مقدمات زبان اسمبلي

در اسمبلي بر خلاف زبانهاي سطح بالا با كدهاي واضحي رو به رو نمي شويم . فرمانهايي كه زبانهاي سطح بالا براي دريافت اطلاعات و خروجي آن دارند وجود ندارند .
در اين زبان با وقفه ها كار مي كنيم . به عبارتي كار اصلي ما فراخواني وقفه ها است .

وقفه چيست ؟
زماني كه كامپيوتر در حال كار است سخت افزارها و نرم افزارها كار خود را انجام مي دهند . در اين حالت اگر سخت افزار يا نرم افزاري به رسيدگي CPU نياز داشته باشد تقاضاي وقفه مي كند .
همانطور كه از نام آن پيداست زماني كه CPU يك درخواست وقفه را دريافت مي كند كاري را كه انجام مي دهد به طور موقت رها كرده و به درخواست كننده وقفه پاسخ مي دهد .
CPU براي اين كار
- آدرس فعلي را در پشته ذخيره مي كند .
- شماره وقفه را تعيين مي كند .
- به جدول بردار وقفه مراجعه مي كند . اين جدول تعيين مي كند چه رويدادي به چه وقفه اي پاسخ مي دهد .
- كنترل به رويداد مناسب داده مي شود .
- بعد از اجراي وقفه آدرس از پشته خوانده مي شود و CPU كار قبلي خود را دنبال مي كند .
هر وقفه با يك عدد در مبناي 16 بيان مي شود . برخي وقفه ها توابع گوناگوني دارند كه كارهاي گوناگوني نيز انجام مي دهند .

كامپايلرهاي اسمبلي
[تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ]

[تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ]

[تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ]
  پاسخ با نقل قول
2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۸ مرداد ۱۳۸۹, ۱۰:۱۶ ق.ظ   4
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

از آنجايي كه ما سيستم عامل ويندوز داريم داشتن يك اسمبلر با رابط گرافيكي بهتر است ( كامپايلر اسمبلي اسمبلر ناميده مي شود ) .
پيشنهاد برنامه Flat Assembler است :
[تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ]
  پاسخ با نقل قول
2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹)
قدیمی ۸ مرداد ۱۳۸۹, ۱۰:۱۶ ق.ظ   5
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

از آنجايي كه ما سيستم عامل ويندوز داريم داشتن يك اسمبلر با رابط گرافيكي بهتر است ( كامپايلر اسمبلي اسمبلر ناميده مي شود ) .
پيشنهاد برنامه Flat Assembler است :
[تنها کاربران توانایی مشاهده لینک ها رو دارند ، عضو شوید ]
  پاسخ با نقل قول
2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹)
قدیمی ۸ مرداد ۱۳۸۹, ۱۰:۳۶ ق.ظ   6
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

كار را با سيستمهاي عددي شروع مي كنيم .
گفته مي شود از آنجايي كه انسان ده انگشت داشت سيستم مبناي 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 عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۸ مرداد ۱۳۸۹, ۱:۰۵ ب.ظ   7
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

مبناهاي عددي
براي تبديل ساير مبناها به مبناي 10 از توان استفاده مي كنيم .
اگر دقت كنيد عددي مانند 389 در مبناي 10 به صورت زير است :
کد:
3*10^2+8*10^1+9*10^0
علامت ^ براي توان است . حال اگر يك مبناي ديگر داشته باشيم به همين صورت عمل مي شود . به عنوان نمونه عدد 1100101 در مبناي 2 :
کد:
1*2^6+1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0
كه معادل با 101 در مبناي 10 است .

اعداد منفي در سيستمهاي باينري و ديجيتالي

نمايش اعداد منفي در سيستم باينري رياضي مانند نوع مثبت است . به عبارتي عدد بدون علامت به مبناي 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 عزیز تشکر کرده اند:
romita (۸ مرداد ۱۳۸۹), Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۹ مرداد ۱۳۸۹, ۹:۰۶ ق.ظ   8
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

استاندارد اسكي ( ASCII )
زماني كه هنوز اينترنت فراگير نشده بود نقل و انتقالها به صورت محلي بود و بيشتر سيستمهاي يك منطقه هم از يك نوع بودند .
هر شركتي از كد گذاري مخصوص به خود استفاده مي كرد . كم كم اينترنت گسترش پيدا كرد و مشكلي بروز كرد . فايلي كه توسط سيستم يك شركت ايجاد مي شد روي سيستم شركت ديگر باز نمي شد . در واقع اختلاف كد گذاريها باعث به وجود آمدن اين مشكل شد .
سرانجام موسسه ANSI اقدام به ايجاد يك كد گذاري استاندارد نمود و بسياري از شركتها به اين استاندارد پيوستند . اين استاندارد ASCII نام دارد . در برنامه نويسي كدهاي اين استاندارد كاربرد زيادي دارد .

  پاسخ با نقل قول
2 کاربر برای این پست سودمند از Kowongo عزیز تشکر کرده اند:
Ryanblack (۱۱ مرداد ۱۳۸۹), Supervisor (۱۵ مرداد ۱۳۸۹)
قدیمی ۹ مرداد ۱۳۸۹, ۵:۲۶ ب.ظ   9
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

ثباتها
مهمترين جز كامپيوتر كه در برنامه نويسي اسمبلي با آن سر و كار داريم ثباتهاي پردازنده هستند . اين ثباتها براي انجام عمليات و فراخواني وقفه ها استفاده مي شوند . ثباتهاي عمومي 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
 
Kowongo آواتار ها
 
سمت: سرپرست ارشد تالار كامپيوتر و اينترنت
تاریخ عضویت: مرداد ۱۳۸۸
وضعیت : آفلاین است.
پستها: 1,145
تشکر: 509
1,760 بار در 1,053 پست از ایشان تشکر شده است
فعالیت سابقه
15/20 20/20
Today پستها
sssss1145



پیش فرض پاسخ : برنامه نويسي به زبان اسمبلي

سگمنتها و ثباتهاي سگمنت
برنامه نويسي اسمبلي به صورت سگمنت ( 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 مهمان)
 
ابزارهای تاپیک جستجو در تایپک
جستجو در تایپک:

جستجوی پیشرفته
نحوه نمایش

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

BB code هست فعال
شکلک ها فعال است
کد [IMG] فعال است
کد HTML غیر فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال