假设我有以下C代码:
int array[10] = {10, 5, 2, 20, 20, -5, 3, 19, 9, 1};
void main(void)
{
printArray(0, 9);
}
void printArray(int startIndex, int endIndex)
{
// prints out the numbers in the order starting from startIndex
// and ending at endIndex
}
我会将这个C代码转换成MIPS,如下所示:
.text
.glo
我正在练习将C代码转换成MIPS汇编语言,在理解变量赋值中move和li的用法时遇到了困难。
例如,在MIPS中实现以下C行:
int x = 0;
如果我理解正确(但我非常怀疑这一点),这两个看起来都可以在MIPS汇编程序中工作:
move $s0, $zero
li $s0, $zero
我说错了吗?这两行之间的区别是什么?
我有一个大学项目,在这个项目中我必须使用c++中的Bison和Flex为老师选择的语言构建一个编译器。
该语言是面向对象的垃圾回收动态类型化语言。
问题是,当我们只知道运行时的类型时,我和我的朋友只是对如何为a.x编写mips代码感到困惑。让我们来看看这段伪代码:
class A{private x;public A(){x=10}}
class B{public x;public B(){x=2}}
class C
{
public static main(args)
{
n=input('integer');
if(n>5)
我目前正在尝试将do - while循环从C转换到MIPS,当涉及到分支测试时,我有点困惑。 我尝试将C语言转换为MIPS的代码如下: do{
code
} while(x != 0) 在mips中我声明 loop:
#code
# and down here I should be translating while(x != 0) 如何使用分支语句最有效地翻译while(x != 0)?看起来像once x == 0,do while循环停止。
我正试图将这个for循环转换成MIPS汇编语言,我不知道如何确切地解决这个问题。我试着用youtube来理解它的概念,但我仍然对它感到不信任。
下面是C代码:
int sum = 0;
for (int i = 1; i <= 10; i ++){
if (i & 1) sum = sum + i * i;
else sum = sum + i;
}
我试着转换,但我只是不知道从哪里开始。
期望得到MIPS代码,并在可能的情况下解释,这样我就可以从中学习!
我想试着把一个C程序转换成MIPS汇编代码
下面是C语言程序:
int x=2;
int index;
for(index = 0;index<4;index++){
x=x+index;
}
以下是我对MIPS汇编代码的尝试:
li $8,4 # the limit
li $9,2 #x = 2
li $10,0 #index, starts at 0
forLoop:
slt $11,$10,$8 #if index <4 then $11 = true =1
beq $11,$0,E
按照官方文档的指示,我在构建gem5时遇到了很多问题。
以下是我使用的命令:
git clone https://gem5.googlesource.com/public/gem5
cd gem5
python2 `which scons` build/MIPS/gem5.opt
其结果是:
scons: Reading SConscript files ...
Warning: Your compiler doesn't support incremental linking and lto at the same time, so lto is being disabled. To
我正在尝试将一个C程序转换成MIPS汇编代码。
在我的C代码中,我有如下一行:
int base;
int count;
count = base;
在MIPS中,如何将基值存储在计数的内部?我看到的用于加载和存储的唯一指令是lw和sw,它们的原型只来自寄存器源->、ram目的地或ram源->注册目的地。
任何帮助都将不胜感激。
编辑i希望这可以在一条指令中完成,如下所示
move base acc
但显然这是不可能的(至少我没有发现类似于此的指令的例子),我选择了这样的方法:
lw $t0, base //load base into $t0
sw $t0, count
我刚开始学习MIPS,不太清楚发生了什么。以下问题要求将最后一个添加指令转换为C代码:
.data
A: .word 0:16 # in C: int A[16];
.text
la $s6, A # in C: int* s6 = A;
li $t0, 3 # in C: int t0 = 3; // integer array index
sll $t0, $t0, 2 # (In
我理解当我将C代码转换成MIPS语言时,地址需要乘以4,即:int x = A[1] => lw $t1, 4*1 (address of A)
但我不知道为什么分支目标地址也是如此。
从这个Q&A
我读到,偏移量需要字对齐,因为PC地址是这样的。但是,偏移地址不需要除以4吗,因为PC是对字的,偏移地址是字节对齐的?
我想我有一些误解。