周立功经典实验教程《ARM嵌入式系统实验教程》的配套源代码

源代码在线查看: test5.s

软件大小: 9838 K
上传用户: jjkk778
关键词: ARM 实验教程 嵌入式系统 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				; 文件名:TEST5.S
				; 功能:计算1+2+...+N的值
				; 说明:N≥0,当N=0时结果为0;当N=1时结果为1。
				
				N		EQU		100				; 定义N的值为100
							
							AREA	Example5,CODE,READONLY	; 声明代码段Example5
							ENTRY				; 标识程序入口
							CODE32				; 声明32位ARM指令
				
				ARM_CODE	LDR		SP,=0x40003F00	; 设置堆栈指针
				            ADR		R0,THUMB_CODE+1
							BX		R0			; 跳转并切换处理器状态
							
							LTORG				; 声明文字池
				
							CODE16				; 声明16位Thumb指令 
				THUMB_CODE	LDR		R0,=N		; 设置子程序SUM_N的入口参数
							BL		SUM_N		; 调用子程序SUM_N
									
							B		THUMB_CODE
					
				; 名称:SUM_N
				; 功能:计算1+2+...+N的值
				; 入口参数:R0		N的值
				; 出口参数:R0		运算结果
				; 占用资源:R0
				; 说明:当N=0时结果为1;当N=1时结果为1。
				;      若运算溢出,结果为0。
				SUM_N			
							PUSH	{R1-R7,LR}	; 寄存器入栈保护
							MOVS	R2,R0		; 将N的值复制到R2,并影响条件码标志
							BEQ		SUM_END		; 若N的值为0,则返回。(此时R0没有被更改)
							
							CMP		R2,#1
							BEQ		SUM_END		; 若N的值为1,则返回。(此时R0没有被更改)
							
							MOV		R1,#1		; 初始化计数器R1=1
							MOV		R0,#0		; 初始化结果寄存器R0=0
				SUM_L1		ADD		R0,R1		; R0 = R0 + R1
							BCS		SUM_ERR		; 结果溢出,跳转到SUM_ERR		
							CMP		R1,R2		; 将计数器的值与N比较
							BHS		SUM_END		; 若计数器的值≥N,则运算结束
							ADD		R1,#1
							B		SUM_L1
							
				SUM_ERR		MOV		R0,#0			
						
				SUM_END		POP		{R1-R7,PC}	; 寄存器出栈,返回
							
							END				

相关资源