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

📄 x次方.txt

📁 arm 的编程, 其中有 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 + -