前變址、回寫前變址、後變址

        根據數據傳輸傳輸的時機以及在指令執行後基址寄存器是否被更新,寄存器變址有前變址、回寫前變址和後變址暗中方式。
        執行指令的時候,如果先進行變址運算,後傳遞數據,那麼這種方式就是前變址方式。如圖1所示 

例如:LDR R0,[R1,R2]          ;R0<-((R1)+(R2))
           LDR R0,[R1,#8]          ;R0<-((R1)+8)
以上就是利用前變址方式提供數據操作命令。
與上面相反,先傳輸數據,後進行變址的運算的方式叫做後變址方式,從指令格式上來看,後變址指令的格式如下:
    LDR R0,[R1],#8                ;R0<-((R1))        R1<-((R1)+#8)
即將偏移量寫在了方括號外邊。後變址指令的執行過程如圖2。

很容易看出後變址就是先把基址寄存器指向的內存數據傳輸到目標寄存器,然後進行基址與偏移量的加法運算。
從上面的過程還可以看出,後變址與前變址的一個重要的區別:後變址用變址運算的結果更新了基址寄存器,這就是所謂的“回寫”。
顯然回寫是一種很有用的功能,因此ARM在前變址方式中又增加了一種回寫前變址的尋址方式。爲了與前變址方式進行區別,回寫前變址尋址方式要求在第2操作數的方括號後邊添加符號“!”。
    例如:LDR R0,[R1,R2]!        ;R1<-((R1)+(R2))     R0<-((R1))
               LDR R0,[R1,#8]!        ;R1<-((R1)+8)        R0<-((R1))
寫回前變址尋址方式指令執行過程如圖3所示。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章