首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDCC/C51:重新定义SDCC符号

SDCC/C51:重新定义SDCC符号
EN

Stack Overflow用户
提问于 2013-07-26 10:58:44
回答 1查看 554关注 0票数 0

我想在SDCC下编译一个程序,这是我以前在C51下编译的。

代码语言:javascript
复制
// Somewhere in a header file for C51:
sfr TCON = 0xA8; // C51 syntax

// somewhere in a .c-file
#pragma asm

    mov     TCON, #0

#pragma endasm

这将被翻译成75A800 (十六进制)

代码语言:javascript
复制
     opcode  direct, #immed
mov: 75      A8      00

当我在SDCC下编译它时

代码语言:javascript
复制
     opcode  direct, #immed
mov: 75      88      00

在我看来,SDCC忽略了TCON寄存器的定义,如下所示:

代码语言:javascript
复制
// Somewhere in a header file for SDCC
__sfr __at(0xa8) TCON; // SDCC syntax

所以我的问题是:

如何告诉SDCC使用我在另一个头文件中定义的地址?

当然,整件事都是这样的:

代码语言:javascript
复制
#include "the-header-file-that-defines-my-registers.h" // defines TCON

void main(void)
{
 // code ..
 #pragma asm

   // more code ..

    mov     TCON, #0

 #pragma endasm

 // more and more code ..
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-28 20:19:59

我已经联系了SDCC小组

2013年7月27日,星期六,斯特凡·福尔克写道:

大家好,谁收到这个! 很抱歉,问这个问题可能相当简单的ASXXXX十字汇编程序,但我想知道我是否可以或如何改变标准的SFR地址? 我使用的处理器是基于英特尔8051,但它的许多寄存器确实有新的地址。 那么,有没有办法告诉SDCC让ASXXXX忽略预定义的SFR,而使用我的呢?

答案

我不认为你可以不编辑ASXXXX的源代码。然而,SDCC在其代码生成器中只使用了一些汇编程序内置符号(从内存中,我认为它只是ACC、B、DPL、DPH、PSW和SP)。如果有人移动这些与CPU相关的基本寄存器,我会感到非常惊讶。定义为C级别的所有SFR寄存器(例如,通过使用#include )将在程序集级别显式定义,但具有下划线前缀,因此可以将这些符号的地址更改为所需的任何地址,并忽略预定义的符号。您只需确保所编写的任何程序集都使用带有下划线前缀的符号(即"mov a,_P2“而不是"mov a,P2")。 埃里克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17879619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档