0
02133939731

وبلاگ مدرسه پیشرفت

زبان اسمبلی چیست؟ آموزش اسمبلی به زبان ساده

زبان اسمبلی یک زبان برنامه‌نویسی سطح پایین (Low-level Programming Language) است که دستوراتش معادل کدهای ماشین (Machine Code) هستند. به عبارت دیگر، مجموعه‌ای از دستورات باینری (Binary) که مقادیری را به داخل رجیسترهای CPU (یا ریزپردازنده‌های دیگر) می‌ریزند یا از آن برمی‌دارند.

مقدمه

یک ریزپردازنده، یک ماشین حساب مکانیکی است. یک ریزپردازنده تعدادی رجیستر (Register) مشخص دارد که می‌توانیم آنها را مکانی برای نگهداری اعداد در نظر بگیریم. دستورات به صورت کدهای ماشین به یک ریزپردازنده داده می‌شوند. هر دستور به صورت مجموعه‌ای از بیت‌های باینری نمایش داده می‌شود (مجموعه‌ای از ۰ و ۱ها). برای مثال، در زیر یک خط کد ماشین می‌بینید:

چند بیت اول (۱۰۱۱۰) دستور کپی کردن یک مقدار در یک رجیستر است.  سه رقم دیگر (۰۰۰) رجیستری را مشخص می‌کنند که می‌خواهیم مقدار را در آن کپی کنیم. بقیه‌ی ارقام (۰۱۱۰۰۰۰۱)، مقداری را نشان می‌دهند که می‌خواهیم کپی کنیم.

البته ۱۰۱۱۰ بی‌معناست و کامپیوتر “نمی‌داند” که این ارقام در واقع می‌گویند “این مقدار را کپی کن”. پردازنده به گونه‌ای طراحی می‌شود که مجموعه‌ای از پالس‌های الکتریکی، که ۱۰۱۱۰ تعیین می‌کند (وصل، قطع، وصل، وصل، قطع)، نتیجه‌ی موردنظر را به ما بدهد. به همین دلیل از کلمه‌ی “مکانیکی” استفاده می‌شود.

حالا تصور کنید که می‌خواهید دستوری برای پردازنده بنویسید. خیلی راحت می‌توانید ببینید که نوشتن هزاران خط ۰ و ۱ می‌تواند چقدر خسته‌کننده و پر از خطا باشد. راه‌حل این مشکل، زبان برنامه نویسی اسمبلی است. زبان اسمبلی جایگزین‌هایی را برای کدهای طولانی باینری در نظر می‌گیرد که برای انسان قابل فهمند.

 

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.

لورم ایپسوم

 

مثال

برای مثال، اگر ۱۰۱۱۰ به معنای “مقدار را جابه‌جا کن (Move the Value)” باشد، می‌توانیم آن را کوتاه‌تر کنیم و از دستور MOV استفاده کنیم.

هم‌چنین می‌توانیم به رجیستر ۰۰۰ نامی بدهیم که یادآوری آن راحت‌تر باشد (در این مورد، نام این رجیستر را AL گذاشتیم).

در نهایت، می‌توانیم مقدار را به دستگاه اعداد (Numbering System) دیگری ببریم، مثل دسیمال (۹۱) یا هگزادسیمال (۶۱). آن وقت کد بالا به این صورت تغییر می‌کند:

MOV AL, 61

وقتی کل برنامه را به این روش نوشتیم، آن وقت assembler می‌تواند هر خط کد را به مشابه باینری مناسب آن تبدیل کند.

کامپیوترها با اجرای میلیون‌ها دستور کوچک این‌ چنینی در ثانیه کار می‌کنند (محاسبات را انجام می‌دهند، داده‌ها را جابه‌جا یا منتقل می‌کنند).

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

 

منابع یادگیری زبان اسمبلی

منابع آنلاین

مراجع

  • لیست دستورات X86: لیستی کامل از دستورات معماری X86، به همراه نکاتی درباره‌ی زمان اضافه شدن هر کدام
  • مرجع دستورات و Opcode برای معماری X86
  • چیت‌شیت (Cheat Sheet) زبان اسمبلی برای معماری X86

ابزارها

اسمبلرها- اسمبلرهای زیادی موجودند. در زیر لیستی از معروف‌ترین اسمبلرهای متن باز و رایگان را مشاهده می‌کنید:

  • NASM
  • FASM
  • YASM
  • GASM

IDEها (محیط یکپارچه‌ی توسعه‌ی نرم افزار)

  • SASM: یک IDE ساده و کراس‌پلتفرم (Cross-platform) برای زیان‌های اسمبلی NASM، MASM، GAS، FASM
  • Fresh IDE: IDE ویژوالِ زبان اسمبلی که دارای اسمبلر FASM است
  • WinAsm Studio: یک IDE رایگان که با استفاده از آن می‌توانید به کمک Assembler برای ویندوز ۳۲-بیت و DOS 16-بیت برنامه بنویسید
  • Visual MASM

انجمن و یادگیری مداوم

  • انجمن Assembly در In.Code
  • انجمن MASM
  • انجمن‌های Assembly Language and Machine Code در Hack Forums 

کتاب‌ها

  • The Art of Assembly Language (Online Edition): یکی از مشهورترین کتاب‌های موجود برای زبان اسمبلی است که انتشارات No Strach Press آن را به چاپ
  • رسانده است. شاید دلتان بخواهد نگاهی به کتاب‌های دیگر این نویسنده نیز بیندازید: Write Great Code: Volume 1: Understanding the Machine و Write
  • Great Code: Volume 2: Thinking Low-Level, Writing High-Level
  • Assembly Language Step-by-Step: Programming with Linux
  • Professional Assembly Langiuage
  • Assembly Language for x86 Processors
  • Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX
  • ntroduction to 64 Bit Assembly Programming for Linux and OS X: Third Edition – for Linux and OS X
  • Introduction To 80X86 Assembly Language And Computer Architecture
  • Assembly Language Programming: For PC and Laptop Computers.

توسعه‌دهندگان چه می‌کنند و چقدر درآمد دارند؟ | Stack Overflow

سایت Stack Overflow در نظرسنجی سالانه‌اش سعی کرده تا ترندهای برنامه‌نویسی جهان را شناسایی کند. در بخش سوم به این می‌پردازیم که توسعه‌دهندگان چطور کار می‌کنند. بخش دوم دربارهٔ زبان‌ها و فناوری‌های مورد استفادهٔ توسعه‌دهندگان و میزان مصرف کافئین آنها بود، و بخش اول به این می‌پرداخت که اساسا توسعه‌دهنده چطور آدمی است.
برای کسانی که کد می‌نویسند چشم‌انداز کاری همیشه در حال تغییر است. انواع جدیدی از توسعه‌دهنده پدیدار می‌شوند. توسعه‌دهنده‌های بیشتری به کار از راه دور مشغول می‌شوند (و در نتیجه به شغل‌های بهتر و درآمد بیشتری می‌رسند.) و بیشتر از اغلب حرفه‌ها از کار خود لذت می‌برند، و این مسئله به وضوح خودش را در این نکته نشان می‌دهد که اغلب توسعه‌دهنده‌ها به صورت تفننی و جانبی هم کدنویسی می‌کنند.

اشتغال

نوع اشتغال توسعه‌دهندگان
برای سومین سال متوالی از میان از ۲۴ عنوان توسعه‌دهنده، توسعه‌دهندگان بیشتر از هر چیزی خود را «توسعه‌دهندهٔ تمام‌عیار» یا full-stack دانسته‌اند، یعنی توسعه‌دهنده‌ای که به تمامی لایه‌ها و شاخه‌ها آشنایی دارد و دست‌کم در چند مورد نیز تسلط دارد. در سال‌های اخیر دیده شده که شرکت‌هایی مثل فیسبوک در آگهی‌های استخدام خود به دنبال چنین عنوانی بوده‌اند.

توسعه‌دهندگان ریاضیات

توسعه‌دهندگان زمینه‌های مرتبط با ریاضیات، آمار، داده، و یادگیری ماشینی
با مشاهده رفتار کاربران استک آورفلو در این وبسایت، الگوهایی دربارهٔ انواع جدید و روبه‌رشد توسعه نرم‌افزاری دیده شده است. توسعه‌دهندگان ریاضیات و آمار و یادگیری ماشینی از این دسته هستند. پژوهش داده هم شاخهٔ مرتبطی است که البته کمی جاافتاده‌تر است.

صنعت

صنعت‌هایی که توسعه‌دهنده‌ها در آنها مشغول به کارند، محصولات نرم‌افزاری، وب سرویس، اینترنت، بانکداری، مالی، مدیا، تبلیغات، سرگرمی و بازی، سلامتی، بیوتک، علوم، آموزش، آکادمیک، ارتباطات، مشاوره، دولتی، پژوهش
توسعه‌دهندگان کشورهای توسعه‌یافته احتمال بیشتری دارد که در جایی غیر از قدرت‌های نرم‌افزاری مشغول به کار باشند.

درآمد برحسب فناوری مورد استفاده

درآمد برحسب فناوری مورد استفاده، objective-c, C#, C++, Node.js, SQL, Ruby, Javascript, Java, Python, PHP
فناوری‌های نوظهور یا خاص بیشترین درآمد را دارند. همینطور big data و پردازش ابری (cloud computing). این شاید نشانهٔ کمبود متخصصین فناوری‌های خاص یا نوظهور باشد که باعث می‌شود کارفرما برای استخدام این نیروها هزینهٔ بیشتری کند. و می‌تواند به این مسئله هم برگردد که متخصصین این فناوری‌های نوظهور و خاص معمولا توسعه‌دهندگان سطح‌بالا و کارکشته‌ای هستند.

پردرآمدترین فناوری‌ها، cassandra, F#, Scala, Spark, Rust, Hadoop, Cloud, Redis, Azure, Go, ClojureT کلوژر، هادوپ
درآمد بر اساس قدرت خرید
درآمد بر اساس قدرت خرید، محاسبه بر اساس تعداد همبرگر دوبل (Big Mac)
وقتی بخواهیم کیفیت زندگی را مقایسه کنیم، دیگر دلار و یورو و تومان مهم نیست، همبرگر مهم است. شاخص بیگ مک (Big Mac) اکونومیست نوعی اندازه‌گیریِ برابریِ قدرت خرید است که برای مقایسه ارزش واقعی درآمد در کشورهای مختلف استفاده می‌شود. در این قدرت خرید مردم کشورها بر اساس تعداد همبرگرهای دوبل بیگ مک که سالانه می‌توانند بخرند مقایسه می‌شود.

درآمد برحسب دورکاری

درآمد توسعه‌دهنده برحسب دورکاری
دورکاری جواب می‌دهد! توسعه‌دهنده‌هایی که دورکاری می‌کنند در حدود ٪۴۰ بیشتر از کسانی که هرگز دورکاری نمی‌کنند درآمد دارند. این شکاف در کشورهای درحال توسعه بیشتر می‌شود.

وضعیت اشتغال توسعه‌دهندگان

گر توسعه‌دهنده باشید، بعید است بی‌کار مانده باشید. ٪۹۷.۵ پاسخ‌دهنده‌ها گفته‌اند که دست‌کم به صورت پاره‌وقت شاغل هستند. و حتی شاغلین تمام‌وقت هم از پروژه‌های جانبی دور نمی‌شوند. توسعه‌دهنده‌های شاغل تمام‌وقت به‌طور متوسط هفته‌ای بیشتر از ۶ ساعت صرف پروژه‌های جانبی می‌کنند. توسعه‌دهنده‌های بازنشسته سه برابر این مدت را صرف پروژه‌های جانبی و تفننی می‌کنند. کدنویسی برای خیلی‌ها عشق زندگی‌شان است.

رضایت شغلی

میزان رضایت شغلی توسعه‌دهنده‌ها
٪۷۶ توسعه‌دهنده‌ها می‌گویند که از کارشان دست‌کم راضی‌اند، و ٪۴۰ می‌گویند عاشق کارشان هستند. به‌طور کلی رضایت شغلی توسعه‌دهنده‌ها از خیلی از مشاغل دیگر بیشتر است.

و ظاهرا توسعه‌دنده‌های ایرانی هم بیشترین رضایت شغلی را در دنیا دارند!

رضایت شغلی توسعه‌دهنده بر حسب کشور، ایرانی بالاتری میزان رضایت شغلی
رضایت شغلی برحسب شاخهٔ کاری
رضایت شغلی برحسب شاخه کاری، مدیر محصول، کنترل کیفیت، هوش تجاری، انبارش داده، برنامه‌نویس گرافیک، یادگیری ماشینی، همراه، مدیر، اجرایی
ریاست کردن حس خوبی دارد. رضایت شغلی مدیران ٪۱۶ بیشتر از متوسط است. مدیر محصول هم معمولا کمترین رضایت از کارش را دارد.

 

رضایت شغلی برحسب شاخه کاری، مدیر محصول، کنترل کیفیت، هوش تجاری، انبارش داده، برنامه‌نویس گرافیک، یادگیری ماشینی، همراه، مدیر، اجرایی
ریاست کردن حس خوبی دارد. رضایت شغلی مدیران ٪۱۶ بیشتر از متوسط است. مدیر محصول هم معمولا کمترین رضایت از کارش را دارد.

 

۱۰ دلیل برای یاد گرفتن زبان پایتون

آماده باشید تا عاشق زبان پایتون شوید!!

آماده باشید تا عاشق زبان پایتون شوید!!

ویژگی‌های مختلفی وجود دارد که باعث می‌شود افراد، پایتون را به عنوان اولین زبان برنامه‌نویسی خود انتخاب کنند. این ویژگی‌ها عبارتند از:

  1.  محبوبیت زبان پایتون و کسب درآمد زیاد از طریق آن
  2.  استفاده از زبان پایتون در علم داده
  3.  اسکریپت و اتوماسیون در پایتون
  4. استفاده از پایتون برای داده‌های بزرگ
  5. پشتیبانی پایتون از تست (Testing)
  6.  گرافیک کامپیوتری در پایتون
  7.  استفاده از پایتون در هوش مصنوعی
  8.  استفاده از پایتون در توسعه وب
  9.  سازگار و قابل انتقال بودن
  10.  سادگی و یادگیری آسان

 

اگر قصد یاد گرفتن پایتون را دارید و می‌خواهید مهارت‌های مرتبط با آن را بیاموزید؛ اکنون زمان مناسبی برای شروع است. زبان برنامه‌نویسی پایتون یک زبان جدید و نوظهور است و هنوز بازار کار آن در کشورهای مختلف اشباع نشده است. در چنین شرایطی، شما به عنوان یک متخصص زبان پایتون می‌توانید به راحتی شغل پیدا کرده و درآمد زیادی کسب کنید.

 

۱۰- سادگی و یادگیری آسان

پایتون، زبانی بسیار آسان و ساده است. این زبان بسیار قدرتمند و نزدیک به زبان انگلیسی است.

چه چیزی باعث سادگی زبان پایتون می‌شود؟

  • آزاد و اوپن سورس (open source) بودن
  • سطح بالا بودن
  • زبان مفسر (زبانی که اغلب دستورات آن بدون نیاز به کامپایل کردن، توسط مفسر اجرا می‌شود)
  • اجتماع بزرگی از کاربران

۹- سازگار و قابل انتقال بودن

ویژگی‌های انعطاف‌پذیری و قابل انتقال بودن زبان پایتون به شما اجازه می‌دهد تا بتوانید از این زبان در پلتفرم‌های مختلف استفاده کنید. پایتون توسط اکثر پلتفرم‌های موجود در صنعت، پشتیبانی می‌شود. این زبان روی ویندوز، لینوکس، مکینتاش، سولاریس و… قابل دستیابی است.

۸- توسعه وب

پایتون، دارای مجموعه‌ای از فریم‌ورک‌ها برای توسعه وبسایت‌ است. فریم‌ورک‌های محبوب پایتون عبارتند از: Django، Flask، Pylons و… . این فریم‌ورک‌ها به شما کمک می‌کنند تا اسکریپت‌ها و کدهای خود را سریع‌تر و آسان‌تر بنویسید. اصلی‌ترین دلیلی که این فریم‌ورک‌ها به زبان پایتون نوشته شده‌اند این است که کدهای آن خیلی سریع‌تر و پایدارتر هستند.

همچنین می‌توانید سایر صفحات وب که با فریم‌ورک‌های پایتون نوشته شده‌اند را بررسی کرده و از جزئیات به کار رفته در آنها استفاده کنید. سایت‌هایی مثل اینستاگرام، bit bucket و pinterest از این فریم‌ورک‌ها ساخته شده اند.

۷- هوش مصنوعی

هوش مصنوعی (AI) یک پیشرفت بزرگ در دنیای تکنولوژی است. با استفاده از هوش مصنوعی می‌توانید یک ماشین را مطابق مغز انسان با قدرت تفکر، تجزیه و تحلیل و تصمیم‌گیری طراحی کنید.

علاوه بر این، کتابخانه‎هایی مانند Keras و TensorFlow قابلیت یادگیری را به ماشین اضافه می‌کنند. با استفاده از این کتابخانه‌ها و بدون اینکه برنامه‎نویسی دقیقی انجام شده باشد، ماشین‌ها قدرت یادگیری پیدا می‎کنند. همچنین کتابخانه‎ایی مانند openCV وجود دارد که به دید کامپیوتر یا تشخیص تصویر کمک می‎کند.

۶- گرافیک کامیوتری

پایتون معمولا در پروژه‌های بزرگ، کوچک، آنلاین یا آفلاین به کار می‌رود. از پایتون برای ساخت رابط کاربری گرافیکی (GUI) و برنامه‎های دسکتاپ استفاده می‌شود. برای این کار از کتابخانه Tkinter استفاده می‌کنیم تا راهی سریع و آسان برای ایجاد برنامه‎های کاربردی فراهم شود.

این کتابخانه در توسعه بازی‌ها نیز استفاده می‌شود. همچنین می‎توانید با استفاده از آن، منطق استفاده از ماژول “pygame” که در دستگاه‌های اندروید اجرا می‌شوند را بنویسید.

۵- فریم‌ورک تست

زبان پایتون برای تست کردن و راستی آزمایی تولیدات کمپانی‌ها بسیار مفید است. پایتون، فریم‌ورک‌هایی برای تست کردن برنامه‌ها دارد که با استفاده از این فریم‌ورک‌ها می‌توان نرم‌افزارها را دیباگ کرد. کمک گرفتن از زبان پایتون، سریع‌ترین راهی است که می‌تواند به رفع باگ برنامه‌ها منتهی شود. این زبان دارای تعداد زیادی ابزار و ماژول برای راحت‌تر کردن برنامه‌نویسی است. Selenium و Splinter دو نمونه از این ماژول‌ها هستند.

همچنین زبان پایتون، تست کردن بین پلتفرم‌ها و مرورگرها را از طریق فریم‎ورک های PyTest و Robot Framework ممکن می‌کند. تست کردن و راستی آزمایی، یک کار بسیار حساس و دقیق است و زبان پایتون سرعت این کار حساس را بیشتر می‌کند. بر اساس این دلایل، هر تست کننده نرم‌افزار قطعا باید از پایتون استفاده کند.

۴- استفاده از پایتون برای داده‌های بزرگ

پایتون بسیاری از مشکلات داده‌ها را برطرف می‌کند. می‌توانید از Hadoop در پایتون برای محاسبات موازی استفاده کنید. شما در پایتون یک کتابخانه به نام “Pydoop” دارید و می‎توانید یک برنامه MapReduce را در پایتون بنویسید و اطلاعات موجود در دسته HDFS را پردازش کنید.

کتابخانه‌های دیگری مثل “Dask” و “Pyspark” برای پردازش داده‌های بزرگ وجود دارد. بنابراین، پایتون به شکل گسترده‌ای برای داده‌های بزرگ استفاده می‌شود زیرا به راحتی می‌تواند آنها را پردازش کند.

۳- اسکریپت و اتوماسیون

بیشتر افراد فکر می‌کنند پایتون فقط یک زبان برنامه‌نویسی است. اما در حقیقت این زبان به عنوان یک زبان اسکریپتی نیز مورد استفاده قرار می‎گیرد. در زبان اسکریپتی:

کد به صورت اسکریپت نوشته و اجرا می‌شود.
ماشین، کد را خوانده و تفسیر می‌کند.
خطاهای احتمالی در زمان اجرا بررسی می‌شود.
هنگامی که یک کد بررسی می‌شود، می‌توان از آن چندین بار استفاده کرد. بنابراین، با استفاده از اتوماسیون می‌توانید وظایف خاصی را در برنامه انجام دهید.

۲- علم داده

پایتون، زبان اصلی بسیاری از متخصصین داده است. سال‌ها محققان از زبان MATLAB برای تحقیقات علمی استفاده می‌کردند. اما همه آنها پس از انتشار موتورهای عددی پایتون (numerical engines) مانند “Pandas” و “Numpy” زبان مورد استفاده خود را به پایتون تغییر دادند.

پایتون، همچنین با ماتریس‌ها و جداول و داده‎های آماری نیز سروکار دارد و با استفاده از کتابخانه‌های مشهوری مانند “Matplotlib” و “Seaborn” آنها را به تصویر می‌کشد.

۱- محبوبیت پایتون و کسب درآمد بالا

متخصصین پایتون یکی از بالاترین درآمدها را در صنعت IT دارند. میانگین حقوق و دستمزد یک توسعه‌دهنده پایتون در ایلات متحده آمریکا، حدود ۱۱۶ هزار دلار در سال است.