У меня проблемы со следующим кодом сборки MIPS. Я хочу взять следующий код C и сделать это в MIPS Assembly (MARS 4.5).
/* Input number of rows from user */
printf("Enter number of rows: ");
scanf("%d", &N);
/* Iterate over each row */
for(i=1; i<=N; i++)
{
/* Iterate over each column */
for(j=1; j<=N; j++)
{
if(i==1 || i==N || j==1 || j==N)
{
/* Print star for 1st, Nth row and column */
printf("*");
}
else
{
printf(" ");
}
}
/* Move to the next line/row */
printf("\n");
}
return 0;
}
Пока это то, чтоЯ сделал для кода MIPS.Я не вижу, чтобы понять, как реализовать операторы IF, чтобы получить такой вывод:
Enter number of rows: 5
*****
* *
* *
* *
*****
Код MIPS: main:
#prompt1 and read character
li $v0, 4
la $a0, prompt1
syscall
#Getting user's input as text
li $v0, 8
la $a0, userInput
li $a1, 2
syscall
#prompt newline
li $v0, 4
la $a0, newline
syscall
#prompt and read int
li $v0, 4
la $a0, prompt
syscall
#read int and store in $t0
li $v0, 5
syscall
move $t0, $v0 #store n in $t0
move $t1, $v0 #store n in $t1
bge $v0, 3, proceed #if input is 0 or more, goto proceed otherwise display error message and goto exit
li $v0, 4
la $a0, errormsg
syscall
b exit
proceed:
#print n
li $v0, 1
move $a0, $t0
syscall
#prompt newline
li $v0, 4
la $a0, newline
for1:
beq $t3, $t0, end_for1
addi $t3, $t3, 1 # Increment counter
li $t4, 0 #reseting j to 0 after each iteration of the for loop
######################## Inner loop
for2:
beq $t4, $t1, end_for2
addi $t4, $t4, 1 # Increment counter
b for2
end_for2:
######################## Inner loop
b for1
end_for1:
exit:
li $v0, 10
syscall
.end main