我对汇编语言非常陌生,对 C 语言也很陌生。我看过一个示例,该示例从 c 代码创建调用函数,并且汇编代码具有执行计算并返回值的函数(这是一个赋值) C 代码:
#include <stdio.h>
int Func(int);
int main()
{
int Arg;
Arg = 5;
printf("Value returned is %d when %d sent\n",Func(Arg), Arg);
}
汇编代码:
.global Func
Func: save %sp,-800, %sp
add %i0, -45 , %l0
mov %l0, %i0
ret
restore
它从 C 代码中获取值,将该值与汇编代码中的数字相加,然后输出新数字。我在很大程度上理解这个例子。我们的任务(修改代码):“编写一个调用 Func1 的 C 源文件,带有 2 个参数 A 和 B,以及包含两个方法 Func1 和 Func2 的汇编源文件。让 Func1 调用 Func2,就好像它是 Func2(Q) . Func2 应将其输入参数加倍并将该加倍的值发送回 Func1。Func1 应将值 2*A + 2*B 返回到 C 主程序。我已经尝试过了,并提出了这个解决方案(请原谅我,我今天是新手)
#include <stdio.h>
int Func1(int, int);
void Func2(int, int);
int main()
{
int Arg1 = 20;
int Arg2 = 4;
printf("Value returned is %d ",Func1(Arg1,Arg2));
}
集会:
.global Func1
Func1: save %sp,-800, %sp
mov %l0, %i0
mov %l1, %i1
call Func2
nop
ret
restore
Func2: save %sp,-800, %sp
umul %i0, 2 , %l0
umul %i1, 2 , %l1
call Func1
nop
它不起作用,我一点也不惊讶。我确信这段代码有很多问题,但是对这里发生的事情或我做错的事情进行彻底的解释真的会有所帮助。