请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5529 工具/软件:Code Composer Studio
我编写一小段代码、使用汇编语言对字符串中的字和句子进行计数。 我已经完成了所有工作、并且我的寄存器计数器的工作方式是他们应该执行的。 我遇到的问题是、我要将这些计数器值放入变量"word "和"sent "中。 我认为我已正确声明了变量、但我找不到任何有关将寄存器计数值实际放入我创建的变量所需语法的信息。 MOV 指令是否有一些语法、或者可以使用 ADD 指令来执行此操作?
;代码启动
cdecls C、list、"msp430.h" ;包含设备头文件
.def 复位 ;导出程序入口点到
;使链接器知道它。
myStr:.cstring:"大家好、我是 MSP430!"
发送的.data:.int 0;设置语句计数变量并初始化为零
字:.int 0;设置字计数变量并初始化为零
.text ;汇编到程序内存中。
保留 ;覆盖 ELF 条件链接
;并保留当前部分。
.retainrefs ;并保留任何具有的段
;对当前段的引用。
复位:MOV.w #_STACK_END、SP ;初始化堆栈指针
MOV.w #WDTPW|WDTHOLD,&WDTCTL;停止看门狗计时器
;-------------------------------------------------------
;主循环
;-----------------
主要:bis.b #0FFh、&P1DIR;不在端口引脚上输出结果
MOV.w #myStr、R4 ;将字符串的起始地址加载到 R4中
CLR.b R5 ;寄存器 R5将用作字的计数器
CLR.bR7;寄存器 R7将作为句
点 gnext 的计数器:MOV.b @R4+、R6 ;获取新字符
CMP 0、R6 ;是否为空字符
日 贷款 ;如果是,请转到最后
CMP.b #''、R6 ;它是“”字符
JNE Pun1;如果没有,请转到下一个
包含 R5 ;如果是,则递增计数器
MOVR5、字(&word)
JMP 下一步 ;转至下一个字符
pun1:cmp.b #'.'、R6 ;是否为空字符
JNE Pun2;如果没有,请转到下一个
包含 R5 ;如果是,则递增计数器
Inc.wR7;如果是、则递增计数器
JMP 下一步 ;转至下一个字符
pun2:cmp.b #'?',r6 ;是否为空字符
JNE 冲3;如果没有,请转到下一个
包含 R5 ;如果是,则递增计数器
Inc.wR7;如果是、则递增计数器
JMP 下一步 ;转至下一个字符
pun3:cmp.b #'!',R6 ;是否为空字符
JNE 下一步 ;如果没有,请转到下一个
包含 R5 ;如果是,则递增计数器
Inc.wR7;如果是、则递增计数器
JMP 下一步 ;转到下一个字符
:MOV.b R5&P1OUT ;在 P1OUT 中写入结果(在端口引脚上不可见)
BIS.w #LPM4、SR ;LPM4
NOP ;只为调试器所需
;-----------------
;堆栈指针定义
;-----------------
.global __stack_end
.sect .stack
;------------------------------------------------------------------------------------------------
;中断矢量
;-----
.sect ".reset" ;MSP430复位向量
短路复位
.end