当前位置: 首页 > 工具软件 > XData > 使用案例 >

单片机C语言xdata和data,unsigned char xdata *p;和xdata unsigned char *p区别

龚钧
2023-12-01

C语言指针说明以 * 为分隔符,

“*” 前面的存储类型修饰—指针所指向的对象数据的存储位置;

“*” 后面的存储类型修饰—指针本身所分配的存储位置。

所以unsigned char xdata *p; 和xdata unsigned char *p   不一样。说明的是2回事。

而:

xdata unsigned char *p; 和 unsigned char  * xdata p; 完全一样。

因为C写法中允许“最前面的存储类型修饰符修饰最后面的对象。”

且看下面示例程序证明:

; unsigned char xdata * p0;

;

; xdata unsigned char * p1 ;

;

; uchar  a=0x20;

;

; void main()

;{

;  p0=&a;

;  p1=&a;

;}

NAME    POINTER

?PR?main?POINTER     SEGMENT CODE

?C_INITSEG           SEGMENT CODE

?DT?POINTER          SEGMENT DATA

?XD?POINTER          SEGMENT XDATA

EXTRN    CODE (?C_STARTUP)

PUBLIC    a?

PUBLIC    p1

PUBLIC    p0

PUBLIC    main

RSEG  ?DT?POINTER

p0:   DS   2       //p0指针被定义在data区。

a?:   DS   1

RSEG  ?XD?POINTER

p1:   DS   3     //p1指针被定义到到xdata区。

RSEG  ?C_INITSEG

DB    001H

DB    a?

DB    020H

; #pragma  src

;

;

RSEG  ?PR?main?POINTER

main:

; SOURCE LINE # 11

; {

; SOURCE LINE # 12

;

; p0=&a;

; SOURCE LINE # 14

MOV      p0,#HIGH (a?)

MOV      p0+01H,#LOW (a?)      //p0-2字节指针立即寻址

; p1=&a;

; SOURCE LINE # 15

MOV      DPTR,#p1

CLR      A

MOVX     @DPTR,A

INC      DPTR

MOV      A,#HIGH (a?)

MOVX     @DPTR,A

INC      DPTR

MOV      A,#LOW (a?)

MOVX     @DPTR,A        //p1-3字节通用指针间接寻址。

;

; }

; SOURCE LINE # 17

RET

; END OF main

END

 类似资料: