《程序是怎樣跑起來的》筆記1

注:本系列內(nèi)容為閱讀《程序是怎樣跑起來的》書籍后的記錄筆記,部分內(nèi)容參考于書中眉抬,轉(zhuǎn)載請注明出處唐责。

第一章 CPU是什么

1.1 CPU構(gòu)成

CPU構(gòu)成:CPU是由寄存器控制器卑惜、運算器時鐘四個部分構(gòu)成膏执。

  • 寄存器:可用來暫存指令、數(shù)據(jù)等處理對象露久,可以將其看做是內(nèi)存的一種更米。
  • 控制器:負(fù)責(zé)把內(nèi)存上的指令、數(shù)據(jù)等讀入寄存器毫痕,并根據(jù)指令的執(zhí)行結(jié)果來控制整個計算機(jī)征峦。
  • 運算器:負(fù)責(zé)運算從內(nèi)存讀入寄存器的數(shù)據(jù)迟几。
  • 時鐘:負(fù)責(zé)發(fā)出CPU開始計時的時鐘信號。(部分CPU的時鐘位于CPU外部)

CPU簡易工作流程:程序啟動后栏笆,根據(jù)時鐘信號类腮,控制器會從內(nèi)存(DRAM)中讀取指令和數(shù)據(jù)。通過對這些指令加以解釋和運行竖伯,運算器就會對數(shù)據(jù)進(jìn)行運算存哲,控制器根據(jù)該運算結(jié)果來控制計算機(jī)。

詞條解釋:

  • 高級編程語言:能夠使用類似于人類語言語法來記述的語言七婴,如BASIC祟偷、C、C++打厘、OC等
  • 低級編程語言:與高級編程語言相對修肠,包括機(jī)器語言和匯編語言。
  • 匯編語言:采用助記符來編寫程序的語言户盯,有時也稱之為匯編嵌施。
  • 助記符:通常為指令功能的英文單詞的簡寫,比如mov和add分別是數(shù)據(jù)的存儲(move)和相加(addition)的簡寫莽鸭。
  • 匯編:通常將匯編語言編寫的程序轉(zhuǎn)化成機(jī)器語言的過程稱之為匯編吗伤。
  • 反匯編:機(jī)器語言程序轉(zhuǎn)化成匯編語言程序的過程則稱之為反匯編。
  • 編譯:將使用高級編程語言編寫的程序轉(zhuǎn)換為機(jī)器語言的過程硫眨。

1.2 寄存器的重要性

對于程序員來說足淆,CPU可以看做是具有各種功能的寄存器的集合體。
寄存器種類:

  • 累加寄存器:只有一個礁阁,存儲執(zhí)行運算的數(shù)據(jù)和運算后的數(shù)據(jù)巧号。
  • 標(biāo)志寄存器:只有一個,存儲運算處理后的CPU的狀態(tài)姥闭。
  • 程序計數(shù)器:只有一個丹鸿,存儲下一條指令所在內(nèi)存的地址。
  • 棧 寄 存 器 :只有一個棚品,存儲棧區(qū)域的起始地址靠欢。
  • 指令寄存器:只有一個,存儲指令铜跑。CPU內(nèi)部使用门怪,程序員無法通過程序?qū)υ摷拇嫫鬟M(jìn)行讀寫操作。
  • 基址寄存器:多個疼进,存儲數(shù)據(jù)內(nèi)存的起始地址薪缆。
  • 變址寄存器:多個秧廉,存儲基址寄存器的相對地址伞广。
  • 通用寄存器:多個拣帽,存儲任意數(shù)據(jù)。

詞條解釋:
溢出:是指運算的結(jié)果超出了寄存器的長度范圍嚼锄。

1.3 程序計數(shù)器

程序計數(shù)器決定著程序的執(zhí)行流程减拭。
CPU每執(zhí)行一個指令,程序計數(shù)器的值就會加1区丑,然后CPU的控制器就會參照程序計數(shù)器的數(shù)值拧粪,從內(nèi)存中讀取命令并執(zhí)行。

1.4 條件分支和循環(huán)分支

程序的流程分為順序執(zhí)行沧侥、條件分支循環(huán)三種可霎。

  • 順序執(zhí)行:按照命令地址內(nèi)容的順序執(zhí)行指令。每次執(zhí)行一個指令程序宴杀,程序計數(shù)器的值就自動加1癣朗。
  • 條件分支:是指根據(jù)條件執(zhí)行任意命令地址的指令。程序計數(shù)器執(zhí)行跳轉(zhuǎn)指令旺罢,程序計數(shù)器的值指向任意指定值旷余。
  • 循環(huán)執(zhí)行:是指重復(fù)執(zhí)行同一命令地址的指令。程序計數(shù)器執(zhí)行跳轉(zhuǎn)指令扁达,程序計數(shù)器的值指向任意指定值正卧。

CPU在進(jìn)行運算時,標(biāo)志寄存器的值會根據(jù)運算結(jié)果自動設(shè)定跪解。條件炉旷、循環(huán)分支在跳轉(zhuǎn)指令前會比較運算,是否執(zhí)行跳轉(zhuǎn)指令惠遏,由CPU在參考標(biāo)志寄存器的數(shù)值后進(jìn)行判斷砾跃。
運算結(jié)果的正、負(fù)和零三種狀態(tài)是由標(biāo)志寄存器的三個位表示节吮。
以32位CPU(寄存器的長度是32位)的標(biāo)志寄存器為例抽高,如圖:


標(biāo)志寄存器.png

CPU的比較機(jī)制,就是一個數(shù)減去另一個數(shù)透绩,然后將結(jié)果保存到標(biāo)志寄存器中翘骂。

1.5 函數(shù)的調(diào)用機(jī)制

為了處理在函數(shù)內(nèi)部處理完成后,處理流程(程序計數(shù)器)能夠再返回到函數(shù)調(diào)用點繼續(xù)執(zhí)行帚豪,機(jī)器語言采用的是call指令return指令碳竟。
在將函數(shù)的入口地址設(shè)定到程序計數(shù)器之前,call指令會把調(diào)用函數(shù)后要執(zhí)行的指令的地址存儲在棧內(nèi)存中狸臣。函數(shù)處理完畢后莹桅,再通過函數(shù)的出口來執(zhí)行return指令,把存儲在棧中的指令地址設(shè)定到程序計數(shù)器中烛亦。

1.6 通過地址和索引實現(xiàn)數(shù)組

數(shù)組的實際地址 = 基址寄存器(固定) + 變址寄存器(變化)
1000 0000 = 1000 0000 + 0000 0000
1000 0001 = 1000 0000 + 0000 0001
1000 0002 = 1000 0000 + 0000 0002

變址寄存器相當(dāng)于高級編程語言中數(shù)組的索引功能诈泼。

1.7 機(jī)器語言的指令

機(jī)器語言指令的主要類型和功能:

類型 功能
數(shù)據(jù)傳送指令 寄存器和內(nèi)存懂拾、內(nèi)存和內(nèi)存、寄存器和外圍設(shè)備之間的數(shù)據(jù)讀寫和操作
運算指令 用累加寄存器執(zhí)行算數(shù)運算铐达、邏輯運算岖赋、比較運算和移位運算
跳轉(zhuǎn)指令 實現(xiàn)條件分支、循環(huán)和強(qiáng)制跳轉(zhuǎn)等
call\return指令 函數(shù)的調(diào)用瓮孙、返回調(diào)用前的地址
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唐断,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杭抠,更是在濱河造成了極大的恐慌脸甘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偏灿,死亡現(xiàn)場離奇詭異斤程,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)菩混,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門忿墅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沮峡,你說我怎么就攤上這事疚脐。” “怎么了邢疙?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵棍弄,是天一觀的道長。 經(jīng)常有香客問我疟游,道長呼畸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任颁虐,我火速辦了婚禮蛮原,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘另绩。我一直安慰自己儒陨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布笋籽。 她就那樣靜靜地躺著蹦漠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪车海。 梳的紋絲不亂的頭發(fā)上笛园,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼研铆。 笑死闸度,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚜印。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼留量,長吁一口氣:“原來是場噩夢啊……” “哼窄赋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起楼熄,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忆绰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后可岂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體错敢,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年缕粹,在試婚紗的時候發(fā)現(xiàn)自己被綠了稚茅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡平斩,死狀恐怖亚享,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绘面,我是刑警寧澤欺税,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站揭璃,受9級特大地震影響晚凿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瘦馍,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一歼秽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧情组,春花似錦哲银、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亚脆,卻和暖如春做院,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工键耕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留寺滚,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓屈雄,卻偏偏與公主長得像村视,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酒奶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容