CPU 運算加減法運算
假設計算 3+3
原碼是0011 * 0011(以4位存貯單元,因為是原碼,最高位不代表符號位)
1. 首先 判斷 兩個加數是否有 負數(減法) 如果有 負數 先將負數轉為補碼進行運算
2. 然后將兩個正數相加 所以計算機底層只進行加法運算
正數的補碼 反碼 源碼都是本身 負數的補碼 是先將正數求反碼 然后將反碼+1 得到該正整數的補碼
模擬CPU運算乘法的步驟:
假設計算3*3
原碼是0011 * 0011(以4位存貯單元,因為是原碼,最高位不代表符號位)
CPU中的乘法器過程如下:
3個寄存器分別存放乘數0011 被乘數 0011 一個部分積初始值為0
1、首先判斷乘數寄存器(目前為0011)的最低位為1。如果為1則將部分積的值通過加法器加上被乘數0011。因此此步結束后部分積寄存器內容為0011
2、將乘數寄存器右移一位,同時將部分積寄存器也右移一位。同時乘積寄存器最低位溢出丟棄。部分積寄存器高位補0,地位溢出后填充到乘數寄存器。因此。部分積寄存其原來的值0011變成了0001。乘數寄存器0011變成了1001(這里低位的1溢出,最高位被部分積溢出的1填充)
3、判斷乘數寄存器最低位(0001).為1。將部分積通過加法器加上被乘數0011。因此此不結束后部分積寄存器內容是(0001+0011=0100).
4、乘數寄存器右移一位,同時將部分積寄存器也有右移一位。同第2步。因此部分積寄存器原來的值0100變成了0010。乘數寄存器1001變成了0100,低位1溢出,最高位被部分積溢出的0填充。
5、判斷乘數寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0001,乘數變成了0010。
6、判斷乘數寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0000,乘數變成了1001;此時所有乘數全部處理完畢。
7、最終結果將部分積作為高位,乘數寄存器作為低位得到值為00001001 換算成10進制得到9
原碼是0011 * 0011(以4位存貯單元,因為是原碼,最高位不代表符號位)
CPU中的乘法器過程如下:
3個寄存器分別存放乘數0011 被乘數 0011 一個部分積初始值為0
1、首先判斷乘數寄存器(目前為0011)的最低位為1。如果為1則將部分積的值通過加法器加上被乘數0011。因此此步結束后部分積寄存器內容為0011
2、將乘數寄存器右移一位,同時將部分積寄存器也右移一位。同時乘積寄存器最低位溢出丟棄。部分積寄存器高位補0,地位溢出后填充到乘數寄存器。因此。部分積寄存其原來的值0011變成了0001。乘數寄存器0011變成了1001(這里低位的1溢出,最高位被部分積溢出的1填充)
3、判斷乘數寄存器最低位(0001).為1。將部分積通過加法器加上被乘數0011。因此此不結束后部分積寄存器內容是(0001+0011=0100).
4、乘數寄存器右移一位,同時將部分積寄存器也有右移一位。同第2步。因此部分積寄存器原來的值0100變成了0010。乘數寄存器1001變成了0100,低位1溢出,最高位被部分積溢出的0填充。
5、判斷乘數寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0001,乘數變成了0010。
6、判斷乘數寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0000,乘數變成了1001;此時所有乘數全部處理完畢。
7、最終結果將部分積作為高位,乘數寄存器作為低位得到值為00001001 換算成10進制得到9
CPU中的除法器過程如下:
首先初始化三個寄存器存放被除數,除數,部分商,部分商會初始化為0(可初始化也可以不初始化因為會做上商過程)
首先把被除數寄存器左移2位與除數寄存器對齊:
1010<<2=10(10)
在用對齊后的被除數與除數做比較:
10(10)-10=00 剛好等於沒有溢出所以上商1,商為0001,在將相減的結果(00)放到被除數有效的高位此時被除數有效的最高位為10(10),此時被除數的bit位為0010,
在左移1位:
0010<<1=001(0)
在用位移后的被除數與除數做比較:
001(0)-10=11 符號位為1負數也就是說被除數小於除數所以上商0,商為0010
在左移0位
0010<<0=0010
在用位移后的被除數與除數做比較:
0010-10=00 兩個符號位都為0相等所以上商1,商為101,在將其放到商的有效高位此時被除數的有效bit位為最低的兩位(00)10
所有的被除數處理完后商做結果被除數做余數,商為101,余數為00,轉換成十進制就是5余0!