Πίνακας σε Assembly 8085 [Solved]

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

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

Απάντηση
giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 11 Μάιος 2012 02:11

Καλησπέρα,
προσπαθώ ένα πρόγραμμα στην assemply στον μικροεπεξεργαστή intel 8085.
Προσπαθώ να αποθηκεύσω έναν πίνακα 10 θέσεων με συγκεκριμένες τιμές σε συγκεκριμένες θέσεις μνήμης.
Για δική μου βοήθεια το έφτιαξα πρώτα στη C:

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

#include <stdio.h>

main&#40;&#41;
&#123;
	int a&#91;10&#93;;
	int i;	

	for&#40; i=0;i<10;i++ &#41;
	&#123;
		a&#91;i&#93;=i;
	&#125;
&#125;
Τώρα ξεκινάω με Assemply οπότε άρχισα προσπαθώντας το loop της for :

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

;for

	MOV	#^00,B
for	MOV	#^00,A

loop	CMP	#^05,A
	BEQ	        end_for

	ADD	#^01,B
	ADD	#^01,A
	JMP	loop
end_for	HLT
Μου βγάζει σφάλμα στην 3η γραμμή. Χρησιμοποιώ το gnusim8085 emulator.
Κάποια βοήθεια ??
Τελευταία επεξεργασία από το μέλος giamp την 17 Μάιος 2012 20:05, έχει επεξεργασθεί 2 φορές συνολικά.

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

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από LightForce » 12 Μάιος 2012 22:09

Γεια,

Μια προσέγγιση σε 8086 όμως, θα μπορούσα να γράψω, η μόνη βοήθεια που μπορώ να προσφέρω.

Σε αυτό το pdf θα βρείς πολλά μικρά προγράμματα για 8085. Δεν ξέρω αν τρέχουν όπως είναι στον emulator που έχεις.

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 13 Μάιος 2012 17:36

LightForce έγραψε:Γεια,

Μια προσέγγιση σε 8086 όμως, θα μπορούσα να γράψω, η μόνη βοήθεια που μπορώ να προσφέρω.

Σε αυτό το pdf θα βρείς πολλά μικρά προγράμματα για 8085. Δεν ξέρω αν τρέχουν όπως είναι στον emulator που έχεις.
Ευχαριστώ πολύ, χρησιμότατο το pdf, τώρα κοιτάω τα παραδείγματα.
Χρησιμοποιώ τον GNUSim8085. Υπάρχει κάποιος ευκολότερος ή καλύτερος;
Αν νομίζεις πως θα βοηθήσει να δω τον κώδικα για 8086, θα ήθελα να το δω.

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

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από LightForce » 13 Μάιος 2012 19:17

Για τον emulator δεν γνωρίζω γιατί δεν έχω ασχοληθεί με 8085.

Στον 8086 σε πίνακα από λέξεις, ένας τρόπος είναι αυτός.

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

            lea bx, A           ; bx points to A
            xor ax, ax          ; i = 0
Lop&#58;        mov &#91;bx&#93;, ax        ; A&#91;i&#93; = i
            add bx, 2           ; advance the pointer
            add ax, 1           ; i++
            cmp ax, 10          ; obvious? &#58;-&#41;
            jb Lop              ;


            A dw 10 dup ?

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 13 Μάιος 2012 20:30

Ευχαριστώ πολύ.
Μήπως γνωρίζεις τι κώδικα παίρνω όταν κάνω compile με gcc -S ;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από dva_dev » 13 Μάιος 2012 20:57

Από το manual της gcc:
-S Stop after the stage of compilation proper; do not assemble. The output is in the form of an assembler code file for each non-assembler input file specified. By default, the assembler file name for a source file is made by replacing the suffix .c, .i, etc., with .s. Input files that don't require compilation are ignored.

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 13 Μάιος 2012 21:19

Ευχαριστώ dva_dev.
Νέα προσπάθεια με τον 8085 κώδικα:

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

;for
	MVI	A,0
	MOV	A,B

loop	CMP	05,A
	BEQ	end_for

	ADD	01,B
	ADD	01,A
	JMP	loop
end_for	HLT
Σφάλμα στην γραμμή 5: Μη έγκυρος κωδικός εντολής.

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

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από LightForce » 14 Μάιος 2012 17:32

giamp φαντάζομαι θα έχεις λόγο που δουλεύεις τόσο παλιά αρχιτεκτονική.
Σκάλωσα λίγο στο πρόβλημα σου, τρέξε το πρόγραμμα, δες τις θέσεις μνήμης από 0100 εώς 0109.

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

        MVI A,00
        MVI C,0AH
        LXI D,0100H
LOOP&#58;   STAX D
        INX D
        INR A
        DCR C
        JNZ LOOP
        HLT  

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από dva_dev » 14 Μάιος 2012 21:06

Νομίζω το cmp θέλει register για να συγκρίνει με τον Α
Ισως υπάρχει κάτι σαν το CMPI ή CPI που παίρνει τιμή (για να συγκρίνει πάντα με τον Α)

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 15 Μάιος 2012 00:54

LightForce έγραψε:giamp φαντάζομαι θα έχεις λόγο που δουλεύεις τόσο παλιά αρχιτεκτονική.
Σκάλωσα λίγο στο πρόβλημα σου, τρέξε το πρόγραμμα, δες τις θέσεις μνήμης από 0100 εώς 0109.

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

        MVI A,00
        MVI C,0AH
        LXI D,0100H
LOOP&#58;   STAX D
        INX D
        INR A
        DCR C
        JNZ LOOP
        HLT  
Ναι. Δυστυχώς πρέπει να κάνω μια εργασία και έχω δυσκολευτεί αρκετά με τον 8085. Εκνευριστική αρχιτεκτονική... Είχα ασχοληθεί μόνο με MIPS στο παρελθόν.

Ευχαριστώ για τον χρόνο σου! Ο κώδικας κάνει ακριβώς αυτό που ζητούσα!
Τώρα το κάνω step-by-step.
Το επόμενο βήμα είναι να κάνω την εξίσωση n = i^2 - 1 καθώς σε κάθε γραμμή του πίνακα πρέπει να αποθηκεύω το n, και όχι το i.
Ίσως να χρησιμοποιήσω την ADD σε loop για το i^2 και μετά το αποτέλεσμα να το κάνω DCR για -1.
Κάποια βοήθεια με τον κώδικα όμως;

Θα ενημερώσω αν καταφέρω κάτι. :/

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 15 Μάιος 2012 15:43

dva_dev έγραψε:Νομίζω το cmp θέλει register για να συγκρίνει με τον Α
Ισως υπάρχει κάτι σαν το CMPI ή CPI που παίρνει τιμή (για να συγκρίνει πάντα με τον Α)
Ευχαριστώ.
Τελικά έγινε με JNZ. :D

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

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από LightForce » 17 Μάιος 2012 01:16

dva_dev έγραψε:Νομίζω το cmp θέλει register για να συγκρίνει με τον Α
Ισως υπάρχει κάτι σαν το CMPI ή CPI που παίρνει τιμή (για να συγκρίνει πάντα με τον Α)
Έχει όντως CPI (Compare immediate with accumulator) εντολή.
giamp έγραψε:Κάποια βοήθεια με τον κώδικα όμως;
Δοκίμασε αυτό, αποθηκεύω τα τετράγωνα στις θέσεις μνήμης 0100h εώς 0109h.

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

        MVI A,00h
        LXI H,0100h
l0&#58;     MOV M,A 
        MOV B,M
        MOV C,M
        MOV D,A
        MVI A,00h
l1&#58;     ADD B
        DCR C
        JNZ l1
        MOV M,A
        INX H
        MOV A,D
        INR A
        CPI 0Ah
        JC l0
        HLT

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 17 Μάιος 2012 20:03

LightForce έγραψε: Δοκίμασε αυτό, αποθηκεύω τα τετράγωνα στις θέσεις μνήμης 0100h εώς 0109h.

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

        MVI A,00h
        LXI H,0100h
l0&#58;     MOV M,A 
        MOV B,M
        MOV C,M
        MOV D,A
        MVI A,00h
l1&#58;     ADD B
        DCR C
        JNZ l1
        MOV M,A
        INX H
        MOV A,D
        INR A
        CPI 0Ah
        JC l0
        HLT
Ευχαριστώ πολυ, αυτο ακριβώς έψαχνα!
Λέιπει το -1, αλλά είναι ένα DCR A.
:pint: :pint:

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

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από LightForce » 19 Μάιος 2012 09:39

Μια χαρά.
Παρατήρησε πως για i=1 το i^2-1=0 όμως ο παραπάνω κώδικας θα σου δώσει 1 εφόσον κάνει πρόσθεση.

giamp
Δημοσιεύσεις: 10
Εγγραφή: 10 Μάιος 2012 18:36

Πίνακας σε Assembly 8085 [Solved]

Δημοσίευση από giamp » 19 Μάιος 2012 13:13

LightForce έγραψε:Μια χαρά.
Παρατήρησε πως για i=1 το i^2-1=0 όμως ο παραπάνω κώδικας θα σου δώσει 1 εφόσον κάνει πρόσθεση.
Όταν ι=1 παίρνω ν=0, δηλαδή στη θέση 1 ο πίνακας έχει δεδομένα 0. Φαντάζομαι πώς γίνετε αυτό λόγω της JNZ. Γενικά ο πίνακας μου είναι:
255
0
3
8
15
24
35
48
63
80
Δηλαδή το περίεργο μου φαίνεται στη θέση 0 που τα δεδομένα έπρεπε να είναι -1, ενώ τώρα είναι 255Η.

Απάντηση

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

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

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