概念
TMS320C62x/C64x/C67xDSP的定址模式有線性定址模式(使用BK0),還有循環定址模式(使用BK1)。定址模式由定址模式暫存器(AMR)決定。
所有的暫存器都可以進行線性定址,只有8個暫存器可以進行循環定址,這8個暫存器是:.D1功能單元使用的暫存器A4~A7和.D2功能單元使用的暫存器B4~B7。指令LDB(U)/LDH(U)/LDW,STB/STH/STW,ADDAB/ADDAH/ADDAW/ADDAD和SUBAB/SUBAH/SUBAW都使用AMR暫存器來決定這些暫存器的定址模式。
工作原理
線性定址模式
對於load和store指令,線性定址方式是將偏移量(offsetR/cst)進行移位操作。對於字(word)、半字(halfword)或者位元組(byte),分別左移2位、1位或者0位。然後,再將移位的結果與基礎暫存器(baseR)的值相加或者相減。
對於整數加減法指令,線性定址是將源運算元(src1/cst)進行移位操作。對於字(word)、半字(halfword)或者位元組(byte),分別左移2位、1位或者0位。然後,再將移位的結果進行加減法運算。
循環定址模式
AMR暫存器中的BK0和BK1欄位說明了循環定址方式塊的大小。
對於LDW、LDH(U)或LDB(U)指令,在分別完成將偏移量(offsetR/cst)左移2位、1位或者0位以後,再在第N位和第N+1位之間做一次帶進位和借位的加減法運算。基礎暫存器(baseR)中的N+1位到第31位保留。如果偏移量大於循環緩衝大小,那么偏移量的有效值是循環緩衝大小的模。
如圖1所示,如果說一個塊的大小是4,意思就是塊的大小是4B,而不是4個數據類型(位元組、半字或者字)的大小。所以,要完成一個對8個字大小的陣列的循環定址,那么塊的大小應該為32,或者N=4。
對於ADDAW、ADDAH或者ADDAB指令,在分別完成將源運算元(src1/cst)左移2位、1位或者0位以後,再在第N位和第N+1位之間做一次帶進位和借位的加減法運算。源運算元src2的第N+1位到第31位的值不變。如果src1大於循環緩衝的大小,那么偏移量的有效值是循環緩衝大小的模。
存取指令地址生成語法
TMS320C62x/C64x/C67x CPU從存儲器取數據和向存儲器存數據只能使用load和store指令。圖2顯示了向存儲器間接定址的語法規定。有時候,存儲指令需要在基礎地址上有一個比較大的偏移量,在這種情況下,可以使用B15或者B14暫存器作為基礎暫存器,使用一個15位的常數(ucst15)作為偏移量。
微處理器的定址模式
微處理器在執行指令時,必然要對數據進行操作,這些數據叫做運算元。運算元可以是指令的一部分,可以存放在處理器的內部暫存器中,也可以存放在存儲器或保持在I/O連線埠中。為了訪問這些不同類型的運算元,微處理器提供了各種定址模式。定址模式一般可分為三類:暫存器運算元定址、立即運算元定址和存儲器運算元定址。
暫存器運算元定址
暫存器定址模式是指指令的運算元存放在處理器的內部暫存器中,這些內部暫存器包括段暫存器和通用暫存器,暫存器可以分8位、16位或32位,暫存器運算元可以用作為源運算元,也可以用作為目的運算元。
MOV指令執行過程如下:MPU首先取指令,指令地址由CS:IP的內容確定,對應的物理地址為01000H,當指令取進MPU內部的指令佇列後,存放在那裡並等待執行,此時的CS:IP將指向下一條指令地址。
立即運算元定址
假如指令運行的運算元就是指令的一部分,那么這種形式的運算元叫做立即數,其對應的定址方式為立即數定址。立即數可以是8位、16位或32位,在指令中編碼格式,立即數放在操作碼之後。
存儲器運算元定址
為了訪問存儲器的運算元,MPU必須首先計算這個運算元的物理地址PA,然後開始讀或寫這個暫存器的運算元。段基地址SBA確定一個物理存儲器段的起始地址,有效地址EA表示運算元相對這個存儲器段開始的偏移量。在實地址模式下,SBA和EA組合形成實模式的物理地址SBA:EA。