0
내 목표는 다음 Java 코드 (asm 파일의 맨 위에있는 주석 블록)를 mips 어셈블리 코드로 변환하는 것입니다. QTSpim에서 컴파일하려고하면 "0x0040007c에서 비 명령어 실행 시도"라는 오류 메시지가 표시됩니다. 또한 36 번째 줄에 두 번째 주 레이블이 사용되었다고 말하는 오류가 계속 발생하지만 이것이 가능한지는 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 그렇지 않으면 CPU가 바로 프로그램 후 메모리에 위치 할 일이 무엇이든 계속 실행됩니다, 당신은 그것을이 완료되면 명시 적으로 프로그램을 종료 할 필요가Java to mips assembly exercise
########################################################################
# program description:
#Translate this into assembly:
#
#int w1 = 40; // use a register for this variable
#int w2 = 20; // use a register for this variable
#int total; // use a register for this variable
#int result[4]; // note: int = 1 word = 4 bytes
#
#total = w1;
#for (int i = 0; i < 4; i++) {
# total = total + w2;
# if (total > 100) {
# total = total - 100;
# }
# result[i] = total;
# System.out.println(total); // C++: cout << total << '\n';
#}
#return;
#
#
# Arguments: w1, w2, total.
#
#
#
#
########################################################################
.data
result: .word 4
.text
main:
li $s0, 40 #w1
li $s1, 20 #w2
li $s2, 0 #total
li $s3, 0 #loop counter
li $s4, 4 #loop conditional
li $s5, 100 #if conditional
add $s2, $s2, $s0
loop:
beq $s3, $s4, end #if the counter is greater than 4, exit loop
add $s2, $s2, $s1 #total = total + w2
bgt $s2, $s5, then #if total is greater than 100 branch to then
then:
sub $s2, $s2, $s5 #total = total - 100
sw $s2, result #store total into result
li $v0, 1 #print out total
move $a0, $s2
syscall
else:
sw $s2, result
li $v0, 1 #print out total
move $a0, $s2
syscall
end: