Διαχείριση αρχείων στον emu8086

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

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

Απάντηση
asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 06 Φεβ 2010 21:20

Γεια χαρά!Πείτε ότι από τον emu δημιουργώ-ανοίγω και γράφω σε ένα αρχείο.Όλα καλά μέχρι εδώ.Πως μπορώ να αλλάξω γραμμή στο αρχείο έτσι ώστε να γράψω ακριβώς από κάτω?Επίσης πως μπορώ να γράψω σε συγκεκριμένη θέση?Για παράδειγμα, στο αρχείο έχω γράψει

μονοί: ζυγοί:

και όταν γίνει η καταμέτρηση να γράψει το πλήθος δίπλα από το αντίστοιχο string?

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

Διαχείριση αρχείων στον emu8086

Δημοσίευση από LightForce » 07 Φεβ 2010 00:18

Ηι asunthatneversets,

Πειραματίσου με το interrupt INT 21h / AH= 42h Seek (Move File Pointer)
Θα βρεις πληροφορίες στο documentation του Emu8086.

asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 07 Φεβ 2010 11:12

οκ!βρήκα λύση για την μετατόπιση στην πρώτη γραμμή , αλλά δεν μπορώ να βγάλω άκρη για το πως θα αλλάξω γραμμή

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

Διαχείριση αρχείων στον emu8086

Δημοσίευση από LightForce » 07 Φεβ 2010 17:06

Λίγες πληροφορίες που μπορεί να βοηθήσουνε:

Στο τέλος κάθε γραμμής υπάρχουν οι ASCII χαρακτήρες CR/LF (newline) σε Windows και DOS.
Μπορείς έτσι, ένα παράδειγμα, να φορτώσεις ένα αρχείο σε buffer και βρίσκοντας το τέλος κάθε γραμμής να το σπάσεις σε γραμμές.
Όπως και να αλλάξεις γραμμή στο αρχείο που πρόκειται να σώσεις.

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

       data db "Line 1",0Dh,0Ah,"Line 2",0Dh,0Ah
       data_size = $ - data  
File Contents:
Line 1
Line 2

asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 08 Φεβ 2010 18:41

Ήμουν τόσο σίγουρος που δεν το ελεγξα καν!Εχω τον κώδικα

mov dx, offset dir1; c:\askisi
mov ah, 39h
int 21h


mov ah, 3ch; dimiourgia kai anoigma
mov cx, 0
mov dx, offset file1;c:\askisi\check.txt
int 21h



mov ah, 40h
mov bx, handle;(handle dw ?)
mov dx, offset text;(text db "monoi:")
mov cx, text_size;(text_size = $ - offset text)
int 21h

Δημιουργεί κανονικά και τον κατάλογο και το αρχείο ,αλλά δεν γράφει μέσα στο αρχείο.Έχω κάνει κανένα λάθος στην σύνταξη της int21/ah=40h?

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

Διαχείριση αρχείων στον emu8086

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

Ο παρακάτω (copy-paste) κώδικας δουλεύει στο σύστημα μου, σύγκρινε τον με το δικό σου ώστε να εντοπίσεις τυχόν λάθη η παραλείψεις, γενικά πειραματίσου περισσότερο με τα παραδείγματα από το documentation του Emulator asunthatneversets.

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

    org 100h

    ; make directory
    mov dx, offset filepath
    mov ah, 39h
    int 21h
    ; jc error

    mov ah, 3ch
    mov cx, 0
    mov dx, offset filename
    mov ah, 3ch
    int 21h  ; create file...
    ; jc error
    mov handle, ax

    mov bx, handle
    mov dx, offset data
    mov cx, data_size
    mov ah, 40h
    int 21h ; write to file...
    ; jc error

    mov bx, handle
    mov ah, 3eh
    int 21h ; close file...
    ret
    

    filename db "C:\askisi\myfile.txt", 0
    filepath db "C:\askisi", 0  ; path to be created.
    handle dw ?
    data db "Line 1",0Dh,0Ah,"Line 2",0Dh,0Ah
    data_size=$-offset data

asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 09 Φεβ 2010 20:08

Ευχαριστώ για την βοήθεια αλλά δεν μπορώ να βγω απο αυτόν τον σκόπελο που λέγεται αρχείο και το documentation ειναι πεσμένο,τουλάχιστον εγώ τις 3 τελευταίες μέρες δεν μπορώ να μπω,άσε ποθ δεν έβρισκα κάτι αντίστοιχο με αυτό που ζητάω.Δημιουργώ κανονικά το αρχείο μου,check.Γράφω στην πρώτη γραμμή ,check.Γράφω στην δεύτερη γραμμή , check.ΑΛΛΑ!!!!!!!!!!!!!!!!
Μετά από σχεδόν 1000 γραμμές κώδικα θέλω να ξαναμπώ στο αρχείο και δίπλα από την πρώτη γραμμή που γράφω Μονοί---->,λίγο πιο δίπλα που λέει Ζυγοί--->να βάλω έναν άλλο αριθμό και το ίδιο στην από κάτω γραμμή το ίδιο ακριβώς.Ή όταν γράφω τον αριθμό στο αρχείο μου σβήνει τα πάντα και μένει μόνο ο ένας αριθμός ή μου τα γράφει όλα στην πρώτη γραμμή

Η μορφή του αρχείου μου είναι:
Μονοί----> Ζυγοί----->

Μονοί-----> Ζυγοί------>

Και θέλω να βάλω μετά ααπό κάθε "label" αντίστοιχο αποτέλεσμα

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

Διαχείριση αρχείων στον emu8086

Δημοσίευση από LightForce » 09 Φεβ 2010 20:31

Φόρτωσε το αρχείο σου, σε buffer, προσπάθησε να το επεξεργαστείς και να το μορφοποιήσεις όπως θέλεις, και στην συνέχεια ξαναγράψε το στον δίσκο.
Μπορείς να το κάνεις έτσι?

Το documentation του EMU8086. :wink:
Τελευταία επεξεργασία από το μέλος LightForce την 29 Μαρ 2010 03:09, έχει επεξεργασθεί 1 φορά συνολικά.

asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 10 Φεβ 2010 15:04

Αυτό που λες δεν εχω ιδέα πως να το κάνω,δεν γίνεται με seek?Γιατι οταν πάω να γραψω κάτι ,μου σβήνει όλα τα υπόλοιπα?

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

Διαχείριση αρχείων στον emu8086

Δημοσίευση από LightForce » 10 Φεβ 2010 22:16

Πως να ξέρω?
Όμως σου λέω πάλι,

Έχεις το αρχείο μορφής:

Μονοί-----> Ζυγοί------>
Μονοί-----> Ζυγοί------>

η παρόμοιο, φόρτωσε το, κάνε τις αλλαγές που χρειάζονται και σώσε το.
Χωρίς seek και file pointer, δεν υπάρχει λόγος, θα κερδίσεις σε ευκολία και ταχύτητα.

Μονοί-----> xx Ζυγοί------> xx
Μονοί-----> xx Ζυγοί------> xx

Aναζήτησε πληροφορίες για String Functions και τις instructions που θα χρειαστείς σε Assembly, το δίκτυο έχει πολύ υλικό.
Καλή τύχη.

asunthatneversets
Δημοσιεύσεις: 7
Εγγραφή: 19 Νοέμ 2009 18:31

Διαχείριση αρχείων στον emu8086

Δημοσίευση από asunthatneversets » 11 Φεβ 2010 20:21

Οταν λες φόρτωσε το, τι εννοεις?

Απάντηση

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

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

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