1.用windlx模拟器执行下列三个程序(任选一个): 求阶乘程序fact.s 求最
时间: 2024-02-05 09:12:19 浏览: 139
大公约数程序gcd.s 二分查找程序bin_search.s
我选择执行求阶乘程序fact.s
首先,打开windlx模拟器,进入Linux系统。
使用vim编辑器创建一个名为fact.s的汇编文件:
```
vim fact.s
```
然后在编辑器中输入以下代码:
```
.data
n: .word 5
result: .word 1
.text
.globl main
main:
ldr r0, =n
ldr r0, [r0]
mov r1, #1
loop:
mul r1, r1, r0
subs r0, r0, #1
bne loop
ldr r0, =result
str r1, [r0]
mov r0, #0
bx lr
```
代码解释:
- .data:声明数据段
- n:声明一个名为n的变量,存储值为5
- result:声明一个名为result的变量,存储值为1
- .text:声明代码段
- .globl main:声明main函数为全局函数
- main:程序入口
- ldr r0, =n:将n的地址加载到寄存器r0中
- ldr r0, [r0]:将n的值加载到寄存器r0中
- mov r1, #1:将1加载到寄存器r1中
- loop:循环开始标签
- mul r1, r1, r0:将r1和r0的乘积存储到r1中
- subs r0, r0, #1:将r0减1
- bne loop:如果r0不等于0,则跳转到loop标签
- ldr r0, =result:将result的地址加载到寄存器r0中
- str r1, [r0]:将r1的值存储到result中
- mov r0, #0:将0加载到寄存器r0中
- bx lr:返回
保存并退出编辑器。
使用as汇编器将汇编代码编译成目标文件:
```
as -o fact.o fact.s
```
使用ld链接器将目标文件链接成可执行文件:
```
ld -o fact fact.o
```
执行可执行文件:
```
./fact
```
输出结果为120,即5的阶乘。
完成程序执行。
阅读全文