Vkt678 Δημοσ. 31 Μαΐου 2015 Δημοσ. 31 Μαΐου 2015 Καλησπέρα.Ξεκίνησα να γράφω μερικές εντολές σε assembly και εκτελώ διάφορα προγραμματάκια.Αντιμετωπίζω όμως ένα μικρό πρόβλημα και θα ήθελα να με διαφωτίσετε για το άν οφείλεται σε bug του qtspim ή σε λανθασμένη εντολή.Όταν εκτελώ το παρακάτω κομμάτι κώδικα,βλέπω στον qtspim τα περιεχόμενα των καταχωρητών εκτελώντας μια-μια τις εντολές.Παρατηρώ λοιπόν ότι στην εντολή move $t1,$v0 , ο καταχωρητής $t1 δεν δέχεται τον αριθμό που του δίνω απο το πληκτρολόγιο και φυσικά εκτυπώνει τον αριθμό 0.Όμως στην επόμενη εντολή move $t2,$v0 ο $t2 δέχεται κανονικά τον αριθμό που του δίνεται σαν όρισμα από το πληκτρολόγιο.Να τονίσω επίσης ότι αν ξαναεκτελέσω το πρόγραμμα αρκετές φορές, ο $t1 ενημερώνεται κανονικά.Μπορεί κανείς να μου πει που οφείλεται το πρόβλημα στον $t1 στην πρώτη εκτέλεση? .data num1: .asciiz "Enter the first number" num2: .asciiz "Enter the second number" .text .globl __start __start: li $v0,4 # Print num1 la $a0,num1 syscall li $v0,5 # Read integer1 syscall move $t1,$v0 # $t1=integer1 li $v0,1 # Print integer1 move $a0,$t1 syscall li $v0,4 # Print num2 la $a0,num2 syscall li $v0,5 # Read integer2 syscall move $t2,$v0 # $t2=integer2 li $v0,1 # Print integer2 move $a0,$t2 syscall li $v0,10 # Terminate programm syscall
gon1332 Δημοσ. 31 Μαΐου 2015 Δημοσ. 31 Μαΐου 2015 Το πρόγραμμά σου είναι μια χαρά. Στον MARS δουλεύει άψογα. Επειδή δεν έχεις βάλει να τυπώνεται κάποιο newline, μήπως εσύ δεν το βλέπεις; Κοίτα το output στον MARS κάτω-κάτω. EDIT: Μόλις διάβασα πως είδες ότι οι καταχωρητές δεν ενημερώνονται. Τότε μάλλον έχει κάποιο θέμα ο SPIM. Γιατί δε χρησιμοποιείς MARS καλύτερα;
Vkt678 Δημοσ. 31 Μαΐου 2015 Μέλος Δημοσ. 31 Μαΐου 2015 Όντως ο MARS είναι η καλύτερη πλατφόρμα και σε πολλά βίντεο στο youtube ,διάφορα δοκιμαστικά προγράμματα εκτελούνται στον MARS.Δυστυχώς όμως στην σχολή μου δουλεύουμε στον spim και το κακό είναι ότι η εξέταση του εργαστηρίου γίνεται στον spim. :/
gon1332 Δημοσ. 31 Μαΐου 2015 Δημοσ. 31 Μαΐου 2015 Θα μπορούσες να τους στείλεις κάποιο report με διάφορα προβλήματα που αντιμετώπισες και να τους συστήσεις τον MARS. Μπορεί να μην το ξέρουν.
Vkt678 Δημοσ. 31 Μαΐου 2015 Μέλος Δημοσ. 31 Μαΐου 2015 Θα το κάνω και ελπίζω να το λάβουν υπ'οψιν. Θα ήθελα να ρωτήσω και κάτι ακόμα μιας και συζητάμε για εντολές assembly.Πως μπορώ να διαχειρίζομαι strings?Η ερώτηση είναι πολύ ασαφής,για αυτό θα γίνω λίγο πιο ξεκάθαρος. Έστω οτι έχω 2 strings, str1 : "Hello" και str2: "Hi" και με la έχω περάσει τη διέυθυνση τους στους καταχωρητές $s1,$s2.Αν θέλω να δημιουργήσω ένα νέο string, το HeHillo (ουσιαστικά το str2 βρίσκεται στο str1) πώς θα το κάνω ? Πρέπει να αποθηκεύσω τα strings σε πίνακες και να παίζω με το offset?Ευχαριστώ.
gon1332 Δημοσ. 31 Μαΐου 2015 Δημοσ. 31 Μαΐου 2015 Για να δουλέψεις με περιεχόμενα strings, δουλεύεις σα να είχες πίνακες από bytes. Για αυτό που θες να κάνεις, για το αποτέλεσμα πρέπει να δηλώσεις στα directives πόσο χώρο χρειάζεσαι και συγκεκριμένα με το .space ακολουθούμενο από έναν α- ριθμό. Αυτός ο αριθμός θα είναι το μέγεθος του νέου string + 1 για το nul character. Μετά παίζεις με offsets και τα γνωστά.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα