/ / MIPS लूप को लागू करने का मुद्दा - असेंबली, मिप्स

MIPS मुद्दे को लागू करने लूप-विधानसभा, MIPS

मैं 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

यदि आप इसे इस तरह से छोड़ देते हैं, तो केवल एक लूप पुनरावृत्ति को निष्पादित किया जाता है।