nikolasR200 Δημοσ. 25 Ιανουαρίου 2010 Δημοσ. 25 Ιανουαρίου 2010 Θέλω να φτιάξω ένα πρόγραμμα που να του εισάγω ένα string και να κάνω κάποιες ενέργειες πάνω του. Έχω ορίσει στο data segment το string ως string: .space 200 (επιτρέπωντας του μέγεθος μέχρι 200 χαρακτήρες-αν δεν κάνω λάθος μέχρι εδώ) στη συνέχεια όμως όταν από μια υπορουτίνα πάω να φορτώσω τη διεύθυνση του για να το επεξεργαστώ δεν το φορτώνει. Μάλιστα για να σιγουρευτώ έκανα και ένα syscall μέσα από την υπορουτίνα και δεν μου το εμφάνισε, ενώ στο κυρίως πρόγραμμα μου το εμφανίζει κανονικά με syscall..Φταίει ενδεχομένως ο τρόπος που το έχω δηλώσει? ή θέλει συγκεκριμένο τρόπο ώστε να περάσει στην υπορουτίνα..?!?
nikolasR200 Δημοσ. 25 Ιανουαρίου 2010 Μέλος Δημοσ. 25 Ιανουαρίου 2010 αυτό το κομμάτι το έχω χρησιμοποιήσει για την εισαγωγή του string > la $a0, S li $a1,200 li $v0,8 syscall ακριβώς από κάτω χρησιμοποίησα αυτό το κομμάτι >la $t2,S li$v0,4 syscall και μου εμφάνισε κανονικά το string αλλά στη συνέχεια καλώ μια υπορουτίνα και μέσα της καλώ το string με την ίδια σύνταξη αλλά δεν εμφανίζεται τίποτα.. >la $t2,S li$v0,4 syscall
virxen75 Δημοσ. 25 Ιανουαρίου 2010 Δημοσ. 25 Ιανουαρίου 2010 στείλε όλο τον κώδικα έστω και με pm το λάθος μπορεί να βρίσκεται οπουδήποτε.
nikolasR200 Δημοσ. 26 Ιανουαρίου 2010 Μέλος Δημοσ. 26 Ιανουαρίου 2010 Το εντόπισα το λάθος που δεν μεταβιβαζόταν το string στην υπορουτίνα..και τώρα προέκυψε ένα νέο λάθος που πάει να μου σπάσει το κεφάλι!! Η συγκεκριμένη υπορουτίνα υποτίθεται πως παίρνει τα κεφαλαία γράμματα και τα κάνει μικρά..το περίεργο όμως είναι ότι έτσι όπως την έχω γράψει δεν δουλεύει..αντίθετα, όταν αλλάζω το beq $t0,$0,end1 με beq $t0,$0,menu για ένα περίεργο και ανεξήγητο κατ εμέ λόγο δουλεύει κανονικά. Το περίεργο είναι ότι η ταμπελα menu δείχνει ένα asciiz string στο data segment αλλά αντί να μου εμφανίζει το μήνυμα στην ταμπέλα menu όταν το t0 μηδενίζεται (πράγμα που δεν το θέλω ούτως ή άλλως) αυτή η αλλαγή το κάνει να τρέχει κανονικά και να μου μετατρέπει τα κεφαλαία σε μικρά :cry::cry: >procedure3: li $v0,4 syscall add $t2,$0,$a0 li $t1,0 repeat1: lb $t0, ($t2) beq $t0,$0,end1 add $t1,$t1,1 blt $t0,0x41,lala bgt $t0,0x5A,lala or $t0,$t0,0x20 lala: sb $t0, ($t2) add $t2,1 j repeat1 end1: move $a0,$t2 li $v0,4 syscall jr $ra συγκεκριμένα η ταμπέλα είναι η ακόλουθη menu: .asciiz "Please make your choice: \n"
virxen75 Δημοσ. 26 Ιανουαρίου 2010 Δημοσ. 26 Ιανουαρίου 2010 > .data str1: .asciiz "PLEASE MAKE YOUR CHOICE: \n" .text .globl main main: procedure3: li $v0,4 la $a0,str1 syscall add $t2,$0,$a0 li $t1,0 repeat1: lb $t0, ($t2) beq $t0,$0,end1 blt $t0,0x41,lala bgt $t0,0x5A,lala or $t0,$t0,0x20 lala: sb $t0, ($t2) add $t2,1 j repeat1 end1: la $a0,str1 li $v0,4 syscall jr $ra με αυτά που μου έδωσες το μόνο που μπορώ να κάνω είναι το παραπάνω
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.