Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω μια άσκηση που ζητάει την μεγαλύτερη λέξη σε ένα αλφαριθμητικό,το οποίο χωρίζεται μόνο με κενά και ο τελευταίος χαρακτήρας του είναι το 0. Έχω κάνει το παρακάτω αλλά δεν ξέρω που έχω κάνει λάθος, θα το εκτιμούσα αν μου υποδεικνύατε τα λάθη μου .

        .globl main # declare the label main as global. 
        
        .text 
     
main:
        la         $a0, string         # The address of the string
        addu       $v1, $zero, $a0     # The address of longest word
		
		la		   $t4, maxNoOfLetters
		lw		   $t5,0($t4)
		la         $t6, counter
		#lw         $t7,0($t6)
		la         $s2, space
		lw         $s3,0($s2)
		
#countChr:  
    	lb         $t2, 0($a0)    # Load the first byte from address in $t0  
    	beq 	   $t2, $zero, end     # if $t2 == 0 then go to label end
while1: 
        bne   	   $a0, $s3, step1
        addiu 	   $a0, $a0, 1
        beq   	   $a0, $zero, end
        j  		   while1
        
step1:
		sub 	   $v1, $v1, $v1
	    addu 	   $v1,$zero,$a0
while2: 
        bne 	   $a0, $s3,step2        
    	addiu 	   $a0, $a0, 1      # else increment the address  
    	addiu 	   $t5, $t5, 1     # and increment the counter of course
    	beq 	   $a0, $zero, end
    	j 	       while2
    	
while3: 
        bne 	   $a0, $s3, step2
    	addiu 	   $a0, $a0, 1
        beq 	   $a0, $zero, end
        j 		   while3
step2:  
		lw 		   $t7, 0($t6)
		addiu 	   $t7, $t7, 1
		addiu 	   $a0, $a0, 1
		beq 	   $a0, $s3, step2
		slt 	   $t9, $t5, $t7
		beq 	   $t9,$zero, skip 
		lw 	  	   $t5, 0($t7)
		lw    	   $v1, 0($a0)
skip:

		beq 	   $a0, $zero, end
		j 		   while3
    	#j countChr      # finally loop  
    
 
        ########################################################################
        #  Write your code here
        # NOTE: Don't print out the results! Automatic testing will get the final
        #  value of $v1 and check if it is correct
        ########################################################################
        
end: 
        addiu      $v0, $zero, 10    # system service 10 is exit
        syscall                      # we are outta here.
        
        ###############################################################################
        # Data input.
        ###############################################################################
        .data
string: .asciiz "small  equal long atTheEnd"
maxNoOfLetters: .word 0
counter: .word 0
space: .asciiz " "
Δημοσ.

Μπορείς να εξηγήσεις τη λειτουργία του κώδικα σου;

Εγώ θα έκανα πρώτα ένα καταχωρητή σαν max, ένα σαν counter και κάθε φορά που θα έβρισκα κενό θα άλλαζα τον καταχωρητή max με την τιμή του counter αν ήταν μεγαλύτερος από τον τωρινό max και θα τον μηδένιζα.

Με lb θα παίρνει έναν έναν τους χαρακτήρες και κάθε φορά θα προχωρούσα κατά ένα τον καταχωρητή που έχω το κείμενό μου

Δημοσ.

Μπορείς να εξηγήσεις τη λειτουργία του κώδικα σου;

Εγώ θα έκανα πρώτα ένα καταχωρητή σαν max, ένα σαν counter και κάθε φορά που θα έβρισκα κενό θα άλλαζα τον καταχωρητή max με την τιμή του counter αν ήταν μεγαλύτερος από τον τωρινό max και θα τον μηδένιζα.

Με lb θα παίρνει έναν έναν τους χαρακτήρες και κάθε φορά θα προχωρούσα κατά ένα τον καταχωρητή που έχω το κείμενό μου

Με αυτή την λογική το έκανα και εγώ περίπου, μόνο που επιπλέον πρέπει να αποθηκευτεί και η διεύθυνση του καταχωρητή που αρχίζει η μεγαλύτερη λέξη.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...