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

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

Δημοσ.

Καλησπέρα.Ξεκίνησα να γράφω μερικές εντολές σε 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
Δημοσ.

Το πρόγραμμά σου είναι μια χαρά. Στον MARS δουλεύει άψογα.

 

post-223995-0-96818400-1433082257_thumb.png

 

Επειδή δεν έχεις βάλει να τυπώνεται κάποιο newline, μήπως εσύ

δεν το βλέπεις; Κοίτα το output στον MARS κάτω-κάτω.

 

 

EDIT: Μόλις διάβασα πως είδες ότι οι καταχωρητές δεν ενημερώνονται.

Τότε μάλλον έχει κάποιο θέμα ο SPIM. Γιατί δε χρησιμοποιείς MARS

καλύτερα;

Δημοσ.

Όντως ο MARS είναι η καλύτερη πλατφόρμα και σε πολλά βίντεο στο youtube ,διάφορα δοκιμαστικά προγράμματα εκτελούνται στον MARS.Δυστυχώς όμως στην σχολή μου δουλεύουμε στον spim και το κακό είναι ότι η εξέταση του εργαστηρίου γίνεται στον spim. :/

Δημοσ.

Θα μπορούσες να τους στείλεις κάποιο report με διάφορα προβλήματα που αντιμετώπισες

και να τους συστήσεις τον MARS. Μπορεί να μην το ξέρουν.

Δημοσ.

Θα το κάνω και ελπίζω να το λάβουν υπ'οψιν.

Θα ήθελα να ρωτήσω και κάτι ακόμα μιας και συζητάμε για εντολές assembly.Πως μπορώ να διαχειρίζομαι strings?Η ερώτηση είναι πολύ ασαφής,για αυτό θα γίνω λίγο πιο ξεκάθαρος.

Έστω οτι έχω 2 strings, str1 : "Hello" και str2: "Hi"  και με la έχω περάσει τη διέυθυνση τους στους καταχωρητές $s1,$s2.Αν θέλω να δημιουργήσω ένα νέο string, το HeHillo (ουσιαστικά το str2 βρίσκεται στο str1) πώς θα το κάνω ? Πρέπει να αποθηκεύσω τα strings σε πίνακες και να παίζω με το offset?Ευχαριστώ.

Δημοσ.

Για να δουλέψεις με περιεχόμενα strings, δουλεύεις σα να είχες πίνακες από bytes.

Για αυτό που θες να κάνεις, για το αποτέλεσμα πρέπει να δηλώσεις στα directives

πόσο χώρο χρειάζεσαι και συγκεκριμένα με το .space ακολουθούμενο από έναν α-

ριθμό. Αυτός ο αριθμός θα είναι το μέγεθος του νέου string + 1 για το nul character.

 

Μετά παίζεις με offsets και τα γνωστά.

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

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

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

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

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

Σύνδεση

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

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