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

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

Δημοσ.

Εστω οτι ο καταχωρητης $20 εχει την τιμη 1 και ο καταχωρητης $21 την τιμη -2

 

Πως στο καλο θα εκτελεσω το λογικο AND μεταξυ των δυο, δηλαδη το 1 AND -2

 

Εχω κολλησει με τον αρνητικο αριθμο, ο οποιος δεν καταλαβαινω πως θα μετατραπει σε δυαδικο και πως θα γινει τελικα η πραξη.

 

Θα εκτιμουσα παρα πολυ μια επεξηγηση αν γνωριζει καποιος.

 

Ευχαριστω.

Δημοσ.

Εστω οτι ο καταχωρητης $20 εχει την τιμη 1 και ο καταχωρητης $21 την τιμη -2

 

Πως στο καλο θα εκτελεσω το λογικο AND μεταξυ των δυο, δηλαδη το 1 AND -2

 

Εχω κολλησει με τον αρνητικο αριθμο, ο οποιος δεν καταλαβαινω πως θα μετατραπει σε δυαδικο και πως θα γινει τελικα η πραξη.

 

Θα εκτιμουσα παρα πολυ μια επεξηγηση αν γνωριζει καποιος.

 

Ευχαριστω.

 

 

Δέν γίνεται boolean algebra με αρνητικούς αριθμούς.

 

Δεν γίνεται με αριθμούς γενικότερα. Τα 0 και 1 που χρησιμοποιούμε δέν είναι αριθμοί, αλλά αντιπροσωπεύουν κατάσταση, δηλαδή ναί/οχι ή on/off ή high/low

 

Τί ακριβώς θέλεις να κάνεις?

Δημοσ.

Ευχαριστω!
Αλλα περιμενε γιατι δεν σε εποιασα και ειμαι και αρχαριος.

Στο
addi $21, $0, -2

ο καταχωρητης $21 δεν θα παρει την τιμη -2 ;

Μετα απλα θελω να εκτελεσω το λογικo
and  $22, $20, $21
δηλαδη  $22 = $20 AND $21

οπου το $20 γνωριζω οτι ειναι 1 και το προβλημα ειναι το αρνητικο -2 που εχει ο $21.

Οποτε, τι κανω;

  • Moderators
Δημοσ.

Η ερώτηση που πρέπει να απαντήσεις στον εαυτό σου είναι γιατί να κάνεις κάτι τέτοιο; Δηλαδή αν ξεχάσουμε mips κλπ, τι αποτέλεσμα περιμένεις να πάρεις και τι νόημα θα είχε αυτό το αποτέλεσμα;

Δημοσ.

thanks nik.

Οποτε αν καταλαβα σωστα, κανεις το

00000001
11111110
------------

Και επειδη εχουμε AND, ισχυει οτι δινει 1 μονο οταν και τα δυο ειναι 1 (αλλιως 0), αρα ετσι βγαινει το
00000000

 

Σωστα?

 

Edited question:

Τι βηματα πρεπει να κανουμε για να βρουμε οτι το -2 ειναι το 11111110 (χωρις calculator);

Δημοσ.

Λοιπον...

 

το 2 ειναι το 00000010

 

για να βρουμε το -2, αντιστρεφουμε τα ψηφια οποτε γινεται

 

11111101

 

και μετα προσθετουμε 1

 

οποτε η πραξη που πρεπει να γινει ειναι το

 

11111101

00000001

-------------

 

 

Βαζω και αυτα σε quote για να τα βλεπω...

 

 


0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 και 1 το κρατούμενο

 

Αρα

 

11111101

00000001

-------------

11111110

 

Εφοσον βγαινει, φανταζομαι οτι  ειναι σωστος ο συλλογισμος μου, right?

Δημοσ.

ναι, σωστά 

Επανεχρομαι και ευχαριστω για οποια βοηθεια εκ των προτερων. :)

 

Τι πρεπει να κανω για να πολλαπλασιασω το -2 με το 4?

Ουσιαστικα μιλαμε για ολισθηση, μαλλον θα το καταλαβες ηδη.

 

Η λογικη μου, μου λεει οτι ο πολλαπλασιασμος πρεπει να μετατραπει σε προσθεση.

Αλλα εχω κολλησει.

  • Moderators
Δημοσ.

Όταν πολλαπλασιάζεις με δυνάμεις του 2 μπορείς να κάνεις shift τόσο όσο και η δύναμη του 2. Το 4 πχ είναι 2², οπότε κάνεις 2 φορές shift αριστερά.

Δημοσ.

Kercyn...

Δεν μπορω να καταλαβω, αλλα δεν φταις εσυ.

Δυστυχως μου λειπουν βασικες γνωσεις μαθηματικων και δυσκολευομαι να κατανοησω μερικα πραγματα.
Οποτε προσπαθω με "baby steps" να βγαλω ακρη.

 

Εχω και μια [κατα πασα πιθανοτητα] τελευταια ερωτηση σε περιπτωση που καποιος μπορεσει να μου δωσει να καταλαβω πως υπολογιζουμε το -2 * 4.

 

Ειπαμε οτι το -2 μετατρεπεται σε δυαδικο με την μεθοδο του συμπληρωματος ως προς 2.
Αν θελω το -2 να το μετατρεψω σε δεκαεξαδικο, τι κανω;
Γινεται απευθειας ή πρεπει να μετατραπει σε δυαδικο και απο δυαδικο σε δεκαεξαδικο;

Δημοσ. (επεξεργασμένο)
Εχω και μια [κατα πασα πιθανοτητα] τελευταια ερωτηση σε περιπτωση που καποιος μπορεσει να μου δωσει να καταλαβω πως υπολογιζουμε το -2 * 4.

 

Σε x86 υπάρχει η MUL για unsigned integers και η IMUL για signed integers. Ψάξε αν θες πώς υλοποιούνται αυτές και λογικά θα είναι η ίδια λογική στις αντίστοιχες σε MIPS.

 

Edit: Επειδή πιο πάνω έγραψες για shift, δες καλύτερα τις SAL, SAR για signed (υπάρχουν και οι SHL, SHR για unsigned). Γενικά τα shift instructions είναι πολύ πιο γρήγορα από τα MUL και DIV. Φαντάζομαι απλά θα κρατούν σταθερό το most significant bit και θα κάνουν shift τα υπόλοιπα, αλλά ποτέ δεν έχω τσεκάρει οπότε δες και πες μας.

 

Edit2: Απ' ότι φαίνεται απ' το intel manual οι SAL και SHL κάνουν ακριβώς το ίδιο και απλά κάνουν όλα τα bits shift αριστερά. Στην χειρότερη έχεις overflow.

 

Ειπαμε οτι το -2 μετατρεπεται σε δυαδικο με την μεθοδο του συμπληρωματος ως προς 2.

Αν θελω το -2 να το μετατρεψω σε δεκαεξαδικο, τι κανω;

Γινεται απευθειας ή πρεπει να μετατραπει σε δυαδικο και απο δυαδικο σε δεκαεξαδικο;

Αν ξέρεις την δεκαδική αναπαράσταση ενός αριθμού, μπορείς όπως λες να τον αναπαραστήσεις σε δυαδικό (με two's complement εάν έτσι αναπαρίστανται οι αρνητικοί στην αρχιτεκτονική σου) και μετά σε hex.

 

Δηλαδή εάν έχεις έναν 8 bit signed int:

 

Decimal: -2

Binary (2's complement): 1111 1110

Hex: FE

 

Αντίστοιχα το -126 θα ήταν 1000 0010 σε binary άρα 82 σε hex.

Επεξ/σία από Ilias95
Δημοσ.

Ευχαριστω!

 

Το -2 το ειχα κανει ηδη FE σε hex μεσω του δυαδικου.

Οποτε χαιρομαι που επιβεβαιωνεις οτι το εκανα σωστα.

 

Αυτο ηταν ευκολακι.

 

Αυτο που μου'χει καψει τον εγκεφαλο ειναι το μαμημενο -2

και ο πολλαπλασιασμος με 4!

 

Ουσιαστικα θελω να βρω την τιμη του καταχωρητη, πες'τον π.χ 24:

$24 = $21 * 4

οπου ο $21 = -2

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

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

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

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

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

Σύνδεση

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

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