天天看點

How Program Works ?

對程式員來說CPU是什麼?

CPU包括寄存器,控制器,運算器和時鐘。對于程式員來說,隻需要知道CPU是一堆寄存器即可。比較重要的寄存器是程式計數器,基址和變址寄存器,棧寄存器。通過設定程式計數器也就是跳轉實作分支和循環。函數調用通過call指令和return指令,包括回到調用位置和函數堆棧銷毀。通過基址和變址寄存器索引指定位址的資料。

二進制有符号數?

二進制:逢2進1. 科學記數法的2進制表示,位權和基數的概念。負數表示法->擷取補數的方法:取反+1.因為正數和負數相加等于0,是以補數的概念友善計算機把減法當作加法計算,同時保證了邏輯的嚴謹性。是以8位可以表示的有符号數是,[-2^7, 2^7 -1].有符号數的取值範圍是[0,2^8 -1]。負數比正數多一個,因為0算在了正數中,最大的負數是符号位為1,其餘位均為0的位表示。左移在左側補零。算數右移在右側補符号位,邏輯右移在右側補0.符号擴充,負數從8位擴充到16位,隻需要在前面補符号位即可。所有位全是1的二進制有符号數永遠是-1.

計算機表示IEEE浮點數?

二進制辨別小數,位權成為2^-1,2^-2…和10進制無法表示1/3一樣,二進制無法表示的小數更多,它們其實都是無限循環小數,在計算機有限位數表示時,會有誤差。

浮點數包括符号位,尾數,指數和基數四部分組成,基數是2.double有64位,float有32位。分别是符号+指數+尾數 = 1+11+52,1+8+23.

尾數部分采用正規表達式,即按照特性的規則表示資料的形式,除了小數外,字元串和資料庫都有自己的正規表達式。這裡小數的正則指的是将小數點前面的值固定為1,這樣就可以省出1位,提高精度。

指數部分采用EXCESS系統,表示将指數部分表示範圍的中間值取為0,使得負數不需要符号位來表示。也就是說,8位指數部分,最大值11111111=255,255/2=127,是以127表示0,11位,11111111111=2047,2047/2=1023,即1023表示0.是以計算出指數部分的值,然後減去127或者1023就可以得到相應的指數部分的數值。

是以單精度浮點數的取值範圍: 正數 [2^-23 * 2^-127, 2^128]=[1.4E-45,3.4E+38],負數[-3.4E+38,-1.4E-45]

雙精度浮點數的取值範圍:正數[2^-52 * 2^-1023, 2^1024]=[4.9E-324, 1.8E+308],負數[-1.8E+308,-4.9E-324]

為了規避浮點數的誤差,可以轉換為整數後再進行計算。

何為運作環境?

指的是作業系統加硬體,不同的CPU和作業系統需要不同的軟體。具體而言,本地代碼不同。Windows克服了除CPU之外的其他差别。不同作業系統API不同。

何為BIOS?

Basic Input/Output System,存儲在ROM中,負責啟動作業系統的程式。

通過彙編語言學習機器代碼

彙編語言和本地代碼時一一對應的,彙編語言的文法操作碼加操作數,操作碼也就是助記符,類似于mov,and,push,pop,cal,ret等等。

函數調用機制?

函數的參數通過堆棧來傳遞,傳回值通過寄存器來傳回。DATA和BSS段存儲全局變量,一個初始化,一個未初始化。

IRQ?

Interrupt Request 中斷申請,一般是硬體中斷請求。

DMA?

Direct Memory Access,在不通過CPU的前提下,外圍裝置直接和主存進行資料傳送。

文字和圖檔的顯示機制,GPU?

VRAM,Vedio RAM,顯示器顯示的資訊始終在VRAM中。

Reference

程式是怎樣跑起來的?

繼續閱讀