首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]C中内嵌汇编

你没有说清楚用什么片子,
也没说清楚到底什么问题,是符号未定义、没有添加头文件还是怎么着

 边凿磨边用
 
 经验同分享

用的是HC908SR12芯片,
JCR已经在main()内定义且赋值,
我用正常的方法建立一个项目后已经包含了所需的头文件,将上述内容替换main( )进行编译可以正常通过。

如果去掉语句屏蔽 // ,启用JMP TAB,X; BSR  TAB_END ;语句 即出现加色文字的现象,一句一句去掉 // 也同样出错。
主要问题是 JMP TAB,X ; 语句不能使用,如果改成 JMP TAB ;编译也能通过,说明汇编对TAB标号是认可的。
C内嵌汇编好像不能对X寄存器进行操作,但是 LDX JCR 语句又编译正常且能正确运行,很是奇怪。
如果方便,请编译一下即可知道具体出错提示与帮助,本人英语能力无法理解。
谢谢guantingwei。

[此贴子已经被作者于2006-5-23 20:56:52编辑过]

[求助]C中内嵌汇编

因switch 指令操作周期太长,欲在C中内嵌汇编根据JCR的值进行不同的操作。
以下测试程序CW31,CW50编译始终通不过,求助高手帮助。


void main(void)
{
char   JCR=0;
loop:
    asm
    {
        LDX   JCR
        LDA   #$3
        MUL
        TAX
//        JMP   TAB,X   ;取消//,启用该句编译后出错。
TAB:
        NOP
//        BSR   TAB_END ;取消//,启用该句编译后告警。
        NOP
//        BSR   TAB_END ;取消//,启用该句编译后告警。
        NOP
//        BSR   TAB_END ;取消//,启用该句编译后告警。
TAB_END:
//        INC JCR;      ;取消//,启用该句编译通过,但仿真时不是对JCR的+1操作。
    }
    ++JCR;
    goto   loop;
}

[此贴子已经被作者于2006-5-23 21:07:40编辑过]

发mail到support@metrowerks.com问问看
可能是标号在C中和汇编中不能被统一识别的问题
可以用函数指针来完成类似问题,不一定非要用汇编搞定吧 ;)

void t1(void){
;
}

void t2(void){
;
}

void (* const func_tab[])(void)={
t1,
t2
};


void main(void)
{
char JCR=0;
JCR++;
func_tab[JCR]();
}
Loray 借用定义中断矢量的方法处理,构思很巧妙,确实解决了switch 指令操作周期太长的问题,而且程序比C内嵌汇编可读性强。
我也想能用C的解决的问题尽量用C处理,曾试过用指针但是未成功。
谢谢Loray ,谢谢seuafu2005、guantingwei 和所有关心的人。
对于HC08 C 内嵌汇编到底有什么限制,希望另行开辟专题讨论,毕竟有时还需要。

返回列表