معرفی زبان اسمبلی
هر رایانه شخصی دارای یک ریزپردازنده است که فعالیت های ریاضی، منطقی و کنترل کامیپوتر را مدریت می کند. هر خانواده پردازنده مجموعه دستورالعمل های خود را برای مدیریت کردن عملیات های مختلف (دریافت ورودی از صفحه کلید، نمیاش اطلاعات روی صفحه و انجام سایر کار ها) دارد. این مجموعه دستور العمل ها “دستورالعمل زبان ماشین” نامیده می شوند.
یک پردازنده تنها دستورالعمل های زبان ماشین را درک می کند که رشته های صفر و یک است. بنابراین زبان ماشین که فقط شامل 0 و 1 است، برای توسعه نرم افزار بسیار مبهم و پیچیده است. از این رو یک زبان سطح پایین برای یک خانواده خاص از پردازنده ها طراحی شده است که دستورالعمل های مختلفی را در فرم قابل فهم تر و نمادین نشان می دهد.
مزایای زبان اسمبلی
یادگیری زبان اسمبلی، باعث می شود تا در مورد موضوعات زیر هم آگاهی داشته باشید:
- نحوه برقراری ارتباط برنامه ها با سیستم عامل، پردازنده و BIOS
- نحوه نمایش داده ها در حافظه و سایر دستگاه های خارجی
- چگونگی دسترسی پردازنده به دستورالعمل ها و اجرای آن ها
- آگاهی از نحوه دسترسی به داده ها و پردازش آن ها
- چگونگی دسترسی یک برنامه به دستگاه های خارجی
مزایای دیگر استفاده از زبان اسمبلی عبارت اند از:
- به حافظه و زمان کمتری برای اجرا شدن نیاز دارد
- امکان انجام کارهای سخت و پیچیده بر روی سخت افزار را فراهم می کند
- برای انجام کارهایی که به زمان کمی نیاز دارند، مناسب می باشد
- برای نوشتن برنامه های ISR و سایر برنامه هایی که در حافظه قرار می گیرند، مناسب می باشد
ویژگی های اصلی سخت افزار کامپیوتر
سخت افزار اصلی کامپیوتر شامل پردازنده، حافظه و ثبات است. ثبات ها اجزای پردازنده ای هستند که اطلاعات و آدرس ها را نگه می دارند. برای اجرای برنامه، سیستم آن را از دستگاه خارجی بر روی حافظه داخلی کپی می کند و سپس پردازنده دستورات برنامه را اجرا می کند.
واحد اساسی ذخیره سازی کامپیوتر، Bit می باشد که می تواند 1 (روشن) یا 0 (خاموش) باشد. یک گروه 9 بیتی مرتبط به هم یک بایت (Byte) را تشکیل می دهند که 8 بیت از آن برای داده ها استفاده می شود و یک بیت آخر هم برای توازن مورد استفاده قرار می گیرد. با توجه به نقش بیت توازن، تعداد بیت هایی 1 در هر بایت باید یک عدد فرد باشد.
بنابراین، بیت توازن، برای فرد کردن تعداد اعداد یک بایت مورد استفاده قرار می گیرد. زمانی که بیت توازن زوج باشد، سیستم تصور می کند که یک خطای توازن (هر چند رخ دادن این خطا نادر است) رخ داده است که ممکن است ناشی از یک خطای سخت افزاری یا الکتریکی باشد.
پردازنده از اندازه های زیر برای داده ها پشتیبانی می کند:
- یک کلمه (Word): یک آیتم 2 بایتی
- دو کلمه (DoubleWord): یک آیتم 4 بایتی (32 بیتی)
- چهار کلمه (QuadWord): یک آیتم 8 بایتی (64 بیتی)
- پاراگراف (Paragraph): یک ناحیه 16 بایتی (128 بیتی)
- کیلوبایت (Kilobyte): 1024 بایت
- مگابایت (Megabyte): 1,048,576 بایت
سیستم اعداد دودویی
سیستم اعداد دودویی (Binary Number System) تمامی اعداد را با استفاده از دو رقم 0 و 1 نشان می دهد. این نوع حالت نمایشی اعداد را، نمایش در مبنای دو نیز می نامند.
جدول زیر ازرش مکانی را برای یک عدد دودویی هشت بیتی نشان می دهد که در آن همه بیت ها بر روی ON تنظیم شده اند.
مقدار بیت | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
ارزش مکانی | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
شماره بیت | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
مقدار یک عدد دودویی بر اساس حضور 1 بیت و ارزش مکانی آن است. بنابراین مقدار عدد باینری داده شده برابر است با:
1 | 1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255 |
سیستم اعداد هگزادسیمال
سیستم اعداد هگزادسیمال از پایه 16 استفاده می کند. رقم های موجود در این سیستم از 0 تا 15 می باشد. بر اساس قرار داد، حروف A تا F برای نشان دادن اعداد 10 تا 15 استفاده می شود.
اعداد هگزادسیمال در محاسبات برای نمایش اعداد باینری طولانی به صورت اختصاری استفاده می شود. به طور کلی، سیستم اعداد هگزادسیمال یک داده باینری را با تقسیم هر بایت به نصف و بیان مقدار هر نیم بایت نشان می دهد. جدول زیر معادل ده دهی، دودویی و هگزادسیمال را نشان می دهد:
عدد ده دهی | نمایش باینری | نمایش هگزادسیمال |
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
برای تبدیل یک عدد باینری به معادل هگزادسیمال آن را به 4 گروه متوالی تقسیم کنید، سپس از سمت راست معادل هگزادسیمال هر بخش را بنوسید.
مثال
تبدیل عدد باینری (1000 1100 1101 0001) به معادل هگزادسیمال:
1 2 3 4 | 1000: 8 1100: C 1101: D 0001: 1 |
معادل هگزادسیمال عدد بالا برابر است با (8CD1).
برای تبدیل یک عدد هگزادسیمال به معادل باینری، فقط هر رقم هگزادسیمال را به معادل باینری 4 رقمی بنویسید.
مثال
تبدیل عدد هگزادسیمال (FAD8) به معادل باینری:
1 2 3 4 | F: 1111 A: 1010 D: 1101 8: 1000 |
معادل باینری عدد بالا برابر است با (1111 1010 1101 1000).
محاسبات باینری
جدول زیر چهار قانون ساده برای جمع دودویی را نشان می دهد:
قانون اول | قانون دوم | قانون سوم | قانون چهارم |
1 | |||
0 | 1 | 1 | 1 |
+0 | +0 | +1 | +1 |
=0 | =1 | =10 | =11 |
قوانین سوم و چهارم نشان دهنده جا به جایی یک بیت به سمت چپ می باشد.
مثال
ده دهی | باینری |
60 | 00111100 |
+42 | 00101010 |
102 | 01100110 |
با توجه به این قانون، برای تبدیل یک عدد دودوی به مقدار منفی آن، مقادیر بیت آن را برعکس کرده و مقدار 1 را به آن اضافه کنید.
مثال
عدد 53 | 00110101 |
معکوس | 11001010 |
افزودن 1 | 00000001 |
عدد -53 | 11001011 |
برای کم کردن یک مقدار از دیگری، عدد را به مکمل ببرید، سپس آن ها را با هم جمع کنید.
مثال
کم کردن مقدار 42 از 53:
عدد 53 | 00110101 |
عدد 42 | 00101010 |
معکوس بیت عدد 42 | 11010101 |
افزودن 1 | 00000001 |
عدد -42 | 11010110 |
53 – 42 = 11 | 00001011 |
سرریز آخرین بیت 1 از دست رفته است.
آدرس دهی داده ها در حافظه
فرآیندی که پردازنده از طریق آن اجرای دستورالعمل ها را کنترل می کند، به عنوان چرخه (واکشی – رمزگشایی – اجرا) یا چرخه اجرا محسوب می شود و شامل سه مرحله متوالی است:
- دریافت دستورالعمل از حافظه
- رمزگشایی یا شناسایی دستورالعمل
- اجرای دستورالعمل
پردازنده ممکن است در یک زمان، به یک یا چند بایت از حافظه دسترسی داشته باشد. عدد هگزادسیمال 0725H را در نظر بگیرید. این عدد به دو بایت از حافظه نیاز دارد. بایت مرتبه بالاتر 07 و بایت پایین تر 25 است.
پردازنده داده ها را در دنباله ای از بایت معکوس ذخیره می کند، یعنی یک بایت مرتبه پایین، در آدرس حافظه پایین ذخیره می شود و یک بایت مرتبه بالاتر، در آدرس حافظه بالا ذخیره می شود. بنابراین اگر پردازده مقدار 0725H را از ثبات به حافظه ببرد، ابتدا 25 را به آدرس حافظه پایین تر منتقل می کند و 07 را به آدرس حافظه بعدی منتقل می کند.
x: آدرس حافظه
زمانی که پردازنده داده های عددی را برای ذخیره در ثبات، از حافظه می گیرد، آن را دوباره معکوس می کند. دو نوع آدرس حافظه وجود دارد:
- آدرس مطلق (Absolute address) – یک مرجع مستقیم از مکان خاص.
- آدرس segment (یا offset) – شروع آدرس یک بخش حافظه با مقدار offset.
هیچ نظری ثبت نشده است