5

我曾尝试寻找答案,但找不到明确的原因。

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

xdata unsigned char a, b;

data unsigned char a, b;

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

来自:程序大小:data=9.0 ...code=10509

to:程序大小:数据=11.0 ...代码=10468

问题:为什么代码空间因如此微小的变化而减少了这么多?

4

1 回答 1

4

这取决于您如何使用(以及使用多少次)这些变量。xdata 需要 16 位寻址,这需要更多空间。举个例子,将一个固定地址的值加载到累加器中,xdata 占用的代码空间是 data 的两倍:

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

MOV A, 30h       ; 2 bytes

加载值为 1230h (xdata) 的累加器:

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

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

于 2014-01-31T12:12:30.713 回答