• 沒有找到結果。

Chapter 4. Instruction Set

4.3 Load Instruction

Load 指令都是 2-operand 的指令,但是實際 source operand 除了指令標示的 暫存器或 immediate value 外,還有一個 Auxiliary 暫存器,以 Auxiliary 暫存器的 值作 base,以 source operand 的值當成 offset,如此可以計算出記憶體的位址以 將記憶體內的值存入目標暫存器中,關於記憶體定址的問題,可以參考 Chaper 2 Addressing Mode。下表是定址方式為 Indirect Addressing 的 Load 指令。

00011100

表六、Load Instruction(Indirect Addressing)

NOP:執行單元不做任何動作,可以出現在任何一個 VLIW slot 中。

LOAD:將來源暫存器或 immediate value 加上 Auxiliary 暫存器的值,計算出記 憶體的位址並將內容值載入到目標暫存器中。

LOAD Rd,k++:將 immediate value 加上 Auxiliary 暫存器的值,計算出記憶體的 位址並將內容值載入到目標暫存器中,之後再將 Auxiliary 暫存器的值加一。

LOAD Rd,k--:將 immediate value 加上 Auxiliary 暫存器的值,計算出記憶體的 位址並將內容值載入到目標暫存器中,之後再將 Auxiliary 暫存器的值減一。

LOAD Rd,++k:先將 Auxiliary 暫存器的值加一,再將 immediate value 加上 Auxiliary 暫存器的值,計算出記憶體的位址並將內容值載入到目標暫存器中。

LOAD Rd,++k:先將 Auxiliary 暫存器的值減一,再將 immediate value 加上 Auxiliary 暫存器的值,計算出記憶體的位址並將內容值載入到目標暫存器中。

下表是定址方式為 Conditional Addressing 與 Modulo Addressing 的 Load 指 令。雖然表面上是 2-operand 的指令,但是實際上還隱含了 Auxiliary 暫存器與 Circular Index 暫存器當作 source destination,關於記憶體定址的問題,可以參考 Chaper 2 Addressing Mode。

00110000 If CI /= 0, CI<-CI-1,Rd<-[Ra],Ra<-Ra+k

Else CI<-CIinit-1,Ra<-Ra-(k*CIinit-k),Rd<-[Ra],Ra<-Ra+k LoadRZ% Rd,#k++

00110100 If CI /= 0, CI<-CI-1,Rd<-[Ra],Ra<-Ra-k

Else CI<- CIinit-1,Ra<-Ra+(k*CIinit-k),Rd<-[Ra],Ra<-Ra-k LoadRZ%

Rd,#k--00111000 If CI /= 0, CI<-CI-1,Ra<-Ra+k,Rd<-[Ra]

Else CI<-CIinit-1,Ra<-Ra-(k*CIinit-k),Rd<-[Ra]

LoadRZ% Rd,#++k

00111100 If CI /= 0, CI<-CI-1,Ra<-Ra-k,Rd<-[Ra]

Else CI<-CIinit-1,Ra<-Ra+(k*CIinit-k),Rd<-[Ra]

LoadRZ% Rd,#--k

00101100 If CI /= 0,CI<-CI-1, Ra<-Ra-k,Rd<-[Ra]

Else CI<-CIinit-1,Ra<-Ra-(k*CIinit+k),Rd<-[Ra]

LoadRZ Rd,#--k

00101000 If CI /= 0,CI<-CI-1,Ra<-Ra+k,Rd<-[Ra]

Else CI<-CIinit-1,Ra<-Ra+(k*CIinit+k),Rd<-[Ra]

LoadRZ Rd,#++k

00100100 If CI /= 0,CI<-CI-1,Rd<-[Ra],Ra<-Ra-k

Else CI<- CIinit-1,Ra<-Ra-(k*CIinit+k),Rd<-[Ra],Ra<-Ra-k LoadRZ

Rd,#k--00100000 If CI /= 0,CI<-CI-1,Rd<-[Ra],Ra<-Ra+k

Else

表七、Load Instruction(Conditional Addressing & Modulo Addressing) LOADRZ Rd,k++:如果 Circular Index 暫存器(CI)不等於零,將 CI 減一,並 將 Auxiliary 暫存器(RA)的值加上 immediate value,計算出記憶體的位址並將 內容值載入到目標暫存器中,之後再將 RA 的值加一。如果 CI 不等於零,則將 CI 的初始值減一存回 CI,並將 RA 的值跨過 CI 尚未被減成零之前所計算出來的 區塊大小,將此位址的內容值載入到目標暫存器中,之後再將 RA 的值加一。

LOADRZ Rd,k--:工作原理與 LoadRZ Rd,k++大致相同,不同點在於計算記憶 體位址時不是 RA 的值加上 immediate value,而是將 RA 的值減掉 immediate value。

LOADRZ Rd,++k:如果 CI 不等於零,將 CI 減一,再將 RA 的值加一,讓 RA 的值加上 immediate value,計算出記憶體的位址並將內容值載入到目標暫存器 中。如果 CI 不等於零,則將 CI 的初始值減一存回 CI,並將 RA 的值跨過 CI 尚

中。

LOADRZ Rd,--k:工作原理與 LoadRZ Rd,--k 大致相同,不同點在於計算記憶體 位址時不是 RA 的值加上 immediate value,而是將 RA 的值減掉 immediate value。

LOADRZ% Rd,k++:如果 Circular Index 暫存器(CI)不等於零,將 CI 減一,

並將 Auxiliary 暫存器(RA)的值加上 immediate value,計算出記憶體的位址並 將內容值載入到目標暫存器中,之後再將 RA 的值加一。如果 CI 不等於零,則 將 CI 的初始值減一存回 CI,並將 RA 的值恢復到初始值,將此位址的內容值載 入到目標暫存器中,之後再將 RA 的值加一。

LOADRZ% Rd,k--:工作原理與 LoadRZ Rd,k++大致相同,不同點在於計算記 憶體位址時不是 RA 的值加上 immediate value,而是將 RA 的值減掉 immediate value。

LOADRZ% Rd,++k:如果 CI 不等於零,將 CI 減一,再將 RA 的值加一,讓 RA 的值加上 immediate value,計算出記憶體的位址並將內容值載入到目標暫存器 中。如果 CI 不等於零,則將 CI 的初始值減一存回 CI,並將 RA 的值恢復到初 始值,將此位址的內容值載入到目標暫存器中。

LOADRZ% Rd,--k:工作原理與 LoadRZ Rd,--k 大致相同,不同點在於計算記憶 體位址時不是 RA 的值加上 immediate value,而是將 RA 的值減掉 immediate value。

相關文件