計算機底層儲存的基本單位為bit 也就是0與1,數字的表示也是以一串二進位制來表示。那麼如何通過一連串的二進位制來完成計算器的計算功能呢?
何為原碼反碼補碼?
在了解底層加減法之前,先了解下原碼反碼與補碼的區別
整數分為正整數與負整數
怎樣根據二進位制設定乙個數是正數還是負數?根據首位符號:0表示為正數,1表示為負數
正整數的原碼反碼與補碼相等
eg: 1的原碼0000 0001 反碼:0000 0001 補碼:0000 0001
負整數的原碼符號位不變,其他位取反,則為負整數的反碼,補碼在反碼的基礎上再加1。
eg: -1的原碼1000 0001 反碼:1111 1110 補碼:1111 1111
加減法運算
接下來我們通過乙個例子1+(-3)來了解底層如何實現加減法(乘除法同理)
由於計算機儲存的二進位制都為補碼,因此在操作之前先計算出1與-3的補碼
1: 原碼:0000 0001,反碼:0000 0001 ,補碼:0000 0001
-3:原碼:1000 0011 ,反碼:1111 1100 ,補碼:1111 1101
加減法計算大體分為5部分:
1.求異或^
首先對這倆數求異或操作求值;(啥是異或,倆數的對應位做比較,如果不相等則結果為1,相等則為0)
0000 0001
1111 1101
---------^
1111 1100
求出該值之後記錄下來,後邊會用到!!
2.求與結果&
緊接著對這倆數進行與操作(對應位的倆數都為1則結果為1,否則都為0),如果求出的與結果為0,則倆數相加結束,計算的結果為上一步的異或所求出的值。如果不為0,則表示需要進製,則對異或的結果進行左移一位操作
0000 0001
1111 1101
---------&
0000 0001
3.左移操作<<
如果第2步與的結果不為0,則左移一位如下所示:
0000 0001
--------- <<1
0000 0010
4.求異或^
緊接著將該值與上一步求出來的異或的結果再次進行異或操作
1111 1100
0000 0010
---------^
1111 1110
5.驗證
同2一樣,對倆數進行與操作,如果與操作的結果為0,則表示運算結束,結果為上一步的異或值,否則繼續重複步驟2
1111 1100
0000 0010
---------&
0000 0000
由於求與的結果為0,則不存在進製,則計算結束,最終的結果為1111 1110;
補碼:1111 1110 轉為反碼(減一):1111 1101 轉為原碼(符號位不變,其他位取反):1000 0010 轉為10進製:-2
二進位制加 減法程式設計實驗
1 熟悉組合語言二進位制多位元組加法基本指令的使用方法 2 熟悉組合語言二進位制多位元組減法基本指令的使用方法 3 掌握組合語言程式設計的一般結構。1 硬體環境 微機cpu 486以上,500mb以上硬碟,32m以上記憶體 2 軟體環境 裝有masm 5.0 debug link和edit等應用程式...
二進位制的減法
這裡需要說明的是,在計算機中做二進位制數運算時,一定要明確是在多少位的整型前提下進行的,這樣才能夠正確處理位數溢位的問題。其實減法也可以看成加法 6 4 無論加減法總結 補碼相加 結果再求補碼 1表示負 0表示正 在計算機中,負數是使用它的補碼來表示的。所謂補碼,就是反碼 1。所謂反碼,就是二進位制...
二進位制的加減法與標誌位CF OF數值的判斷方法
首先先來解釋一下標誌位of cf不同數值所代表的含義 of為1時,代表有符號數越界,即當8位時,超出 128 127的範圍 of為0時,代表有符號數未越界 cf為1時,代表無符號數越界,即當8位時,超出0 255的範圍 cf為0時,代表無符號數未越界 另外cf在迴圈移位 移位類指令中用來儲存從最高位...