Βοηθήστε με να καταλάβω τι γίνεται.

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

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

Απάντηση
Άβαταρ μέλους
zero_1
Δημοσιεύσεις: 5
Εγγραφή: 27 Μαρ 2009 14:39
Τοποθεσία: ΑΘΗΝΑ
Επικοινωνία:

Βοηθήστε με να καταλάβω τι γίνεται.

Δημοσίευση από zero_1 » 27 Μαρ 2009 15:09

Γειά σας. Είναι το πρώτο μου μύνημα στο FREESTUFF.GR
Μπορείτε να με βοηθησετε να καταλάβω γιατί δεν τρέχει σωστά ο κώδικας παρακάτω στον FASM. Που είμαι λάθος;
Τα αποτελέσματα δεν είναι αυτά που θάπρεπε. Είμαι αρχάριος σε ASSEMBLY, λίγες μέρες μόνο προγραμματίζω.
Ευχαριστώ προκαταβολικά.

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

ORG 100H

MOV AX,-1
MOV BX,-2
CMP AX,BX
JE EQUAL
JB BELOW
JA ABOVE

EQUAL:
MOV DX,EQUALTEXT
MOV AH,9
INT 21H
JMP EXIT

BELOW:
MOV DX,BELOWTEXT
MOV AH,9
INT 21H
JMP EXIT

ABOVE:
MOV DX,ABOVETEXT
MOV AH,9
INT 21H
JMP EXIT

EXIT:
INT 20H

ABOVETEXT DB 'ABOVE$'
BELOWTEXT DB 'BELOW$'
EQUALTEXT DB 'EQUAL$'

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Βοηθήστε με να καταλάβω τι γίνεται.

Δημοσίευση από virxen75 » 27 Μαρ 2009 16:40

Γεια σου
είδα τον κώδικα που αναφέρεις αλλά μου φαίνεται σωστός.
που νομιζεις ότι είναι λάθος?ποιο αποτέλεσμα δεν είναι αυτό που πρέπει?

εδώ λες:
ax=-1
bx=-2

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

εδώ έχεις

-1>-2 άρα ABOVE

αν Ax=1,BX=2
1<2 άρα BELOW

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

Βοηθήστε με να καταλάβω τι γίνεται.

Δημοσίευση από LightForce » 27 Μαρ 2009 18:58

Παιδιά καλώς ήρθατε στο FS.
virxen75 χαίρομαι γιατί έχουμε επιτέλους κάποιον που γνωρίζει MIPS στην παρέα μας και μπορεί να βοηθήσει.

zero_1 για προσημασμένους ακεραίους (signed integers) χρησιμοποίησε τις εντολές JL, JG και όχι JB, JA γιατί θα έχεις λάθος αποτελέσματα.
Δες τα παραδείγματα.

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

jg .greater_than              ; for signed numbers 
jl .less_than                 ; for signed numbers
ja .above                     ; for unsigned numbers
jb .below                     ; for unsigned numbers
jge .greater_than_or_equal_to ; for signed numbers
jle .less_than_or_equal_to    ; for signed numbers
jae .above_or_equal           ; for unsigned numbers
jbe .below_or_equal           ; for unsigned numbers
Διάβασε το manual του FASM, πίνακας 2.1

Άβαταρ μέλους
zero_1
Δημοσιεύσεις: 5
Εγγραφή: 27 Μαρ 2009 14:39
Τοποθεσία: ΑΘΗΝΑ
Επικοινωνία:

Βοηθήστε με να καταλάβω τι γίνεται.

Δημοσίευση από zero_1 » 27 Μαρ 2009 19:47

Ευχαριστώ. Λύθηκε το πρόβλημα αυτό ήταν. Καλώς σας βρήκα.

Απάντηση

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

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

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