首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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编辑过]

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

返回列表