CPU 底层运算之乘法运算
CPU 運(yùn)算加減法運(yùn)算
假設(shè)計(jì)算 3+3
原碼是0011 * 0011(以4位存貯單元,因?yàn)槭窃a,最高位不代表符號(hào)位)
1. 首先 判斷 兩個(gè)加數(shù)是否有 負(fù)數(shù)(減法) 如果有 負(fù)數(shù) 先將負(fù)數(shù)轉(zhuǎn)為補(bǔ)碼進(jìn)行運(yùn)算
2. 然后將兩個(gè)正數(shù)相加 所以計(jì)算機(jī)底層只進(jìn)行加法運(yùn)算
正數(shù)的補(bǔ)碼 反碼 源碼都是本身 負(fù)數(shù)的補(bǔ)碼 是先將正數(shù)求反碼 然后將反碼+1 得到該正整數(shù)的補(bǔ)碼
模擬CPU運(yùn)算乘法的步驟:
假設(shè)計(jì)算3*3
原碼是0011 * 0011(以4位存貯單元,因?yàn)槭窃a,最高位不代表符號(hào)位)
CPU中的乘法器過程如下:
3個(gè)寄存器分別存放乘數(shù)0011 被乘數(shù) 0011 一個(gè)部分積初始值為0
1、首先判斷乘數(shù)寄存器(目前為0011)的最低位為1。如果為1則將部分積的值通過加法器加上被乘數(shù)0011。因此此步結(jié)束后部分積寄存器內(nèi)容為0011
2、將乘數(shù)寄存器右移一位,同時(shí)將部分積寄存器也右移一位。同時(shí)乘積寄存器最低位溢出丟棄。部分積寄存器高位補(bǔ)0,地位溢出后填充到乘數(shù)寄存器。因此。部分積寄存其原來的值0011變成了0001。乘數(shù)寄存器0011變成了1001(這里低位的1溢出,最高位被部分積溢出的1填充)
3、判斷乘數(shù)寄存器最低位(0001).為1。將部分積通過加法器加上被乘數(shù)0011。因此此不結(jié)束后部分積寄存器內(nèi)容是(0001+0011=0100).
4、乘數(shù)寄存器右移一位,同時(shí)將部分積寄存器也有右移一位。同第2步。因此部分積寄存器原來的值0100變成了0010。乘數(shù)寄存器1001變成了0100,低位1溢出,最高位被部分積溢出的0填充。
5、判斷乘數(shù)寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0001,乘數(shù)變成了0010。
6、判斷乘數(shù)寄存器低位為0不做加法操作直接做第2步的移位操作。既有了部分積變成0000,乘數(shù)變成了1001;此時(shí)所有乘數(shù)全部處理完畢。
7、最終結(jié)果將部分積作為高位,乘數(shù)寄存器作為低位得到值為00001001 換算成10進(jìn)制得到9
CPU中的除法器過程如下:
首先初始化三個(gè)寄存器存放被除數(shù),除數(shù),部分商,部分商會(huì)初始化為0(可初始化也可以不初始化因?yàn)闀?huì)做上商過程)
首先把被除數(shù)寄存器左移2位與除數(shù)寄存器對(duì)齊:
1010<<2=10(10)
在用對(duì)齊后的被除數(shù)與除數(shù)做比較:
10(10)-10=00 剛好等于沒有溢出所以上商1,商為0001,在將相減的結(jié)果(00)放到被除數(shù)有效的高位此時(shí)被除數(shù)有效的最高位為10(10),此時(shí)被除數(shù)的bit位為0010,
在左移1位:
0010<<1=001(0)
在用位移后的被除數(shù)與除數(shù)做比較:
001(0)-10=11 符號(hào)位為1負(fù)數(shù)也就是說被除數(shù)小于除數(shù)所以上商0,商為0010
在左移0位
0010<<0=0010
在用位移后的被除數(shù)與除數(shù)做比較:
0010-10=00 兩個(gè)符號(hào)位都為0相等所以上商1,商為101,在將其放到商的有效高位此時(shí)被除數(shù)的有效bit位為最低的兩位(00)10
所有的被除數(shù)處理完后商做結(jié)果被除數(shù)做余數(shù),商為101,余數(shù)為00,轉(zhuǎn)換成十進(jìn)制就是5余0!
總結(jié)
以上是生活随笔為你收集整理的CPU 底层运算之乘法运算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信运动看不到好友是不是被删了
- 下一篇: 刀剑乱舞小乌丸公式(刀剑2官方网站)