历史上的今天
今天是:2024年09月24日(星期二)
2020年09月24日 | STM8S103汇编文档和注意
2020-09-24 来源:eefocus
1、官方文档《STM8 CPU programming manual》介绍了指令和寻址方式
2、辅助类文档,boot loader文档《STM8 bootloader》
3、关于一些实例和伪指令的介绍,网搜《STM8S第1章-第5章》,已下载至本人电脑cpu-stm8s目录下和《asm_lnk_user_manual.pdf》
4、关于一些实际应用,网搜《STM8S-汇编》,已下载至本人电脑cpu-stm8s目录下
5、详细教科书《STM8S系列单片机原理与应用》
6、STVD安装目录下的asm 的文档《asm_lnk_user_manual.pdf》和asmdemo文件夹下的例程
1、EQU和#define的区别?
2、寄存器间接寻址(X),表示X为指针,对标为:PIC的间接寻址,INDF0-2
3、LD和MOV的区别?
LD是和寄存器交互时用
MOV只能和mem交互用
4、如何定义为位变量
COMM_LCD
DS.B 1
#define F_TEST COMM_LCD,#5
其中DS.B必不可少
5、()和[]的区别
两者都是间接寻址(何谓间接寻址即指针)
不过()指的是寄存器间接寻址或者以mem为基址+寄存器的变址寻址 例如:LD A,(X)和LD A,($5000,X)
[]为mem,以存储单元作间址的间接寻址方式是STM8 CPU特有的间接寻址方式 。操作数所在的储存单元的地址存放在00段内另一个存储单元中,16位地址要带后缀.W;24位地址形式带后缀.E 例如LD [$50.W],A,
总结:ld A,[F5]等价于ldA,((F5]等价于ldA,((F5))
6、如何定义查表,且表中存放地址
NEC中DW SEG0_LCD
ST中DC.W?而不是DS.W
7、short mem和long mem
如果定义在0-FF,则为short mem,定义在100后面的变量则为long mem,short mem的指令周期比long mem的指令周期短。
定义的ram0变量,FLAG2:DS.B 1 后面如果LD A,FLAG2则会将FLAG2的地址变为long mem;如果FLAG2.B:DS.B 1则会将FLAG2的地址变为short mem
8、将模块的标号也加上后缀.B但是出现问题,报错"as1 : Error 84: Byte Size label has val > 255! (need WORDS?) 'MAIN_LOOP'
"
9、Label属性、地址模式和segment属性的联系
Labe有3属性:size,relativity和scope,size:B、W(word默认)、L(4字节)
当Label的地址为0x00-0xFF时,既可以作为long mem也可以作为short mem,如果加上.B则作为short mem。
当label的地址其他时,不可以为b
Label的属性为relative 和absolute,常量为absolute,其余为relative,Lable的属性由linker决定,程序员不能显式改变
segmeng的对齐方式有byte、word等,这是说segmeng的边界必须以字节对齐、字对齐或其他方式对齐,
具体参考STVD安装目录下的 asm文件夹下的《asm_lnk_user_manual.pdf》
10、STM8S为大端模式,即高字节存放在低地址,即如果你ADDW X,TMP0_MSB有问题,其中TMP0_MSB是8位的假设值=9,但是X是16位的,将TMP0_MSB时,默认会转换为低字节为0,高字节为TMP0_MSB的值,即ADDW X,0x900
11、查表用LD A,(DIS_TAB,X),其中DIS_TAB为定义的表,X为索引,在flash区定义表格用DC.B、DC.W和DC.L;在ram区定义变量用DS.B,而且千万千万要注意,DS等宏指令不能顶格,前面必须至少一个TAB
上一篇:STM8S103内存详析
下一篇:IAR新建一个工程
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 2007年,随着一声“手机生产核准制正式取消”的赦令,大批所谓的“黑手机”厂商如雨后春笋般破土而出,加之MTK积极的方案提供和技术支持推波助澜,大大降低了手机设计的入行门槛。手机 ...… 查看全部问答> |
|
Lenze有没有可以连接多台电机的驱动器? 如题,一个驱动器连接多个电机,这需要驱动器有多个电机接口,包括多套UVW输出和多个编码器的输入,Lenze有这样的驱动器吗?其他品牌的伺服有吗?恳请高手指点,谢谢!… 查看全部问答> |
|
CLSID_RemoteDataAccess对应的是哪个DLL文件啊 if (dlgPush.DoModal()) { //得到pCERDA接口 HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA); ASSERT(hr == S_OK); ASSERT(pCERDA != NULL); 执行到ASSERT(h ...… 查看全部问答> |
|
I have a dream!IBM T23能否当场个X86结构的嵌入式开发板? I have a dream! 本人闲置一台IBM T23笔记本,闲来无事,有以下想法: IBM T23能否当场个X86结构的嵌入式开发板? 请大家多多发言...… 查看全部问答> |
|
梦之旅同学EZ430系列学习笔记和智能家居系统项目之DHT11 虽然之前有同学传了DHT11的程序,但我发现那个程序不好用,呵呵,我的在那时候也调通了,然后现在我参考下那位同学程序,优化了一下相关结构,传下我的DHT11,也说下我的DHT11开发经历,今天上传三章,呵呵,今天这项目算完结了,多谢大家关 ...… 查看全部问答> |
|
请教:uart、can、Eth等通信接口配置好后,如何通过软件查询其是否工作正常? 本人最近用 LM3S 9B81做一个项目,需要随时应答 上位机发送的 各个端口状态查询信息,请问 假如没有数据收发,我如何反应出 各个通信端口状态是正常的呢?谢谢… 查看全部问答> |
|
现在准备电子设计竞赛,做一个电子假负载的题目,开始直流模式下的恒流恒压横阻模式已完成,但负载不能进交流,求各路大神提供一下能进交流的电子负载原理电路或方案,要测量交流电源内阻的……小弟在此谢过了。。。谢谢!做了差不多3个星期了,没想 ...… 查看全部问答> |
|
//*******************************************************************os_tsk_create() #include <rtl.h> OS_TID os_tsk_create ( void (*task)(void), /* Task to create建立任务 */ U8 priority ); &n ...… 查看全部问答> |




