複製鏈接
請複製以下鏈接發送給好友

間接尋址

鎖定
間接尋址是相對於直接尋址而言的,指令地址字段的形式地址D不是操作數的真正地址,而是操作數地址的指示器,或者説是D單元的內容才是操作數的有效地址
中文名
間接尋址
學    科
計算機
詞    性
名詞
分    類
尋址

目錄

間接尋址簡介

相對於直接尋址而言的,指令地址字段的形式地址D不是操作數的真正地址,而是操作數地址的指示器,或者説是D單元的內容才是操作數的有效地址 [1] 
附:間接尋址
間接尋址是在直接尋址的基礎上面建立起來的,也就是直接尋址得到的數據是一個地址,通過這個地址找到最終的數據,也就是兩次尋址,第一次得到的是地址,第二次才是目標數據。 [1] 
在MCS-51單片機中,為了對寄存器尋址和寄存器間接尋址加以區別,在寄存器名稱前加一個符號@來表示寄存器間接尋址。 [1] 
如mov A,@R0
第一次尋址得到寄存器R0的值,這個值是一個地址,再通過這個地址,第二次尋址得到存數器數據。就是把寄存器裏的內容看成是地址,然後把這個地址裏面的內容賦給累加器A。比如説,R0寄存器的內容是3AH,而3AH這個地址裏的內容是77H,那麼上條指令執行後累加器A的內容變為77H。所謂“間接”,即A通過“3AH”找到77H。 [1] 

間接尋址功能

操作數放在RAM某個單元中,該單元的地址又放在寄存器R0或R1中。 如果RAM的地址大於256,則該地址存放在16位寄存器DPTR(數據指針)中,此時在寄存器名前加@符號來表示這種間接尋址。如MOV A,@ R0。其它還有變址尋址、相對尋址、位尋址等。如用單片機控制温度時,時時需要將給定的控制温度(如20℃)減去環境温度,而環境温度時時有變化,顯然無法在程序指令中給出,只有通過一定方式,將其送入某個輸入/輸出口,再存放在某個寄存器中,這就必須用到寄存器尋址。又如要進行算術運算,要計算每班學員各科成績的平均值,如果把每個學員的各科都編一個程序,在程序中直接給出該學員各科成績,再求平均值,顯然太麻煩。這裏可以編一個求平均成績的通用程序,把每位學員的成績送入存貯器的各個單元中,這時可採取直接尋址,所以,尋址方式越多,編制程序就越方便、靈活,適用範圍就越廣。 [1] 

間接尋址語言描述

寄存器的間接尋址需要以寄存器符號的形式來表示,且在寄存器名稱前面加上間接尋址符號“@”。例如指令MOV A,@R0就使用了寄存器間接尋址方式,這條指令的意義為將地址指針R0指向的內部數據存儲器單元中的數據送入累加器A中. [1] 
假設R0中內容為30H,則此指令的功能是以R0寄存器的內容30H為地址,把內部RAM 30H單元中的內容傳送給累加器A。 [1] 
8051規定,採用R0、R1 DPTR作為間接尋址寄存器,可尋址片內數據存儲器RAM的低128B單元和片外數據存儲器的低256單元。 [1] 
採用DPTR作間址寄存器,可尋址片外數據存儲器的整個64KB地址空間。堆棧指針SP用於指示堆棧操作的地址,因此,PUSH和POP指令也是寄存器間接尋址。 [1] 
參考資料
  • 1.    (美)Randal E.Bryant / David O'Hallaron .深入理解計算機系統:機械工業出版社,2010年