मैं MIPS विधानसभा में एक लूप को लागू करने की कोशिश कर रहा हूं, लेकिन मुझे ऐसा करने में परेशानी हो रही है। मैंने प्रत्येक चरण और मूल प्रश्न पर अपने प्रयास और तर्क के साथ अपने कोड की टिप्पणी की है।
int a[20];
int b = 17;
while b < 22 do:{
a[int(b / 2)] = b * 13;
b = b + 1
}
.data
a: .space 80
b_num: .word 17
.text
.globl main
main: la $s0, a # load base address of a into $s0
lw $s5, b_num # load b into $s5
Loop: li $t3, 2 # load integer 2 into $t3
li $t4, 13 # load integer 13 into $t4
div $s5, $t3 # divide b by 2
mflo $s3 # move quotient into $s3
add $t1, $s3, $s3 # $t1 = 2*i
add $t1, $t1, $t1 # $t1 = 4*i
add $t1, $t1, $s0 # $t1 = address of a[i] , a[i] = a[b/2], added
# base address of a with counter i which is b/2
slti $s6, $s5, 22 # check if b < 22 and put a 1 or 0 into $s6
bne $s6, $zero, Exit # check if $s6 from previous inequality is 0 (False). If so, Exit program.
mult $s5,$t4 # b * 13
mflo $t5 # move answer to $t5
sw $t5, 0($t1) # a[i] = $t5
addi $s5, $s5, 1 # b = b + 1
j Loop
Exit:
li $v0, 10 # Get ready for a system call.
syscall # syscall number 10: End of program.
उत्तर:
जवाब के लिए 0 № 1यह होना चाहिए
beqz $s6, Exit
के बजाय
bne $s6, $zero, Exit
यदि आप इसे इस तरह से छोड़ देते हैं, तो केवल एक लूप पुनरावृत्ति को निष्पादित किया जाता है।