我曾尝试寻找这个问题的答案,但找不到明确的原因。
我正在尝试优化一些 8051 C 代码以减少代码空间。我做了以下更改..
xdata unsigned char a, b;
到
data unsigned char a, b;
... 看到我的代码大小减少了 39 字节(感觉像圣诞节)。
来自:程序大小:data=9.0 ...code=10509
至:程序大小:data=11.0 ... code=10468
问题:为什么这么小的改动代码空间就减少了这么多?
最佳答案
这取决于您如何使用(以及使用了多少次)这些变量。 xdata 需要 16 位寻址,这会占用更多空间。举个例子,将固定地址处的值加载到累加器中,xdata 占用的代码空间是 data 的两倍:
在 30h 加载累加器的值(数据):
MOV A, 30h ; 2 bytes
用 1230h 处的值加载累加器(扩展数据):
MOV DPTR, #1230h ; 3 bytes
MOVX A, @DPTR ; 1 byte
从数据到数据的复制需要三个字节(MOV direct, direct
),从 xdata 到 xdata 的复制可能需要八个字节(MOV DPTR, #addr1; MOVX; MOV DPTR #addr2 ; MOVX
).如果您多次访问这些变量并且编译器无法优化它们对寄存器的使用,那么它会很快加起来。
关于c - 为什么使用数据而不是 xdata 会显着减少代码空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21478304/