計算機速成課 第八集 指令和程序

1. 給 CPU 一些指令來運行

  • CPU 強大,是因爲可編程
  • 寫入不同指令,就會執行不同任務
  • 是一塊硬件,可以被軟件控制

2. 舉例:00101110

  • 假設前 4 位是操作碼,後四位指定一個內存地址,或寄存器
  • 假設 0010 代表 LOAD_A 指令,然後把後四位 1110(十進制的14) 指定內存地址的值,放入寄存器A。於是,我們把 0010 1110 看成 “LOAD_A 14” 的指令
  • 具體舉例:“LOAD_A 14”是從地址 14 中拿到數字 3,放入寄存器 A(最好看圖,大家可以看原視頻,更清晰)
  • 兩個寄存器裏面的數字相加,順序很重要,因爲結果會存在第二個寄存器
  • 視頻用到的指令:LOAD_A, LOAD_B, STORE_A, ADD, SUB, JUMP, JUMP_NEG HALT
  • SUB:減法
  • JUMP:跳轉:讓程序跳轉到新位置
    • JUMP 0 可以跳回開頭
    • 底層的實現方式是把指令後 4 位代表的內存地址的值覆蓋掉“指令地址寄存器”裏的值
    • 只有特定條件滿足了,才能 JUMP,比如 JUMP NEGATIVE 就是條件跳轉的一個例子
    • 其他類型的 JUMP
      • JUMP IF EQUAL: 如果相等
      • JUMP IF GREATER: 如果更大
  • JUML_NEGATIVE
    • 只在 ALU 的“負數標誌”(算數結果爲負,“負數標誌”纔是真)爲真時,進行 JUMP,如果是假,就會執行
  • HALT
    • 計算機需要知道什麼時候該停下來,否則 CPU 會不停地跑下去,這叫無限循環(infinite loop)
    • 指令和數據:都是存在同一個內存裏面的,在根本層面上沒有什麼區別,都是二進制數,HALT 很重要,能區分指令和數據

3. 軟件強大之處

  • 讓我們做到硬件做不到的事情,例如:ALU 沒有除法功能,程序給了我們這個功能,
  • 兩種策略:
    • 出現原因:因爲 4 位二進制無法表示數字 17,因此,真正的現代 CPU 用兩種策略: ,最直接的方法是用更多位來代表指令,比如 32 位或 64 位,這叫指令長度。
    • 策略1: 指令長度(instruction length)
    • 策略2: 可變指令長度(variable length instruction):
      • 例如:某個 CPU 用 8 位長度的操作碼,如果看到 HALT 指令,HALT 不需要額外數據,那麼會馬上執行
      • 如果看到 JUMP,它得知道位置值,這個值在 JUMP 的後面,這叫「立即值」(Immediate Value)
      • 這樣設計,指令可以是任意長度,但是會讓讀取階段複雜一點點

4. 真實的例子

  • 1971 年,英特爾發佈了 4004 處理器,是第一次把 CPU 做成一個芯片,給後來的英特爾處理器打下了基礎
  • 它支持 46 個指令,足夠做一臺能用的電腦,
  • 處理器從 1971 年到現在發展巨大,現代 CPU,例如英特爾酷睿 i7,有上千個指令和指令變種,長度從 1 到 15 個字節
  • 指令越來越多,是因爲給CPU設計了越來越多的功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章