我一直试图寻找答案,但找不到确定的理由。
我正在尝试优化一些8051 C代码以减少代码空间。我做了以下改变..
xdata unsigned char a, b;
到
data unsigned char a, b;
...并且看到我的代码大小减少了39Bytes(感觉像圣诞节)。
发件人:程序大小:数据= 9.0 ...代码= 10509
to:Program Size:data = 11.0 ... code = 10468
问题:为什么代码空间会因为这么小的变化而减少太多?
答案 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
)。如果您多次访问这些变量并且编译器无法优化它们与寄存器的使用,则可以快速加起来。