指针类型转换
C语言代码
stmt level Source
1 int *p1; /*一般指针(3字节)*/
2 int xdata*p1; /*xdata指针(2字节)*/
3 int idata*p1; /*idata指针(1字节)*/
4 int code*p1; /*code指针(2字节)*/
void pconver(void) {
p1=p2; /*xdata指针到一般指针 第7行*/
p1=p3; /*idata指针到一般指针 第8行*/
p1=p4; /*code指针到一般指针 第9行*/
p4=p1; /*一般指针到code指针 第11行*/
p3=p1; /*一般指针到idata指针 第12行*/
p2=p1; /*一般指针到xdata指针 第13行*/
}
汇编结果代码(翻译成汇编代码)如下:
Function pconvert(BEGIN)
;第7行
MOV P1,#01H
MOV P1+01H,P2
MOV P1+02H,P2+01H
;第8行
MOV P1,#00H
MOV P1+01H,#00H
MOV P1+02H,P3
;第9行
MOV R3,#0FFH
MOV R2,P4
MOV R1,p4+01H
MOV p1,R3
MOV p1+01H,R2
MOV p1+02H,R1
;第11行
MOV R6,AR2
MOV R7,AR1
MOV p4,R6
MOV P4+01H,R7
;第12行
MOV R7,AR1
MOV p3,R7
;第13行
MOV R6,AR2
MOV p2,R6
MOV p2+01H,R7
;FUNCTION pconver(END)
问题就在13行的R7并没有指针传入
那么这句话MOV p2+01H,R7怎么可以直接这样写,而不是签名前面加一句话:
MOV R7,AR1
MOV p2+01H,R7
请热心人帮忙解疑,谢谢!
注:以上内容来自《单片机C语言Windows环境编程宝典》一书的268-270页,有删节