整數運算:CPU內部只有加法運算


學匯編的一邊兒去。我這里講的是CPU進行計算的原理。
首先我這里用MC的紅石電路模擬了一個加法器:http://www.0xaa55.com/thread-313-1-1.htm
首先加法器是怎么實現的呢?是用了非門電路。首先來看看二進制的加法:
0+0=0
0+1=1
1+0=1
1+1=10
首先來看規律。只看最低位,如果左邊的“被加數”和“加數”都一樣的話,結果的最低位是0,否則是1.
而如果“被加數”和“加數”都是1,那么就會有進位。
總結出來的規律是:
運算結果最低位=被加數 邏輯非 加數
運算結果的進位=被加數 邏輯與 加數
這個是加法器的原理。
那么回到主題,我說CPU內部只有加法運算。為什么這么說呢?來聽我講解:
CPU對於加法是用的加法運算。那么對於減法是怎么運算的呢?還是用的加法運算。
假設CPU是8位的CPU,那么,讓我來舉個例子。
01010101+11111111=101010100
得到的計算結果是個9位的二進制數。但是CPU是8位的,寄存器是8位,只能支持8位的二進制計算。多出來的這個位到哪里去了呢?不考慮
一種是CPU把一個數不斷加上另一個數,比如3*6,CPU內部就進行3+3+3+3+3+3的運算。
另一種方法是改進了的方法,我舉個例:
1010×100100
這個怎么看呢?
首先我們可以把它看成如下:
1000×100100+10×100100
這樣就簡單了,相當於100100左移3位再加上100100左移1位。
於是CPU內部就先把加數進行移位,然后將移位的加數累加起來。就得到了運算結果了。實質上來說,CPU也只是進行的加法運算。
那么除法運算呢,我這里舉個例:10010010÷00101101的商是11,余數是1011。是怎么得來的呢?
其實也和我們小學做豎式的計算一樣。
             11
       ________
101101/10010010
        101101
       --------
        1110000
         101101
        -------
           1011
就是這樣一位一位除下來。

https://www.0xaa55.com/forum.php?mod=viewthread&tid=318&extra=page%3D14


免責聲明!

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



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