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

📄 test3.s

📁 easyarm2200整个光盘内容
💻 S
字号:
X		EQU		11			; 定义X的值为11
Y		EQU		8			; 定义Y的值为8

BIT23	EQU		(1<<23)		; 定义BIT23的值为0x00800000
			
			AREA	Example3,CODE,READONLY	; 声明代码段Example3
			ENTRY				; 标识程序入口
			CODE32				; 声明32位ARM指令
			
START		; 使用MOV、ADD指令实现:R8 = R3 = X + Y
			MOV		R0,#X		; R0 <= X,X的值必须是8位图数据
			MOV		R1,#Y		; R1 <= Y,Y的值必须是8位图数据
			ADD		R3,R0,R1	; 即是R3 = X + Y
			MOV		R8,R3		; R8 <= R3
			
			
			; 使用MVN、SUB指令实现:R5 = 0x5FFFFFF8 - R8 * 8
			MVN		R0,#0xA0000007		; 0xA0000007的反码为0x5FFFFFF8
			SUB     R5,R0,R8,LSL #3		; R8左移3位,结果即是 R8 * 8
		
			
			; 使用CMP指令判断(5*Y/2)>(2*X)吗?若大于则R5 = R5&0xFFFF0000,否则R5 = R5|0x000000FF
			MOV		R0,#Y
			ADD		R0,R0,R0,LSL #2		; 计算R0 = Y + 4*Y = 5*Y
			MOV		R0,R0,LSR #1		; 计算R0 = 5*Y/2
			MOV		R1,#X
			MOV		R1,R1,LSL #1		; 计算R1 = 2*X
			CMP		R0,R1				; 比较R0和R1,即(5*Y/2)和(2*X)进行比较
			LDRHI   R2,=0xFFFF0000		; 若(5*Y/2)>(2*X),则R2 <= 0xFFFF0000
			ANDHI	R5,R5,R2			; 若(5*Y/2)>(2*X),则R5 = R5&R2
			ORRLS	R5,R5,#0x000000FF	; 若(5*Y/2)≤(2*X),则R5 = R5|0x000000FF
			
			; 使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)
			TST  	R5,#BIT23
			BICNE	R5,R5,#0x00000040			
			
			B		START
			
			END	

⌨️ 快捷键说明

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