5828|11

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

提前曝光,自制STM8S的C编译器 [复制链接]

目前只完成了赋值语句以及递增、递减语句功能。

源程序1:#include <stm8s903k3.h>

long *p;
long *pp;
foo()
{

char a = PA_DDR;

int  n;

long m;

a++;
    n += 0x100;
    m -= 0x001201;
    *p += 0x1;

*pp += 0x1100;
    a += 2;
    a -= 2;
}


汇编输出1:
;****************************************************************
;  ATM8S C compiler - AT8CC, v0.10
;  Wed Jul 21 10:40:14 2010
;****************************************************************

.device stm8s903k3, 1024, 8192



.segment BANKi (REL)
p::              .rs     2

.segment BANKi (REL)
pp::             .rs     2





.segment CODE2 (REL), foo
foo_$1_a .equ    1
foo_$2_n .equ    2
foo_$3_m .equ    4
; ::: 'e5.c' #5: foo()
foo::

pushw   X

sub     SP, #0x7
; ::: 'e5.c' #7: char a = PA_DDR;

ld      A, 0x5002

ld      (foo_$1_a, SP), A
; ::: 'e5.c' #10: a++;

inc     (foo_$1_a, SP)
; ::: 'e5.c' #11: n += 0x100;

inc     (foo_$2_n, SP)
; ::: 'e5.c' #12: m -= 0x001201;

ldw     X, (foo_$3_m+2, SP)

addw    X, #0xedff

ldw     (foo_$3_m+2, SP), X

ldw     X, (foo_$3_m, SP)

jrnc    .+1

incw    X

ldw     (foo_$3_m, SP), X
; ::: 'e5.c' #13: *p += 0x1;

ldw     X, p

ldw     Y, (2, X)

addw    Y, #0x1

ldw     (2, X), Y

ldw     Y, (X)

jrnc    .+2

incw    Y

ldw     (X), Y
; ::: 'e5.c' #14: *pp += 0x1100;

ldw     X, pp

ldw     Y, (1, X)

addw    Y, #0x11

ldw     (1, X), Y

jrnc    L2

inc     (X)
L2:
; ::: 'e5.c' #15: a += 2;

inc     (foo_$1_a, SP)

inc     (foo_$1_a, SP)
; ::: 'e5.c' #16: a -= 2;

dec     (foo_$1_a, SP)

dec     (foo_$1_a, SP)



add     SP, #0x7

popw    X

ret



.end


源程序2:
char n, m;

foo()
{
    char a, b, *p1, *p2, const *p5;
    int *p3, *p4;
    a = b;
    n = m;
    *p1 = *p3;
    *p4 = *p3;
}


汇编输出2:
;****************************************************************
;  ATM8S C compiler - AT8CC, v0.10
;  Wed Jul 21 10:58:08 2010
;****************************************************************

.device stm8s



.segment BANKi (REL)
n::              .rs     1

.segment BANKi (REL)
m::              .rs     1





.segment CODE2 (REL), foo
foo_$1_a .equ    1
foo_$2_b .equ    2
foo_$3_p1 .equ    3
foo_$4_p2 .equ    5
foo_$5_p5 .equ    7
foo_$6_p3 .equ    10
foo_$7_p4 .equ    12
; ::: 'e3.c' #3: foo()
foo::

pushw   X

sub     SP, #0xd
; ::: 'e3.c' #7: a = b;

ld      A, (foo_$2_b, SP)

ld      (foo_$1_a, SP), A
; ::: 'e3.c' #8: n = m;

mov     n, m
; ::: 'e3.c' #9: *p1 = *p3;

ldw     X, (foo_$6_p3, SP)

ld      A, (1, X)

ldw     X, (foo_$3_p1, SP)

ld      (X), A
; ::: 'e3.c' #10: *p4 = *p3;

ldw     X, (foo_$6_p3, SP)

ldw     X, (X)

ldw     Y, (foo_$7_p4, SP)

ldw     (Y), X



add     SP, #0xd

popw    X

ret



.end
此帖出自stm32/stm8论坛

最新回复

                                 楼主搞差不多以后,应该找人投资  详情 回复 发表于 2010-7-26 21:48
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 LZ太强了!
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 恐怕只是仅仅踏了一小步吧
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 无图无真相
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主精力旺盛啊!
这绝非一个人的活。

不知楼主的PIC C编译器现在如何了?

不管怎样,
还是要向楼主致敬,

比zlg一大堆人,搞个IDE附带卖仿真器强多了
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

6
 
                                 MARK,,,   牛
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 


回3楼:
这不是一小步,而是一大步。在产生汇编输出前,必须要产生编译树和所有的P代码以及变量定位等。

回5楼:
已经做出了各种8位(PIC16F/PIC16F1xxx/PIC18F)系列的PIC C编译器。另外,还为PIC16F1xxx和PIC18F设计(首创)做出了‘无指针C语言编译器’ --- 语法上没有各类指针定义,但能实现所有指针功能,包括函数指针。

Screenshot.png (149.57 KB)

Screenshot.png

此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
顶!
向楼主致敬!
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 牛人
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 没有什么说的 佩服啊
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
MARK
顶一把!
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 楼主搞差不多以后,应该找人投资
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表