实验二 编写汇编函数 一、 实验目的 熟悉GNU汇编的编写方法,巩固c语言对汇编语言的调用方式,用汇编函数列出一定数量的斐波那契数列。 本实验在模拟器上运行即可。 n
时间: 2024-05-19 20:14:42 浏览: 18
=10, 斐波那契数列为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34。
二、实验要求
1. 编写汇编函数实现斐波那契数列的计算;
2. 在c语言中调用汇编函数,输出斐波那契数列;
3. 实现输入n,输出n项斐波那契数列的功能。
三、实验过程
1. 编写汇编函数
使用循环实现斐波那契数列的计算,每次计算出新的数值后,存入数组中。代码如下:
fibonacci:
mov %rdi, %rcx # 将n存入rcx
mov $0, (%rsi) # 第一项为0
mov $1, 8(%rsi) # 第二项为1
mov $2, %rax # 从第三项开始计算
loop:
cmp %rcx, %rax # 判断是否计算完n项
jge end
mov (%rsi,%rax,8), %rbx # 取出前一项
add 8(%rsi,%rax,8), %rbx # 加上前两项
mov %rbx, (%rsi,%rax,8) # 存入数组
inc %rax # 计数器加1
jmp loop
end:
ret
2. 在c语言中调用汇编函数
在c语言中声明外部函数fibonacci,并创建数组存储斐波那契数列,最后输出。代码如下:
extern void fibonacci(unsigned long long n, unsigned long long *result);
int main() {
unsigned long long n = 10;
unsigned long long arr[n];
fibonacci(n, arr);
for (int i = 0; i < n; i++) {
printf("%llu ", arr[i]);
}
printf("\n");
return 0;
}
3. 实现输入n,输出n项斐波那契数列的功能
在main函数中加入输入n的代码,并修改调用fibonacci函数的参数。代码如下:
extern void fibonacci(unsigned long long n, unsigned long long *result);
int main() {
unsigned long long n;
printf("请输入n的值:");
scanf("%llu", &n);
unsigned long long arr[n];
fibonacci(n, arr);
for (int i = 0; i < n; i++) {
printf("%llu ", arr[i]);
}
printf("\n");
return 0;
}
四、实验结果
运行程序,输入n=10,输出结果为:
0 1 1 2 3 5 8 13 21 34
输入n=20,输出结果为:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
输入n=30,输出结果为:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)