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

📄 test5.s

📁 easyarm2200整个光盘内容
💻 S
字号:
; 文件名: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	

⌨️ 快捷键说明

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