Board logo

标题: [求助]C中内嵌汇编 [打印本页]

作者: guantingwei    时间: 2006-5-23 13:02

你没有说清楚用什么片子,
也没说清楚到底什么问题,是符号未定义、没有添加头文件还是怎么着
作者: cnzbm    时间: 2006-5-23 20:56

用的是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编辑过]


作者: cnzbm    时间: 2006-5-23 21:07     标题: [求助]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编辑过]


作者: seuafu2005    时间: 2006-5-24 10:51

发mail到support@metrowerks.com问问看
可能是标号在C中和汇编中不能被统一识别的问题
作者: Loray    时间: 2006-5-24 12:26

可以用函数指针来完成类似问题,不一定非要用汇编搞定吧 ;)

void t1(void){
;
}

void t2(void){
;
}

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


void main(void)
{
char JCR=0;
JCR++;
func_tab[JCR]();
}

作者: cnzbm    时间: 2006-5-25 13:31

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






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0