نگاهی به کدینک
قبل از شروع به یادگیری زبان اسمبلی نیاز هست تا با بعضی از سیستم های عددی آشنا شوید.
Decimal و Binary
مطمئنا تا کنون شنیده اید که کامپیوتر به غیر از ۰ و ۱ چیز دیگری را نمی فهمد و تمامی محاسبات کامپیوتری برای رسیدن به نتیجه ای معین باید به ۰ و ۱ تبدیل شوند. حتی فایل های موجود در کامپیوتر شما هم از صفر و یک تبدیل شده اند. فایل هایی مثل mp3, doc, exe و … همگی از ۰ و ۱ تشکیل شده اند. ۰ و ۱ کوچکترین واحدهای ذخیره سازی اطلاعات در کامپیوتر هستند که به آنها Bit1 گفته می شود.
برای اینکه بدانیم کامپیوتر چگونه با ۰ و ۱ کار می کند باید با سیستم عددی Binary2 آشنا شویم. در این سیستم فقط ۲ رقم وجود دارد و مبنای اعداد هم عدد ۲ می باشد.
ما در مدرسه یاد گرفته ایم که اعداد ۰ تا ۹ را به ترتیب بخوانیم. وقتی به عدد نه (۰۹) می رسیم چون رقم دیگری بعد از آن وجود ندارد مجبوریم به رقم سمت چپ آن ( که در اینجا صفر هست و با رنگ قرمز نشان داده شده) یک عدد اضافه کنیم و رقم سمت راست را (که همان ۹ هست) صفر کنیم و آنرا به ترتیب بالا ببریم. همچنین وقتی به عدد ۱۹ می رسیم مجبوریم به رقم سمت چپ یک عدد اضافه کنیم و رقم سمت راست را صفر کنیم تا مجموعه اعداد بین ۲۰ تا ۲۹ را به دست آوریم و همینطور برای ۲۹ و ۳۹ و ۴۹ و … هم باید از همین روش استفاده کنیم. به این روش که روشی است که در طول روز برای شمردن از آن استفاده می کنیم و مبنای آن ده است Decimal3 گفته میشود.
در سیستم عددی باینری هم همین قانون اعمال می شود با این تفاوت که ما فقط ۲ رقم داریم : ۰ و ۱٫ فرض کنید در دنیا تنها ۲ رقم برای نوشتن اعداد وجود دارد. در این صورت برای نوشتن اعداد چه می کردید؟
بیائید تا شروع به شمارش در باینری کنیم:
۰۰۰۰ (که برابر با « صفر » در شمارش معمولی هست)
۰۰۰۱ (که برابر با « یک » در شمارش معمولی هست)
حالا که از هر دو رقم موجود استفاده کردیم چون رقم دیگری موجود نیست باید به رقم سمت چپ (که به رنگ قرمز درآمده) یک عدد اضافه کنیم و رقم سمت راست را به صفر تبدیل کنیم و به ترتیب به آن اضافه کنیم تا عدد بعدی بدست آید.
۰۰۱۰ (که برابر با « دو » در شمارش معمولی هست اما به علت کمبود ارقام در سیستم باینری آنرا به صورت ۱۰ نمایش می دهیم. درواقع ۱۰ می نویسیم اما دو می خوانیم)
۰۰۱۱ (که برابر با « سه » در شمارش معمولی هست)
باز هم به انتهای ارقام موجود رسیدیم و باز هم باید به رقم سمت چپ یک عدد اضافه کنیم و ارقام سمت راست را برابر صفر قرار دهیم و ……
۰۱۰۰ (که برابر با « چهار » در شمارش معمولی هست)
۰۱۰۱ (که برابر با « پنج » در شمارش معمولی هست)
۰۱۱۰ (که برابر با « شش » در شمارش معمولی هست)
۰۱۱۱ (که برابر با « هفت » در شمارش معمولی هست)
باز هم به رنگ قرمز رسیدیم و باز هم همان روش …..
۱۰۰۰ (که برابر با « هشت » در شمارش معمولی هست)
۱۰۰۱ (که برابر با « نه » در شمارش معمولی هست)
۱۰۱۰ (که برابر با « ده » در شمارش معمولی هست)
۱۰۱۱ (که برابر با « یازده » در شمارش معمولی هست)
۱۱۰۰ (که برابر با « دوازده » در شمارش معمولی هست)
۱۱۰۱ (که برابر با « سیزده » در شمارش معمولی هست)
۱۱۱۰ (که برابر با « چهارده » در شمارش معمولی هست)
۱۱۱۱ (که برابر با « پانزده » در شمارش معمولی هست)
جدول زیر اعداد ۰ تا ۱۵ را در مبنای دسیمال و باینری نمایش می دهد.
۱۵
|
۱۴
|
۱۳
|
۱۲
|
۱۱
|
۱۰
|
۹
|
۸
|
۷
|
۶
|
۵
|
۴
|
۳
|
۲
|
۱
|
۰
|
Decimal
|
1111
|
1110
|
1101
|
1100
|
1011
|
1010
|
1001
|
1000
|
111
|
110
|
101
|
100
|
11
|
10
|
1
|
0
|
Binary
|
فلسفه ی استفاده از سیستم باینری در ساختار کامپیوتر
شاید فکر کنید که چرا کامپیوتر فقط ۰ و ۱ را درک می کند. شاید تعجب کنید اما می خواهم بگویم که کامپیوتر حتی ۰ و ۱ را هم درک نمی کند. چیزی که کامپیوتر درک می کند وجود و یا عدم وجود ولتاژ است.
در ساختار کامپیوتر از دستگاهی به نام flip-flop استفاده شده است. این دستگاه توانایی ذخیره سازی ۲ سطح از ولتاژ را دارا می باشد، یکی سطح پایین از ولتاژ که معمولا ۰٫۵ ولت هست و دیگری سطح بالایی از ولتاژ که معمولا ۵ ولت است. سطح پایین تر از ولتاژ در دستگاه flip-flop به عنوان Off یا ۰ تفسیر می شود و سطح بالاتر از ولتاژ به عنوان On یا همان ۱ تفسیر می شود. این ۲ حالت را در کامپیوتر Bit می نامند که کوچکترین واحد ذخیره اطلاعات در کامپیوتر است.
تعریف WORD , BYTE , NIBBLE و DWORD
NIBBLE : به مجموعه ای از ۴ بیت گفته میشود و بزرگترین عددی که در بر می گیرد ۱۵ در مبنای دسیمال یا ۱۱۱۱ در باینری می باشد.
BYTE : به مجموعه ای از ۸ بیت یا ۲ NIBBLE گفته می شود و بزرگترین عددی که در بر می گیرد ۲۵۶ در مبنای دسیمال یا ۱۱۱۱۱۱۱۱ در باینری می باشد.
WORD : به مجموعه ای از ۱۶ بیت یا ۲ بایت گفته می شود و بزرگترین عددی که در بر می گیرد ۶۵۵۳۵ در مبنای دسیمال یا ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱ در باینری می باشد.
DWORD : مخفف Double Word و شامل ۳۲ بیت یا ۲ کلمه یا ۴ بایت می باشد.
سیستم عددی Hexadecimal4
تاکنون با باینری و دسیمال آشنا شدیم. از آنجایی که در سیستم عددی باینری برای نوشتن کوچک ترین عددها باید رشته ی طویلی از صفرها و یک ها را پشت هم قرار دهیم و کار با آن کمی سخت است ، سیستم عددی هگزادسیمال راه حل مناسبی برای این مشکل است. از اینرو برای یادگیری اسمبلی باید با سیستم عددی هگزادسیمال هم آشنا باشیم :
اگر به خاطر داشته باشید در سیستم عددی باینری تعداد ارقام کمتر از ۱۰ بود و فقط ۲ رقم در اختیار داشتیم. اما در سیستم عددی هگزادسیمال تعداد ارقامی که استفاده می شوند بیشتر از ۱۰ می باشند. در این سیستم ما از ۱۶ رقم برای نوشتن اعداد مختلف استفاده می کنیم. حالا باید فرض کنیم در دنیا ۱۶ رقم موجود است یعنی از علامت های A تا F به جای علائم رقمی بعد از ۹ استفاده می کنیم.
جدول زیر اعداد ۰ تا ۱۵ را در مبنای دسیمال و هگزادسیمال نمایش می دهد.
۱۵
|
۱۴
|
۱۳
|
۱۲
|
۱۱
|
۱۰
|
۹
|
۸
|
۷
|
۶
|
۵
|
۴
|
۳
|
۲
|
۱
|
۰
|
Decimal
|
F
|
E
|
D
|
C
|
B
|
A
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
Hexadecimal
|
همانطور که مشاهده می نمایید اعداد ۰ تا ۹ در هر دو سیستم عددی مثل هم هستند. اما اعداد دو رقمی ۱۰ تا ۱۵ در سیستم هگزادسیمال جای خود را به اعداد تک رقمی E, D, C, B, A و F داده اند.
بیائید تا شروع به شمارش در هگزادسیمال نماییم :
۰۰۰۰ (که برابر با « صفر » در شمارش معمولی هست)
۰۰۰۱ (که برابر با « یک » در شمارش معمولی هست)
۰۰۰۲ (که برابر با « دو » در شمارش معمولی هست)
۰۰۰۳ (که برابر با « سه » در شمارش معمولی هست)
۰۰۰۴ (که برابر با « چهار » در شمارش معمولی هست)
۰۰۰۵ (که برابر با « پنج » در شمارش معمولی هست)
۰۰۰۶ (که برابر با « شش » در شمارش معمولی هست)
۰۰۰۷ (که برابر با « هفت » در شمارش معمولی هست)
۰۰۰۸ (که برابر با « هشت » در شمارش معمولی هست)
۰۰۰۹ (که برابر با « نه » در شمارش معمولی هست)
۰۰۰A (که برابر با « ده » در شمارش معمولی هست. چون مبنای ما ۱۶ هست و همچنان بعد از ۹ رقم های دیگری هم موجود است، مجبوریم از آنها استفاده کنیم)
۰۰۰B (که برابر با « یازده » در شمارش معمولی هست)
۰۰۰C (که برابر با « دوازده » در شمارش معمولی هست)
۰۰۰D (که برابر با « سیزده » در شمارش معمولی هست)
۰۰۰E (که برابر با « چهارده » در شمارش معمولی هست)
۰۰۰F (که برابر با « پانزده » در شمارش معمولی هست)
به پایان ارقام رسیدیم. باز هم باید از همان روش استفاده کنیم. به رقم سمت چپ که باز هم قرمز رنگ است یک عدد اضافه می کنیم و رقم سمت راست را از صفر شروع می کنیم. به این ترتیب خواهیم داشت :
۰۰۱۰ (که برابر با « شانزده » در شمارش معمولی هست)
۰۰۱۱ (که برابر با « هفده » در شمارش معمولی هست)
۰۰۱۲ (که برابر با « هجده » در شمارش معمولی هست)
.
.
.
.
۰۰۱۹ (که برابر با « بیست و پنج » در شمارش معمولی هست)
۰۰۱A (که برابر با « بیست و شش » در شمارش معمولی هست)
۰۰۱B (که برابر با « بیست و هفت » در شمارش معمولی هست)
۰۰۱C (که برابر با « بیست و هشت » در شمارش معمولی هست)
۰۰۱D (که برابر با « بیست و نه » در شمارش معمولی هست)
۰۰۱E (که برابر با « سی » در شمارش معمولی هست)
۰۰۱F (که برابر با « سی و یک » در شمارش معمولی هست)
بنابر این طبق قاعده عدد بعدی باید ۲۰ در مبنای هگزادسیمال باشد که در مبنای دسیمال یا همان شمارش معمولی برابر با « سی و دو » خواهد بود.
جدول زیر اعداد ۰ تا ۱۵ را در مبنا های دسیمال ، هگزادسیمال و باینری نمایش می دهد.
۱۵
|
۱۴
|
۱۳
|
۱۲
|
۱۱
|
۱۰
|
۹
|
۸
|
۷
|
۶
|
۵
|
۴
|
۳
|
۲
|
۱
|
۰
|
Decimal
|
F
|
E
|
D
|
C
|
B
|
A
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
Hexadecimal
|
1111
|
1110
|
1101
|
1100
|
1011
|
1010
|
1001
|
1000
|
111
|
110
|
101
|
100
|
11
|
10
|
1
|
0
|
Binary
|
چگونه هگزادسیمال کار را راحت تر می کند؟
عدد ۰۰۱۰۱۰۱۰۰۰۱۱۱۱۱۰ را در مبنای باینری در نظر بگیرید. این عدد یک WORD است. چون از ۱۶ بیت تشکیل شده است. بیائید این عدد را از سمت راست به چهار NIBBLE تقسیم کنیم. به این ترتیب چهار عدد زیر را خواهیم داشت :
۱۱۱۰ و ۰۰۱۱ و ۱۰۱۰ و ۰۰۱۰
حال با توجه به آخرین جدولی که نمایش داده شده معادل این اعداد را در مبنای هگزادسیمال در نظر می گیریم :
۱۱۱۰ = E و ۰۰۱۱ = ۳ و ۱۰۱۰ = A و ۰۰۱۰ = ۲
بنابراین معادل عدد ۰۰۱۰۱۰۱۰۰۰۱۱۱۱۱۰ در باینری برابر با ۲A3E در هگزادسیمال خواهد بود. برای امتحان می توانید از ماشین حساب ویندوز استفاده کنید. از منوی Start گزینه Run را انتخاب کنید و در پنجره ای که نمایش داده می شود حروف calc را تایپ نمایید و بر روی OK کلیک نمایید. حال از منوی View در ماشین حساب گزینه Scientific را انتخاب نمایید. حالا بر روی گزینه Hex کلیک کنید و عدد ۲A3E را وارد نمایید. بعد از وارد کردن عدد اگر گزینه Bin را انتخاب نمایید مشاهده می کنید که ماشین حساب بعد از تبدیل این عدد از هگزادسیمال به باینری عدد ۱۰۱۰۱۰۰۰۱۱۱۱۱۰ را نمایش خواهد داد که معادل همان عدد در باینری است.