8 | 程序 & 指令

上一次把 RAM 控制單元 ALU 時(shí)鐘結(jié)合在一起,做了簡化版的CPU虱肄。

給CPU 加指令運(yùn)行致板。

CPU 之所以強(qiáng)大是因?yàn)樗强删幊痰模瑢懭氩煌闹噶顖?zhí)行不同的任務(wù)咏窿。

CPU 是硬件 可以被軟件控制斟或。

image.png

上次的RAM 沒地地址存8位,前4位是操作碼集嵌,后四位是內(nèi)存地址萝挤,或寄存器。

地址換成指令方便理解:

image.png
  1. Load A 14 把3 放入寄存器A
  2. Load B 15 把14放入寄存器B
  3. ADD A B 把寄存器A 寄存器B 相加根欧,但順序很重要怜珍,因?yàn)榻Y(jié)果要4存入第二個寄存器中。
  4. store a 13 把寄存器A存如 RAM 13
image.png

4個指令也只能做這個了

新加指令:

  • Sub :兩個指令相減

  • JUMP :讓程序跳轉(zhuǎn)新位置凤粗,可以改變指令順序或跳過指令
    jump 0 跳回開頭酥泛,底層實(shí)現(xiàn)方式是把指令后4位代表的內(nèi)存地址的值。覆蓋掉指令地址寄存器的值嫌拣。

  • JUMP _ NEGATIVE : 特別版的jump
    在ALU 的負(fù)數(shù)標(biāo)志 為真時(shí)進(jìn)線JUMP

image.png

算數(shù)標(biāo)志為負(fù)數(shù)才是真柔袁,結(jié)果不是負(fù)數(shù),負(fù)數(shù)標(biāo)志為假异逐。

如果是假捶索, JUMP _ NEGATIVE 不會執(zhí)行,程序繼續(xù)灰瞻。

  • 停止 指令 HALT
    計(jì)算機(jī)需要知道什么時(shí)候該停下來腥例。
image.png

指令和數(shù)據(jù)都是存才同一個內(nèi)存里面的
他們在根本層面上沒有區(qū)別辅甥,都是二進(jìn)制數(shù)。

HALT 能區(qū)分指令或是數(shù)據(jù)

使用JUMP 燎竖,從CPU視角走一遍程序

image.png
  1. 把Load A 14 的1 存如寄存器A

  2. 把Load B 15中的1 存入寄存器B

  3. 然后Add 把寄存器B和A相加璃弄,結(jié)果放到寄存器A里面,里面是2 底瓣,就是 0010

  4. 把 寄存器A的值存入內(nèi)存地址 13 值是 2 谢揪,0010

  5. JUMP 2 ,把指令寄存器的值(現(xiàn)在是4 )改成2捐凭,先一步不是HALT 拨扶,還是ADD B A 相加。

  6. 寄存器 A是2 B 是1 相加是3茁肠,放入寄存器A 患民,然后存入 內(nèi)存地址12 是3,然后有碰到JUMP 2 垦梆。匹颤。。托猩。叫無限循環(huán)

所以 跳轉(zhuǎn)需要加上條件印蓖。

JUMP _ NEGATIVE
JUMP IF EQUAL 如果相等
JUMP IF GREATER 如果更大

修改下指令再來一遍。

image.png

執(zhí)行循序:

Load A 14 是 11 存寄存器A
Load B 15 是5 存寄存器B
SUB B A B- A 11 - 5 = 6 京腥,結(jié)果存入寄存器A
JUMP NEGATIVE 結(jié)果是6 假赦肃,CPU 不執(zhí)行跳轉(zhuǎn)。
JUMP 2 沒有條件直接執(zhí)行
回到 SUB B A B- A 6 - 5 = 1 公浪,結(jié)果存入寄存器A他宛。
JUMP NEGATIVE 5 結(jié)果是1 假,CPU 不執(zhí)行跳轉(zhuǎn)欠气。
回到 SUB B A B- A 1 - 5 = -4 厅各,結(jié)果存入寄存器A。
JUMP NEGATIVE 5 結(jié)果是-4 真预柒,CPU 執(zhí)行 指令5
ADD B A - 4 + 5 = 1 存入寄存器 A
STORE A 13 1 存入 內(nèi)存 13
HALT 停止

雖然只有7個指令但是CPU 執(zhí)行了13個指令队塘。
這個其實(shí)算余數(shù) 11 / 5 =1

如果多加幾行指令,我們可以跟蹤循環(huán)了多少次宜鸯。

軟件的好處讓任意兩個數(shù)可以執(zhí)行人灼,軟件讓我們做的硬件做不到的事情。

ALU 可以沒有除法功能顾翼,是程序給了我們這個功能。

別的程序也可以用我們的除法程序奈泪,來做其他事情 -意味著一層新 抽象适贸。


我們這里了假設(shè)的CPU 很基礎(chǔ)灸芳,指令都是8位的,前面4個是操作碼拜姿,最多也就16個指令烙样,后4位內(nèi)存地址也只有16個值。指令太少都不能jump 17蕊肥。

因此谒获,真正的現(xiàn)代CPU 兩種策略

  1. 用更多位代表指令,32 64 位 - 指令長度壁却。
  2. 可變指令長度 批狱,如 操作碼是8位,看到HALT 指令展东,HALT 指令不需要額外數(shù)據(jù)赔硫,馬上會執(zhí)行。
    如果看到j(luò)ump 盐肃,要知道位置值爪膊,這個值在jump 的后面 叫立即值。
    這樣設(shè)計(jì)指令可以是任意值砸王。
    但會讓讀取階段復(fù)雜一點(diǎn)推盛。

我們拿來舉例的CPU 和指令集都是假設(shè)的。
是為了展示核心原理谦铃。

來看看真的CPU例子耘成。

1971 年 Intel 發(fā)布了 4004 處理器,第一次把CPU 做成一個芯片荷辕。
給后來的Intel 處理器打下基礎(chǔ)凿跳。

支持46 個指令。

image.png

有常用的指令疮方,也用8位的 “立即值” 來執(zhí)行JUMP 標(biāo)識更多的地址控嗜。

從1971 - 至今發(fā)展巨大。CPU I7有上千個指令和指令變種骡显,長度從1 - 15個字節(jié)疆栏。

光 ADD 指令就有很多變種。

指令越多就是給cpu 設(shè)計(jì)了越來越多的的功能惫谤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壁顶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溜歪,更是在濱河造成了極大的恐慌若专,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝴猪,死亡現(xiàn)場離奇詭異调衰,居然都是意外死亡膊爪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門嚎莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來米酬,“玉大人,你說我怎么就攤上這事趋箩≡叨睿” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵叫确,是天一觀的道長跳芳。 經(jīng)常有香客問我,道長启妹,這世上最難降的妖魔是什么筛严? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮饶米,結(jié)果婚禮上桨啃,老公的妹妹穿的比我還像新娘。我一直安慰自己檬输,他們只是感情好照瘾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丧慈,像睡著了一般析命。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逃默,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天鹃愤,我揣著相機(jī)與錄音,去河邊找鬼完域。 笑死软吐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吟税。 我是一名探鬼主播凹耙,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肠仪!你這毒婦竟也來了肖抱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤异旧,失蹤者是張志新(化名)和其女友劉穎意述,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荤崇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年镐依,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片天试。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖然低,靈堂內(nèi)的尸體忽然破棺而出喜每,到底是詐尸還是另有隱情,我是刑警寧澤雳攘,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布带兜,位于F島的核電站,受9級特大地震影響吨灭,放射性物質(zhì)發(fā)生泄漏刚照。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一喧兄、第九天 我趴在偏房一處隱蔽的房頂上張望无畔。 院中可真熱鬧,春花似錦吠冤、人聲如沸浑彰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郭变。三九已至,卻和暖如春涯保,著一層夾襖步出監(jiān)牢的瞬間诉濒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工夕春, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未荒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓撇他,卻偏偏與公主長得像茄猫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子困肩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348