計算機組成原理-資料的表示和計算
1.進位制的轉換
(1)進位制的轉換
十進位制轉換為二進位制
(1)除2取餘法(整數部分)
對十進位制的數不斷除2求餘,直到商為0。先求得的餘數是二進位制的低位
(327)10轉換:轉換為 (101000111)2
第n次除2後的商 |
餘數 |
163 |
1 |
81 |
1 |
40 |
1 |
20 |
0 |
10 |
0 |
5 |
0 |
2 |
1 |
1 |
0 |
0 |
1 |
2)減權定位法(整數部分)
一個數減去2的幾次方,用餘數再次減去2的幾次方
(327)10
轉換:
減權 |
定位 |
327 - 256 = 71 |
1 |
71 < 128 |
0 |
71 -64 = 7 |
1 |
7 < 32 |
0 |
7 < 16 |
0 |
7 < 8 |
0 |
7 - 4 = 3 |
1 |
3 - 2 = 1 |
1 |
1-1=0 |
0 |
(3)乘2取整法
把小數不斷地乘2,取每次結果的整數,直到結果為1
(0.8125)10轉換為(0.11.1)2
乘2 |
取整 |
0.8125 * 2 = 1.625 |
1 |
0.625 * 2 = 1.25 |
1 |
0.25 * 2 = 0.5 |
0 |
0.5 * 2 = 1.0 |
1 |
1.2 真值和機器數
1.真值:正負號+某進位制數絕對值的形式稱為真值
2.機器數:符號位用0表示正號,-1表示符號
3.BCD碼錶示十進位制數
(1)8421碼
十進位制中的每一位數字分別用8421(4bit)表示。eg:63表示為8421碼
6(0110)3(0011)
(2)2421碼
十進位制中的每一位數字用2421(4bit)表示
6(1100)3(1001)
(3)餘3碼
每一位十進位制數對應的二進位制都加上011
6(1001)3(0110)
(4)BCD碼的計算
BCD碼的計算,把每4位二進位制分為一組,組與組之間進行運算,逢十進一。
和小於9的時候不調整:
和大於9的時候加6 (0110)2
進行修正
4.漢字的顯示
(1)漢字在螢幕上使用點陣顯示,採用1616的點陣。每個點採用1或者0表示是否點亮,所以一個漢字需要佔用視訊記憶體162byte
5.奇偶校驗
6.漢明碼校驗(適合通道良好的環境)
(1)主存和cpu進行資料交換時,檢測資料交換的是否正確,能檢測出一位出錯,並能知道是哪一位出錯。
(2)主要是通過檢測第2^i位置,1的個數是偶數還是奇數
(3)資料位m位,校驗位k位,只要2^k>m+k+1即可
(4)編碼步驟:
a) 資料位 -> 計算出檢測位多少位(2^k>m+k+1)
b) 計算機校驗位公式
c) 算出檢測位的值
7.CRC校驗
(1)在硬碟和主機進行資料交換時校驗
(2)解決的問題:
a)資料位是n位要增加多少位的校驗位呢?校驗位個數和資料位個數無關
b)通訊雙方有一個約定:生成多項式(k+1位),k是校驗位的位數
c)由資料位和生成多項式產生CRC編碼
(3)資料位和生成多項式是已知的,要產生CRC編碼,只有校驗位不知道。產生校驗位的方法就是模二計算
(4)模二計算:沒有進位也沒有借位的計算(有加減乘除的模二計算),模二加減法運算相當於異或操作,相同的數相加為0,不同的數相加為1
(5)校驗碼就是用模二除法計算得來
(6)如何生成CRC碼
(1)設資料位m(x)為100佔3位,約定生成多項式g(x)100佔3位
(2)則校驗位佔2位,就是說模二除法的餘數佔2位
(3)用資料位m(x)除以生成多項式g(x)得到餘數r(x)
(4)過程:因為餘數佔2位,所以把資料位向左移動2位。m(x)x^k,即資料位程式設計10000,
接著,用100000模二除以101,得到商101,餘數01,即r(x)=01,得到CRC編碼為m(x)x^k + r(x),即最終的CRC校驗碼為10000+01=10001,所以傳送的10001位元位在接收端除以生成多項式的餘數為0,表示傳輸沒錯 。
(5)公式上的推導:
m(x)∗xkg(x)=Q(x),r(x) //Q(x)是商,r(x)是餘數
所以m(x)∗xk=g(x)∗Q(x)+r(x)
而CRC碼:$m(x)x^k + r(x) = g(x)Q(x) + r(x) + r(x) $
/** 因為r(x)和r(x)是模二加運算,所以相加後為0,消去了r(x) **/
最終CRC碼變成了g(x)*Q(x),到對方當校驗的時候,CRC碼除以g(x)就不會有餘數
(6)CRC的檢錯:所有位的都能知道是哪一位出錯,也只能知道一位
eg:設資料位m(x)=1100,生成多項式G(x)為1011,求產生的CRC碼
(a)生成多項式1011,是4位,所以餘數位(產生的校驗位)為3位,
(b)資料位左移三位,變成1100000,模二除1011,得到商1110,餘數010
(c)CRC碼:1100010
(7)糾錯:
設CRC碼的第7位傳輸出錯,則CRC變成1100001。 此時,除以生成多項式得到餘數001。
設CRC碼的第6位傳輸出錯,則CRC變成1100000。 此時,除以生成多項式得到餘數010。
而這個010,恰恰是第7位傳輸出錯後的餘數001,後面補一位0後除以1011的
(a)反過來想,CRC的糾錯功能,要讓每一位傳輸出錯後,除以多項式的餘數都不同,所以如果資料為4位,餘數的位數要滿足4+n+1<2^n,此時n=3(4+n後面還要加1是因為1代表沒有出錯的情況)。所以生成多項式要有4位
(b)餘數;如果001補兩個0,的道德餘數就是第5位出錯的餘數,迴圈的意義在與此:在計算出錯位數除以生成多項式產生的餘數時,可以先計算一個最低位出錯後產生的餘數,之後比他高一位的位傳輸錯誤產生的餘數就可以用迴圈補0除以多項式的方法計算。所以g(x)不好選,要構成這種迴圈。
(c)根據這種迴圈計算出錯位產生的餘數方法,就行成了一個出錯位對應產生餘數的表。有了這個表,接收端計算後發現傳輸的資料有餘數時,就能知道是哪一位出錯了,也就有了糾錯的功能。
(d)發現對應位出錯,就把該位置的資料取反。電路實現上,不能在每一位資料加上一個非門,這樣硬體成本太高。而是採用,只有一個非門,改變資料的時候,只需把資料迴圈移位,將出錯的位置移到第一位,非門改變第一位資料後,再次迴圈移位成原來的順序
(8)生成多項式的產生要滿足檢錯糾錯的功能
2.定點數的表示
1.無符號數
2.暫存器的位數表示熟知的範圍:8位為0~255
3.定點整數與定點小數
原碼,反碼,補碼,移碼
(1)原碼:
(a)最高位表示符號位,0表示正號,1表示負號,有效值部分用二進位制的絕對值表示。
(b)原碼 = 符號 + 絕對值
(c)定點整數定義:
[X]原=0,x (2n>x≥0)
[X]原=2^n - x(0>x≥−2n)
(因為x為負數,減x相當於加上一個x絕對值,而2n相當於最高位的1,所以就是1後面跟x的絕對值)
eg:x = +1110,[X]原 = 0,1110
x= -1110,,[X]原 = 1,1110
(d)定點小數定義:
[X]原=0. x (1>x≥0)
[X]原=1-x (0>x≥−1)
eg:x=+0.1101 => [X]原=0.1101
x = -0.1101 => [X]原=1.1101
【注】:原碼中,+0和-0的表示方法不一樣。1,0000和0,0000
(e)原碼錶示範圍:−(1−2−n)≤x≤1−2−n)。
原始碼小數的表示範圍:−(2−n)−1≤x≤(2−n−1)
(2)補碼