logo资料库

ARM汇编语言程序设计实例解析-阶乘操作.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
年 月第 版, 3 1 8 2010 年 月第二次印刷 《ARM 嵌入式系统结构与编程》邱铁 编著. 清华大学出版社. 2009 ARM 汇编语言程程序设计精讲 阶乘操作实例解析 求一个数的阶乘(64 位结果) 用 ARM 汇编语言设计程序实现求 20!(即 20 的阶乘),并将其 64 位结果放在[R9:R8] 中。(R9 中存放高 32 位) 解:程序设计思路:64 位结果的乘法指令通过两个 32 位的寄存器相乘,可以得到 64 位的 结果,在每次循环相乘中,我们可以将存放 64 位结果两个 32 位寄存器分别与递增量相乘, 最后将得到的高 32 位结果相加。程序设计流程如图 7-1 所示:
《ARM 嵌入式系统结构与编程》邱铁 编著. 清华大学出版社. 2009 年 月第 版, 2010 3 1 8 年 月第二次印刷 开 始 初 始 化 [R9:R8]=20 递 减 计 数 器 R0=19 备 份 R9至 R1 计 算 R0与 R8相 乘 结 果 保 存 在 [R9:R8] 计 算 R0乘 R1并 加 上 进 位 保 存 在 R9 计 数 器 R0减 1 R0= =0? YES 结 束 NO 程序设计流程图 R8 , #20 R9 , #0 R0,R8,#1 程序代码如下: 在 ARM 集成开发环境下编程 ADS: AREA Fctrl,CODE,READONLY ENTRY CODE32 START MOV MOV SUB Loop MOV MLA SUBS BNE Stop R1 , R9 R8 , R9 , R0 , R8 R9 , R1 , R0 , R9 R0 , R0 , #1 Loop UMULL B END Stop ; 声明代码段 Fctrl ; 标识程序入口 ; 声明 32 位 ARM 指令 ;低位初始化 ;高位初始化 ;初始化计数器 ;暂存高位值 ;[R9:R8]=R0*R8 ;R9=R1*R0+R9 ;计数器递减 ;计数器不为 0 继续循环 ; 文件结束
年 月第 版, 3 1 《ARM 嵌入式系统结构与编程》邱铁 编著. 清华大学出版社. 2009 程序执行后输出结果如下: 年 月第二次印刷 2010 8 R8=0x82B40000 R9=0x21C3677C
分享到:
收藏