CPU 底層運算之乘法運算


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

 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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM