8051小筆記---基本的八種定址模式

因為之前搞不清楚加上#或是@的用意

還有各種定址模式的差異

所以在此記錄一下我學習後的心得

大致可以分為八種

分別是

  • 直接定址法(Direct addressing)

  • 間接定址法(Indirect addressing)

  • 暫存器定址法(Register addressing)

  • 立即值定址法(Immediate constant)

  • 索引定址法(Indexed addressing)

  • 絕對定址法(Absolute addressing)

  • 長定址法(Long addressing)

  • 相對定址法(Relative addressing) 

下面讓我詳細說明

直接定址法(Direct addressing)

顧名思義就是直接給記憶體的位址


例如 : MOV A , 06H 

就是把在記憶體位置06H的資料

移動到A

間接定址法(Indirect addressing)

他和直接定址法的概念差不多

最大的差別是以暫存器內的數值做為目標地址

所以可以說直接定址法是固定的

而間接定址法可以用運算改變目標地址


例如 : MOV A , @R0 

這裡就是以R0內的數值最為目標位址

假如R0內儲存的數值是55H

那就是把在記憶體位置55H的資料

移動到A

暫存器定址法(Register addressing)

這應該是最好理解的

直接將要使用的暫存器寫出來

和Python或是C++一樣

A = B + C

這樣簡單


例如 : MOV A , R0 

就是把R0內的資料

移動到A

立即值定址法(Immediate constant)

當我們想要初始化即可使用這種方式

類似於Python或是 C++的

A = 12


例如 : MOV A , #55H

在A存入數值55H

索引定址法(Indexed addressing)

了解這個之前須要先知道8051的記憶體架構

索引定址法用在程式記憶體(ROM)中

與間接定址法最大的不同在於

他需要base register當作基準(PC 或是 DPTR等等)

並以A暫存器作為地址上下的調整運算元


例如 : MOVC A , @A+PC

這樣的例子就是要讀取程式記憶體

以A當作接收和調整地址位置

PC則是基準的位置

相對定址法(Relative addressing)

使用在JUMP這類指令中

名為相對是因為他是相對於基準的位址

 

例如 : SJMP 5

他是把現在的PC(Program Counter)位址當作基準

加上後面的運算元5

得出下一個PC位址

PC = PC+5

絕對定址法(Absolute addressing)

他與立即值定址法概念是一樣的

但是在實作上

絕對值定址法比較像是相對定址法

也就是作用在程式記憶體的立即值定址法

例如 : ACALL 7FFH、AJMP 789H

長定址法(Long addressing)

這個則是加長版的絕對定址法

例如 :LJMP 89ABH、LCALL 0CDEFH


這樣各位都有懂了吧!!!!!!!

留言

熱門文章

IC設計產業結構,一看就懂超簡單

3nm和5nm?台積電的新聞,一看就懂超簡單