iT邦幫忙

DAY 15
1

淺入淺出-計算機組織系列 第 15

淺入淺出計組之旅(15)MIPS 體系結構 (5)

  • 分享至 

  • xImage
  •  

終於來到鐵人賽的一半了~!!

接下來讓我們來看分支指令的部分

分支指令是用來改變程式執行流向的指令

可以分成兩種:條件式 (Conditional Branch)、以及非條件式 (Unconditional Branch)

條件式 (Conditional Branch) 也就是根據比較結果改變程式流向

有 branch if equal (beq) 和 branch if not equal (bne) 兩種

非條件式就只有 jump (j) 一種

今天先來看條件式分支

條件式分支指令實際上是 I 型指令

beq rs, rt, imm #opcode = 4

bne rs, rt, imm #opcode = 5

我們以 beq reg1, reg2, L1 為例

這條指令表示 if (value in reg1) == (value in reg2) goto L1

前兩個為暫存器,後面是 16bits的存儲器位址

CPU 會判斷兩個暫存器內容是否相同,若相同則跳至 L1 所指的位址去取下一條指令

否則就接下去執行下一條指令

在 MIPS 中是沒有 flag 暫存器的,所以在這條指令中可以看到比較和跳轉是在同一條指令上執行

在此也與 x86 的條件轉移指令不同,因為在 x86 中條件轉移指令是根據當前 flag 的狀態來判斷

如此一來轉移指令通常就會接在影響 flag 的算術會運算邏輯指令之後

MIPS 當初設計理念就是希望可以減少這種指令間互鎖的關係,也就是希望避免指令之間相互影響

所以在此也體現了兩種不同的設計模式

從條件指令格式可以看出 immediate 只有 16bits 的位移量,那要怎麼有效的利用呢?

如果以當前 PC 為基準,16bits 的偏移量可以表示正負 2^15bytes 位址

但是 MIPS 指令固定長度為 32bits = 4bytes

所以最後 2bit 一定會是 0,如此一來偏移量就可以調整成 2^17bytes 位址

最後目標地址計算方式如下:

分支條件成立:PC = PC + 4;分支條件不成立:PC = (PC+1) + (4*immediate)

明天將繼續介紹非條件式轉移的指令格式~


上一篇
淺入淺出計組之旅(14)MIPS 體系結構 (4)
下一篇
淺入淺出計組之旅(16)MIPS 體系結構 (6)
系列文
淺入淺出-計算機組織30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Hamburger_King
iT邦新手 5 級 ‧ 2021-07-24 17:52:19

我想問branch 16 bits 做sign extended成32 bits 再shift 2 bits 這樣最前面31 30 bit遺失對記憶體位址不影響嗎?

我要留言

立即登入留言