📄 x次方.txt
字号:
;文件名:TEST4.S
;功能:计算X的n次方的值
;说明:X和n均为无符号整数
X EQU 153 ;定义X的值为153
n EQU 10 ;定义n的值为10
AREA Example4,CODE,READONLY ;声明代码段Example4
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START LDR SP,=0x40003F00 ;设置堆栈(满递减堆栈,使用STMFD/LDMFD指令)
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 + -