Web Programming C++ SQL Server پایگاه داده ساختمان داده   صفحه اصلی
  زبان اسمبلي > نمايش داده ها  
 
 

نمايش داده ها


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

اعداد صحیح
اعداد ممیز شناور
کاراکترها


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

میزان فضای درنظر گرفته در حافظه برای نگهداری داده را طول نمایش می نامند.

اعداد صحیح

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

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

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

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

مثال. بزرگترین و کوچکترین عدد صحیح بدون علامت با 8 بیت طول.

Unsigned Integer

اعداد صحیح بدون علامت قابل نمایش با طول m بیت در بازه [0,2m-1]قرار می گیرند.

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

Storage Type
Bits
Range (low - high)
Unsigned byte80 ... 255
Unsigned word160 ... 65,535
Unsigned doubleword320 ... 4,294,967,295
Unsigned quadword640 ... 18,446,744,073,709,551,615

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

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

Integer

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

کامپیوترهای امروزی روشی به نام فرم مکمل 2 (2’s Complement) را برای نمایش اعداد صحیح علامتدار استفاده می کنند که روش خوبی برای ذخیره اعداد صحیح علامت دار به صورت باینری است. در این روش از مکمل گیری برای منفی کردن استفاده می شود.

مکمل2 یک عدد در دو مرحله بدست می آید:

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

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

56 = 00111000 b
1’s complement = 11000111     مکمل یک عدد ، صفر به یک و یک به صفر تبدیل می شود
2’s Complement = 11000111+1 =11001000      مکمل دوعدد 56

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

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

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

+1116 = 0000 0100 0101 1100b =045C h

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

Decimal: -97
Binary: 01100001 b
2’Complement: 10011111 b = 9F h

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

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

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

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

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

B2EB h = 1011 0010 1110 1011 b بیت علامت یک است یعنی عدد منفی است
2’Complement : 0100110100010101 مکمل دو عدد محاسبه می شود و تبدیل به مبنای 10 می شود
  = 19733 ==> -19733

نمایش مکمل دو باعث می شود اعداد منفی یکی بیشتر از اعداد مثبت باشند (وقتی همه بیت ها 1 است).

مثال. بزرگترین و کوچکترین عدد صحیح علامت دار با 8 بیت طول.

Signed Integer

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

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

Storage Type
Bits
Range (low - high)
Signed byte8 -128...+127
Signed word16 -32,768...+32,767
Signed doubleword32 -2,147,483,648...+2,147,483,647
Signed quadword64-9,223,372,036,854,775,808
+9,223,372,036,854,775,807...

نکته. قبل از عمل مکمل گیری با اضاقه کردن صفر سمت چپ تعداد بیت های عدد حتما باید برابر طول نمایش باشد. در غیر اینصورت عدد حاصل اشتباه است.
نکته. اگر طول بیت ها برابر با طول نمایش باشد و نتوان آنرا افزایش داد حاصل اشتباه می شود.
نکته. از مبنای 16 برای ساده تر بیان کردن اعداد مبنای 2 استفاده می شود.
نکته. در روش مکمل2 تنها یک نمایش برای صفر وجود دارد و آن وقتی است که کلیه بیتها صفر باشد.
نکته. محاسبات مکمل2 بسادگی جمع و تفریق اعداد باینری انجام می شود مطالعه بیشتر.

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

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

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

اعداد ممیز شناور

انستیتو IEEE دو استاندارد را برای نمایش اعداد ممیزشناور به صورت باینری تعریف کرد:

• اعداد حقیقی با دقت معمولی (Single Precision) با 32 بیت طول؛ 1 بیت توان +8 بیت توان+32 بیت مانتیس
• اعداد حقیقی با دقت مضاعف (Double Precision) با 64 بیت طول؛ 1 بیت توان +11 بیت توان+52 بیت مانتیس

نمایش یک عدد ممیزشناور

نگهداری اعداد ممیزشناور پیچیده تر از اعداد صحیح است. برای نمایش یک عدد ممیزشناور مراحل زیر باید انجام بشود:

1. تبدیل عدد به باینری
2. نرمال کردن عدد
3. تبدیل توان
4. ساختن عدد

گام اول تبدیل عدد به مبنای 2

همانطور که در بخش قبل گفته شد برای تبدیل یک عدد ممیز شناور به باینری بخش صحیح و کسر جداگانه تبدیل می شود. قسمت صحیح با تقسیم های متوالی بر 2 و قسمت کسر با ضرب های متوالی بر 2.

مثال. عدد 34.890625 به باینری می شود 100010.111001 یا 20×100010.111001

گام دوم نرمال کردن

نرمال کردن یک عدد علمی به این معناست که نقطه ممیز،همزمان با تنظیم توان ، به سمت چپ ترین موقعیت ممکن حرکت کند.

مثال. برای عدد 20×100010.111001 ممیز باید 5 موقعیت به سمت چپ حرکت کند بنابراین توان 10 پنج واحد زیاد می شود که می شود: 25×1.00010111001

گام سوم تبدیل توان

برای نمایش توان های مثبت و منفی توان با عدد 127 (دردقت معمولی) جمع می شود و به باینری تبدیل می شود.

مثال. توان 5 در مثال قبل می شود 5+127=132 که معادل باینری آن 1000 0100 است.

گام چهارم ساختن عدد

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

Float

مثال. نمایش با دقت معمولی 32 بیت عدد باینری 1.00010111001 و توان 10000100 که به صورت 0100001000001011100100000000000 یا 420B9000 h می شود.

Float Example

دقت مضاعف به همین صورت تبدیل می شود برای توان 11 بیت درنظر گرفته می شود که برای اینکه اعداد مثبت و منفی را شامل شود با عدد 1023 جمع و تبدیل به باینری می شود. طول مانتیس 52 بیت است.

Double

تبدیل یک عدد ممیز شناور باینری به دهدهی

تبدیل یک عدد باینری ممیزی به اعشاری به مراتب ساده تر است.

مثال. عدد 32 بیتی 0100001000001011100100000000000 که یک عدد مثبت است با توان 10000100 و مانتیس 1.00010111001 (یک رقم صحیح یک سپس مانتیس نوشته می شود صفرهای اضافه سمت راست مانتیس حذف می شود).

10000100 b = 132 تبدیل توان به ده
132-127=5

در نتیجه عدد به صورت 25×1.00010111001 می شود.

1.00010111001 × 25
(20 + 2-4 + 2-6 + 2-7 + 2-8 + 2-11) × 25
(1 + 1/16 + 1/64 + 1/128 + 1/256 + 1/2048) × 32 = 34.890625

کاراکترها

کاراکترها در حافظه با روش کدگذاری نمایش داده می شوند. طرح های شناخته شده برای کدگذاری کاراکترها عبارتند از: هفت بیتی ASCII، هشت بیتی Latin-x و شانزده بیتی Unicode.

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

کد کاراکترهای قابل نمایش از 32 تا 126 شامل حروف کوچک و بزرگ انگلیسی، ارقام و برخی علائم است.

ASCII

کدهای 65 (41h) تا 90 (5Ah) حروف بزرگ'A' تا 'Z' و کدهای 97 (61h) تا 122 (7Ah) حروف کوچک 'a' تا 'z' هستند. اگر کدهای حروف را به باینری تبدیل کنید متوجه می شوید که تفاوت بین یک حرف بزرگ با حرف کوچک متناظر تنها در یک بیت است.

مثال. کدهای کاراکترهای E و e.

Upper and Low Case of E Letter

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

کاراکترهای ارقام '0' تا '9' کدهای 48 (30h) تا 57 (39h) را دارند.

کاراکترهای با کد صفر تا 31 (1Fh) و 127 (7Fh) کاراکترهای کنترلی نام دارند که قابل چاپ نمی باشند. برخی از آنها در قدیم برای کنترل انتقال و چاپگر استفاده می شده اند. بعضی از این کاراکترها که امروزه هنوز دارای معنا هستند مانند کاراکتر Tab با کد 9، کاراکتر سر خط (Line Feed) و خط جدید (Carriage Return) به ترتیب با کدهای 10 و 13هستند.

با این روش کدگذاری می توان رشته های کاراکتری را به باینری تبدیل کرد به جای هر کاراکتر کد معادل آن ذخیره می شود.

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

کدگذاری های هشت بیتی شامل حروف کلیه زبان های دنیا نمی شوند. یک کدگذاری کامل تر که جای ASCII را دارد می گیرد Unicode است. طرح Unicode به منظور ایجاد یک طرح جهانی کدگذاری یک شکل ارائه شد. تفاوت کلیدی در این کدگذاری این است که برای هر کاراکتر دو بایت درنظر گرفته می شود بنابراین می تواند 65536 کاراکتر را نشان بدهد که این برای نمایش کاراکترهای کلیه زبان های دنیا کاربردی است. 128 کاراکتر اول Unicode دقیقا مشابه با ASCII است.

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


دانلود PDF این درس


 


 

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