- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在将此 C++ 程序转换为 MIPS 程序集时遇到问题:
教授给出的原始 C++ 代码示例
float vect1[64], vect2[64];
int num1,num2;
float average;
int numag;
void main() {
int i, count;
float sum;
float fnum;
read_vect_float(vect1,num1);
read_vect_float(vect2,num2);
sum=0.0;
for(i=0;i<num1;i++)
sum=sum+vect1[i];
fnum=(float)num;
sum=sum/fnum;
average=sum;
cout<< "The average is: " << average;
cout << "\n";
count=0;
for(i=0;i<num2;i++)
if(vect2[i]>average)
count=count+1;
numag=count;
cout << "In vector 2 there are ";
cout << numag;
cout << " elements major of ";
cout << average;
cout << "\n";
}
void read_vect_float(float v[],int &n) {
int i;
float x;
cout << "Number of elements: ";
cin >> n;
for(i=0;i<n;i++) {
cout=<< "Element: " ;
cin >> x;
vect[i]=x;
}
}
C++ 代码由我审核,您可以运行
#include <iostream>
using namespace std;
void read_vect_float(float v[],int &n);
float vect[64],vect1[64], vect2[64];
int num,num1,num2;
float average;
int numag;
int main() {
int i, count;
float sum;
float fnum;
read_vect_float(vect1,num1);
read_vect_float(vect2,num2);
sum=0.0;
for(i=0;i<num1;i++)
sum=sum+vect1[i];
fnum=(float)num;
sum=sum/fnum;
average=sum;
cout<< "The average is: " << average;
cout << "\n";
count=0;
for(i=0;i<num2;i++)
if(vect2[i]>average)
count=count+1;
numag=count;
cout << "In vector 2 there are ";
cout << numag;
cout << " elements major of ";
cout << average;
cout << "\n";
return 0;
}
void read_vect_float(float v[],int &n) {
int i;
float x;
cout << "Number of elements: ";
cin >> n;
for(i=0;i<n;i++) {
cout << "Element: " ;
cin >> x;
vect[i]=x;
}
}
程序的目的是读取两个 float 数组的输入元素,计算存储项的平均值,并找出第二个数组中有多少元素大于第一个数组。
这是我的 MIPS 汇编代码:
.data
vect: .float
.space 256
vect1: .float
.space 256
vect2: .float
.space 256
num1: .word
.space 4
num2: .word
.space 4
average: .float
.space 4
numag: .word
.space 4
i: .word
.space 4
count: .word
.space 4
sum: .float
.space 4
fnum: .float
.space 4
str1: .asciiz "The average is: "
.align 2
str2: .asciiz "\n"
.align 2
str3: .asciiz "In vector 2 there are "
.align 2
str4: .asciiz " element major of "
.align 2
x: .float
.space 4
str5: .asciiz "Number of elements: "
.align 2
n: .word
.space 4
str6: .asciiz "Element: "
.align 2
.text
.globl main
main:
# read_vect_float(vect1,num1);
lwc1 $f12,vect1
lw $a0,num1
jal read_vect_float
# read_vect_float(vect2,num2);
lwc1 $f13,vect2
lw $a1,num2
jal read_vect_float
# sum=0.0;
mtc1 $zero,$f0
cvt.s.w $f0,$f0
# for(i=0;i<num1;i++)
li $t0,0
for3:
# sum=sum+vect1[i];
sll $t0,$t0,2
lwc1 $f1,vect1($t0)
add.s $f2,$f2,$f1
addi $t0,$t0,1
blt $t0,$t1,for3
# fnum=(float)num;
mtc1 $t1,$f3
cvt.s.w $f3,$f3
# sum=sum/fnum;
div.s $f2,$f2,$f3
# average=sum;
swc1 $f2,average
# cout<< "The average is: " << average;
li $v0,4
la $a0,str1
syscall
li $v0,2
lwc1 $f12,average
syscall
# cout << "\n";
li $v0,4
la $a0,str2
syscall
# count=0;
li $t2,0
sw $t2,count
# for(i=0;i<num2;i++)
li $t0,0
for2:
# if(vect2[i]>average)
#ble $f3,$f2,next
c.le.s $f2,$f3
bc1t next
# count=count+1;
addi $t2,$t2,1
sll $t0,$t0,2
sw $t2,numag
addi $t1,$t1,1
blt $t0,$t1,for2
next:
# cout << "In vector 2 there are ";
li $v0,4
la $a0,str3
syscall
# cout << numag;
li $v0,1
lw $a0,numag
syscall
# cout << " elements major of ";
li $v0,4
la $a0,str4
syscall
# cout << average;
li $v0,2
lwc1 $f12,average
syscall
# cout << "\n";
li $v0,4
la $a0,str2
syscall
li $v0,10
syscall
read_vect_float:
# cout << "Number of elements: ";
li $v0,4
la $a0,str5
syscall
# cin >> n;
li $v0,5
syscall
sw $v0,n
lw $t5,n
# for(i=0;i<n;i++)
li $t0,0
for:
# cout=<< "Element: " ;
li $v0,4
la $a0,str6
syscall
# cin >> x;
li $v0,6
syscall
swc1 $f0,x
# vect[i]=x;
sll $t0,$t0,2
swc1 $f0,vect($t0)
addi $t0,$t0,1
blt $t0,$t5,for
jr $ra
但是当我在 MARS MIPS 模拟器上运行代码时,结果并不像预期的那样,我希望得到您的一些建议,以了解问题出在哪里。
我认为问题出在被调用两次的子例程中,并且在读取第二个数组的元素并覆盖它们之前不会保存第一个数组的元素。
我觉得要解决这个问题需要把这个元素保存在一个栈中,作为支撑,但是我不知道如何做好。
最佳答案
我设法以这种方式解决了这个练习:
.data
vect1: .float
.space 256
vect2: .float
.space 256
num1: .word
.space 4
num2: .word
.space 4
average: .float
.space 4
numag: .word
.space 4
i: .word
.space 4
count: .word
.space 4
sum: .float
.space 4
fnum: .float
.space 4
str1: .asciiz "The average is: "
.align 2
str2: .asciiz "\n"
.align 2
str3: .asciiz "In vector 2 there are "
.align 2
str4: .asciiz " elements major of "
.align 2
x: .float
.space 4
str5: .asciiz "Number of elements: "
.align 2
str6: .asciiz "Element: "
.align 2
.text
.globl main
main:
# read_vect1_float(vect1,num1);
lwc1 $f12,vect1
lw $a0,num1
jal read_vect1_float
# leggi_vet2_float(vect2,num2);
lwc1 $f13,vect2
lw $a1,num2
jal read_vect2_float
# sum=0.0;
mtc1 $zero,$f1
cvt.s.w $f1,$f1
# for(i=0;i<num1;i++)
li $t0,0
for:
# sum=sum+vect1[i];
move $t3,$t0
sll $t3,$t3,2
lwc1 $f2,vect1($t3)
add.s $f1,$f1,$f2
addi $t0,$t0,1
blt $t0,$t1,for
# fnum=(float)num1;
mtc1 $t1,$f3
cvt.s.w $f3,$f3
# sum=sum/fnum;
div.s $f1,$f1,$f3
# average=sum;
swc1 $f1,average
# cout<< "The average is: " << average;
li $v0,4
la $a0,str1
syscall
li $v0,2
lwc1 $f12,average
syscall
# cout << "\n";
li $v0,4
la $a0,str2
syscall
# count=0;
li $t4,0
sw $t4,count
# for(i=0;i<num2;i++)
li $t0,0
for2:
move $t3,$t0
sll $t3,$t3,2
lwc1 $f2,vect2($t3)
# if(vect2[i]>average)
c.le.s $f2,$f1
bc1t next
# count=count+1;
addi $t4,$t4,1
addi $t0,$t0,1
blt $t0,$t2,for2
next:
# numag=count;
sw $t4,numag
# cout << "In vector 2 there are ";
li $v0,4
la $a0,str3
syscall
# cout << numag;
li $v0,1
lw $a0,numag
syscall
# cout << " elements major of "
li $v0,4
la $a0,str4
syscall
# cout << average;
li $v0,2
lwc1 $f12,average
syscall
# cout << "\n";
li $v0,4
la $a0,str2
syscall
li $v0,10
syscall
read_vect1_float:
# cout << "Number of elements: ";
li $v0,4
la $a0,str5
syscall
# cin >> num1;
li $v0,5
syscall
sw $v0,num1
lw $t1,num1
# for(i=0;i<num1;i++)
li $t0,0
forsub1:
# cout=<< "Element: " ;
li $v0,4
la $a0,str6
syscall
# cin >> x;
li $v0,6
syscall
swc1 $f0,x
# vect1[i]=x;
move $t4,$t0
sll $t4,$t4,2
swc1 $f0,vect1($t4)
addi $t0,$t0,1
blt $t0,$t1,forsub1
jr $ra
read_vect2_float:
# cout << "Number of elements: ";
li $v0,4
la $a0,str5
syscall
# cin >> num2;
li $v0,5
syscall
sw $v0,num2
lw $t2,num2
# for(i=0;i<num2;i++)
li $t0,0
forsub2:
# cout=<< "Element: " ;
li $v0,4
la $a0,str6
syscall
# cin >> x;
li $v0,6
syscall
swc1 $f0,x
# vect2[i]=x;
move $t4,$t0
sll $t4,$t4,2
swc1 $f0,vect2($t4)
addi $t0,$t0,1
blt $t0,$t2,forsub2
jr $ra
我想知道固定的练习是否顺利,或者您可以做一些改进。
关于c++ - 在 MIPS 上调用两次的子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704603/
我有一个包含很多工作表和几个宏的工作簿。当我进入 VBA 并尝试将新的 Sub 写入 ThisWorkbook 模块时,我看到: "This will reset your project, proc
1、函数定义 子程序即一段分离的代码,它可以使减少重复代码且程序易读.perl中,子程序可以出现在程序的任何地方.但一般放在程序的开始或结尾. 复制代码 代码如下:
1、定义 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为: &n
如何将 deck(52) 数组从 Newgame 函数传递到 deckshuffle 函数 FUNCTION newgame 'New game RANDOMIZE TIMER CA
有没有办法在后台运行 perl 子程序?我环顾四周,看到了一些关于线程的提及,但看到一个例子会有所帮助,或者为我指明正确的方向。谢谢。 想跑run_sleep在后台。 #!/usr/bin/perl
情况 我正在创建一个简单的模板文件,该文件将有助于创建 future 的脚本,以便在 *nix 系统上通过命令行执行各种任务。作为其中的一部分,我可能会要求用户输入需要根据源代码中提供的正则表达式进行
我想将以下变量传递给子程序 mySubroutine,$name, $age然后是这个多维数组: $name = "jennifer"; $age = 100; $list[0][0] = "TEST
据我所知,VB6不支持继承,但它支持接口(interface)。我正在尝试创建一个重载子例程,将其信息传递给基类的同名子例程。 Sub Main() Dim Student1 as New S
这个问题已经有答案了: Dynamic Function Calls in Excel VBA (1 个回答) 已关闭 8 年前。 这是我的测试代码 Sub dotask() Dim qusu
我正在编写一个本质上是静态的函数。我想将它插入到模板工具包中,它会传递类名。本质上,它正在做 ClassName->function( $args.. ) 但我希望它做类似的事情 ClassName:
我创建了一个小示例程序来检查子例程系统调用。 package main func print() { } func main() { go print() } go 子程序的 straces
我是该网站的新手,这看起来可能是获得一些提示和帮助(如果有的话)的地方。 我正在学习“C 调用 Fortran 子程序”,我对 C 有一定的了解,但对 Fortran 了解不多。 优点:我看过一些例子
是否有一种方法/功能可以为所有可用的 Mojolicious 路由编写自动启动子程序/方法? 也许是一个自动助手,但我还不知道如何去做。 我认为这对于为几乎所有可用路由初始化数据库连接 $self->
我试图在不实例化对象的情况下从类中调用原型(prototype)函数。我的类(class) MyClass 的一个例子: package MyClass; use strict; use warnin
我正在尝试从 C 调用 FORTRAN 函数 我的问题是: 如果 fortRoutine 是我的 fortran 子例程的名称,那么我从 C 调用它作为 fortRoutine_。如果 fortRou
我可以调用编译这个 fortran 代码 'test.f90' subroutine test(g,o) double precision, intent(in):: g double precisi
我制作了一个 Perl 模块 MyModule.pm 它有一些我想在 shell 脚本中调用的子例程 getText。我尝试了以下方式,但它给出了错误; SEC_DIR=`perl -MMyModul
我用 CommaIde 打开了这个简单的脚本: #!/usr/bin/env perl6 my $str = 'foobar'; say $str; IDE 突出显示了带有错误的“说”一词: Subr
我基本上有一个存储有数字 1-6(例如垄断)的立方体 vector > cube; 看起来像这样: 0300 5126 0400 我有将它倒转的代码: short tmp=cube[0][1]; cu
我必须在两个文件中创建一个 surbroutine,我在构建项目时遇到问题,出现错误: undefined reference to c 我不知道发生了什么,我正在尝试发送 C[0] 内存方向,这就是
我是一名优秀的程序员,十分优秀!