軟體的 64bit v.s. 32bit


-- rem slimetw

想學組合語言就一定要先知道硬體, 目前常見的 intel x86 結構, 最核心的部份是 CPU 的 core , 但更深入去看, 是稱為"暫存器", 而 CPU 能處理的事情, 需要把資料或資料所在的位置存在暫存器內才能處理.

而暫存器的大小, 就是 32bit (80386之後)或 64bit (哪一代開始的已經忘了), (也有人用記憶體定址來比, 個人採用暫存器來比)

如果用來計算, 一個 16bit 暫存器最大可以用的數值就是 2^16=65536 , 應用上就是 0~65535 或 -32768~32767 , 而 32bit 暫存器就是可以處理 -2147483648~2147483647 .
這樣就可以發現, 如果要處理的資料, 超過暫存器的大小, 就需要切割後再組合, 而切割再組合的方式, 就是演算法應用的地方.

而軟體層面還要分很多層, 雖然 80386 開始就是 32bit 的暫存器, 但是 DOS 基本上是 16bit , 所以軟體也就只能用 16bit , 很多計算需要切割.

而為了方便程式開發, 作業系統與程式開發軟體通常會有相關的程式庫協助這一部份的處理, 也就是在寫高階程式時, 雖然只是 i = i + 1, 程式軟體會先找到 i 的位置, 確認使用大小, 存在記憶體內, 再把記憶體這區的定址丟給 CPU , 叫 CPU 把這區 +1 , 再回寫到記憶體中.