فصل سوم
نمایش اعداد و محاسباتی کامپیوتر
چکیده
- مقدمه
- نمایش عددی و مکمل دو
- طراحی واحد محاسبه ,منطق
- ضرب و تقسیم صحیح
- اعداد اعشاری
نمایش عددی
- آنچه پیچیده به نظر می رسد:
اعداد منفی را چگونه نمایش دهیم
دامنه (Range) اعداد چیست؟
اگر یک عدد خارج از محدوده بود؟
در مورد اعداد منطقی و غیر منطقی چطور؟
سخت افزار چگونه این اعداد را جمع، تفریق،ضرب و
تقسیم میکند؟
بیت ها و اعداد
بیتها فقط بیت هستند: هیچ معنای ذاتی ندارند.
- قراردادها رابطه بین بیتها و اعداد را تعیین می کنند.
- سخت افزار چگونه تشخیص می دهد که چه قراردادی در حال استفاده
است؟
Add $s1, $s2, $s3
Addu $s1, $s2, $s3
علامت $s1،$s2 و $s3
چیست؟
نمایش عددی
صحیح بدون علامت
صحیح با علامت
BCDدهدهی کد شده به باینری
ممیز ثابت
ممیز شناور
انواع دیگر داده:
- کاراکترها(اسکی و یونیکد)
- پیکسل ها (گرافیک ها)
- گروهی از بیتها
صحیح بدون علامت
چرا صحیح بدون علامت؟
- دستیابی به حافظه PC, SP, RA,
In C, unsigned int-
چگونه نمایش می دهیم؟
- انگشتهای خود را بشمارید.
- مبنای اولیه سیستم اعداد
- دهدهی: 10 نماد مختلف: 0 1 2 3 4 5 6 7 8 9
صحیح بدون علامت (مبنای اولیه سیستم اعداد)
- در حالت کلی، در یک سیستم عددی مبنای K
- چه تعداد di
متفاوت؟
- بزرگترین عدد کدامست؟
- کوچکترین عدد کدامست؟
مبناهای خاص:
- مبنای 2 (Binary)
- مبنای 8 (octal)
- مبنای 16(hexademical)
آنها چه تعداد نماد مختلف دارند؟
- چگونه می توان مبنای دو را به مبنای 8 و 16 تبدیل
کرد؟
- مثال:
010100=(0 *22+1 *21+0*20)*23+(1*22+0*21+0*20)
=2*81+ 4 *80= 248
صحیح بدون علامت (BCD: binary coded decimal)
نمایش : 12710
- چه تعداد بیت برای BCD مورد نیاز است؟ برای دودویی چطور؟
- فضای ذخیره سازی بکارگرفته شده؟
ضمیمه:
- چگونه می توان carry را مشخص نمود؟
“If ai+
bi >10” vs. “If ai+ bi >2”
کدامیک برای کامپیوتر
کاراتر است؟
صحیح با علامت (علامت مقدار)
-12: -(sign) 12(absolute value)
- یک بیت علامت مجزا
- یک مقدار
برای سخت افزار
- بیت علامت را کجا قرار دهیم؟چپ یا راست؟
- علامت حاصلجمع را چگونه تعیین می کنیم؟ (مثلا یک مرحله اضافی)
- علامت صفر چیست؟ مثبت یا منفی؟
مکمل 2
اعداد و نمایش آنها یکی نیست.
- نمایش عدد، یک قرارداد تعریف شده برای بیان آن
است.
- یک عدد می تواند دارای نمایشهای متفاوتی باشد مثلا BCD مبنای 16، مکمل دو و غیره.
- مکمل دو: یک نوع از نمایش که بصورت زیر تعریف شده است:
مکمل دو
|
0 |
0000 |
|
1 |
0001 |
|
2 |
0010 |
|
3 |
0011 |
|
4 |
0100 |
|
5 |
0101 |
|
6 |
0110 |
|
7 |
0111 |
|
-8 |
1000 |
|
-7 |
1001 |
|
-6 |
1010 |
|
-5 |
1011 |
|
-4 |
1100 |
|
-3 |
1101 |
|
-2 |
1110 |
|
-1 |
1111 |
صحیح با علامت(مکمل دو)
مرجع: Katz: Contemporary Logic Design, p243 (برای
4 بیت )
چرا 1111 و 0000 همسایه اند؟
مفهوم بیت سوم چیست؟
علامت صفر چیست؟
کوچکترین عدد کدامست؟
بزرگترین عدد کدامست؟
نمایش یک عدد منفی -x
- از نمایش عدد X تا نمایش -x
هر bi را معکوس کرده، سپس با 1 جمع کنید. 
- اثبات درستی
میانبر: از با ارزشترین بیت تا کم ارزشترین 1هر بیت
را معکوس کنید و کم ارزشترین یک را 1 نگاه دارید.
Example: - (0100) = 1011 + 1 = 1100
Example:
10010 = 01100100 à 10011100 = -10010
گنجاندن اعداد کوچکتر در بیتهای بیشتر
چرا لازم است؟
- مقایسه یک integer
با یک long integer : تغییر نوع
- بارگذاری یک بایت در یک کلمه
- برای اضافه کردن یک بخش فوری به یک عدد 32 بیتی
واحد محاسبه و منطق MIPS فقط با مقادیر موجود در رجیسترهای 32 بیتی کار
می کند.
- چگونه می توان با اندازه های کوچکتر کار کرد؟
- در مورد اندازه های بزرگتر چطور؟
Example(2-bit): 10= 1 *(-21)+0 *20=-210
نمایش
2- مبنای 10 در 4 بیت کلمه: آیا می توانید آنرا انجام دهید؟ چه چیزی کشف می شود؟
تکرار بیت علامت در بیتهای دیگر(گسترش علامت)
0010 -> 0000 0010
1010 -> 1111 1010
(1x(2^(-7)
+ 111 1010 = ? ) نکته!
اثبات ؟
جمع : درست مانند دوران شیرین دبستان
0110
+ 0001
تفریق : a-b=a+(-b)
- اعمال مکمل دو ساده است
0111-0110=
0111
+1010
10001
بنابراین
0111-0110= 0001
آیا شما مخصوصا بیتهای علامت را دستکاری نموده اید؟
صبر کنید! یک بیت اضافی گم شده است!
0111-0110= 0111
+1010
10001
- از دیدگاه 1 بیت : 1-1=1+1=0
- بنابراین تا زمانیکه شماcarry بوجود آمده
بوسیله 1+1 (1 سبز) را در نظر نگرفته اید، درست انجام داده اید.
سئوالات:
- آیا شما یک جمع کننده و یک تفریق کننده دارید؟
- در مورد اعداد بدون علامت چطور؟(یک جمع کننده دیگر؟)
مزایای استفاده از مکمل 2
- تفریق می تواند از منطق مشترکی با جمع استفاده کند
- بیت علامت می تواند مانند یک بیت معمولی عدد رفتار کند
- اینها نکات زیرکانه ای هستند .
سرریزی
جمع:
0111 1111
+ 0110 +1000
علامت
ورودی چیست؟
علامت
خروجی چیست؟
- آیا امکان وقوع سرریزی در جمع یک عدد مثبت و یک عدد منفی وجود
دارد؟
امکان وقوع سرریز با صفر وجود دارد؟
- اعمال A+B و A-B را ملاحظه کنید.
جمع
0111 1111
+ 0110 + 1000
1101 10111
علامت
ورودی چیست؟
علامت
خروجی چیست؟
کشف سرریزی
سرریزی زمانی اتفاق می افتد که:
- جمع دو عدد منفی یک عدد مثبت بدهد.
- جمع دو عدد مثبت یک عدد منفی بدهد.
- یا یک عدد منفی را از مثبت تفریق کنیم و نتیجه منفی بگیریم
- یا یک عدد مثبت را از منفی تفریق کنیم و نتیجه مثبت بگیریم
در مورد جمع و تفریق اعداد بدون علامت چطور؟
کار CPU در برابر سرریزی چیست؟
نادیده بگیرد؟
- هیچ وقت نمی خواهد سرریزی آشکار شود
Addu,
addiu, subu- (MIPS:عدم تولید سریز)
- تولید یک تله که بر اساس آن برنامه نویس بتواند با آن کار کند.
- یک استثنا (وقفه)رخ دهد
کنترل به آدرس از پیش تعریف شده استثنا پرش کند
ذخیره آدرس مکان وقفه برای امکان بازگشت
جمع ، تفریق
دستورالعمل ها
سنجش
- اعداد بدون علامت
sltu:
set on less than unsigned
sltiu:
set on less than immediate unsigned
- اعداد با علامت
slt:
set on less than
slti:
set on less than immediate
مثال: مقادیر $s0 و $s1 چیست؟
$s0= 1111 1111
1111 1111 1111 1111 1111 1111
$s1= 0000 0000
0000 0000 0000 0000 0000 0001
(1) slt $t0, $s0, $s1 (2) sltu $t1, $s0, $s1
مثال
مقادیر $s0 و $s1 چیست؟
$s0= 1111 1111 1111 1111 1111
1111 1111 1111
$s1= 0000 0000 0000 0000 0000
0000 0000 0001
پاسخ:
slt
$t0, $s0, $s1 --1 است $t0 اگر هر دو با علامت باشند
sltu $t1, $s0, $s1 -- 0 است $t1 اگر هر دو بدون علامت باشند
دستورالعمل ها
بارگذاری/ذخیره سازی
lb: load
byte-
lbu:
load byte unsigned-
Example: lb $s1, 100($s2)
مقادیر$s0 چیست
When memory[$s2+100] = 0000 0000?
When memory[$s2+100] = 0000 0001?
When memory[$s2+100] = 1111 1111?
Example: lbu $s1,
100($s2)
مقادیر$s1 چیست
when memory[$s2+100] = 1111 1111?