| ?ED?my_seg | SEGMENT | EDATA | ; 定義一個EDATA類型的段 |
| RSEG | ?ED?my_seg | ||
| STRING: | DS | 100 | ; 保留100個字節(jié) |
| ?PR?myprog | SEGMENT | CODE | ; 為程序代碼定義一個段 |
| RSEG | ?PR?myprog | ||
| MOV | R1, #BYTE0 STRING | ; 把STRING的地址裝入PR0 | |
| MOV | R2, #BYTE1 STRING | ||
| MOV | R3, #BYTE2 STRING | ||
| MOV | A, @PR0 | ; 把STRING中的第一個字節(jié)裝入A |
適用于英特爾/愛特梅爾的WM251的例子
| ?ED?my_seg | SEGMENT | EDATA | ; 定義一個EDATA類型的段 |
| RSEG | ?ED?my_seg | ||
| STRING: | DS | 100 | 保留100個字節(jié) |
| ?PR?myprog | SEGMENT | CODE | ; 為程序代碼定義一個段 |
| RSEG | ?PR?myprog | ||
| MOV | R11, STRING+2 | ; 裝載位于STRING[2]中的字符 | |
| MOV | WR4, #STRING | ; 裝載STRING的地址 | |
| MOV | R6, @WR4 | ; 間接尋址 | |
| MOV | @WR4+2, R6 | ; 使用常量偏移訪問 |
XDATA存儲器類型可以通過寄存器DPTR使用指令MOVX訪問。單頁XDATA存儲空間也可以通過R0,R1訪問。在C編譯器級,該內(nèi)存類型叫做pdata,段前綴使用?PD?。該pdata頁的高地址典型地用P2寄存器設(shè)置。但在新型8051微處理器中,也有專用的特殊功能寄存器用于定義XDATA頁地址。
適用于所有8051微處理器的例子
| ?XD?my_seg | SEGMENT | XDATA | ; 定義一個XDATA類型的段 |
| RSEG | ?ED?my_seg | ||
| XBUFFER: | DS | 100 | ; 保留100個字節(jié) |
| ?PD?myvars | SEGMENT | XDATA INPAGE | ; 定義一個頁的XDATA段 |
| RSEG | ?PD?myvars | ||
| VAR1: | DS | 1 | ; 保留一個字節(jié) |
| ?PR?myprog | SEGMENT | CODE | ; 為程序代碼定義一個段 |
| RSEG | ?PR?myprog | ||
| MOV | P2, #HIGH ?PD?myvars | ; 裝載頁地址寄存器 | |
| …… | |||
| MOV | DPTR, #XBUFFER | ; 裝載地址 | |
| MOVX | A, @DPTR | ; 通過DPTR訪問 | |
| MOV | R1, #VAR1 | ; 裝載地址 | |
| MOVX | @R1, A | ; 通過R0或R1訪問 |
CODE和CONST存儲器可以使用DPTR寄存器通過指令MOVC訪問。存儲類型CONST不適用于A51和BL51。
適用于所有8051微處理器的例子





