为什么使用数据而不是xdata会显着减少代码空间

时间:2014-01-31 10:55:31

标签: c optimization 8051 c51

我一直试图寻找答案,但找不到确定的理由。

我正在尝试优化一些8051 C代码以减少代码空间。我做了以下改变..

xdata unsigned char a, b;

data unsigned char a, b;

...并且看到我的代码大小减少了39Bytes(感觉像圣诞节)。

发件人:程序大小:数据= 9.0 ...代码= 10509

to:Program Size:data = 11.0 ... code = 10468

问题:为什么代码空间会因为这么小的变化而减少太多?

1 个答案:

答案 0 :(得分:4)

这取决于您使用的方式(以及您使用的次数)这些变量。 xdata需要16位寻址,这需要更多空间。举个例子,在一个固定地址加载一个值,xdata的代码空间是数据的两倍:

加载累加器,其值为30h(数据):

MOV A, 30h       ; 2 bytes

装载累加器,其值为1230h(xdata):

MOV DPTR, #1230h ; 3 bytes
MOVX A, @DPTR    ; 1 byte

从数据复制到数据需要三个字节(MOV direct, direct),从xdata复制到xdata可能需要八个字节(MOV DPTR, #addr1; MOVX; MOV DPTR #addr2; MOVX)。如果您多次访问这些变量并且编译器无法优化它们与寄存器的使用,则可以快速加起来。