이것은 내 지식이 부족해서 죄송합니다. 이것은 복제하려고하는 코드입니다.배열 요소를 비교합니다. switch 문/다른 경우 - 어셈블리 - MIPS
int A[3] = {0, 1, 2};
int x;
for (int i = 0; i < 3; i++)
{
if (A[i] > 1)
x = 1;
else
{
switch (A[i])
{ case 0:
x = 2;
case 1:
x = 3;
}
}
printf(“%d”, x);
}
이것은 조립품에있는 코드입니다.
main: li $s0, 0
sw $s0, ($s7) #int A[0] = {0};
li $s0, 1
sw $s0, 4($s7) #int A[1] = {1};
li $s0, 2
sw $s0, 8($s7) #int A[2] = {2};
li $s1, 1 #initialize x = 1
li $s0, 0 #initialize i = 0
li $s2, 3 # constant 3
li $s3, 1 # constant 1
start: blt $s0, $s2, for
j finish
for: add $t1,$s0,$s0 #reg $t1 = 2*i
add $t1,$t1,$t1 #reg $t1 = 4*i
add $t0,$t1,$s7
bgt $t0, $s3, exone #a[i] is greater than 1 how to increment the array up?
#switch statement
lw $t0, 0($t1)
jr $t0
j start
L0: add $s0, $s0, 1
li $s1, 2
j print
L1: add $s0, $s0, 1
li $s1, 3
j print
exone: add $s0, $s0, 1
li $s1, 1
j print
print: li $v0, 1 # print integer
move $a0, $s1 # what to print is stored at $s1
syscall
j start
finish: li $v0, 10 # exit system call
syscall
어디서 잘못 컴파일 될지 모르겠지만 원하는 결과물을 출력하지 않습니다.
일부 정보를 기반으로 내 코드를 업데이트했습니다.
main: add $s0,$zero, $zero
li $s7, 200
sw $s0, 0($s7) #int A[0] = {0};
addi $s0, $s0, 1
sw $s0, 4($s7) #int A[1] = {1};
addi $s0, $s0, 1
sw $s0, 8($s7) #int A[2] = {2};
li $s1, 0 #initialize x = 0
li $s0, 0 #initialize i = 0
li $s2, 3 # constant 3
li $s3, 1 # constant 1
#check to enter the for loop
for: blt $s0, $s2, enter
j finish
#enter the for loop
enter: add $t1,$s0,$s0 #reg $t1 = 2*i
add $t1,$t1,$t1 #reg $t1 = 4*i
add $t0,$t1,$s7 #reg A[i]
lw $t2, 0($t0)
bgt $t2, $s3, exone #a[i] is greater than 1 check
#switch statement
jr $t2
#just in case jump back to for loop
j for
#address for the switch statements
L0: add $s0, $s0, 1
li $s1, 2
j print
L1: add $s0, $s0, 1
li $s1, 3
j print
#address for the if else statement
exone: add $s0, $s0, 1
li $s1, 1
j print
print: li $v0, 1 # print integer
move $a0, $s1 # what to print is stored at $s1
syscall
j for
finish: li $v0, 10 # exit system call
syscall
출력은 "231"이어야합니다.
1) '휴식'없이 'swtich'를 원하십니까? 2)'$ t0, $ s3, exone'은 주소 *'& a [i]'를 '1'과 비교합니다. 3)'jr $ t0'은 잘못되었습니다 (점프 테이블을 코딩하려는 경우 이것이 방법이 아닙니다). – user786653
괜찮습니까? 더 읽기 쉽고 제안을 기반으로 코드를 업데이트했습니다. – Pumphouse