تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 4 1234 آخرآخر
نمايش نتايج 1 به 10 از 32

نام تاپيک: آموزش Assembly

  1. #1
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    13 آموزش Assembly

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

  2. #2
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    11 مبحث اول: نمای کلی

    نمای کلی:
    زبان های برنامه نوبیسی به طور کلی چند دسته اند:
    1- زبان ماشین (Machine Language):

    این زبان، زبانیه که کامپیوتر مستقیما اونو میفهمه، چیزی نیست به جز یه سری 0 و 1 که پشت سر هم ردیف شدند! هر کامپیوتری بستگی به طراحی cpuی خودش یه زبان ماشین مخصوص خودشو داره. اصطلاحا زبان ماشین وابسته به ماشین (Machine Dependent) هست. مثلا در زبان یک ماشین ممکنه دستور 01011011 به معنی دریافت یک عدد باشه، دستور 10111011 به معنیه جمع دو عدد و دستور 11101000 به معنیه چاپ. پس:

    01011011
    01011011
    10111011
    11101000
    این برنامه در این ماشین دو عدد میگیره، اونارو با هم جمع میکنه و نتیجه رو چاپ میکنه.
    کار با ای زبان خیلی سخته چون وارد کردنش وقت گیره، امکان اشتباه بالاست، ناخواناست یعنی کسی این 0 و 1 ها رو ببینه چیزی نمیفهمه!، و به یاد سپردن دستوراتش تقریبا غیر ممکنه.
    2- زبان اسمبلی (Assembly) یا زبان سطح پایین:

    برای هر دستور زبان ماشین اگه یه اسم در نظر بگیرید میشه زبان ماشین! مثلا در مثال قبل فرض کنیم توی اسمبلی اون ماشین برای دستور دریافت یک عدد کلمه ی IN در نظر گرفته بشه، کلمه ی ADD برای جمع، و کلمه ی PRINT برای چاپ نتیجه. برنامه ی قبل به صورت زیر در خواهد آمد:


    IN
    IN
    ADD
    PRINT
    این برنامه خوانا تره، راحت تر میشه واردش کرد یا به خاطر سپرد. ولی همچنان Machine Dependent هست، سخته و البته هنوز ناخواناست.
    3-زبان های سطح بالا (High Level Language (HLL
    :
    این زبان ها به زبان انگلیسی نزدیکترند، قابل فهم ترند، ممکنه یه زبان سطح بالا داشته باشیم که مثال قبل در اون به صورت زیر در بیاد:

    Get a,b
    Print a+b
    کسی که برنامه نویسی هم ندونه میتونه بفهمه این برنامه چه کار میکنه!
    کار با این برنامه خیلی آسون تره ولی برای برنامه نویس، کامپیوتر برای اینکه این برنامه رو بفهمه احتیاج به یه مترجم داره که این کد رو تبدیل کنه به همون کد ماشین. به این برنامه کامپایلر میگویند.
    مهمترین خاصیت HLLها Machine Independent بودن اونها هست. یعنی به ماشین وابسته نیستند، این برنامه روی هر کامپیوتری میتونه اجرا بشه، فقط کامپایلر متناسب با اون ماشینو میخواد، در حالی که کد ماشینی که اول بحث داشتیم فقط روی ماشین فرضی ما جواب میده!

  3. #3
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    پيش فرض

    پس ما چرا میخوایم اسمبلی یاد بدیم؟؟ در بحث شرکت کنید. نظرتونو راجع به این سوال بنویسید.

  4. #4
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    پيش فرض

    سوتی های املایی یا دستوریو بگید تا ویرایش کنم!
    اگر جایی نامفهوم بود بگید تا بیشتر توضیح بدم.

  5. #5
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    11 مبحث دوم: کاربرد اسمبلی

    کاربرد اسمبلی:

    سوال کرده بودم که چرا اسمبلی ناغافل؟؟
    مسلما امروزه اسمبلی کاربردای خاص داره، مثلا کسی نمیاد برنامه ای که با 10 خط میشه در یک HLL نوشت در اسمبلی بنویسه. چون ممکنه مجبور بشه 10 صفحه برنامه بنویسه!
    بعضیا شاید بگند برای کرک کردن، یکی از کاربردای خاصش امروزه همینه. بعضی برنامه ها قفل دارند، مثلا Registration میخواند تا به نسخه ی کامل تبدیل بشند. این مرحله ی Registration مسلما یه قطعه برنامه هست. کرکرها در سخت ترین حالت کد ماشین این برنامه رو DisAssemble میکنند، یعنی توسط یک برنامه به نام DisAssembler کدای ماشینو تبدیل به اسمبلی میکنند، بین کدای اسمبلی که به دست میارند اون قطعه ی Regisrtation را پیدا میکنند و اونو حذف میکنند. البته گفتنش خیلی آسونه ولی در عمل کار وحشتناک سختیه. به این روند مهندسی معکوس (Reverse Engineering) میگویند.
    کاربرد اساسی اسمبلی امروزه موثرترین پیاده سازی هستش، چرا؟ برنامه ای که در مبحث اول گفتم رو نگاه کنید، کد ماشینش اگه با اسمبلی پیاده سازی بشه همون چهار خط 0 و 1 هستش، یعنی 4 بایت. ولی اون 2 خط آخر که با یه HLL نوشته شده ممکنه 6 تا 8 خط کد ماشین تولید کنه، خط های اضافه بعد از کامپیل برای این تولید میشند که کامپایلر به هر حال نابغه که نیست! برای برنامه ای که شما مینویسید یا کس دیگه ای، کامپایلر جوری طراحی شده که در حالت کلی بازده مناسبی داشته باشه، برای همین بعضی کدای اضافی تولید میکنه که باعث میشه موثرترین پیاده سازی رو نداشته باشیم. در حالت متوسط کد ماشینی که توسط HLL و کامپایلر تولید میشه 1.5 تا 2 برابر کدیه که از اسمبلی تولید میکنه.
    اسمبلی به هیچ وجه منسوخ نشده و هنوز در زبان های سطح بالا(HLL) روند سویچ به اسمبلی در نظر گرفته میشود. یعنی برنامه بره جلو، برسه یه جایی ، بپره به اسمبلی، یک سری کار تو اسمبلی انجام بده و دوباره بپره به بدنه ی اصلی برنامه.
    کاربرد خیلی مهم دیگه ی او موثرترین استفاده از سخت افزار هستش. شما با 4 خط کد اسمبلی میتونید یه پیکسل مشخص در صفحه رو به رنگی که میخواید در بیارید، در واقع شما میتونید مستقیما با سخت افزارتون حرف بزنید! شما به تک تک اجزای سخت افزارتون دسترسی دارید. مثلا: MOV Cx,2 ، این دستور واقعا مقدار 2 را در یکی از حافظه های CPU قرار میده! همچین کاری رو نمیتونید با یه HLL بکنید.
    یاد گرفتن اسمبلی دید واقعی نسبت به کامپیوتر بهتون میده و میتونید کامپیوتر رو درک کنید!
    خیلی میکرو کنترلر ها هم اسمبلی مخصوص خودشونو دارند (هر cpu اسمبلی مخصوص خودشو داره.) پس یاد گرفتن اسمبلی کامپیوترای خودتون میتونه کمک کنه که بعدا اسمبلی cpu های دیگه مثلا میکروکنترلر ها رو بهتر بفهمید. البته جالبه که برای بعضی میکروکنترلر ها زبان سطح بالا مثلا C در نظر گرفته شده! خیلی جالبه.
    Last edited by Blacklord; 13-02-2008 at 00:18.

  6. #6
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    11 مبحث سوم: پیشنیازها: سیستم اعداد

    پیشنیازها:
    تو این بخش میخوام خیلی سریع چیزایی که برای یاد گرفتن اسمبلی نیاز دارید رو براتون بگم.
    اول خیلی سریع مروری بر این میکنیم که کامپیوتر چطوری با داده ها برخورد میکنه؟
    کامپیوتر یک سیستم مداری هست. توی این سیستم قطعات زیادی به کار رفته، ولی به طور خلاصه کل سیستم بر مبنای یک سری سویچ کار میکنه. حافظه ها یک سری ترانزیستور مجتمع هستند و ترانزیستورا سویچ الکترونیکی هستن، یا برق رو عبور میدند یا نمیدند. به دلیل همین محدودیت و البته یک سری محاسن دیگه سیستم دودویی (Binary) اساس کار کامپیوتر در نظر گرفته شد. ما با این سیستم تو اسمبلی خیلی کار داریم، پس مجبوریم یه کم توضیحش بدیم.
    سیستم اعداد:
    سیستمی که ما انسان ها در فعالیت های روزانه ازش استفاده میکنیم، سیستم دهدهی (Decimal) هست. داستان از انگشتان دستتون شروع میشه!! اونایی که در ابتدا شرو به شمارش کردند با کمک دستاشون برای شمردن تا عدد 10 مشکلی نداشتند، ولی برای شمردن 43 ، چهار بار همه ی انگشتها رو میشمردند و به ازای هر دفعه که انگشتاشون تموم میشد یک علامت یه جا میزدند و دوباره از انگشت اول شروع میکردند. این شد پایه سیستمی که تا همین امروز ما ازش استفاده میکنیم. به این سیستم ، سیستم پایه ده (Base 10) هم میگویند.
    حالا سیستم یایه دو، فکر کنید کلا دو تا انگشت داشتید!! برای شمردن 3 چه کار میکردید؟
    2 تاشو میشمردید، یه علامت میزدید، و یکی دیگه براتون میموند. یکی باقیمانده رو با عدد 1 نشون میدادید، و به جای علامتی که زدید یک دانه 1 میذاشتید بغلش. عددتون نهایتا میشد 11
    تبدیل از مبنای 10 به 2:
    راه حل کلی برای تبدیلات از مبنای 10 به مبناهای دیگر تقسیمات متوالی هست. با یک مثال یاد بگیرید تا زود ازش رد بشیم!
    49 رو میخوام تبدیل کنم به مبنای 2:

    همونطور که میبینید این تقسیمات متوالی بر 2 رو باید تا جایی ادامه بدید که خارج قسمت صفر بشه، عدد نهایی باقیمانده ها از آخر به اول خواهد بود. عدد نهایی اینجا شد 110001
    تعریف بیت:
    به هر رقم در کل عدد، یک بیت میگویند. یک بیت میتونه صفر یا یک باشه. هر بیت دارای ارزشی هست که این ارزش از راست به چپ زیاد میشه. کم ارزشترین بیت، بیت سمت راست و پر ارزشترین بیت، بیت سمت چپ هست. ارزش اولین بیت از سمت راست 0^2 یعنی 1 هست، دومین بیت 1^2 یعنی 2، سومین بیت 2^2 یعنی 4، همینطور تا انتهای عدد.
    در کامپیوتر هر 8 بیت را در یک دسته قرار میدهند و به این عدد 8 بیتی یک بایت میگویند.
    تبدیل از مبنای 2 به 10:
    روش کلی برای تبدیل به مبنای 10ضربهای متوالی هست، برای این کار مقدار هر بیت رو در ارزشش ضرب میکنیم و نتیجه ها را با هم جمع میکنیم:
    مثلا 110001 رو میخوایم به مبنای 10 تبدیل کنیم:
    49 = 32 + 16 + 1 = 5^2*1 + 4^2*1 + 3^2*0 + 2^2*0 + 1^2*0 + 0^2*1

    مبناهای کمکی:
    مبناهای 8 و 16 به دلیل دارا بودن خاصیتی به عنوان مبناهای کمکی استفاده میشوند.
    اعداد 0 تا 15 سیستم Decimal , HexaDecimal , Binary رو به خاطر بسپارید، خیلی کارشون داریم:
    Decimal , HexaDecimal , Binary
    ========================
    0 , 0 , 0000
    1 , 1 , 0001
    2 , 2 , 0010
    3 , 3 , 0011
    4 , 4 , 0100
    5 , 5 , 0101
    6 , 6 , 0110
    7 , 7 , 0111
    8 , 8 , 1000
    9 , 9 , 1001
    10 , A , 1010
    11 , B , 1011
    12 , C , 1100
    13 , D , 1101
    14 , E , 1110
    15 , F , 1111
    خاصیت باحال مبنای 16 یا همون HexaDecimal اینه که هر 4 بیت یک عدد Binary معادل 1 بیت عدد معادل Hex اون هست. 10110101 یه عدد باینری هست. با استفاده از روشهای بالا برای تمرین ابتدا با ضربهای متوالی این عدد رو به مبنای 10 تبدیل کنید ، بعد با استفاده از تقسیمات متوالی به مبنای 16 یا همون Hex (راهنمایی: اگر باقیمانده در تقسیم مثلا 13 شد، رقم D را باید بنویسید.)
    ولی بدون این کار من بهتون میگم جواب میشه B5 چون چهاربیت سمت راست معادل 5hex هست و چهاربیت سمت چپ معادل Bhex هست.

  7. #7
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    پيش فرض

    باریکلا بچه ها ماشالا چقدر فعالند!!

  8. #8
    پروفشنال mohsen_sir's Avatar
    تاريخ عضويت
    Sep 2007
    پست ها
    822

    پيش فرض

    باریکلا بچه ها ماشالا چقدر فعالند!!
    دستت درد نكنه
    خواهش ميكنم خوب داريم ميخونيم ديگه!!

  9. #9
    آخر فروم باز MAXXX's Avatar
    تاريخ عضويت
    May 2006
    پست ها
    1,990

    پيش فرض

    ممنون منم دارم میخونم
    ترم قبل اسمبلی رو پاس کردم
    درس بسیار ثقیل ولی شیرینی بود آخر هم 19 گرفتم (راستش سوالا رو از استاد گرفته بودیم )
    Last edited by MAXXX; 13-02-2008 at 02:01.

  10. #10
    داره خودمونی میشه Blacklord's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    اصفهان
    پست ها
    136

    11 مبحث چهارم: پیشنیازها: پردازنده ها

    پردازنده ها:
    تو این بخش یه توضیح اجمالی درباره ی کلیت پردازنده(CPU,CentralProcessUnit) ها میدم و بعد پردازنده هایی که باهاشون کار داریم رو معرفی میکنم. این که تموم شد میریم سراغ خود اسمبلی!!

    سیستم های مبتنی بر پردازنده ها به طور کلی به این صورت کار میکنند:
    داده ها رو از بخش ورودی میگیرند، طبق برنامه ای که به پردازنده داده شده روی داده پردازش رو انجام میدند، اطلاعات که همون داده ی پردازش شده هست رو در خروجی که داخل برنامه مشخص شده قرار میدند.


    پیاده سازی این عمل در واقعیت احتیاج به یک سری ابزار داره که پردازنده ها به اونا تجهیز شدند:
    اجزای پردازنده:
    1- برای دریافت ورودی یا ارسال خروجی در پردازنده ها بخشی در نظر گرفته شده به نام گذرگاه داده (Data Bus) . پیاده سازیش در واقعیت یک سری پین هست. این پین ها در واقع هر کدوم سر یک سیم هستند که با صفر یا یک بودن این سیم ها اطلاعات با پردازنده رد و بدل میشه. اهمیت این گذرگاه در تاثیرش روی سرعت پردازنده هست. اگه پردازنده ای 8 تا از این پین ها
    داشته باشه، در هر سیکل زمان 8بیت اطلاعات رو میتونه پردازش کنه، اصطلاحا میگند پردازنده 8بیتی هستش. این گذرگاه تنها راه ورود و خروج اطلاعات به پردازنده هست. پس CPU یا همون پردازنده از کجا بفهمه که در این لحظه ی خاص داده هارو از کجا بخونه یا کجا بنویسه؟؟



    2- در جواب این سوال در cpu بخشی در نظر گرفته شده به نام گذرگاه آدرس(Address Bus) که این گذرگاه هم یک سری پین هست که عددی که تولید میکنه آدرس پورتی هست که اطلاعات با اون رد و بدل میشه. مثلا پردازنده ای که 20 پین آدرس داره میتونه 20^2 آدرس تولید کنه.
    3- در عکس دو پین دیگه هم هست با نام های RD و WR. میتونید رابطشونو با گذرگاه آدرس پیدا کنید؟؟ اگه نتونید جواب این سوالو پیدا کنید دیگه تاپیک رو ادامه نمیدم!!! یه کم فکر کنید، هر چی به ذهنتون رسید بگید.
    راهنمایی این که باس داده دوطرفه هست، یعنی هم میتونه داده بگیره و هم اینکه بده.
    4- واحد محاسبه و منطق(ALU,ArithmeticLogicUnit) : انجام عملیات ریاضی مثل جمع، تفریق و .. و عملیات منطقی مثل AND,OR,... توسط این واحد انجام میشه.
    5- واحد کنترل (CU,ControlUnit) : کار این بخش کنترل بقیه اجزا است، یکی از مهمترین کارهاش رمزگشایی دستور هست. تو این بخش مراحلی که برای اجرای هر دستور باید انجام بشه ذخیره شده. مثلا در کامپیوتر عمل تفریق توسط عمل جمع انجام میشه. یعنی وقتی برنامه در cpu به دستور SUB میرسه در این واحد یک سری مراحل که عمل جمع هم جزوش هست پیگیری میشه. کی میتونه این مراحلو توضیح بده؟ یکی بده چون من قصد ندارم بدم!!


    6- ثبات(Register) ها که در واقع حافظه های داخلی cpu هستند و برای کارهای مختلف تو برنامه استفاده میشند.
    7- پرچم(Flag) ها که هر کدوم یک بیت هستند که بر اساس صفر یا یک بودن اونا خود cpu یا روند برنامه تصمیم گیری میکند. مثلا پرچمی به نام Zero Flag وجود دارد که نشان میدهد که نتیجه ی آخرین عملیات صفر بوده.

    این بخش ها رو تو مبحث بعدی به صورت تخصصی تر روی cpu که میخوام اسمبلی شو بهتون یاد بدم بیشتر توضیح میدم.

    خوب، اینم پیشنیازها، تو مبحث بعدی میرسیم به 8086 و بعد از اون میتونیم شروع کنیم به برنامه نویسی!

    2 تا سوال کردم، اگه میخواید تاپیک ادامه پیدا کنه جواب بدید، نترسید که جوابتون اشتباه باشه، مهم اینه که فعال باشید وگرنه بعد 2 تا مبحث دیگه ناخودآگاه اوت میشید!!!
    Last edited by Blacklord; 14-02-2008 at 11:31.

صفحه 1 از 4 1234 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •