Accemply και ιδιότητα enddianess

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
tommai
Δημοσιεύσεις: 73
Εγγραφή: 18 Ιαν 2008 03:46

Accemply και ιδιότητα enddianess

Δημοσίευση από tommai » 04 Φεβ 2010 20:48

Κώδικας: Επιλογή όλων

1      clc
2      rol     $0048
3      rol     $0049
4      rol     $004A
5      rol     $004B
ο παραπάνω κώδικας αντιγράφει επι 2 έναν αριθμό 4 - bit .....

ποιά ειναι η ιδιότητα enddianess...? (μορφή αναπαράστασης)

επίσης θέλω να διαιρέσω τον αριθμό δια 2 ποιός είναι ο κώδικας (παρόμοιας μορφής)....?

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Accemply και ιδιότητα enddianess

Δημοσίευση από LightForce » 05 Φεβ 2010 13:19

Για να πολλαπλασιάσεις η να διαιρέσεις έναν αριθμό με δυνάμεις του 2 χρησιμοποιείς τις εντολές shl και shr αντίστοιχα.

Κώδικας: Επιλογή όλων

      ; Shift operand1 Right. 
      ; The number of shifts is set by operand2
      
      mov al, 00000111b
      shr al, 1         ; AL = 00000011b,  CF=1
O όρος 'Endianness' η 'byte order' αναφέρεται στην σειρά που αποθηκεύονται τα bytes στις διευθύνσεις της μνήμης ενός υπολογιστή
Παράδειγμα ο 11111111 00000000 σε x86 αρχιτεκτονική (Intel, AMD) θα αποθηκευόταν στην μνήμη 00,FFh (Little Endian, least significant byte first), ενώ σε Motorola 68000 FF,00h (Big Endian)
Δες το άρθρο στην Wikipedia, είναι αναλυτικό.

Για να αλλάξεις την σειρά σε Intel αρχιτεκτονική:

Κώδικας: Επιλογή όλων

     xchg ah, al   ; invert 16bit number
     bswap eax     ; invert 32bit number 

tommai
Δημοσιεύσεις: 73
Εγγραφή: 18 Ιαν 2008 03:46

Accemply και ιδιότητα enddianess

Δημοσίευση από tommai » 05 Φεβ 2010 20:59

LightForce έγραψε:Για να πολλαπλασιάσεις η να διαιρέσεις έναν αριθμό με δυνάμεις του 2 χρησιμοποιείς τις εντολές shl και shr αντίστοιχα.

Κώδικας: Επιλογή όλων

      ; Shift operand1 Right. 
      ; The number of shifts is set by operand2
      
      mov al, 00000111b
      shr al, 1         ; AL = 00000011b,  CF=1
O όρος 'Endianness' η 'byte order' αναφέρεται στην σειρά που αποθηκεύονται τα bytes στις διευθύνσεις της μνήμης ενός υπολογιστή
Παράδειγμα ο 11111111 00000000 σε x86 αρχιτεκτονική (Intel, AMD) θα αποθηκευόταν στην μνήμη 00,FFh (Little Endian, least significant byte first), ενώ σε Motorola 68000 FF,00h (Big Endian)
Δες το άρθρο στην Wikipedia, είναι αναλυτικό.

Για να αλλάξεις την σειρά σε Intel αρχιτεκτονική:

Κώδικας: Επιλογή όλων

     xchg ah, al   ; invert 16bit number
     bswap eax     ; invert 32bit number 

Eγώ ξέρω ότι...

Η ΟΛΙΣΘΗΣΗ ΠΡΟΣ ΤΑ ΑΡΙΣΤΕΡΑ ΚΑΤΑ Ν ΒΙΤ ΑΝΤΙΣΤΟΙΧΕΙ ΜΕ ΠΟΛΛΑΠΛΑΣΙΑΣΜΟ ΤΟΥ ΑΡΙΘΜΟΥ ΜΕ ΤΗΝ Ν ΔΥΝΑΜΗ ΤΟΥ 2 (2^Ν)ΑΥΤΗ Η ΠΑΡΑΤΗΡΗΣΗ ΙΣΧΥΕΙ ΓΙΑ ΠΡΟΣΗΜΑΣΜΕΝΟΥΣ ΚΑΙ ΜΗ ΠΡΟΣΗΜΑΣΜΕΝΟΥΣ ΑΡΙΘΜΟΥΣ.
Η ΟΛΙΣΘΗΣΗ ΠΡΟΣ ΤΑ ΔΕΞΙΑ ΚΑΤΑ Ν ΒΙΤ ΙΣΟΔΥΝΑΜΕΙ (ΣΤΙΣ ΠΕΡΙΣΣΟΤΕΡΕΣ ΠΕΡΙΠΤΩΣΕΙΣ) ΜΕ ΔΙΑΙΡΕΣΗ ΤΟΥ ΑΡΙΘΜΟΥ ΜΕ ΤΗΝ Ν ΔΥΝΑΜΗ ΤΟΥ 2 (2^Ν )ΑΥΤΗ Η ΠΑΡΑΤΗΡΗΣΗ ΙΣΧΥΕΙ ΓΙΑ ΠΡΟΣΗΜΑΣΜΕΝΟΥΣ ΚΑΙ ΜΗ ΠΡΟΣΗΜΑΣΜΕΝΟΥΣ ΑΡΙΘΜΟΥΣ.

ΤΟ CARRY ΕΙΝΑΙ ΚΡΑΤΟΥΜΕΝΟ...

Το endianness αναφέρεται στον τρόπο που ο επεξεργαστής διαβάζει τις λέξεις από την κεντρική μνήμη.
Μια λέξη μπορεί να διαβαστεί είτε σαν μεγάλο endian (το πιο σημαντικό byte πρώτο), ή σαν μικρό endian (το λιγότερο σημαντικό byte πρώτο)

δέν πολυ κατάλαβα και πολύ καλά τα βήματα γιανα βγεί ο κώδικας σε μορφή όπως αρχική....

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Accemply και ιδιότητα enddianess

Δημοσίευση από LightForce » 05 Φεβ 2010 23:15

Μιλάς για την ολίσθηση με shl / shr.

tommai, η διαφορά είναι ότι με rol / ror μεταφέρεις και το bit που βγαίνει εκτός στην CF και εν συνεχεία τοποθετείται στα αριστερά η δεξιά, αναλόγως την εντολή.

Διαίρεση του 255 με το 2:

Κώδικας: Επιλογή όλων

    mov eax, 0FFh
    shr eax, 1
                       ; ΕΑΧ = 7Fh (127)
ενώ:

Κώδικας: Επιλογή όλων

    mov eax, 0FFh
    ror eax, 1 
                        ; EAX = 8000007Fh (-2147483521)

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες