سیستم اعداد
با اینکه با ورود به دنیای اسمبلی، از زبان ماشین و کدهای عددی مربوط به آن فاصله گرفتهایم، اما نباید فراموش کرد که اسمبلی یک زبان نزدیک به زبان ماشین است و زبان ماشین نیز چیزی نیست جز عدد و رقم و صفر و یک.
در واقع اگر میخواهیم در سیستم اعداد قابل فهم رایانه محاسبات و عملیات منطقی خود را انجام دهیم باید با روشها و قوانین سیستم اعداد در مبنای 2(binary) آشنایی داشته باشیم. اعدادی که ما در دنیای واقعی با آنها به انجام محاسبات خود میپردازیم در مبنای 10 (decimal) هستند. یعنی از ارقام صفر تا 9 تشکیل شدهاند.
بنابراین علاوه بر انجام محاسبات در مبنای 2، باید بتوانیم اعمال تبدیل از مبنای 10 به 2 و برعکس را نیز انجام دهیم.
زمانی که محاسبات در مبنای 2 انجام میشود هر عدد شامل تعداد زیادی رقم خواهد بود که تعداد این ارقام در مبنای 2 از هر مبنای دیگری بیشتر خواهد بود. در نتیجه کار با آن کمی مشکل خواهد بود. در سیستم اعداد مبناهای دیگری مثل مبنای 8 و 16 که به ترتیب به آنها اکتال(octal) و هگزادسیمال (hexadecimal) گفته میشود نیز به کار میرود.
در واقع در مبنای 8 و 16 به ترتیب هر 3 و 4 رقم مبنای 2 تنها به یک رقم تبدیل میشود و به این ترتیب حجم ارقام نوشته شده به یکسوم و یکچهارم کاهش مییابد. پس با دانستن اعمال تبدیل این مبناها به یکدیگر و انجام محاسبات مربوط به آنها میتوان به سیستم اعداد در دنیای رایانه وارد شد.
ساختمان پردازنده
شما باید با ساختمان پردازنده، تعداد و انواع ثباتها، پرچمها و ... و کاربرد هریک از آنها آشنا باشید. هنگام برنامهنویسی معمولا یک سری قراردادها و پیشفرضها برای به کارگیری ثباتها در محاسبات وجود دارد که بدون اطلاع از آنها، برنامهنویسی به این زبان غیرممکن خواهد بود.
منابع مورد نیاز برای اجرا
به هنگام ساخت یک فایل اجرایی نیازمند یک سری اعمال و رزرو کردن منابع مورد نیاز برای برنامه خود خواهید بود. در زبانهای سطح بالا، این امور توسط مترجم زبان به طور خودکار انجام میشود، اما در اسمبلی، این کار به عهده برنامهنویس است. باید با انواع ساختمان دادههای قابل استفاده در حافظه و طریقه کار هر کدام آشنایی داشته باشد تا بتواند در مواقع لزوم به درستی از امکانات موجود بهره گیرد.
دستورالعملها
هر زبان برنامهنویسی تعدادی کلمه کلیدی و یک گرامر دارد. هر برنامهنویس علاوه بر اینکه باید به این کلمات کلیدی و گرامر آشنایی کامل داشته باشد بهتر است به طریقه کار آنها نیز احاطه داشته باشد.
هر چه این آگاهیها بیشتر باشد، خلاقیت در برنامهنویسی بیشتر بروز میکند و تفاوت برنامهنویسها و برنامههای مختلف در همین نکات خواهد بود. به عنوان یک مثال ساده دستور mov برای عمل انتساب به کار میرود.
اگر بخواهیم مقدار ثباتAX را برابر با صفر قرار دهیم میتوانیم از دستورQ، mov AX استفاده کنیم.
این اولین چیزی است که برای این کار به ذهن میرسد. اما اگر طریقه عملکرد دستورXor را بدانیم و همچنین آگاه باشیم که سرعت دستور Xor بیشتر از mov است، میتوانیم برای انتساب مقدار صفر به ثبات AX از دستور AX ،Xor AX استفاده کنیم. البته هر دوی این دستورات در مقایسه با کارهای ما بسیار سریع هستند و اگر قرار باشد یک بار اجرا شوند، تفاوت محسوسی در سرعت برنامه نخواهیم دید، اما تفاوت در جایی احساس میشود که همین دستور در یک چرخه یا loop قرار میگیرد و قرار است هزاران بار انجام شود. در آن زمان است که تفاوتها چشمگیر و محسوس خواهد شد.
وقفهها
در سیستم تعدادی وقفه وجود دارد که هر کدام کاربرد خاصی دارند. وقفه سیگنالی از دستگاه جانبی یا برنامه در حال اجراست که عمل خاصی را درخواست میکند.
وقتی برنامه در حال اجرا، وقفهای را دریافت میکند، اجرای برنامه به تعویق میافتد و کنترل اجرای برنامه به زیربرنامهای میرود تا به وقفه پاسخ دهد. هر وقفه زیربنای خاصی دارد که به آن پاسخ میدهد. بعد از اتمام کار وقفه، اجرای برنامه از همان نقطه که قطع شده بود ادامه پیدا خواهد کرد. به عنوان مثال: تابع06H از وقفه 10Hبرای پاک کردن محتویات نمایشگر به کار میرود.
اطلاعات بسیار دیگری هستند که برای برنامهنویسی سیستم باید به آنها احاطه داشت. هر دانشی در مورد سیستم و کارکرد آن، به شما کمک خواهد کرد.
با استفاده از کتابهای مختلف و راهنماهای زبان اسمبلی که در اینترنت موجودند میتوانید شروع خوبی برای این زبان داشته باشید.