STM8汇编代码分析

使用STVD建立完汇编工程项目之后(具本建立方法可以看我的另一篇博文http://blog.csdn.net/u010093140/article/details/49983397),可以看到这个目录结构(以STM8S105C6芯片为例)
这里写图片描述
其中.asm文件是汇编代码的源文件,.inc文件是包含文件,类似于C语言当在的.c文件和.h文件。接下来让我们来分析一下这三个文件。(分析汇编代码最好也要对STM8单片机的启动流程有所了解,可以看我的另一篇博文http://blog.csdn.net/u010093140/article/details/49982879
首先是看mapping.inc文件:

    ;------------------------------------------------------
    ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD
    ; SHOULD NOT BE MANUALLY MODIFIED.
    ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
    ;------------------------------------------------------
    #define RAM0 1
    #define ram0_segment_start 0
    #define ram0_segment_end FF
    #define RAM1 1
    #define ram1_segment_start 100
    #define ram1_segment_end 5FF
    #define stack_segment_start 600
    #define stack_segment_end 7FF

这一段代码应该不难看懂,就是定义了一些常量。需要注意的是,分号”;”是汇编代码中用于写注释的符号。所以分号后面跟的是注释。
接下来就是看一下mapping.asm文件

stm8/
    ;------------------------------------------------------
    ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD
    ; SHOULD NOT BE MANUALLY MODIFIED.
    ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED.
    ;------------------------------------------------------
    #include "mapping.inc"

    BYTES           ; The following addresses are 8 bits long
    segment byte at ram0_segment_start-ram0_segment_end 'ram0'

    WORDS           ; The following addresses are 16 bits long
    segment byte at ram1_segment_start-ram1_segment_end 'ram1'

    WORDS           ; The following addresses are 16 bits long
    segment byte at stack_segment_start-stack_segment_end 'stack'

    WORDS           ; The following addresses are 16 bits long
    segment byte at 4000-43FF 'eeprom'

    WORDS           ; The following addresses are 16 bits long
    segment byte at 8080-FFFF 'rom'

    WORDS           ; The following addresses are 16 bits long
    segment byte at 8000-807F 'vectit'

        END

上面的代码第一行以stm8/开头,很多人不知道为什么要这样子。其实是因为我们所用的汇编连接器Assembler Linker不仅支持STM8汇编代码而且还支持ST公司的另一款芯片ST7的汇编代码,如果你用的是ST7芯片的话,就要以st7/开头了。结论就是使用stm8/开头是为了表明代码的目标芯片是stm8芯片。
分号后面的注释不算入代码里面,剩下来的代码就定义了芯片上的内存段,比如说segment byte at ram0_segment_start-ram0_segment_end ‘ram0’的意思就是,从ram0_segment_start到ram0_segment_end的这一段内存起个名字叫做“ram0”,segment byte at ram1_segment_start-ram1_segment_end ‘ram1’的意思就是,从ram1_segment_start到ram1_segment_end的这一段内存起个名字叫做“ram1”,其它的也是一样的道理。那么,你也会注意到,每一句这样的代码之前都有一句”Bytes”或者”Words”,这是什么意思呢?按代码注释里的意思就是,Bytes代表内存段里内存的地址是8

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值