تماس درباره   صفحه اصلی
  زبان اسمبلي > نمايش داده ها  
 
 

نمايش داده ها


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

واحدهای اطلاعاتی
روش های نمايش داده ها
نمايش اعداد صحيح
کدگذاری ASCII
کاهش و افزايش طول داده


واحدهای اطلاعاتی

هر رقم در يک عدد باينری يک بيت (bit) ناميده می شود. بيت کوچکترين واحد اطلاعاتی در کامپيوتر است.

بيت ها به گروه های بزرگتری سازماندهی می شوند؛ در کامپيوترهای امروزی هر هشت بيت يک بايت (Byte) درنظر گرفته می شود که کوچکترين مکان آدرس پذير حافظه است (که می تواند متفاوت از مقدار حافظه واکشی شده درهربار مراجعه باشد). يک بايت می تواند حاوی يک دستورالعمل ماشين، يک کاراکتر، يا يک عدد باشد.

يک نيبل (nibble) نيمه يک بايت يا چهار بيت است.

نوع بزرگتر ذخيره سازی يک کلمه (word) است که روی پردازنده های اينتل 2 بايت (16 بيت) است. يک کلمه طول پيش فرض داده است که توسط طراح پردازنده انتخاب شده است و منعکس کننده برخی نکات سخت افزاری نظير گذرگاه های درونی و بيرونی است. کاميپوترهای شخصی اوليه با پردازنده های اينتل دارای عملوندهای 16 بيتی بودند به همين دليل کلمه به صورت 16 بيتی تعريف شد. در پردازنده های ديگر طول کلمه الزاما 2 بايت نيست.

Byte and Word

يک کلمه مضاعف (doubleword) چهار بايت يا 32 بيت طول دارد و يک کلمه چهارگانه (quadword) دارای هشت بايت يا 64 بيت است.


endian

يک نکته مهم ديگر بعد از تعداد بيت ها ترتيب قرار گيری بايت های داده در حافظه است که بايد موردتوجه برنامه نويس اسمبلی باشد. درحينی که پردازنده به طور نامحسوس endian را استفاده می کند، برای دسترسی به داده های چندبايتی حافظه و کارکردن با هر بايت بطور جداگانه، دانستن endian حياتی است. endian ترتيب قرار گيری بايت ها در حافظه را برای داده های چندبايتی معين می کند. فرمت های زير برای ذخيره يک مقدار چندبايتی وجود دارد:

1. Big-endian
    • داده ها را به ترتيب طبيعی خودشان ذخيره می کند. بايت با ارزش در کمترين آدرس قرار می گيرد. اکثر پردازنده های RISC و Motorola 68300 از اين دسته هستند.
2. Little-endian
    • بايت با ارزش کمتر در آدرس های پائين تر حافظه ذخيره می شود. پردازنده های Intel x86 و Pentium از اين نمونه هستند.
3. Bi-endian
    • پردازنده هائی مانند Motorola/IBM PowerPC می تواند در مد big-endian يا little-endian تحت کنترل نرم افزار کار کند.


مثال. داده چهار بايتی هگزAABBCCDD را درنظر بگيريد. نحوه تخصيص حافظه به اين داده در دو فرمت endian به صورت زير نشان داده شده است. مشاهده می شود که اين دو فرمت عکس يکديگر هستند.

Big-endian vs. Little-endian

روش های نمايش داده ها

اطلاعات معمولا به دو صورت استفاده می شوند: داده عددی ( صحيح و مميرشناور) و داده حرفی. نحوه نگهداری اطلاعات در حافظه را نمايش داده می گويند. روش های نگهداری داده ها بسته به نوع آنها متفاوت است.


نمايش اعداد صحيح (Integer)

اعداد صحيح باينری به دو شکل ديده می شوند:

1. اعداد صحيح بدون علامت (unsigned Integer) که شامل اعداد صحيح غير منفی هستند.
2. اعداد صحيح علامت دار (signed Integer) که می توانند مثبت يا منفی باشند.


نمايش اعداد صحيح بدون علامت

در اعداد صحيح بدون علامت کليه بيت ها به داده اختصاص داده می شود. کمترين مقدار ممکن يک عدد صحيح بدون علامت وقتی است که کليه بيت ها صفر باشد که معادل عدد 0 است. در بزرگترين عدد صحيح بدون علامت کليه بيت های عدد يک است.


جدول تعداد بيت ها و محدوده مقادير ممکن داده های عددی صحيح بدون علامت


نمايش اعداد صحيح علامت دار

اعداد صحيح علامت دار ممکن است مثبت يا منفی باشند. برای تشخيص علامت عدد يکی از بيت ها را به بيت علامت اختصاص می دهند. سه تکنيک برای نمايش علامت عدد وجود دارد که در نمايش اعداد صحيح علامت دار در حافظه استفاده می شده اند. در کليه اين روش ها با ارزش ترين بيت (سمت چپ ترين بيت) را به عنوان بيت علامت (sign bit) درنظر می گيرند. اگر اين بيت 0 باشد عدد مثبت و اگر 1 باشد عدد منفی است.

روش های نمايش اعداد صحيح علامت دار عبارتند از:

1. علامت مقدار
2. مکمل 1
3. مکمل 2


روش نمايش مکمل2

دو روش اول در کامپيوترهای اوليه به کار می رفتند. کامپيوترهای امروزی روش سوم به نام نمايش مکمل 2 را استفاده می کنند. مکمل2 يک عدد در دو مرحله بدست می آيد:

1- پيداکردن مکمل1 عدد
2- اضافه کردن 1 واحد به نتيجه مرحله اول


مثال. برای بدست آوردن مکمل2 عدد 56 ابتدا مکمل1 آن محاسبه سپس يک واحد به آن اضافه می شود.

56 = 00111000b
1’s complement = 11000111
2’s Complement = 11000111+1
     =11001000


سيستم مکمل2 روش خوبی برای ذخيره اعداد صحيح علامت دار به صورت باينری است. طول نمايش يا تعداد بيت هایی که استفاده می شود بايد قبلا تعيين شده باشد. برای نمايش يک عدد صحيح مثبت در فرم مکمل2، عدد مانند اعداد بدون علامت به سادگی در مبنای 2 نوشته شده و به اندازه کافی صفر در سمت چپ آن اضافه می شود تا طول نمايش را بسازد. برای نمايش يک عدد صحيح منفی در فرم مکمل2، ابتدا عدد را به مبنای 2 برده، سمت چپ آن صفر اضافه می شود تا طول نمايش را بسازد سپس مکمل 2 عدد گرفته می شود.


مثال. نمايش عدد +1116 به فرم مکمل2 در يک کلمه به صورت زير نمايش داده می شود.

+1116 = 0000 0100 0101 110b =045ch

مثال: نمايش عدد -97 به فرم مکمل2 در يک بايت

Decimal: -97
Binary: 01100001b
1’Complement: 10011110
2’Complement: 10011111
     = 9fh


عمل مکمل گيری مانند عمل منفی کردن است، به همين دليل با گرفتن مکمل2 از يک عدد منفی به عدد مثبت مطابق آن می رسيم و برعکس.


مثال. بنابراين عدد 11001000 نمايش عدد -56 در مثال اول است.


برای اعداد مثبت بيت علامت بايد صفر باشد يعنی آخرين رقم هگز عدد بين 0 تا7 خواهد بود. عدد منفی به بيت علامت 1 ختم می شود و می تواند ارقام بين 8 تا f را در آخرين رقم هگز داشته باشد. وقتی علامت عدد مکمل2 بدست آمد پيدا کردن عدد در مبنای 2 مشکل نيست برای اعداد مثبت کافی است به مبنای 10 برده شود و اعداد منفی ابتدا مکمل2 گرفته می شود سپس به مبنای 10 برده می شود.

مثال. 0d43h يک عدد مکمل 2 با طول 16 بيت است که معادل مبنای 10 آن عدد +3395 است.

مثال. b2ebh نمايش يک عدد صحيح در سيستم مکمل 2 است معادل آن در مبنای 10 به صورت زير بدست می آيد.

b2ebh =1011001011101011b
2’s Compl. =0100110100010101
    =19733 ==> -19733


روش مکمل2 اشکالات روش های قبل را برطرف می کند و تنها يک نمايش برای صفر وجود دارد و اين محاسبات مکمل2 را ساده تر از روش های قبلی می کند. جمع و تفريق نمايش مکمل 2 همانند اعداد باينری انجام می شود. نمايش مکمل دو باعث می شود اعداد منفی يکی بيشتر از اعداد مثبت باشند(وقتی همه بيت ها 1 است).

در روش مکمل2 اعداد قابل نمايش با طول m بيت در بازه [-(2m-1),2m-1-1]قرار می گيرند.


جدول تعداد بيت ها و محدوده مقادير ممکن داده های عددی صحيح علامت دار به روش مکمل2


نکته 1. تعداد بيت های عدد قبل از عمل مکمل گيری حتما بايد برابر طول نمايش باشد. در غير اينصورت عدد حاصل اشتباه است.
نکته 2. اگر طول بيت ها برابر با طول نمايش باشد و نتوان آنرا افزايش داد حاصل اشتباه می شود.
نکته 3. از مبنای 16 برای ساده تر بيان کردن اعداد مبنای 2 استفاده می شود.


محاسبات در مکمل2


کدگذاري ASCII

کد گذاری ASCII (American Standard Code for Information Interchange) به حروف، ارقام، علائم و کاراکترهای مختلف يک عدد باينری 7 بيتی نسبت می دهد و هشتمين بيت را 0 درنظر می گيرد. به اين صورت هر کاراکتر يک بايت را اشغال می کند.

روشن است که اين روش برای نمايش اعداد مناسب نيست، چون در فرمت باينری يک بايت اعداد 0 تا 255 را نمايش می دهد، اما با کد ASCII يک بايت تنها برای نمايش يک رقم کافی است. به همين دليل کلا اين روش برای نمايش متن در حافظه استفاده می شود.


مثال. نمايش عدد 123 با دو فرمت ASCII و باينری

ASCII vs. Binary

نوع توسعه يافته اين سيستم شامل 8 بيت برای هر کاراکتر است و 256 حالت مختلف را شامل می شود. کدهای 0 تا 127 برای کاراکترهای استاندارد، کدهای کنترلی و ارتباطی و مقادير 128 تا 255 برای نمايش سمبل های گرافيکی و حروف يونانی هستند.


مثال. رشته "ABC123" به صورت 41h 42h 43h 30h 31h 32h نشان داده می شود.


يک کدگذاری کامل تر که جای ASCII را دارد می گيرد Unicode است. تفاوت کليدی بين اين دو نوع کدگذاری در اين است که ASCII يک بايت را برای کدکردن يک کاراکتر استفاده می کند در حاليکه Unicode برای هر کاراکتر دو بايت را درنظر می گيرد. بنابراين کاراکترهای بيشتری را می تواند نمايش دهد که اين برای نمايش کاراکترهای کليه زبان های دنيا کاربردی است.


مثال. کدگذاری ASCII کد 41h يا 65 را به کاراکتر A می دهد. کدگذاری Unicode کد 0041h هگز را می دهد.


نکته1. تفاوت يک حرف بزرگ با يک حرف کوچک تنها در بيت شماره 5 است؛ اين بيت در حروف بزرگ 0 و در حروف کوچک 1 است. ("m"= 01101101 و "M"= 01001101)
نکته2. ارقام 0 تا 9 کدهای 30h تا 39h را دارا می باشند.
نکته3. کاراکترهای قابل چاپ بين 20h تا 7Eh است.
نکته4. کاراکترهای 0 تا 1Fh و 7Fh کاراکترهای کنترلی نام دارند که قابل رويت نمی باشند.
نکته5. کاراکتر ESC با کد 1Bh همراه با کاراکترهای ديگر اغلب برای يک عمل خاص به دستگاه های جانبی ارسال می شود.
نکته6. کدهای 41 تا 5Ah کاراکترهای A تا Z و کدهای 61 تا 7Ah کاراکترهای a تا z هستند.
نکته7. کاراکتر CR و LF با کدهای 0Dh و 0Ah به ترتيب باعث حرکت مکان نما به شروع خط جاری و خط بعد می شود.


کاهش و افزايش طول داده

در اسمبلی کليه داده ها اندازه مشخص شده ای دارند. گاهی ناچار به تغيير اندازه داده هستيم. برای کاهش اندازه داده کافی است بيت های با ارزش حذف شوند. اين روش برای اعداد بدون علامت و علامت دار کار می کند. قاعده کلی اين است که برای اعداد بدون علامت کليه بيت های حذف شده بايد صفر باشند. و برای اعداد علامت دار بيت های حذف شده بايد همگی يا 1 و يا 0 باشند. البته اگر عدد را نتوان به طرز صحيح در اندازه کوچکتر نمايش داد کاهش اندازه کار نمی کند.

افزايش داده پيچيده تر از کاهش است. عدد هگز FF را اندازه بگيريد. گسترش آن بستگی دارد که آن را چطور تفسير کنيم. اگر آن را يک عدد بدون علامت درنظربگيريم(يعنی عدد 255)، به صورت 00FF گسترش داده می شود و اگر علامت دار باشد(يعنی 1-) به صورت FFFF. به طور کلی برای گسترش اعداد بدون علامت کليه بيت های جديد عدد گسترش يافته صفر می شوند ولی برای گسترش يک عدد علامت دار بايد بيت علامت را بسط داد، به اين معنا که.بيت های جديد بيت علامت را در خود کپی می کنند.


سوالات چندگزينه اي درباره نمايش داده


 


 


صفحه اصلی| PDF| درباره| تماس