Linux內(nèi)核分析 lab1 計(jì)算機(jī)運(yùn)行原理 總結(jié)

鄭卓彬 + 原創(chuàng)作品轉(zhuǎn)載請(qǐng)注明出處 + 《Linux內(nèi)核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000


前言:

? ? 第一節(jié)課矩桂,老師講了馮諾依曼計(jì)算機(jī)的程序執(zhí)行流程卷玉,以及部分匯編指令,和匯編代碼中的函數(shù)棧骤菠。


計(jì)算機(jī)程序運(yùn)行:

? ? 馮諾依曼計(jì)算機(jī)瞄沙,分為運(yùn)算器己沛、控制器、存儲(chǔ)器距境、輸入設(shè)備申尼、輸出設(shè)備五部分。其中運(yùn)算器肮疗、控制器就是計(jì)算機(jī)中的cpu晶姊,cpu中有寄存器、程序計(jì)數(shù)器伪货。當(dāng)程序在計(jì)算機(jī)中運(yùn)行時(shí)们衙,cpu中的ip寄存器存儲(chǔ)著下一條指令的地址,每當(dāng)一條指令執(zhí)行完碱呼,cpu就從ip寄存器中取出相應(yīng)指令的地址進(jìn)行解析執(zhí)行蒙挑,并且ip自動(dòng)加一指向下一條需要執(zhí)行指令的地址。


匯編基礎(chǔ):

? ? 匯編語(yǔ)言是較為底層的語(yǔ)言愚臀,也是計(jì)算機(jī)指令與高級(jí)語(yǔ)言的接口忆蚀,本章學(xué)習(xí)了基礎(chǔ)的匯編命令和8086cpu的各個(gè)寄存器作用。

寄存器作用:

圖一 ?8086寄存器作用

匯編指令:

圖二 ?匯編指令 mov

解析: ?mov指令姑裂,用于將 源 里的數(shù)據(jù)傳到 目的 ?其中該指令的源在 后面跟著的左半部分馋袜,目的在右半部分。 但是根據(jù)尋址模式的不同舶斧,會(huì)傳回不同的參數(shù)欣鳖,如寄存器模式就是將前一個(gè)寄存器中的值傳入后一個(gè)寄存器,立即數(shù)尋址就是將該數(shù)字傳到目的等茴厉。


圖三 ?匯編指令解析

解析: ?如圖泽台,左邊的一條指令就相當(dāng)與右邊的多條指令。


實(shí)驗(yàn)例子:

對(duì)于如下的c代碼 ? :

圖四 main.c

可用 gcc ?解析為中間文件矾缓,并將怀酷,將中間文件中的帶.開(kāi)頭的句子刪除,就剩下這c程序?qū)?yīng)的匯編代碼了:

對(duì)應(yīng)匯編代碼:

圖五 main.s

匯編代碼如上嗜闻,各個(gè)分段對(duì)應(yīng)圖四的函數(shù)蜕依。

匯編代碼基礎(chǔ):

1、每個(gè)函數(shù)的調(diào)用都會(huì)在該程序的棧中添加一個(gè)函數(shù)棧區(qū),用來(lái)保存該函數(shù)的上下文笔横。

2竞滓、ebp和esp寄存器:ebp寄存器指向該函數(shù)棧的棧底咐吼,且棧底的內(nèi)容存儲(chǔ)的是上一個(gè)棧底的地址吹缔。esp的內(nèi)容是棧頂?shù)牡刂贰?/p>

匯編代碼解析:

1、main函數(shù):

? ? pushl %ebp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? movl%esp, %ebp ? ? ? ? ? #以上兩條語(yǔ)句锯茄,將的ebp中的內(nèi)容存到棧中做棧底厢塘,并把ebp重新指向該棧底

? ? subl$4,%esp

? ? movl$2,(%esp) ? ? ? ? ? ? ? ?#以上兩條語(yǔ)句將數(shù)2壓棧

? ? call f ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#調(diào)用f函數(shù),是將eip中的值壓棧(函數(shù)調(diào)用回來(lái)后要執(zhí)行的指令)肌幽,并將f函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 的地址存入eip

? ? addl$3,%eax ? ? ? ? ? ? ? ? ? ?#將傳回的數(shù)與立即數(shù)3相加

? ? leave ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#將棧頂?shù)刂纷優(yōu)闂5椎刂吠砟耄簿褪鞘乖摋3蔀榭諚#bp寄存器中的值改 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?為上個(gè)棧底

? ? ret ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#結(jié)束

2喂急、f函數(shù):

? ? pushl %ebp

? ? movl%esp, %ebp ? ? ? ? #以上兩條語(yǔ)句格嘁,將的ebp中的內(nèi)容存到棧中做棧底,并把ebp重新指向該棧底

? ? subl$4,%esp

? ? movl8(%ebp), %eax ? ?

? ? movl%eax, (%esp)? ? ? #以上三條語(yǔ)句將main函數(shù)中壓棧的值2給取到eax寄存器中廊移,并且將該值也壓到f ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)的棧中

? ? call g? ? ? ? ? ? ? ? ? ? ? ? ? ? #調(diào)用g函數(shù)糕簿,是將eip中的值壓棧(函數(shù)調(diào)用回來(lái)后要執(zhí)行的指令),并將f函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 的地址存入eip

? ? leave ? ? ? ? ? ? ? ? ? ? ? ? ? ?#將棧頂?shù)刂纷優(yōu)闂5椎刂方瓶祝簿褪鞘乖摋3蔀榭諚6bp寄存器中的值改? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為上個(gè)棧底

? ? ret? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #將main函數(shù)壓棧的eip值返回到eip寄存器中,既繼續(xù)執(zhí)行調(diào)用main函數(shù)的下面一 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?條指令

3苗膝、g函數(shù):

? ? pushl %ebp

? ? movl%esp, %ebp ? ? #以上兩條語(yǔ)句殃恒,將的ebp中的內(nèi)容存到棧中做棧底,并把ebp重新指向該棧底

? ? movl8(%ebp), %eax

? ? addl$1,%eax? ? ? ? ? ? #以上兩條語(yǔ)句將f函數(shù)中壓棧的值2給取到eax寄存器中辱揭,并且加一离唐,用于返回

? ? popl %ebp ? ? ? ? ? ? ? ?#彈出f函數(shù)的棧底到ebp中

? ? ret? ? ? ? ? ? ? ? ? ? ? ? ? ? #將f函數(shù)壓棧的eip值返回到eip寄存器中,既繼續(xù)執(zhí)行調(diào)用f函數(shù)的下面一條指令


總結(jié):

? ? 我理解的計(jì)算機(jī)其實(shí)是很笨的问窃,一直的動(dòng)作就是取指令亥鬓,運(yùn)行,取指令泡躯,運(yùn)行贮竟。計(jì)算機(jī)之所以能體現(xiàn)的較為智能,是程序員一步步迭代的過(guò)程较剃,程序員將顯示生活中存在的實(shí)物或者抽象和邏輯用高級(jí)語(yǔ)言編寫出來(lái)咕别。所以計(jì)算機(jī)其實(shí)是人的思想的體現(xiàn),只是他能之分認(rèn)真的執(zhí)行工作写穴,可以24小時(shí)執(zhí)行且基本不出錯(cuò)惰拱。



真實(shí)姓名(與最后申請(qǐng)證書的姓名務(wù)必一致) + 原創(chuàng)作品轉(zhuǎn)載請(qǐng)注明出處 + 《Linux內(nèi)核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啊送,隨后出現(xiàn)的幾起案子偿短,更是在濱河造成了極大的恐慌欣孤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔逗,死亡現(xiàn)場(chǎng)離奇詭異降传,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)勾怒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門婆排,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笔链,你說(shuō)我怎么就攤上這事段只。” “怎么了鉴扫?”我有些...
    開(kāi)封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵赞枕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坪创,道長(zhǎng)炕婶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任误堡,我火速辦了婚禮古话,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锁施。我一直安慰自己,他們只是感情好悉抵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布肩狂。 她就那樣靜靜地躺著,像睡著了一般姥饰。 火紅的嫁衣襯著肌膚如雪傻谁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天列粪,我揣著相機(jī)與錄音审磁,去河邊找鬼。 笑死岂座,一個(gè)胖子當(dāng)著我的面吹牛态蒂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播费什,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钾恢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瘩蚪,我...
    開(kāi)封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泉懦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后疹瘦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體崩哩,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年拱礁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琢锋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呢灶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钉嘹,到底是詐尸還是另有隱情鸯乃,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布跋涣,位于F島的核電站缨睡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陈辱。R本人自食惡果不足惜奖年,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沛贪。 院中可真熱鬧陋守,春花似錦、人聲如沸利赋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媚送。三九已至中燥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塘偎,已是汗流浹背疗涉。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吟秩,地道東北人咱扣。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像峰尝,于是被迫代替她去往敵國(guó)和親偏窝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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