没有合适的资源?快使用搜索试试~ 我知道了~
STM8S与汇编.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 97 浏览量
2022-06-25
10:14:52
上传
评论
收藏 392KB DOC 举报
温馨提示
试读
58页
STM8S与汇编.doc
资源推荐
资源详情
资源评论
与汇编
与汇编语言()
不知是心血来潮,还是其它因素,突然又想起玩汇编语言了。这几年也没少跟单片机
打交道,包括 系列, 系列, 系列,但都是用 语言来开发。不过由于使用
语言,实际上对这些 的了解还是不够深刻,当然除了 之外,因为那是我多年前曾
经用汇编开发过的芯片。尽管当今 语言已经在嵌入式产品的开发过程中成为主流,但我
个人依然认为,要想真正了解 的特点,还得用汇编语言。不知道这种观点是对还是错,
也许是因为自己从硬件做起,写过机器码,用汇编语言做过优化,因此对汇编语音有一种
特殊的偏爱。
系列的芯片用多了,感觉有时写起程序来不太方便,因此总想寻找一些其它的 位
单片机玩玩,正好手头有一个 的三合一开发板,那是 年参加 研讨会上买的,一直
躺在那里,与其躺在那里,不如拿出来玩玩。
这几年, 在国内推广 ,力度不小,不过我一直没有用过,只是初步地看看
资料。原因在于在 位单片机方面,我一直在用 公司的 ,感觉不错,
一直都很顺利。 年 举办的研讨会上, 除了介绍 外,也介绍了 ,当时
听了以后,觉得还行。尤其是会上的低功耗演示给我留下了很深刻的印象。
基于这些,我决定好好地玩一下 芯片,并将玩的结果拿出来与大家共享。
与汇编语言()
第一次打开 的手册时发现, 中的寄存器只有 个,即 、、、、
和 。这几个寄存器,看上去特象早年苹果机使用的微处理器 。在眼下都是多寄存
器 的 潮 流 下 , 不 知 推 出 的 这 种 架构有什 么意 图 ? 这 样 的芯 片 能 否 与
或者 !"# 的 结构的 竞争呢?在此我无意做评论,我只想了解这颗
芯片。
通过仔细研究,我发现由于 采用了 位宽度的程序存储器结构,使得大部分的
指令都能在一个周期内取出,并且采用了哈佛结构和流水线,相当多的指令也都是单周期
完成的。这样的话,虽然 是 架构的,但也基本上达到了单周期指令的效果,就
像手册上说的, 的性能达到了 ◎$%。就这一点来说,我个人感觉
还真不错。
举个例子来说,如果我们要完成内存中的 个 位无符号数相加,结果还保存到内存
中,用 语言描述成:
&'"())*+*,
)-)).)+,
这一段程序,用 汇编可以写成如下代码:
/))))*)0)))))))
//))*)0))))))))
/))))0*)
这里假设 *+* 这 个变量分别存储在内存中,地址为 * 和 。从 的
手册上可以查到,这 条指令都是单周期的,完成一个加法,只需要 个时钟周期,可见
的 执行速度还是相当快的。
在这种传统的所谓 架构中,我特别关心累加器 与内存的访问速度,因为如果
累加器与内存的访问速度是单周期的话,实际上我们就可以将内存当寄存器来看,这样写
程序时就相当于拥有了一个大的寄存器阵列,或者说我们也就没必要再去考虑变量在内存
第))页)共))页
与汇编
中还是在寄存器中。也正是因为这一点,我对 越来越感兴趣了。
第))页)共))页
与汇编
与汇编语言()
的 开 发 环 境 用 起 来 还 是 不 错 的 , 可 以 到 的 网 站 上 下 载 安 装 程 序
1#&"!2"3"。利用该环境可以开发用汇编语言写的程序,而且与 的三合一开发板配
合起来,确实非常方便。
不过如果要想用 语言来开发,稍微有点麻烦,得去别的公司下载 的编 译器
(142"3"),而且下载完以后,还得去注册,等待许可文件。实际上,我也按
照 介绍的方法做了,但始终都没有收到许可文件,也许本人实在愚笨。但不管怎么说,
我觉得 这一点做得相当不好,实在有点抠门。既然是免费的,为什么不一起打包提供
给客户,这么麻烦,多耽误客户使用,得少卖多少 的芯片。
言归正传,还回到正题。用汇编语言开发程序,最简单的就是利用 开发环境中提
供的汇编程序框架自动生成功能。打开开发环境后,在 5#" 菜单中选择 6"7)89& "*点
击 "!")79& ")() :"! 图标,然后就可以建立项目,在工具链中选 )&&"+#"
9",最后选择 的型号,点击 ;4,就完成了一个项目的建立。这个环境与微软的
< 开发环境很象,点开项目文件中的 ")5#"&,能看到系统自动生成好了一个汇编语
言的框架,我们编写程序只要在这框架基础上就可以了。其实不用编写任何一条指令,这
个框架程序是能够编译通过,并下载运行的。
自动生成的项目中包含 个重要的文件: '2* '2& 和 2&。
'2 文件中定义的是一些常量, '2& 文件中定义的是一些内存的分配,
主要的汇编代码都在 2&。
下面是 2& 中的汇编代码及注释。
&!=
>#(")? '2?
&"'"!)@@
,)下面是定义一个标号, 汇编的写法,有点不习惯
,)这里的 标号是复位后的第一条指令,与后面的中断向量表中
,)的名字是对应的
2#))))
,)!#A")
#(7)*>&!91"(
#(7)*)))))))))))))))))))))))))))))),)设置堆栈指针)
>B("B)
,)如果定义了 ,则要汇编以下代码))
,)#")
1&!!2+)CD)01&"'"!1&!!
1"(2+)CD)01&"'"!1"(
#(7)*>1&!!)))),寄存器 指向要清除的内存起始地址))))
#"12#)))))))))))),这是一个标号定义,用于后面的跳转指令
#)EF)))))))))))))),对应的内存单元清 ))
第))页)共))页
与汇编
7))))))))))))))),寄存器 .*指向下一个单元)))
7)*>1"( )),比较寄存器 是否等于内存的最后一个地址))
:#")#"1))))))),若不等于,则循环)
>"(B
>B("B)
,)如果定义了 ,则要汇编以下代码,代码含义与上面完全一样))
,)#")
1&!!27)CD)01&"'"!1&!!
1"(27)CD)01&"'"!1"(
#(7)*>1&!!
#"12#
#)EF
7)
7)*>1"(
:#")#"1
>"(B
,)#")&!9
,)将堆栈区的内存单元清 ,代码含义与上面完全一样))
&!91&!!27)CD)0&!91&"'"!1&!!
&!91"(27)CD)0&!91&"'"!1"(
#(7)*>&!91&!!
#"1&!92#
#)EF
7)
7)*>&!91"(
:#")#"1&!9
B!"1# 2#))))))))))))))))))))))))),)定义一个标号
,由于是一个框架,初始化内存后,进入一个死循环
:)B!"1# )))))))))))))))))))))
,下面代码写的是一段中断服务程序,不过也是空的
!" !)6$(#"(!" !
6$(#"(!" !2#
,)当进入中断服务程序后,无其它动作,直接返回
))"!))))))))))))))))))))))))))))))))))
,)下面这张表很重要,定义了 所有的硬件中断对应的中断
,)服务程序的入口地址
第))页)共))页
与汇编
))&"'"!)@G"!!@
(2#)H0.I ,)"&"!
(2#)H0.6$(#"(!" !I ,)!
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)JK
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)JK
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)JK
(2#)H0.6$(#"(!" !I ,)J
(2#)H0.6$(#"(!" !I ,)J
"(
把这个项目 L#( 后,点击 /"+' 中的 !!)/"+''' 就可以将程序下载到 的三合
一板上了,然后点击 ,程序就运行起来了,不过由于框架程序是一个空程序,初始化
内存后就进入死循环了,因此什么效果也看不见。因此我们必须在框架程序的基础上,编
写自己的程序。后面的程序例子都是在这个框架程序的基础上编写的。
第))页)共))页
剩余57页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3683
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功