打印

做了一个专供MC9s08的编译器,可MC9S08SH8把我折腾了好久...

[复制链接]
2289|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
su_mj000|  楼主 | 2012-9-1 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 su_mj000 于 2012-9-1 13:51 编辑

弄了好久,发现是外接震荡不起振,却不知道如何从程序上设置。还以为是自己的编译器有问题。工具是胡乱买的,软件是从网上下载的,不知如何使用。差一点放弃。想想好不容易做一个编译器,从产生的代码来看还比较满意。于是优化了一点时间和办法。终于可以运行了...

第一个试验程序:
#include <mc9s08sh8.h>

//////////////////////////////////////////////////
void delay (void)
{
    char n = 100;
    while ( n-- );
}

#pragma short_branch
//////////////////////////////////////////////////
void main (void)
{
    SOPT1  = 0x52;    // disable watchdog (COP)
    ICSC1  = 0x80;    // set oscillator as external crystal
    ICSC2  = 0x36;    //

    PTADD |= 0xf;   // PTA0 = output pin
    char a = 0;
    for(;;)
    {
        PTAD++;
//      delay ();
    }
}

[CODE]:
0E000:    delay                       CODE2       main.obj
0E011:    main                        CODE2       main.obj
0E034:    _$init$                     CODEi       main.obj

[SYSTEM]:
00080:    _$ram_start$                        
00200:    _$ram_size$                        

* * * * * * * * * * * * * CODE MEMORY MAP * * * * * * * * * * * * *

                        ; ::: 'main.c' #4: void delay (void)
                        delay::
0E000: 87                   psha
                        ; ::: 'main.c' #6: char n = 100;
0E001: A6 64                lda     #0x64
0E003: 9E E7 01             sta     1, SP
                        L4:
                        ; ::: 'main.c' #7: while ( n-- )
0E006: 9E E6 01             lda     1, SP
0E009: 9E 6A 01             dec     1, SP
0E00C: 4D                   tsta
0E00D: 26 F7                bne     L4 {0xE006}
0E00F: 86                   pula
0E010: 81                   rts
                        ; ::: 'main.c' #12: void main (void)
                        main::
0E011: 45 02 80             ldhx    #0x0280
0E014: 94                   txs
0E015: CD E0 34             jsr     _$init$ {0xE034}
0E018: 87                   psha
                        ; ::: 'main.c' #14: SOPT1  = 0x52;
0E019: A6 52                lda     #0x52
0E01B: C7 18 02             sta     0x1802
                        ; ::: 'main.c' #15: ICSC1  = 0x80;
0E01E: 6E 80 48             mov     #0x80, 0x48
                        ; ::: 'main.c' #16: ICSC2  = 0x36;
0E021: 6E 36 49             mov     #0x36, 0x49
                        ; ::: 'main.c' #18: PTADD |= 0xf;
0E024: B6 01                lda     0x01
0E026: AA 0F                ora     #0x0F
0E028: B7 01                sta     0x01
                        ; ::: 'main.c' #19: char a = 0;
0E02A: 9E 6F 01             clr     1, SP
                        L6:
                        ; ::: 'main.c' #22: PTAD++;
0E02D: 3C 00                inc     0x00
0E02F: 20 FC                bra     L6 {0xE02D}
0E031: CC E0 11             jmp     main {0xE011}
                        _$init$::
0E034: 81                   rts
0FFFE: E011

相关帖子

沙发
su_mj000|  楼主 | 2012-9-1 13:48 | 只看该作者
MC9S08的指令效率速度不是很好,代码空间效率还可以,毕竟是CISC结构,就是这德性。

使用特权

评论回复
板凳
airwill| | 2012-9-1 18:01 | 只看该作者
MC9S08的指令效率速度不是很好, 因为内核的寄存器太少, 总是在 A 里捣来捣去.
我感觉代码空间的效率也并不高.因为指令字还都比较长.(相对于也是 CISC 的 51 来说)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

286

帖子

1

粉丝