一泻拦、引言
計(jì)算機(jī)語(yǔ)言分類(lèi):
- 機(jī)器語(yǔ)言:計(jì)算機(jī)可直接識(shí)別和處理的語(yǔ)言,機(jī)器語(yǔ)言通常是以數(shù)字或數(shù)字串的形式
- 匯編語(yǔ)言:用易于記憶的字母序列代替數(shù)字命令,匯編語(yǔ)言和機(jī)器語(yǔ)言差不多
- 高級(jí)語(yǔ)言:高級(jí)語(yǔ)言旨在使編程更容易氨鹏,高級(jí)語(yǔ)言以更接近自然語(yǔ)言的形式表述程序。高級(jí)語(yǔ)言的一條命令压状,往往相當(dāng)于匯編語(yǔ)言的幾條命令
二仆抵、計(jì)算機(jī)體系結(jié)構(gòu)
CPU(中央處理單元)、內(nèi)存
2.1 內(nèi)存結(jié)構(gòu)
- 內(nèi)存存儲(chǔ)單元
所有存儲(chǔ)單元都具有相同的固定大小
計(jì)算機(jī)的所有計(jì)算結(jié)果都存儲(chǔ)在內(nèi)存中
2.2 CPU構(gòu)造
CPU一次從內(nèi)存中讀取一條指令并執(zhí)行种冬,CPU執(zhí)行指令的步驟就是:讀取-執(zhí)行周期(指令周期/機(jī)器周期)
包括以下元件
- 程序計(jì)數(shù)器
告訴計(jì)算機(jī)從哪里提取下一條指令镣丑,CPU先查看程序計(jì)數(shù)器,提取指定內(nèi)存地址的數(shù)字娱两,傳遞給指令解碼器 - 指令解碼器
解釋指令:需要進(jìn)行何種處理(加法传轰、減法、乘法谷婆、移動(dòng)數(shù)據(jù)等)慨蛙,處理過(guò)程中涉及的那些內(nèi)存單元。
計(jì)算機(jī)指令:實(shí)際指令 + 執(zhí)行指令要用到的內(nèi)存單元 - 數(shù)據(jù)總線(xiàn)
取得存儲(chǔ)在內(nèi)存單元中用于計(jì)算的數(shù)據(jù)纪挎,CPU和內(nèi)存間的物理連線(xiàn)期贫,紐帶。計(jì)算機(jī)主板中從內(nèi)存延伸出來(lái)的排線(xiàn)异袄。 - 寄存器
特殊的高速存儲(chǔ)單元通砍。CPU中有兩種寄存器:通用寄存器和專(zhuān)用寄存器- 通用寄存器:進(jìn)行主要運(yùn)算的地方,CPU中通用寄存器很少,計(jì)算時(shí)絕大多數(shù)信息存儲(chǔ)在主內(nèi)存中封孙,只有CPU處理才能提取到通用寄存器迹冤,處理完成后再放回到內(nèi)存。
- 專(zhuān)用寄存器:特定用途的寄存器*
- 算術(shù)邏輯單元
CPU在取回需要的所有數(shù)據(jù)后虎忌,將數(shù)據(jù)和經(jīng)過(guò)解碼的指令傳遞給算術(shù)邏輯單元處理泡徙。實(shí)際執(zhí)行指令的地方,執(zhí)行完成后將計(jì)算結(jié)果經(jīng)數(shù)據(jù)總線(xiàn)傳到指令指定的相應(yīng)內(nèi)存單元或寄存器膜蠢。
2.3 常見(jiàn)術(shù)語(yǔ)
2.4 內(nèi)存詳解
C語(yǔ)言 memory-layout 內(nèi)存布局
- 棧(stack):系統(tǒng)自動(dòng)分配空間堪藐,棧上空間是自動(dòng)分配自動(dòng)回收。棧上的數(shù)據(jù)生存周期只是在函數(shù)的運(yùn)行過(guò)程中挑围,運(yùn)行后就自動(dòng)釋放礁竞。
- 堆(heap):根據(jù)需要自己申請(qǐng)空間。堆上的數(shù)據(jù)不會(huì)自動(dòng)釋放杉辙,沒(méi)有及時(shí)釋放就會(huì)出現(xiàn)內(nèi)存泄露
2.5 尋址方式
- 立即尋址:指令本身包含要訪問(wèn)的數(shù)據(jù)模捂。例如寄存器初始化為0,指令直接給出0蜘矢,而不是告訴計(jì)算機(jī)要到那個(gè)地址讀取0
- 寄存器尋址:指令中包含要訪問(wèn)的寄存器枫绅,而不是內(nèi)存位置
- 直接尋址:指令中包含要訪問(wèn)的內(nèi)存地址。例如請(qǐng)將地址2002中的數(shù)據(jù)加載到這個(gè)寄存器中
- 變址尋址:指令中除包含一個(gè)要訪問(wèn)的內(nèi)存地址外硼端,還要指定一個(gè)變址寄存器并淋,其中包含改地址的偏移量。
- 間接尋址:指令中包含一個(gè)寄存器珍昨,改寄存器中存儲(chǔ)的是指向要訪問(wèn)數(shù)據(jù)的指針县耽。
- 基址尋址:與間接尋址類(lèi)似,但還須包括一個(gè)叫偏移量的值
for循環(huán)和內(nèi)存尋址有關(guān)系镣典?CPU高速緩存兔毙,緩存中有直接取出,不需尋址兄春,foreach循環(huán)是最快的澎剥。
正在研究中
https://blog.csdn.net/ljyf5593/article/details/6961160
2.6
-
讀取-執(zhí)行周期的完整生命周期:
Fetch(取指)->Decode(譯碼)->Execute(執(zhí)行指令)
- 如何在計(jì)算機(jī)中表示大于255的數(shù)字?
3.1 編程初體驗(yàn)
3.2
匯編語(yǔ)言需要在開(kāi)發(fā)機(jī)或docker上跑
3.3 為程序做規(guī)劃
- 條件跳轉(zhuǎn)
- 無(wú)條件跳轉(zhuǎn)
3.4 查找最大值
實(shí)際手寫(xiě)一遍代碼并理解每一行代碼的意義
學(xué)習(xí)gdb反匯編的使用赶舆,gef