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

源代码在线查看: test4.s

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

相关代码

				; 文件名:TEST4.S
				; 功能:计算X的n次方的值
				; 说明:X和n均为无符号整数
				
				X		EQU		9			; 定义X的值为9
				n		EQU		8			; 定义n的值为8
							
							AREA	Example4,CODE,READONLY	; 声明代码段Example4
							ENTRY			; 标识程序入口
							CODE32			; 声明32位ARM指令
							
				START		LDR		SP,=0x40003F00		; 设置堆栈(满递减堆栈,使用STMFD/LMDFD指令)
							LDR		R0,=X
							LDR		R1,=n
							BL		POW					; 调用子程序POW,返回值为R0
							
				HALT		B		HALT			
				
					
				; 名称:POW
				; 功能:整数乘方运算。
				; 入口参数:R0		底数
				;          R1		指数
				; 出口参数:R0		运算结果
				; 占用资源:R0、R1
				; 说明:本子程序不考虑溢出问题
				POW			
							STMFD	SP!,{R1-R12,LR}		; 寄存器入栈保护
							MOVS	R2,R1				; 将指数值复制到R2,并影响条件码标志
							
							MOVEQ	R0,#1				; 若指数为0,则设置R0=1
							BEQ		POW_END				; 若指数为0,则返回
							
							CMP		R2,#1
							BEQ		POW_END				; 若指数为1,则返回。(此时R0没有被更改)
							
							MOV		R1,R0				; 设置DO_MUL子程序的入口参数R0和R1
							SUB		R2,R2,#1			; 计数器R2 = 指数值减1
				POW_L1		BL		DO_MUL				; 调用DO_MUL子程序,R0 = R1 * R0
							SUBS	R2,R2,#1			; 每循环一次,计数器R2减1
							BNE		POW_L1				; 若计数器R2不为0,跳转到POW_L1
							
						
				POW_END		LDMFD	SP!,{R1-R12,PC}		; 寄存器出栈,返回  		
				
				
				
				; 名称:DO_MUL
				; 功能:32位乘法运算。
				; 入口参数:R0		乘数
				;          R1    	被乘数
				; 出口参数:R0		计算结果
				; 占用资源:R0、R1
				; 说明:本子程序不会破坏R1
				DO_MUL		MUL		R0,R1,R0			; R0 = R1 * R0
							MOV		PC,LR				; 返回			
							
							END				

相关资源