Thumb 汇编指令实验的参考程序代码清单
;文件名:test.s
;功能:计算1+2+3+…+N 的值
N EQU 50 定义N的值为50
AREA testcode,CODE,READONLY 区域名为testcode,代码,只读
ENTRY 入口
CODE32
ARM_CODE LDR SP,=0x40003F00 sp=0x40003F00
ADR R0,THUMB_CODE+1 将分支目标地址送R0,使R1的bit[0]=1
BX R0 分支并且转换为thumb状态
LTORG
CODE16 汇编以下代码为thumb指令
THUMB_CODE
LDR R0,=N 伪指令R0=50
BL SUM_N 跳转到SUM_N执行
B THUMB_CODE 跳转到THUMB_CODE,thumb模式
;名称:SUM_N
;功能:计算1+2+3+…+N 的值
;入口参数:R0( N 的值 )
;出口参数:R0( 运算结果 )
SUM_N
PUSH {R1-R7,LR}
MOVS R2,R0 R0的内容放入R2
BEQ SUM_END 相等转到SUM_END
CMP R2,#1 R2与1比较,设置标志位
BEQ SUM_END 相等转到SUM_END
MOV R1,#1 将1送入R1
MOV R0,#0 将0送入R0
SUM_L1 ADD R0,R1 R0=R0+R1
BCS SUM_ERR
CMP R1,R2 R1与R2比较,设置标志位
BHS SUM_END
ADD R1,#1 R0=R0+1
B SUM_L1 转到SUM_L1
SUM_ERR MOV R0,#0__ 将0送入R0
SUM_END POP {R1-R7,PC}
END
ARM 汇编指令实验的参考程序代码清单:
;文件名:add.s
;功能:计算1+2+3+…+N 的值
N EQU 5; 定义N的内容为5
AREA Example,CODE,READONLY 定义区域,区域名为Example,代码,只读
ENTRY 入口
CODE32
START
LDR R0,=N R0=5
MOV R2,R0 R2=R0
MOV R0,#0 R0=0
MOV R1,#0 R1=0
LOOP
CMP R1,R2 比较R1与R2
BHI ADD_END
ADD R0,R0,R1 R0=R0+R1
ADD R1,R1,#1 R1=R1+1
B LOOP 转到loop
ADD_END
B START 转到start
END
程序说明: