⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test4.s

📁 这是个嵌入式程序
💻 S
字号:
; 文件名: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	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -