1. 程式人生 > >計算機組成原理-資料的表示和計算

計算機組成原理-資料的表示和計算

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)補碼