機(jī)器語(yǔ)言:由0和1組成的機(jī)器指令
高級(jí)語(yǔ)言:更接近人類的語(yǔ)言如 oc,swift,c...
一條匯編指令和一條機(jī)器指令是一一對(duì)應(yīng)的
機(jī)器指令可以反匯編成匯編指令但是不可能從匯編指令反編譯成高級(jí)語(yǔ)言
不同的平臺(tái)生成的匯編指令不同
匯編語(yǔ)言的特點(diǎn):
可以直接訪問(wèn)案疲,控制各種硬件設(shè)備扛拨,比如存儲(chǔ)器猫缭,CPU等能最大限度發(fā)揮硬件的功能
不受編譯器的限制葱弟,對(duì)生成的二進(jìn)制代碼進(jìn)行完全控制
目標(biāo)代碼剪短,占用的內(nèi)存少猜丹,執(zhí)行速度快(相對(duì)于高級(jí)語(yǔ)言)
注:高級(jí)語(yǔ)言一條指令是有好多天匯編指令組成所以速度相對(duì)來(lái)說(shuō)會(huì)慢
每一種型號(hào)的cpu都有自己的機(jī)器指令\匯編指令集芝加,所以匯編指令不具備可移植性
知識(shí)點(diǎn)過(guò)多,不易于編寫射窒,調(diào)試和維護(hù)
不區(qū)分大小寫
app的執(zhí)行過(guò)程
CPU沒辦直接去硬盤讀文件只能去內(nèi)存取
單位換算
每8個(gè)二進(jìn)制位就是一個(gè)字節(jié)藏杖,而內(nèi)存中最小單元是一個(gè)字節(jié),一個(gè)字節(jié)的單位是Byte, 一個(gè)二進(jìn)制單位是bit
1B = 8bit 一個(gè)二進(jìn)制位對(duì)應(yīng)一個(gè)0或者1
內(nèi)存中 2個(gè)16進(jìn)制位表示一個(gè)字節(jié)
1M 是數(shù)量單位
1Mb 是容量單位表示內(nèi)存大小
總線
地址總線
地址總線是由一根根的導(dǎo)線組成脉顿,它有多少根我們稱之為寬度蝌麸,比如有10根寬度就是10.
地址總線寬度決定內(nèi)存需求的大小。16位的有16根內(nèi)存需求1Mb 32位的有32根內(nèi)存需求是4G
寬度決定了CPU的尋址能力
寬度決定了地址總線的尋址能力艾疟。
地址總線的寬度和尋址能力關(guān)系:(個(gè)人理解)———以8086的CPU舉例来吩。它的寬度是20。每根地址總線對(duì)應(yīng)一個(gè)高頻或者低頻信號(hào)蔽莱,即只能傳0或者1.所以他的范圍是20個(gè)0 ~ 20個(gè)1弟疆, 轉(zhuǎn)換成16進(jìn)制是 0x00000 ~ 0xFFFFF(這就是能訪問(wèn)內(nèi)存地址的范圍,內(nèi)存的最大值是0xFFFFF 即 0x00000盗冷,0x00001兽间,?0x00002 … 0xFFFFF 這中間共1024*1024個(gè),一個(gè)地址對(duì)應(yīng)一個(gè)內(nèi)存單元)轉(zhuǎn)換成十進(jìn)制是 0 ~ 1024*1024 ?即20根地址總線能訪問(wèn)的內(nèi)存單位的個(gè)數(shù)范圍是0 ~ 1024*1204 正塌。所以數(shù)量是1024*1024 = 1M(數(shù)量單位-內(nèi)存單位的個(gè)數(shù))而每個(gè)內(nèi)存單位對(duì)應(yīng)8個(gè)二進(jìn)制單位即一個(gè)字節(jié)(B)嘀略,內(nèi)存單位的上限是1024*1024個(gè)(M)所以對(duì)應(yīng)的內(nèi)存的容量是(1024*1024)B = 1Mb。尋址能力是1Mb
地址總線最大40根目前 - 輸出的是地址的值
xp32位的系統(tǒng)地址總線是32根
數(shù)據(jù)總線
所說(shuō)的32位64位的系統(tǒng)是指數(shù)據(jù)總線的寬度
寬度決定cpu單次數(shù)據(jù)的傳輸量直接影響cpu執(zhí)行效率和性能 - (吞吐量)
傳輸?shù)氖菙?shù)據(jù)乓诽,每根只能傳1\0 (單位是bit)所以8根數(shù)據(jù)總線傳輸1B即1個(gè)字節(jié)帜羊。一個(gè)數(shù)據(jù)總線對(duì)應(yīng)一個(gè)bit位 8個(gè)bit位是一個(gè)字節(jié)(Byte)
數(shù)據(jù)總線傳的不是數(shù)據(jù)而是內(nèi)存地址
數(shù)據(jù)總線傳遞的是數(shù)據(jù)地址而不會(huì)傳二進(jìn)制數(shù)據(jù)為了性能
控制總線 -- 傳輸各種命令
內(nèi)存里的數(shù)據(jù)默認(rèn)的都是用16進(jìn)制表示
內(nèi)存地址都是從低到高 我們能用的是低地址區(qū)高地址區(qū)是給系統(tǒng)用的 - 內(nèi)存安全的地址是低地址
內(nèi)存地址的空間大小受CPU地址總線寬度的限制
CPU的硬件結(jié)構(gòu)
CPU內(nèi)部鏈接的情況寄存器 運(yùn)算器 控制器
寄存器
8086有14個(gè)寄存器,都是16位的寄存器鸠天,可以存放2個(gè)字節(jié)
通過(guò)改變寄存器的內(nèi)容來(lái)改變cpu的操作
不同的CPU個(gè)數(shù)結(jié)構(gòu)名稱都是不同的 ?相同的是有一個(gè)寄存器改變cup的行為
AX寄存器分高八位和低八位 ?H:高位寄存器 L:低位寄存器
所有的內(nèi)存單元都有唯一的地址讼育,叫做物理地址。內(nèi)存中最小的單元稠集。
尋址方式
段地址 * 16 + 偏移地址
寫法舉例: 233DFH -> 2330H :00DFH (*16省略奶段,系統(tǒng)自動(dòng)執(zhí)行了)
2300H :03DFH
.
.
.
地址加法器
CPU中的一個(gè)部件
作用:以8086為例,將兩個(gè)16進(jìn)制位放到地址加法器中剥纷,合成一個(gè)用二十位地址總線能輸出的地址
內(nèi)存分段管理
從上到下內(nèi)存越來(lái)越大
因?yàn)閷ぶ贩绞剿亩蔚刂?偏移地址 所以 可以把內(nèi)存分成一個(gè)個(gè)的段痹籍。首先由段地址找到是哪個(gè)段然后由偏移地址找到對(duì)應(yīng)的具體地址。類似于c中數(shù)組
8086段寄存器
8086在訪問(wèn)內(nèi)存時(shí)要由相關(guān)部件提供內(nèi)存單元的段地址和偏移地址晦鞋,送入地址加法器合成物理地址
什么是部件提供段地址蹲缠?
段地址在8086的段寄存器中存放
8086有4個(gè)段寄存器:CS棺克、DS、SS线定、ES娜谊,當(dāng)CPU需要訪問(wèn)內(nèi)存時(shí)由這4個(gè)段寄存器提供內(nèi)存單元的段地址
CS (Code Segment):代碼段寄存器
DS (Data Segment):數(shù)據(jù)段寄存器
SS (Stack Segment):堆棧段寄存器
ES (Extra Segment):附加段寄存器